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

Analysis Run

019b3836-2d81-72b3-ba7f-1259b9b4588e

complete
Chain ID
1
Address
Block Number
Created
Fri, Dec 19, 2025 8:03 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
2
Validated
2
Source
Bytecode only
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 2 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
2109 artifact.fetch complete 1 / 3 3 months ago
2110 tool.cast_disasm complete 1 / 3 3 months ago
45260 analysis.bundle complete 1 / 3 1 week ago
45261 capability.graph complete 1 / 3 1 week ago
45262 detector.run complete 1 / 3 1 week ago
45263 validation.fork complete 1 / 3 1 week ago
113240 report.consolidate complete 1 / 6 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 / 6
Findings
3
No findings?
no
Summary
BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.
View stdout
{"no_findings":false,"summary":"BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.","findings":[{"severity":"high","category":"access_control","title":"Owner-only mint can arbitrarily inflate supply","exploit_scenario":"Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience.","recommendation":"If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.","evidence":"Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.","locations":["selector:0x79c65068","selector:0x8da5cb5b","pc:0x1f1","pc:0x4f4"]},{"severity":"high","category":"access_control","title":"Owner can freeze arbitrary senders via a hidden boolean mapping","exploit_scenario":"Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell.","recommendation":"Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.","evidence":"Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.","locations":["selector:0xe724529c","selector:0xa9059cbb","selector:0x23b872dd","selector:0xb414d4b6","pc:0x311","pc:0x550","pc:0x421","pc:0x5c4"]},{"severity":"medium","category":"other","title":"allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping","exploit_scenario":"The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows.","recommendation":"Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.","evidence":"approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","pc:0x138","pc:0x2d0","pc:0x5e7","pc:0x689"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-ry7p50js
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5b80-34a9-7fc1-b1e1-f911a12e920e
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.

Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".

Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc 'ls -la' in /tmp/codex-ry7p50js
 succeeded in 0ms:
total 164
drwx------   2 noahkuhn noahkuhn   4096 Apr  5 02:37 .
drwxrwxrwt 270 nobody   nogroup   24576 Apr  5 02:37 ..
-rw-rw-r--   1 noahkuhn noahkuhn 128809 Apr  5 02:37 BYTECODE_BUNDLE.json
-rw-rw-r--   1 noahkuhn noahkuhn    815 Apr  5 02:37 codex-output-schema.json

exec
/bin/bash -lc "pwd && rg --files -g 'BYTECODE_BUNDLE.json' -g 'AGENTS.md'" in /tmp/codex-ry7p50js
 succeeded in 0ms:
/tmp/codex-ry7p50js
BYTECODE_BUNDLE.json

exec
/bin/bash -lc "sed -n '1,240p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
    "artifact_hash": "0xcae4c43bd7bb81ceb26f330a8564828b06d75e9648e1f671ec0c6d9a62adfab8",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 10,
          "hash": "0xde7c09ec5c6a787330be3474c14e6af1d95d255c64d4de8caa7d39b964000ee7",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "CALLDATASIZE",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 0
        },
        {
          "end_pc": 30,
          "hash": "0xaa8508e79922bef88de7680412ebb93d9b8132af38a790d94ddd35af4ee3a037",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 11
        },
        {
          "end_pc": 41,
          "hash": "0xa56f4f96be79fa212ef2ab51072b3a1d063fbc25670a3086bd76227480e9ec9a",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 31
        },
        {
          "end_pc": 52,
          "hash": "0xdcc0cfc78164b28a048e1018c78fb1e258688e4e9dbc32fe6bb71fdddfe9fb4c",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 42
        },
        {
          "end_pc": 63,
          "hash": "0xe5407ecad732c0e22d131e81a5f4ad7969b4a0da0db55cdac8b2b03eab611fc0",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 53
        },
        {
          "end_pc": 74,
          "hash": "0x6718e6e9c96250aa33193f2b60d68e2742d3a1e4b04aadbd49640f97508de1aa",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 64
        },
        {
          "end_pc": 85,
          "hash": "0x548805c0c54507e41d3b0919d310d4eca0ef980fa4cb4aa8a54d66f6ada4014f",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 75
        },
        {
          "end_pc": 96,
          "hash": "0xee796bec83d7680c6d5e37104b770091abb8695ea260229becf257f558a226d1",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 86
        },
        {
          "end_pc": 107,
          "hash": "0xda315755efcd32c213ef4d4252640668a3a6cba263b9dad6678e67516412e041",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 97
        },
        {
          "end_pc": 118,
          "hash": "0xd14af00a8a087ebec347301845bc0f8614855f78850bf217ade6b32d0e38f52d",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 108
        },
        {
          "end_pc": 129,
          "hash": "0xa9baa763d900f8bfff962700a80b0550b7184aaca095b16d10dda4cec77d1b48",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 119
        },
        {
          "end_pc": 140,
          "hash": "0xa299ccddb8de0f17a25781b649b758ae14910bd00f495423675728a24a8d768d",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 130
        },
        {
          "end_pc": 151,
          "hash": "0x21fdc1d971a2e18be50daa0087e63eab91d0f96ebb4895db0ca7b698931575da",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 141
        },
        {
          "end_pc": 162,
          "hash": "0x310188ec5b25938c0b92d363d8d70ad61162a66124f977dd22976927e40da768",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 152
        },
        {
          "end_pc": 173,
          "hash": "0x48f9a852645c327fe40f2536f4984fafd316c90f47c5b073a1063c969140bbb4",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 163
        },
        {
          "end_pc": 184,
          "hash": "0xb97ac4841982eefdf983a0ae476963f01abe60dbf1702ba0f1886ccfa8446afa",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 174
        },
        {
          "end_pc": 219,
          "hash": "0xc2961cacd589158b1d2c8a7a510c2a261c2b7885b8b0e19031153a9500c48a87",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_90",
            "CALLVALUE",
            "PUSH1",
            "OP_82",
            "OP_81",
            "OP_81",
            "OP_81",
            "OP_85",
            "OP_88",
            "OP_83",
            "CALL",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",

exec
/bin/bash -lc "rg -n '\"(detector|selector|callsite|storage|delegate|proxy|summary|evidence|findings|functions|external_calls|slots|implementation|eip1967|minimal_proxy|beacon)\"' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
2078:          "selector": "0x06fdde03"
2082:          "selector": "0x095ea7b3"
2086:          "selector": "0x18160ddd"
2090:          "selector": "0x23b872dd"
2094:          "selector": "0x313ce567"
2098:          "selector": "0x70a08231"
2102:          "selector": "0x79c65068"
2106:          "selector": "0x8da5cb5b"
2110:          "selector": "0x95d89b41"
2114:          "selector": "0xa9059cbb"
2118:          "selector": "0xb414d4b6"
2122:          "selector": "0xdc3080f2"
2126:          "selector": "0xdd62ed3e"
2130:          "selector": "0xe724529c"
2134:          "selector": "0xf2fde38b"
2137:      "functions": [
2143:          "selector": "0x06fdde03",
2150:          "storage": {
2152:            "slots": [
2227:          "selector": "0x095ea7b3",
2234:          "storage": {
2236:            "slots": [
2311:          "selector": "0x18160ddd",
2318:          "storage": {
2320:            "slots": [
2395:          "selector": "0x23b872dd",
2402:          "storage": {
2404:            "slots": [
2479:          "selector": "0x313ce567",
2486:          "storage": {
2488:            "slots": [
2563:          "selector": "0x70a08231",
2570:          "storage": {
2572:            "slots": [
2647:          "selector": "0x79c65068",
2654:          "storage": {
2656:            "slots": [
2731:          "selector": "0x8da5cb5b",
2738:          "storage": {
2740:            "slots": [
2815:          "selector": "0x95d89b41",
2822:          "storage": {
2824:            "slots": [
2899:          "selector": "0xa9059cbb",
2906:          "storage": {
2908:            "slots": [
2983:          "selector": "0xb414d4b6",
2990:          "storage": {
2992:            "slots": [
3067:          "selector": "0xdc3080f2",
3074:          "storage": {
3076:            "slots": [
3151:          "selector": "0xdd62ed3e",
3158:          "storage": {
3160:            "slots": [
3235:          "selector": "0xe724529c",
3242:          "storage": {
3244:            "slots": [
3319:          "selector": "0xf2fde38b",
3326:          "storage": {
3328:            "slots": [
3425:      "storage": {
3428:        "slots": [
4446:          "type": "callsite"
4452:          "type": "callsite"
4461:          "selector": "0x06fdde03",
4467:          "selector": "0x095ea7b3",
4473:          "selector": "0x18160ddd",
4479:          "selector": "0x23b872dd",
4485:          "selector": "0x313ce567",
4491:          "selector": "0x70a08231",
4497:          "selector": "0x79c65068",
4503:          "selector": "0x8da5cb5b",
4509:          "selector": "0x95d89b41",
4515:          "selector": "0xa9059cbb",
4521:          "selector": "0xb414d4b6",
4527:          "selector": "0xdc3080f2",
4533:          "selector": "0xdd62ed3e",
4539:          "selector": "0xe724529c",
4545:          "selector": "0xf2fde38b",

exec
/bin/bash -lc "sed -n '2060,2185p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1511",
          "to": "bb:1578",
          "type": "control_flow"
        },
        {
          "from": "bb:1511",
          "to": "bb:1574",
          "type": "control_flow_fallthrough"
        }
      ],
      "cfg_hash": "0x3d94278235ddd08cb7333ef8caa8729454d47cad6f1c39ad4252e1c6b99a88a8",
      "dispatcher_type": "selector_jump_table",
      "function_entries": [
        {
          "entry_pc": null,
          "selector": "0x06fdde03"
        },
        {
          "entry_pc": 404098525,
          "selector": "0x095ea7b3"
        },
        {
          "entry_pc": 599290589,
          "selector": "0x18160ddd"
        },
        {
          "entry_pc": 826074471,
          "selector": "0x23b872dd"
        },
        {
          "entry_pc": 1889567281,
          "selector": "0x313ce567"
        },
        {
          "entry_pc": 2043039848,
          "selector": "0x70a08231"
        },
        {
          "entry_pc": 2376452955,
          "selector": "0x79c65068"
        },
        {
          "entry_pc": 2514000705,
          "selector": "0x8da5cb5b"
        },
        {
          "entry_pc": 2835717307,
          "selector": "0x95d89b41"
        },
        {
          "entry_pc": 3021264054,
          "selector": "0xa9059cbb"
        },
        {
          "entry_pc": 3694166258,
          "selector": "0xb414d4b6"
        },
        {
          "entry_pc": 3714247998,
          "selector": "0xdc3080f2"
        },
        {
          "entry_pc": 3877917340,
          "selector": "0xdd62ed3e"
        },
        {
          "entry_pc": 4076725131,
          "selector": "0xe724529c"
        },
        {
          "entry_pc": 826,
          "selector": "0xf2fde38b"
        }
      ],
      "functions": [
        {
          "auth": {
            "guards": []
          },
          "entry_pc": null,
          "selector": "0x06fdde03",
          "sinks": {
            "call": 2,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 34,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 192,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 227,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 298,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 377,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
              },
              {
                "op": "SLOAD",
                "pc": 436,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 478,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 508,

exec
/bin/bash -lc "sed -n '3410,3495p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
        "0xb414d4b6",
        "0xdc3080f2",
        "0xdd62ed3e",
        "0xe724529c",
        "0xf2fde38b"
      ],
      "sinks": {
        "call": 2,
        "create": 0,
        "create2": 0,
        "delegatecall": 0,
        "selfdestruct": 0,
        "staticcall": 0,
        "upgrade_slot_write_suspected": false
      },
      "storage": {
        "keccak_count": 27,
        "reads": 34,
        "slots": [
          {
            "op": "SLOAD",
            "pc": 192,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 227,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
          },
          {
            "op": "SLOAD",
            "pc": 298,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 377,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
          },
          {
            "op": "SLOAD",
            "pc": 436,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
          },
          {
            "op": "SLOAD",
            "pc": 478,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 508,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 527,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
          },
          {
            "op": "SLOAD",
            "pc": 595,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 769,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 802,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 942,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1305,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000004"
          }
        ],
        "writes": 10

exec
/bin/bash -lc "sed -n '4420,4558p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
        },
        {
          "end_pc": 1573,
          "hash": "0x24f8fab0f2c663307d1617f0934b8e43c5f417ee6459c31450c633b39f0ce9b5",
          "id": "bb:1511",
          "start_pc": 1511,
          "type": "basic_block"
        },
        {
          "end_pc": 1577,
          "hash": "0xfb09cd3638630ce3d55c6930f61d26478cf39c1cd2080b9cb202102cb266b2e4",
          "id": "bb:1574",
          "start_pc": 1574,
          "type": "basic_block"
        },
        {
          "end_pc": 1829,
          "hash": "0x80c02b49be5e3b5738644a4aaa06ce62356ce5baa514b12ee62c86e337015c32",
          "id": "bb:1578",
          "start_pc": 1578,
          "type": "basic_block"
        },
        {
          "id": "call:213",
          "opcode": "CALL",
          "pc": 213,
          "type": "callsite"
        },
        {
          "id": "call:882",
          "opcode": "CALL",
          "pc": 882,
          "type": "callsite"
        },
        {
          "id": "sink:call",
          "type": "sink"
        },
        {
          "entry_pc": null,
          "id": "fn:0x06fdde03",
          "selector": "0x06fdde03",
          "type": "function"
        },
        {
          "entry_pc": 404098525,
          "id": "fn:0x095ea7b3",
          "selector": "0x095ea7b3",
          "type": "function"
        },
        {
          "entry_pc": 599290589,
          "id": "fn:0x18160ddd",
          "selector": "0x18160ddd",
          "type": "function"
        },
        {
          "entry_pc": 826074471,
          "id": "fn:0x23b872dd",
          "selector": "0x23b872dd",
          "type": "function"
        },
        {
          "entry_pc": 1889567281,
          "id": "fn:0x313ce567",
          "selector": "0x313ce567",
          "type": "function"
        },
        {
          "entry_pc": 2043039848,
          "id": "fn:0x70a08231",
          "selector": "0x70a08231",
          "type": "function"
        },
        {
          "entry_pc": 2376452955,
          "id": "fn:0x79c65068",
          "selector": "0x79c65068",
          "type": "function"
        },
        {
          "entry_pc": 2514000705,
          "id": "fn:0x8da5cb5b",
          "selector": "0x8da5cb5b",
          "type": "function"
        },
        {
          "entry_pc": 2835717307,
          "id": "fn:0x95d89b41",
          "selector": "0x95d89b41",
          "type": "function"
        },
        {
          "entry_pc": 3021264054,
          "id": "fn:0xa9059cbb",
          "selector": "0xa9059cbb",
          "type": "function"
        },
        {
          "entry_pc": 3694166258,
          "id": "fn:0xb414d4b6",
          "selector": "0xb414d4b6",
          "type": "function"
        },
        {
          "entry_pc": 3714247998,
          "id": "fn:0xdc3080f2",
          "selector": "0xdc3080f2",
          "type": "function"
        },
        {
          "entry_pc": 3877917340,
          "id": "fn:0xdd62ed3e",
          "selector": "0xdd62ed3e",
          "type": "function"
        },
        {
          "entry_pc": 4076725131,
          "id": "fn:0xe724529c",
          "selector": "0xe724529c",
          "type": "function"
        },
        {
          "entry_pc": 826,
          "id": "fn:0xf2fde38b",
          "selector": "0xf2fde38b",
          "type": "function"
        }
      ],
      "version": "capability_graph_v1"
    },
    "id": 1973,
    "updated_at": "2026-04-04T19:53:10.000000Z",
    "version": "capability_graph_v1"
  },
  "detector_findings": [
    {
      "confidence": 60,
      "evidence_json": {

exec
/bin/bash -lc "sed -n '4558,4705p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
      "evidence_json": {
        "call_count": 2,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 213,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 882,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [],
        "untrusted_call_count": 2
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "high",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 55,
      "evidence_json": {
        "eth_value_calls": 2,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 213,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 882,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": []
      },
      "normalized_json": {
        "sink": "CALL",
        "value": "nonzero"
      },
      "severity": "high",
      "title": "ETH value transfer possible",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
        "trace_mode": "callTracer"
      }
    }
  ],
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [],
    "selfdestruct_count": 0
  }
}
exec
/bin/bash -lc "rg -n 'bytecode|runtime|deployed|opcodes|disassembly|evidence_bundle|callsites' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
13:          "opcodes": [
27:          "opcodes": [
45:          "opcodes": [
57:          "opcodes": [
69:          "opcodes": [
81:          "opcodes": [
93:          "opcodes": [
105:          "opcodes": [
117:          "opcodes": [
129:          "opcodes": [
141:          "opcodes": [
153:          "opcodes": [
165:          "opcodes": [
177:          "opcodes": [
189:          "opcodes": [
201:          "opcodes": [
213:          "opcodes": [
248:          "opcodes": [
306:          "opcodes": [
318:          "opcodes": [
339:          "opcodes": [
386:          "opcodes": [
401:          "opcodes": [
414:          "opcodes": [
453:          "opcodes": [
462:          "opcodes": [
477:          "opcodes": [
501:          "opcodes": [
530:          "opcodes": [
539:          "opcodes": [
558:          "opcodes": [
613:          "opcodes": [
625:          "opcodes": [
646:          "opcodes": [
683:          "opcodes": [
692:          "opcodes": [
718:          "opcodes": [
754:          "opcodes": [
790:          "opcodes": [
819:          "opcodes": [
828:          "opcodes": [
855:          "opcodes": [
864:          "opcodes": [
873:          "opcodes": [
938:          "opcodes": [
965:          "opcodes": [
985:          "opcodes": [
1005:          "opcodes": [
1023:          "opcodes": [
1046:          "opcodes": [
1061:          "opcodes": [
1076:          "opcodes": [
1106:          "opcodes": [
1115:          "opcodes": [
1146:          "opcodes": [
1155:          "opcodes": [
1274:          "opcodes": [
1332:          "opcodes": [
1382:          "opcodes": [
1410:          "opcodes": [
1419:          "opcodes": [
1448:          "opcodes": [
1457:          "opcodes": [
1518:          "opcodes": [
1527:          "opcodes": [
1705:      "callsites": [
3527:    "runtime_bytecode": {

exec
/bin/bash -lc "sed -n '1688,1775p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "OP_A3",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1578
        }
      ],
      "callsites": [
        {
          "opcode": "CALL",
          "pc": 213,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 882,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        }
      ],
      "cfg_edges": [
        {
          "from": "bb:0",
          "to": "bb:185",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:220",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:312",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:371",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:380",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:430",
          "type": "control_flow"

exec
/bin/bash -lc "sed -n '3520,3605p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405236156100b95760e060020a600035046306fdde0381146100dc578063095ea7b31461013857806318160ddd1461017357806323b872dd1461017c578063313ce567146101ae57806370a08231146101ba57806379c65068146101d25780638da5cb5b146101f657806395d89b4114610208578063a9059cbb14610261578063b414d4b614610290578063dc3080f2146102ab578063dd62ed3e146102d0578063e724529c146102f5578063f2fde38b14610319575b61033a60008054600160a060020a03169034606082818181858883f15050505050565b61033c600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b33600160a060020a039081166000908152600760209081526040808320600435909416835292905290812060243590555b6060908152602090f35b61016960045481565b610169600435602435604435600160a060020a038316600090815260056020526040812054829010156105a557610002565b61016960035460ff1681565b61016960043560056020526000908152604090205481565b61033a60043560243560005433600160a060020a039081169116146104f457610002565b610169600054600160a060020a031681565b61033c600280546020601f600019600184161561010002019092168390049182018190040260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b61033a60043560243533600160a060020a0316600090815260056020526040902054819010156103ff57610002565b61016960043560066020526000908152604090205460ff1681565b6008602090815260043560009081526040808220909252602435815220546101699081565b6007602090815260043560009081526040808220909252602435815220546101699081565b61033a60043560243560005433600160a060020a0390811691161461055057610002565b61033a60043560005433600160a060020a039081169116146103aa57610002565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b8154815290600101906020018083116103da57829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561042157610002565b33600160a060020a031660009081526006602052604090205460ff161561044757610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a0382811660008181526005602090815260408220805486019055600480548601905590546060858152929316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a35050565b600160a060020a03821660008181526006602052604090819020805460ff191684179055606091825260808390527f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a591a15050565b600160a060020a0383168152604081205482810110156105c457610002565b600160a060020a03841681526006602052604081205460ff16156105e757610002565b60076020908152604080832033600160a060020a039081168086529184528285205490881685526008845282852091855292528220548301111561062a57610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816008600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056",
      "head": null,
      "length": 3662,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
    "created_at": "2026-04-04T19:53:10.000000Z",
    "graph_hash": "0x849232a8bdcf2d3bca91d0c41631acbbc5cbc63614a329bbce266d24c343a438",
    "graph_json": {
      "edges": [
        {
          "from": "bb:0",
          "to": "bb:185",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:220",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:312",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:371",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:380",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:430",
          "type": "control_flow"
        },
        {
          "from": "bb:64",
          "to": "bb:75",
          "type": "control_flow_fallthrough"
        },
        {

exec
/bin/bash -lc "sed -n '200,920p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
          "hash": "0xb97ac4841982eefdf983a0ae476963f01abe60dbf1702ba0f1886ccfa8446afa",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 174
        },
        {
          "end_pc": 219,
          "hash": "0xc2961cacd589158b1d2c8a7a510c2a261c2b7885b8b0e19031153a9500c48a87",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_90",
            "CALLVALUE",
            "PUSH1",
            "OP_82",
            "OP_81",
            "OP_81",
            "OP_81",
            "OP_85",
            "OP_88",
            "OP_83",
            "CALL",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 185
        },
        {
          "end_pc": 284,
          "hash": "0x3d600f8551725b11caf6bbac0c97a70a0a0f0c5f8c3b4edfb847020655c97e5b",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "OP_82",
            "OP_84",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_92",
            "AND",
            "OP_91",
            "OP_90",
            "OP_91",
            "DIV",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_82",
            "OP_90",
            "DIV",
            "OP_90",
            "OP_91",
            "MUL",
            "PUSH1",
            "OP_90",
            "OP_81",
            "ADD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_82",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_90",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 220
        },
        {
          "end_pc": 292,
          "hash": "0x5b9c4eb04c37cbfa60c0d52c00b0ed698e81db863b9855e23bbb612a8d23a333",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 285
        },
        {
          "end_pc": 311,
          "hash": "0xdd8cfb1f0fca3fae5b2640869985401c933953a3e55cc2f0efac358c6b890aaf",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 293
        },
        {
          "end_pc": 360,
          "hash": "0xe94b6b64372369f00ae7995b3b3deaf62d461c62845bebbd6ffc121b9e38ceba",
          "opcodes": [
            "JUMPDEST",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "PUSH1",
            "CALLDATALOAD",
            "OP_90",
            "OP_94",
            "AND",
            "OP_83",
            "MSTORE",
            "OP_92",
            "OP_90",
            "MSTORE",
            "OP_90",
            "OP_81",
            "SHA3",
            "PUSH1",
            "CALLDATALOAD",
            "OP_90",
            "SSTORE"
          ],
          "start_pc": 312
        },
        {
          "end_pc": 370,
          "hash": "0x1400227b29b6b73b26189a92b4be5cbc56e23cd2fc84bac732595fb6f929317d",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 361
        },
        {
          "end_pc": 379,
          "hash": "0x575942c863a297a00af661ce31903830703459bbd0f8133fc279b8f2a7b564a1",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 371
        },
        {
          "end_pc": 425,
          "hash": "0x56ddc7e1f9ab2d96af904dbcf9f18a3599f7d692379e2b57a39592f7abbaace8",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_83",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "SHA3",
            "SLOAD",
            "OP_82",
            "OP_90",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 380
        },
        {
          "end_pc": 429,
          "hash": "0x9c4e8b4e87c27b81d293f40eac9c4e9ff0315bc308e0790a781c96f58aea4d19",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 426
        },
        {
          "end_pc": 441,
          "hash": "0x8308e960b2f7e24af853e735f7fbf46899de885996a06bee7bf0aca2a9535ce2",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "PUSH1",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 430
        },
        {
          "end_pc": 465,
          "hash": "0x6304426e67f3f6c1d521a6ecd50688b6cdbb42f2eb74ebfb58c0398be0e7a9a5",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 442
        },
        {
          "end_pc": 497,
          "hash": "0x87d5d2dce00e243a90b2a77823907c75410865236b1a96202dcc8a55604a22a8",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "SLOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "OP_91",
            "AND",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 466
        },
        {
          "end_pc": 501,
          "hash": "0x41bc2d6bb96ed35784179d1915b758907a87eb819b92a4de42c0df35e571d8fe",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 498
        },
        {
          "end_pc": 519,
          "hash": "0x78b9b0693a73c2bad53e5e567dfdbddb509d6d1d83ecc18efd4acbcbabc242ff",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 502
        },
        {
          "end_pc": 581,
          "hash": "0x59ef192f55c41aade5a7252d37ac0c4bd6d7414c963beaff0a6a18d9e96c9b70",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "NOT",
            "PUSH1",
            "OP_84",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "ADD",
            "OP_90",
            "OP_92",
            "AND",
            "OP_83",
            "OP_90",
            "DIV",
            "OP_91",
            "OP_82",
            "ADD",
            "OP_81",
            "OP_90",
            "DIV",
            "MUL",
            "PUSH1",
            "OP_90",
            "OP_81",
            "ADD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_82",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_90",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 520
        },
        {
          "end_pc": 589,
          "hash": "0x229c994301ba2cd3320c07218d1442852eca67553572df42f231e78ba5f50442",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 582
        },
        {
          "end_pc": 608,
          "hash": "0x941da5c186a58c201d5f6e11efd46ee70fbb3732ca94a455f300b305198a1d77",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 590
        },
        {
          "end_pc": 651,
          "hash": "0x435b2d462cd36ea116147e52ee44c635d98731efda423d23981b3a41d826b60c",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "OP_90",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 609
        },
        {
          "end_pc": 655,
          "hash": "0xc20ede51c6e2ed994d554b34cde6a76cbd4192e7d87e729025264dd26b212933",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 652
        },
        {
          "end_pc": 682,
          "hash": "0xea7c89081fea5ea113a81c138a2e78fce2b1a56d39545c4e07d82c998322b642",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "PUSH1",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 656
        },
        {
          "end_pc": 719,
          "hash": "0xce3a00e3b1a1a76704c1c7595075f753d3bbafff538fd026b3fda1db636ddbbb",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_82",
            "SHA3",
            "OP_90",
            "OP_92",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "OP_81",
            "MSTORE",
            "SHA3",
            "SLOAD",
            "PUSH2",
            "OP_90",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 683
        },
        {
          "end_pc": 756,
          "hash": "0x45fa2545c213978e6ec97fe8a9b118d78009bdf9b8e01f2809c2ff4fc43900dc",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_82",
            "SHA3",
            "OP_90",
            "OP_92",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "OP_81",
            "MSTORE",
            "SHA3",
            "SLOAD",
            "PUSH2",
            "OP_90",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 720
        },
        {
          "end_pc": 788,
          "hash": "0xadac0efc3395bf10771f86cd3f0afe805efdd58c9917fed66740e7a6d61f3f39",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "SLOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "OP_91",
            "AND",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 757
        },
        {
          "end_pc": 792,
          "hash": "0x3b5285ceb2423dc36c034b80f04b5f3e458501340a5d8e475f3d04664a2f92d3",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 789
        },
        {
          "end_pc": 821,
          "hash": "0x050d795fcc6dd166cae6354f07fa09ebfb6f1bf58990c228d84d0fa43b460fd7",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "SLOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "OP_91",
            "AND",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 793
        },
        {
          "end_pc": 825,
          "hash": "0x58a5563acfa50b15ca0a775a1d7bcde65531423d4f290094841db3a1dbd5aa92",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 822
        },
        {
          "end_pc": 827,
          "hash": "0x44260eda7a79006b60940a80fe44f7f1f221f83d89c89bcda2bb901e4756da90",
          "opcodes": [
            "JUMPDEST",
            "STOP"
          ],
          "start_pc": 826
        },
        {
          "end_pc": 898,
          "hash": "0x23800c13755022cce18cd7546c4776397d600185965f8f2d8a8f8094c90c28c8",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_82",
            "OP_81",
            "SUB",
            "OP_82",
            "MSTORE",
            "OP_83",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",

exec
/bin/bash -lc "sed -n '920,1210p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 828
        },
        {
          "end_pc": 923,
          "hash": "0x6fcb2ef30d5f735e41e243f470c370101679095dcdab83aee7a0d010543cdd80",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 899
        },
        {
          "end_pc": 937,
          "hash": "0xea93901931302a26d87fc2a29acdc4a52cfe1dd93067d975e02b51edcc363b97",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 924
        },
        {
          "end_pc": 971,
          "hash": "0x879d469c7d723e649eb9961865551120965483752576c6d441275ba35fa096a5",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH20",
            "NOT",
            "AND",
            "OP_82",
            "OR",
            "OP_90",
            "SSTORE",
            "POP",
            "JUMP"
          ],
          "start_pc": 938
        },
        {
          "end_pc": 985,
          "hash": "0xf88837fec207ea0b32c8a254ffaea6835675b1b6cb60b20e0c3263f465dcd99f",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "ADD",
            "OP_91",
            "OP_90",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "SHA3",
            "OP_90"
          ],
          "start_pc": 972
        },
        {
          "end_pc": 1005,
          "hash": "0x3835a09fb954555e0fa2a7781af0658bd83818a661d5e5c6c7b15ce279b191cf",
          "opcodes": [
            "JUMPDEST",
            "OP_81",
            "SLOAD",
            "OP_81",
            "MSTORE",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_83",
            "GT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 986
        },
        {
          "end_pc": 1014,
          "hash": "0xa15247cfc35a7572fd6c218f40c6693098b14b586be66b807d38dfbce86a8750",
          "opcodes": [
            "OP_82",
            "OP_90",
            "SUB",
            "PUSH1",
            "AND",
            "OP_82",
            "ADD",
            "OP_91"
          ],
          "start_pc": 1006
        },
        {
          "end_pc": 1022,
          "hash": "0x7969b71f3b0ee31695a37d2652e75d59038ca8eef9d2f0a995fcd8f9fa2434e4",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 1015
        },
        {
          "end_pc": 1052,
          "hash": "0xf9efe6f5024884a14c93a7c2b635db3be17a929ad02e95f90426c27e34986d20",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_82",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_80",
            "OP_82",
            "ADD",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1023
        },
        {
          "end_pc": 1056,
          "hash": "0xa729887205a3a28eee5dd5422c67622c8604a1d784d263b464a9fe2853e8a244",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1053
        },
        {
          "end_pc": 1090,
          "hash": "0x0de899fb9bdb8127d2d480d5da54189f0f18d394518b65ed37b7b105966e1743",
          "opcodes": [
            "JUMPDEST",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "PUSH1",
            "AND",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1057
        },
        {
          "end_pc": 1094,
          "hash": "0x587e20621278dd57f5eac7d3804bc42b1a4c2776f7823d762556c7ef2954e680",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1091
        },
        {
          "end_pc": 1267,
          "hash": "0x0c2c1dcb9fc8742020c76fe162b0c9fb11e7a81b8c78661bf61640436245f925",
          "opcodes": [
            "JUMPDEST",
            "OP_80",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "OP_82",
            "OP_82",
            "OP_82",
            "POP",
            "SLOAD",
            "SUB",
            "OP_92",
            "POP",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_80",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",

exec
/bin/bash -lc "sed -n '1210,1495p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "OP_82",
            "OP_82",
            "OP_82",
            "POP",
            "SLOAD",
            "ADD",
            "OP_92",
            "POP",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH32",
            "OP_83",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_82",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "OP_A3",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1095
        },
        {
          "end_pc": 1359,
          "hash": "0xd8de0e406c2b9a777f463ef110cb45efe602292dc74e4b524bc15acc9e16d756",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_82",
            "OP_81",
            "AND",
            "PUSH1",
            "OP_81",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_82",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_86",
            "ADD",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "OP_86",
            "ADD",
            "OP_90",
            "SSTORE",
            "OP_90",
            "SLOAD",
            "PUSH1",
            "OP_85",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_93",
            "AND",
            "OP_91",
            "PUSH32",
            "OP_91",
            "OP_90",
            "OP_A3",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1268
        },
        {
          "end_pc": 1444,
          "hash": "0xdf02dd1e4a8250ce91b455675cb06c3b41f59403a512ba135e67ad49fa5f0954",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_82",
            "AND",
            "PUSH1",
            "OP_81",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "OP_81",
            "OP_90",
            "SHA3",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "NOT",
            "AND",
            "OP_84",
            "OR",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "OP_91",
            "OP_82",
            "MSTORE",
            "PUSH1",
            "OP_83",
            "OP_90",
            "MSTORE",
            "PUSH32",
            "OP_91",
            "OP_A1",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1360
        },
        {
          "end_pc": 1471,
          "hash": "0x38f4b390486a710d9e4e825a853d70f7cb4c0af7bdefe12fadeae7174563ccb3",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_83",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "SHA3",
            "SLOAD",
            "OP_82",
            "OP_81",
            "ADD",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1445
        },
        {
          "end_pc": 1475,
          "hash": "0xab689a1d15eaa64c7fb633b7d82db472b06e116cb3b72fd1cdcf74ff643f504b",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1472
        },
        {
          "end_pc": 1506,
          "hash": "0x66faf6137068bb82646105d5f1fba7a31b9f044b70457f1b33d83e8f2b6c2942",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_84",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "SHA3",
            "SLOAD",
            "PUSH1",
            "AND",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1476
        },
        {
          "end_pc": 1510,
          "hash": "0x82215718d02cc1619065a0e1e0e0888071f48c3819f2549185ed7743ac24e372",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1507
        },
        {
          "end_pc": 1573,
          "hash": "0x24f8fab0f2c663307d1617f0934b8e43c5f417ee6459c31450c633b39f0ce9b5",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "OP_80",
            "OP_86",
            "MSTORE",
            "OP_91",
            "OP_84",
            "MSTORE",
            "OP_82",
            "OP_85",
            "SHA3",
            "SLOAD",
            "OP_90",
            "OP_88",
            "AND",
            "OP_85",
            "MSTORE",
            "PUSH1",
            "OP_84",
            "MSTORE",
            "OP_82",

exec
/bin/bash -lc "sed -n '1495,1715p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
            "OP_82",
            "OP_85",
            "SHA3",
            "OP_91",
            "OP_85",
            "MSTORE",
            "OP_92",
            "MSTORE",
            "OP_82",
            "SHA3",
            "SLOAD",
            "OP_83",
            "ADD",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1511
        },
        {
          "end_pc": 1577,
          "hash": "0xfb09cd3638630ce3d55c6930f61d26478cf39c1cd2080b9cb202102cb266b2e4",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1574
        },
        {
          "end_pc": 1829,
          "hash": "0x80c02b49be5e3b5738644a4aaa06ce62356ce5baa514b12ee62c86e337015c32",
          "opcodes": [
            "JUMPDEST",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "OP_86",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "OP_82",
            "OP_82",
            "OP_82",
            "POP",
            "SLOAD",
            "SUB",
            "OP_92",
            "POP",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "OP_85",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "OP_82",
            "OP_82",
            "OP_82",
            "POP",
            "SLOAD",
            "ADD",
            "OP_92",
            "POP",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "OP_86",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "POP",
            "PUSH1",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "OP_82",
            "OP_82",
            "OP_82",
            "POP",
            "SLOAD",
            "ADD",
            "OP_92",
            "POP",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_82",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH32",
            "OP_84",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_82",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "OP_A3",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1578
        }
      ],
      "callsites": [
        {
          "opcode": "CALL",
          "pc": 213,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 882,

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const hex=obj.analysis_artifact.artifact_json.runtime_bytecode?obj.analysis_artifact.artifact_json.runtime_bytecode.full:obj.analysis_context?.runtime_bytecode?.full||obj.analysis_artifact.runtime_bytecode?.full||obj.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode;
const code=(obj.analysis_artifact?.artifact_json?.runtime_bytecode?.full||obj.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode?.full||obj.analysis_context?.runtime_bytecode||obj.analysis_artifact?.runtime_bytecode?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode||obj.analysis_context?.artifact_json?.runtime_bytecode?.full||obj.analysis_artifact?.artifact_json?.deployed_bytecode||obj.analysis_artifact?.artifact_json?.runtime?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode_hex||obj.analysis_context?.deployed_bytecode||obj.runtime_bytecode?.full||obj.analysis_context?.bytecode||obj.analysis_artifact?.artifact_json?.bytecode?.runtime||obj.analysis_artifact?.artifact_json?.bytecode||obj.analysis_artifact?.artifact_json?.evm?.deployedBytecode?.object||obj.analysis_artifact?.artifact_json?.evm?.deployedBytecode?.full||obj.analysis_artifact?.artifact_json?.runtime_bytecode?.object||obj.analysis_context?.artifact_json?.runtime_bytecode?.object||obj.analysis_context?.artifact_json?.evm?.deployedBytecode?.object||obj.analysis_artifact?.artifact_json?.runtime_bytecode?.bytes||obj.analysis_context?.artifact_json?.runtime_bytecode?.bytes||obj.analysis_artifact?.artifact_json?.runtimeBytecode?.full||obj.analysis_artifact?.artifact_json?.runtimeBytecode||obj.analysis_artifact?.artifact_json?.raw_runtime_bytecode||obj.analysis_artifact?.artifact_json?.code);
if("'!code) throw new Error('"'no code');
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
const dis=[];
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} dis.push({pc,name,arg}); pc=next;}
const ranges=[[180,220],[820,900],[930,980],[1020,1105],[1440,1590]];
for(const [a,b] of ranges){
  console.log('\\nRANGE',a,b);
  for(const ins of dis){if(ins.pc>=a&&ins.pc<=b) console.log(String(ins.pc).padStart(4), ins.name, ins.arg);}
}
NODE" in /tmp/codex-ry7p50js
 exited 1 in 0ms:
[stdin]:5
if(!code) throw new Error('no code');
          ^

Error: no code
    at [stdin]:5:17
    at runScriptInThisContext (node:internal/vm:209:10)
    at node:internal/process/execution:118:14
    at [stdin]-wrapper:6:24
    at runScript (node:internal/process/execution:101:62)
    at evalScript (node:internal/process/execution:136:3)
    at node:internal/main/eval_stdin:32:5
    at Socket.<anonymous> (node:internal/process/execution:237:5)
    at Socket.emit (node:events:525:35)
    at endReadableNT (node:internal/streams/readable:1696:12)

Node.js v23.3.0

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
console.log(Object.keys(obj));
for (const k of Object.keys(obj)) {
  const v=obj[k];
  if (v && typeof v==='object' && "'!Array.isArray(v)) console.log(k, Object.keys(v).slice(0,20));
}
NODE' in /tmp/codex-ry7p50js
 succeeded in 0ms:
[
  'analysis_artifact',
  'analysis_run',
  'artifact',
  'capability_graph',
  'detector_findings',
  'heuristics_summary'
]
analysis_artifact [
  'address',
  'artifact_hash',
  'artifact_json',
  'block_number',
  'chain_id',
  'codehash',
  'created_at',
  'id',
  'updated_at',
  'version'
]
analysis_run [
  'address',
  'block_number',
  'chain_id',
  'child_links',
  'created_at',
  'id',
  'parent_links',
  'status',
  'updated_at'
]
artifact [
  'codehash',
  'compiler_json',
  'implementation_address',
  'is_proxy',
  'runtime_bytecode',
  'verified_source'
]
capability_graph [
  'address',    'block_number',
  'chain_id',   'codehash',
  'created_at', 'graph_hash',
  'graph_json', 'id',
  'updated_at', 'version'
]
heuristics_summary [
  'create2_count',
  'delegatecall_count',
  'flags',
  'selfdestruct_count'
]

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
const dis=[];
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} dis.push({pc,name,arg}); pc=next;}
const ranges=[[0,220],[820,940],[938,980],[1020,1105],[1260,1385],[1440,1605]];
for(const [a,b] of ranges){
  console.log('\\nRANGE',a,b);
  for(const ins of dis){if(ins.pc>=a&&ins.pc<=b) console.log(String(ins.pc).padStart(4), ins.name.padEnd(12), ins.arg);}
}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:

RANGE 0 220
   0 PUSH1        0x60
   2 PUSH1        0x40
   4 MSTORE       
   5 CALLDATASIZE 
   6 ISZERO       
   7 PUSH2        0x00b9
  10 JUMPI        
  11 PUSH1        0xe0
  13 PUSH1        0x02
  15 EXP          
  16 PUSH1        0x00
  18 CALLDATALOAD 
  19 DIV          
  20 PUSH4        0x06fdde03
  25 DUP2         
  26 EQ           
  27 PUSH2        0x00dc
  30 JUMPI        
  31 DUP1         
  32 PUSH4        0x095ea7b3
  37 EQ           
  38 PUSH2        0x0138
  41 JUMPI        
  42 DUP1         
  43 PUSH4        0x18160ddd
  48 EQ           
  49 PUSH2        0x0173
  52 JUMPI        
  53 DUP1         
  54 PUSH4        0x23b872dd
  59 EQ           
  60 PUSH2        0x017c
  63 JUMPI        
  64 DUP1         
  65 PUSH4        0x313ce567
  70 EQ           
  71 PUSH2        0x01ae
  74 JUMPI        
  75 DUP1         
  76 PUSH4        0x70a08231
  81 EQ           
  82 PUSH2        0x01ba
  85 JUMPI        
  86 DUP1         
  87 PUSH4        0x79c65068
  92 EQ           
  93 PUSH2        0x01d2
  96 JUMPI        
  97 DUP1         
  98 PUSH4        0x8da5cb5b
 103 EQ           
 104 PUSH2        0x01f6
 107 JUMPI        
 108 DUP1         
 109 PUSH4        0x95d89b41
 114 EQ           
 115 PUSH2        0x0208
 118 JUMPI        
 119 DUP1         
 120 PUSH4        0xa9059cbb
 125 EQ           
 126 PUSH2        0x0261
 129 JUMPI        
 130 DUP1         
 131 PUSH4        0xb414d4b6
 136 EQ           
 137 PUSH2        0x0290
 140 JUMPI        
 141 DUP1         
 142 PUSH4        0xdc3080f2
 147 EQ           
 148 PUSH2        0x02ab
 151 JUMPI        
 152 DUP1         
 153 PUSH4        0xdd62ed3e
 158 EQ           
 159 PUSH2        0x02d0
 162 JUMPI        
 163 DUP1         
 164 PUSH4        0xe724529c
 169 EQ           
 170 PUSH2        0x02f5
 173 JUMPI        
 174 DUP1         
 175 PUSH4        0xf2fde38b
 180 EQ           
 181 PUSH2        0x0319
 184 JUMPI        
 185 JUMPDEST     
 186 PUSH2        0x033a
 189 PUSH1        0x00
 191 DUP1         
 192 SLOAD        
 193 PUSH1        0x01
 195 PUSH1        0xa0
 197 PUSH1        0x02
 199 EXP          
 200 SUB          
 201 AND          
 202 DUP17        
 203 CALLVALUE    
 204 PUSH1        0x60
 206 DUP3         
 207 DUP2         
 208 DUP2         
 209 DUP2         
 210 DUP6         
 211 DUP9         
 212 DUP4         
 213 CALL         
 214 POP          
 215 POP          
 216 POP          
 217 POP          
 218 POP          
 219 JUMP         
 220 JUMPDEST     

RANGE 820 940
 821 JUMPI        
 822 PUSH2        0x0002
 825 JUMP         
 826 JUMPDEST     
 827 STOP         
 828 JUMPDEST     
 829 PUSH1        0x40
 831 MLOAD        
 832 DUP1         
 833 DUP1         
 834 PUSH1        0x20
 836 ADD          
 837 DUP3         
 838 DUP2         
 839 SUB          
 840 DUP3         
 841 MSTORE       
 842 DUP4         
 843 DUP2         
 844 DUP2         
 845 MLOAD        
 846 DUP2         
 847 MSTORE       
 848 PUSH1        0x20
 850 ADD          
 851 DUP18        
 852 POP          
 853 DUP1         
 854 MLOAD        
 855 DUP17        
 856 PUSH1        0x20
 858 ADD          
 859 DUP17        
 860 DUP1         
 861 DUP4         
 862 DUP4         
 863 DUP3         
 864 DUP17        
 865 PUSH1        0x00
 867 PUSH1        0x04
 869 PUSH1        0x20
 871 DUP5         
 872 PUSH1        0x1f
 874 ADD          
 875 DIV          
 876 PUSH1        0x0f
 878 MUL          
 879 PUSH1        0x03
 881 ADD          
 882 CALL         
 883 POP          
 884 DUP17        
 885 POP          
 886 DUP17        
 887 DUP2         
 888 ADD          
 889 DUP17        
 890 PUSH1        0x1f
 892 AND          
 893 DUP1         
 894 ISZERO       
 895 PUSH2        0x039c
 898 JUMPI        
 899 DUP1         
 900 DUP3         
 901 SUB          
 902 DUP1         
 903 MLOAD        
 904 PUSH1        0x01
 906 DUP4         
 907 PUSH1        0x20
 909 SUB          
 910 PUSH2        0x0100
 913 EXP          
 914 SUB          
 915 NOT          
 916 AND          
 917 DUP2         
 918 MSTORE       
 919 PUSH1        0x20
 921 ADD          
 922 DUP18        
 923 POP          
 924 JUMPDEST     
 925 POP          
 926 DUP19        
 927 POP          
 928 POP          
 929 POP          
 930 PUSH1        0x40
 932 MLOAD        
 933 DUP1         
 934 DUP18        
 935 SUB          
 936 DUP17        
 937 RETURN       
 938 JUMPDEST     
 939 PUSH1        0x00

RANGE 938 980
 938 JUMPDEST     
 939 PUSH1        0x00
 941 DUP1         
 942 SLOAD        
 943 PUSH20       0xffffffffffffffffffffffffffffffffffffffff
 964 NOT          
 965 AND          
 966 DUP3         
 967 OR           
 968 DUP17        
 969 SSTORE       
 970 POP          
 971 JUMP         
 972 JUMPDEST     
 973 DUP3         
 974 ADD          
 975 DUP18        
 976 DUP17        
 977 PUSH1        0x00
 979 MSTORE       
 980 PUSH1        0x20

RANGE 1020 1105
1020 POP          
1021 DUP2         
1022 JUMP         
1023 JUMPDEST     
1024 PUSH1        0x01
1026 PUSH1        0xa0
1028 PUSH1        0x02
1030 EXP          
1031 SUB          
1032 DUP3         
1033 AND          
1034 PUSH1        0x00
1036 DUP17        
1037 DUP2         
1038 MSTORE       
1039 PUSH1        0x40
1041 DUP17        
1042 SHA3         
1043 SLOAD        
1044 DUP1         
1045 DUP3         
1046 ADD          
1047 LT           
1048 ISZERO       
1049 PUSH2        0x0421
1052 JUMPI        
1053 PUSH2        0x0002
1056 JUMP         
1057 JUMPDEST     
1058 CALLER       
1059 PUSH1        0x01
1061 PUSH1        0xa0
1063 PUSH1        0x02
1065 EXP          
1066 SUB          
1067 AND          
1068 PUSH1        0x00
1070 DUP17        
1071 DUP2         
1072 MSTORE       
1073 PUSH1        0x06
1075 PUSH1        0x20
1077 MSTORE       
1078 PUSH1        0x40
1080 DUP17        
1081 SHA3         
1082 SLOAD        
1083 PUSH1        0xff
1085 AND          
1086 ISZERO       
1087 PUSH2        0x0447
1090 JUMPI        
1091 PUSH2        0x0002
1094 JUMP         
1095 JUMPDEST     
1096 DUP1         
1097 PUSH1        0x05
1099 PUSH1        0x00
1101 POP          
1102 PUSH1        0x00
1104 CALLER       
1105 PUSH1        0x01

RANGE 1260 1385
1260 DUP1         
1261 DUP18        
1262 SUB          
1263 DUP17        
1264 LOG3         
1265 POP          
1266 POP          
1267 JUMP         
1268 JUMPDEST     
1269 PUSH1        0x01
1271 PUSH1        0xa0
1273 PUSH1        0x02
1275 EXP          
1276 SUB          
1277 DUP3         
1278 DUP2         
1279 AND          
1280 PUSH1        0x00
1282 DUP2         
1283 DUP2         
1284 MSTORE       
1285 PUSH1        0x05
1287 PUSH1        0x20
1289 DUP17        
1290 DUP2         
1291 MSTORE       
1292 PUSH1        0x40
1294 DUP3         
1295 SHA3         
1296 DUP1         
1297 SLOAD        
1298 DUP7         
1299 ADD          
1300 DUP17        
1301 SSTORE       
1302 PUSH1        0x04
1304 DUP1         
1305 SLOAD        
1306 DUP7         
1307 ADD          
1308 DUP17        
1309 SSTORE       
1310 DUP17        
1311 SLOAD        
1312 PUSH1        0x60
1314 DUP6         
1315 DUP2         
1316 MSTORE       
1317 DUP19        
1318 DUP20        
1319 AND          
1320 DUP18        
1321 PUSH32       0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1354 DUP18        
1355 DUP17        
1356 LOG3         
1357 POP          
1358 POP          
1359 JUMP         
1360 JUMPDEST     
1361 PUSH1        0x01
1363 PUSH1        0xa0
1365 PUSH1        0x02
1367 EXP          
1368 SUB          
1369 DUP3         
1370 AND          
1371 PUSH1        0x00
1373 DUP2         
1374 DUP2         
1375 MSTORE       
1376 PUSH1        0x06
1378 PUSH1        0x20
1380 MSTORE       
1381 PUSH1        0x40
1383 DUP17        
1384 DUP2         
1385 DUP17        

RANGE 1440 1605
1440 DUP18        
1441 LOG1         
1442 POP          
1443 POP          
1444 JUMP         
1445 JUMPDEST     
1446 PUSH1        0x01
1448 PUSH1        0xa0
1450 PUSH1        0x02
1452 EXP          
1453 SUB          
1454 DUP4         
1455 AND          
1456 DUP2         
1457 MSTORE       
1458 PUSH1        0x40
1460 DUP2         
1461 SHA3         
1462 SLOAD        
1463 DUP3         
1464 DUP2         
1465 ADD          
1466 LT           
1467 ISZERO       
1468 PUSH2        0x05c4
1471 JUMPI        
1472 PUSH2        0x0002
1475 JUMP         
1476 JUMPDEST     
1477 PUSH1        0x01
1479 PUSH1        0xa0
1481 PUSH1        0x02
1483 EXP          
1484 SUB          
1485 DUP5         
1486 AND          
1487 DUP2         
1488 MSTORE       
1489 PUSH1        0x06
1491 PUSH1        0x20
1493 MSTORE       
1494 PUSH1        0x40
1496 DUP2         
1497 SHA3         
1498 SLOAD        
1499 PUSH1        0xff
1501 AND          
1502 ISZERO       
1503 PUSH2        0x05e7
1506 JUMPI        
1507 PUSH2        0x0002
1510 JUMP         
1511 JUMPDEST     
1512 PUSH1        0x07
1514 PUSH1        0x20
1516 DUP17        
1517 DUP2         
1518 MSTORE       
1519 PUSH1        0x40
1521 DUP1         
1522 DUP4         
1523 SHA3         
1524 CALLER       
1525 PUSH1        0x01
1527 PUSH1        0xa0
1529 PUSH1        0x02
1531 EXP          
1532 SUB          
1533 DUP17        
1534 DUP2         
1535 AND          
1536 DUP1         
1537 DUP7         
1538 MSTORE       
1539 DUP18        
1540 DUP5         
1541 MSTORE       
1542 DUP3         
1543 DUP6         
1544 SHA3         
1545 SLOAD        
1546 DUP17        
1547 DUP9         
1548 AND          
1549 DUP6         
1550 MSTORE       
1551 PUSH1        0x08
1553 DUP5         
1554 MSTORE       
1555 DUP3         
1556 DUP6         
1557 SHA3         
1558 DUP18        
1559 DUP6         
1560 MSTORE       
1561 DUP19        
1562 MSTORE       
1563 DUP3         
1564 SHA3         
1565 SLOAD        
1566 DUP4         
1567 ADD          
1568 GT           
1569 ISZERO       
1570 PUSH2        0x062a
1573 JUMPI        
1574 PUSH2        0x0002
1577 JUMP         
1578 JUMPDEST     
1579 DUP2         
1580 PUSH1        0x05
1582 PUSH1        0x00
1584 POP          
1585 PUSH1        0x00
1587 DUP7         
1588 PUSH1        0x01
1590 PUSH1        0xa0
1592 PUSH1        0x02
1594 EXP          
1595 SUB          
1596 AND          
1597 DUP2         
1598 MSTORE       
1599 PUSH1        0x20
1601 ADD          
1602 DUP17        
1603 DUP2         
1604 MSTORE       
1605 PUSH1        0x20

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=1600 && pc<=1830) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
1601 ADD          
1602 DUP17        
1603 DUP2         
1604 MSTORE       
1605 PUSH1        0x20
1607 ADD          
1608 PUSH1        0x00
1610 SHA3         
1611 PUSH1        0x00
1613 DUP3         
1614 DUP3         
1615 DUP3         
1616 POP          
1617 SLOAD        
1618 SUB          
1619 DUP19        
1620 POP          
1621 POP          
1622 DUP2         
1623 DUP17        
1624 SSTORE       
1625 POP          
1626 DUP2         
1627 PUSH1        0x05
1629 PUSH1        0x00
1631 POP          
1632 PUSH1        0x00
1634 DUP6         
1635 PUSH1        0x01
1637 PUSH1        0xa0
1639 PUSH1        0x02
1641 EXP          
1642 SUB          
1643 AND          
1644 DUP2         
1645 MSTORE       
1646 PUSH1        0x20
1648 ADD          
1649 DUP17        
1650 DUP2         
1651 MSTORE       
1652 PUSH1        0x20
1654 ADD          
1655 PUSH1        0x00
1657 SHA3         
1658 PUSH1        0x00
1660 DUP3         
1661 DUP3         
1662 DUP3         
1663 POP          
1664 SLOAD        
1665 ADD          
1666 DUP19        
1667 POP          
1668 POP          
1669 DUP2         
1670 DUP17        
1671 SSTORE       
1672 POP          
1673 DUP2         
1674 PUSH1        0x08
1676 PUSH1        0x00
1678 POP          
1679 PUSH1        0x00
1681 DUP7         
1682 PUSH1        0x01
1684 PUSH1        0xa0
1686 PUSH1        0x02
1688 EXP          
1689 SUB          
1690 AND          
1691 DUP2         
1692 MSTORE       
1693 PUSH1        0x20
1695 ADD          
1696 DUP17        
1697 DUP2         
1698 MSTORE       
1699 PUSH1        0x20
1701 ADD          
1702 PUSH1        0x00
1704 SHA3         
1705 PUSH1        0x00
1707 POP          
1708 PUSH1        0x00
1710 CALLER       
1711 PUSH1        0x01
1713 PUSH1        0xa0
1715 PUSH1        0x02
1717 EXP          
1718 SUB          
1719 AND          
1720 DUP2         
1721 MSTORE       
1722 PUSH1        0x20
1724 ADD          
1725 DUP17        
1726 DUP2         
1727 MSTORE       
1728 PUSH1        0x20
1730 ADD          
1731 PUSH1        0x00
1733 SHA3         
1734 PUSH1        0x00
1736 DUP3         
1737 DUP3         
1738 DUP3         
1739 POP          
1740 SLOAD        
1741 ADD          
1742 DUP19        
1743 POP          
1744 POP          
1745 DUP2         
1746 DUP17        
1747 SSTORE       
1748 POP          
1749 DUP3         
1750 PUSH1        0x01
1752 PUSH1        0xa0
1754 PUSH1        0x02
1756 EXP          
1757 SUB          
1758 AND          
1759 CALLER       
1760 PUSH1        0x01
1762 PUSH1        0xa0
1764 PUSH1        0x02
1766 EXP          
1767 SUB          
1768 AND          
1769 PUSH32       0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1802 DUP5         
1803 PUSH1        0x40
1805 MLOAD        
1806 DUP1         
1807 DUP3         
1808 DUP2         
1809 MSTORE       
1810 PUSH1        0x20
1812 ADD          
1813 DUP18        
1814 POP          
1815 POP          
1816 PUSH1        0x40
1818 MLOAD        
1819 DUP1         
1820 DUP18        
1821 SUB          
1822 DUP17        
1823 LOG3         
1824 DUP20        
1825 DUP19        
1826 POP          
1827 POP          
1828 POP          
1829 JUMP         

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=740 && pc<=830) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
 740 SHA3         
 741 DUP17        
 742 DUP19        
 743 MSTORE       
 744 PUSH1        0x24
 746 CALLDATALOAD 
 747 DUP2         
 748 MSTORE       
 749 SHA3         
 750 SLOAD        
 751 PUSH2        0x0169
 754 DUP17        
 755 DUP2         
 756 JUMP         
 757 JUMPDEST     
 758 PUSH2        0x033a
 761 PUSH1        0x04
 763 CALLDATALOAD 
 764 PUSH1        0x24
 766 CALLDATALOAD 
 767 PUSH1        0x00
 769 SLOAD        
 770 CALLER       
 771 PUSH1        0x01
 773 PUSH1        0xa0
 775 PUSH1        0x02
 777 EXP          
 778 SUB          
 779 DUP17        
 780 DUP2         
 781 AND          
 782 DUP18        
 783 AND          
 784 EQ           
 785 PUSH2        0x0550
 788 JUMPI        
 789 PUSH2        0x0002
 792 JUMP         
 793 JUMPDEST     
 794 PUSH2        0x033a
 797 PUSH1        0x04
 799 CALLDATALOAD 
 800 PUSH1        0x00
 802 SLOAD        
 803 CALLER       
 804 PUSH1        0x01
 806 PUSH1        0xa0
 808 PUSH1        0x02
 810 EXP          
 811 SUB          
 812 DUP17        
 813 DUP2         
 814 AND          
 815 DUP18        
 816 AND          
 817 EQ           
 818 PUSH2        0x03aa
 821 JUMPI        
 822 PUSH2        0x0002
 825 JUMP         
 826 JUMPDEST     
 827 STOP         
 828 JUMPDEST     
 829 PUSH1        0x40

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=1360 && pc<=1445) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
1360 JUMPDEST     
1361 PUSH1        0x01
1363 PUSH1        0xa0
1365 PUSH1        0x02
1367 EXP          
1368 SUB          
1369 DUP3         
1370 AND          
1371 PUSH1        0x00
1373 DUP2         
1374 DUP2         
1375 MSTORE       
1376 PUSH1        0x06
1378 PUSH1        0x20
1380 MSTORE       
1381 PUSH1        0x40
1383 DUP17        
1384 DUP2         
1385 DUP17        
1386 SHA3         
1387 DUP1         
1388 SLOAD        
1389 PUSH1        0xff
1391 NOT          
1392 AND          
1393 DUP5         
1394 OR           
1395 DUP17        
1396 SSTORE       
1397 PUSH1        0x60
1399 DUP18        
1400 DUP3         
1401 MSTORE       
1402 PUSH1        0x80
1404 DUP4         
1405 DUP17        
1406 MSTORE       
1407 PUSH32       0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
1440 DUP18        
1441 LOG1         
1442 POP          
1443 POP          
1444 JUMP         
1445 JUMPDEST     

exec
/bin/bash -lc "sed -n '3495,3565p' BYTECODE_BUNDLE.json" in /tmp/codex-ry7p50js
 succeeded in 0ms:
        "writes": 10
      },
      "version": "analysis_artifact_v1"
    },
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
    "created_at": "2026-04-04T19:53:10.000000Z",
    "id": 1973,
    "updated_at": "2026-04-04T19:53:10.000000Z",
    "version": "analysis_artifact_v1"
  },
  "analysis_run": {
    "address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],
    "created_at": "2025-12-19T20:03:53.000000Z",
    "id": "019b3836-2d81-72b3-ba7f-1259b9b4588e",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:53:10.000000Z"
  },
  "artifact": {
    "codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405236156100b95760e060020a600035046306fdde0381146100dc578063095ea7b31461013857806318160ddd1461017357806323b872dd1461017c578063313ce567146101ae57806370a08231146101ba57806379c65068146101d25780638da5cb5b146101f657806395d89b4114610208578063a9059cbb14610261578063b414d4b614610290578063dc3080f2146102ab578063dd62ed3e146102d0578063e724529c146102f5578063f2fde38b14610319575b61033a60008054600160a060020a03169034606082818181858883f15050505050565b61033c600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b33600160a060020a039081166000908152600760209081526040808320600435909416835292905290812060243590555b6060908152602090f35b61016960045481565b610169600435602435604435600160a060020a038316600090815260056020526040812054829010156105a557610002565b61016960035460ff1681565b61016960043560056020526000908152604090205481565b61033a60043560243560005433600160a060020a039081169116146104f457610002565b610169600054600160a060020a031681565b61033c600280546020601f600019600184161561010002019092168390049182018190040260809081016040526060828152929190828280156103f75780601f106103cc576101008083540402835291602001916103f7565b61033a60043560243533600160a060020a0316600090815260056020526040902054819010156103ff57610002565b61016960043560066020526000908152604090205460ff1681565b6008602090815260043560009081526040808220909252602435815220546101699081565b6007602090815260043560009081526040808220909252602435815220546101699081565b61033a60043560243560005433600160a060020a0390811691161461055057610002565b61033a60043560005433600160a060020a039081169116146103aa57610002565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000805473ffffffffffffffffffffffffffffffffffffffff19168217905550565b820191906000526020600020905b8154815290600101906020018083116103da57829003601f168201915b505050505081565b600160a060020a03821660009081526040902054808201101561042157610002565b33600160a060020a031660009081526006602052604090205460ff161561044757610002565b806005600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806005600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600160a060020a0382811660008181526005602090815260408220805486019055600480548601905590546060858152929316917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a35050565b600160a060020a03821660008181526006602052604090819020805460ff191684179055606091825260808390527f48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a591a15050565b600160a060020a0383168152604081205482810110156105c457610002565b600160a060020a03841681526006602052604081205460ff16156105e757610002565b60076020908152604080832033600160a060020a039081168086529184528285205490881685526008845282852091855292528220548301111561062a57610002565b816005600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816005600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816008600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056",
      "head": null,
      "length": 3662,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x4eda19d90eb0bf571aaa19f9e6af1db5923c49ed28c24eead1dcafdc90ad852f",
    "created_at": "2026-04-04T19:53:10.000000Z",
    "graph_hash": "0x849232a8bdcf2d3bca91d0c41631acbbc5cbc63614a329bbce266d24c343a438",
    "graph_json": {
      "edges": [
        {
          "from": "bb:0",
          "to": "bb:185",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:220",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++){ops[0x5f+i]='PUSH'+i; ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if(pc>=466 && pc<=520) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
 466 JUMPDEST     
 467 PUSH2        0x033a
 470 PUSH1        0x04
 472 CALLDATALOAD 
 473 PUSH1        0x24
 475 CALLDATALOAD 
 476 PUSH1        0x00
 478 SLOAD        
 479 CALLER       
 480 PUSH1        0x01
 482 PUSH1        0xa0
 484 PUSH1        0x02
 486 EXP          
 487 SUB          
 488 DUP17        
 489 DUP2         
 490 AND          
 491 DUP18        
 492 AND          
 493 EQ           
 494 PUSH2        0x04f4
 497 JUMPI        
 498 PUSH2        0x0002
 501 JUMP         
 502 JUMPDEST     
 503 PUSH2        0x0169
 506 PUSH1        0x00
 508 SLOAD        
 509 PUSH1        0x01
 511 PUSH1        0xa0
 513 PUSH1        0x02
 515 EXP          
 516 SUB          
 517 AND          
 518 DUP2         
 519 JUMP         
 520 JUMPDEST     

exec
/bin/bash -lc "node - <<'NODE'
const fs=require('fs');
const obj=JSON.parse(fs.readFileSync('BYTECODE_BUNDLE.json','utf8'));
const code=obj.artifact.runtime_bytecode.full;
const bytes=Buffer.from(code.slice(2),'hex');
const ops={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',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',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'};
for(let i=1;i<=32;i++) ops[0x5f+i]='PUSH'+i;
for(let i=1;i<=16;i++){ops[0x7f+i]='DUP'+i; ops[0x8f+i]='SWAP'+i;}
for(let i=0;i<5;i++) ops[0xa0+i]='LOG'+i;
for(let pc=0;pc<bytes.length;){const op=bytes[pc];const name=ops[op]||('OP_'+op.toString(16));let arg='';let next=pc+1;if(op>=0x60&&op<=0x7f){const n=op-0x5f;arg='0x'+bytes.slice(pc+1,pc+1+n).toString('hex');next=pc+1+n;} if((pc>=185&&pc<=220)||(pc>=466&&pc<=520)||(pc>=609&&pc<=682)||(pc>=757&&pc<=827)||(pc>=1023&&pc<=1095)||(pc>=1268&&pc<=1445)||(pc>=1445&&pc<=1830)) console.log(String(pc).padStart(4), name.padEnd(12), arg); pc=next;}
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
 185 JUMPDEST     
 186 PUSH2        0x033a
 189 PUSH1        0x00
 191 DUP1         
 192 SLOAD        
 193 PUSH1        0x01
 195 PUSH1        0xa0
 197 PUSH1        0x02
 199 EXP          
 200 SUB          
 201 AND          
 202 SWAP1        
 203 CALLVALUE    
 204 PUSH1        0x60
 206 DUP3         
 207 DUP2         
 208 DUP2         
 209 DUP2         
 210 DUP6         
 211 DUP9         
 212 DUP4         
 213 CALL         
 214 POP          
 215 POP          
 216 POP          
 217 POP          
 218 POP          
 219 JUMP         
 220 JUMPDEST     
 466 JUMPDEST     
 467 PUSH2        0x033a
 470 PUSH1        0x04
 472 CALLDATALOAD 
 473 PUSH1        0x24
 475 CALLDATALOAD 
 476 PUSH1        0x00
 478 SLOAD        
 479 CALLER       
 480 PUSH1        0x01
 482 PUSH1        0xa0
 484 PUSH1        0x02
 486 EXP          
 487 SUB          
 488 SWAP1        
 489 DUP2         
 490 AND          
 491 SWAP2        
 492 AND          
 493 EQ           
 494 PUSH2        0x04f4
 497 JUMPI        
 498 PUSH2        0x0002
 501 JUMP         
 502 JUMPDEST     
 503 PUSH2        0x0169
 506 PUSH1        0x00
 508 SLOAD        
 509 PUSH1        0x01
 511 PUSH1        0xa0
 513 PUSH1        0x02
 515 EXP          
 516 SUB          
 517 AND          
 518 DUP2         
 519 JUMP         
 520 JUMPDEST     
 609 JUMPDEST     
 610 PUSH2        0x033a
 613 PUSH1        0x04
 615 CALLDATALOAD 
 616 PUSH1        0x24
 618 CALLDATALOAD 
 619 CALLER       
 620 PUSH1        0x01
 622 PUSH1        0xa0
 624 PUSH1        0x02
 626 EXP          
 627 SUB          
 628 AND          
 629 PUSH1        0x00
 631 SWAP1        
 632 DUP2         
 633 MSTORE       
 634 PUSH1        0x05
 636 PUSH1        0x20
 638 MSTORE       
 639 PUSH1        0x40
 641 SWAP1        
 642 SHA3         
 643 SLOAD        
 644 DUP2         
 645 SWAP1        
 646 LT           
 647 ISZERO       
 648 PUSH2        0x03ff
 651 JUMPI        
 652 PUSH2        0x0002
 655 JUMP         
 656 JUMPDEST     
 657 PUSH2        0x0169
 660 PUSH1        0x04
 662 CALLDATALOAD 
 663 PUSH1        0x06
 665 PUSH1        0x20
 667 MSTORE       
 668 PUSH1        0x00
 670 SWAP1        
 671 DUP2         
 672 MSTORE       
 673 PUSH1        0x40
 675 SWAP1        
 676 SHA3         
 677 SLOAD        
 678 PUSH1        0xff
 680 AND          
 681 DUP2         
 682 JUMP         
 757 JUMPDEST     
 758 PUSH2        0x033a
 761 PUSH1        0x04
 763 CALLDATALOAD 
 764 PUSH1        0x24
 766 CALLDATALOAD 
 767 PUSH1        0x00
 769 SLOAD        
 770 CALLER       
 771 PUSH1        0x01
 773 PUSH1        0xa0
 775 PUSH1        0x02
 777 EXP          
 778 SUB          
 779 SWAP1        
 780 DUP2         
 781 AND          
 782 SWAP2        
 783 AND          
 784 EQ           
 785 PUSH2        0x0550
 788 JUMPI        
 789 PUSH2        0x0002
 792 JUMP         
 793 JUMPDEST     
 794 PUSH2        0x033a
 797 PUSH1        0x04
 799 CALLDATALOAD 
 800 PUSH1        0x00
 802 SLOAD        
 803 CALLER       
 804 PUSH1        0x01
 806 PUSH1        0xa0
 808 PUSH1        0x02
 810 EXP          
 811 SUB          
 812 SWAP1        
 813 DUP2         
 814 AND          
 815 SWAP2        
 816 AND          
 817 EQ           
 818 PUSH2        0x03aa
 821 JUMPI        
 822 PUSH2        0x0002
 825 JUMP         
 826 JUMPDEST     
 827 STOP         
1023 JUMPDEST     
1024 PUSH1        0x01
1026 PUSH1        0xa0
1028 PUSH1        0x02
1030 EXP          
1031 SUB          
1032 DUP3         
1033 AND          
1034 PUSH1        0x00
1036 SWAP1        
1037 DUP2         
1038 MSTORE       
1039 PUSH1        0x40
1041 SWAP1        
1042 SHA3         
1043 SLOAD        
1044 DUP1         
1045 DUP3         
1046 ADD          
1047 LT           
1048 ISZERO       
1049 PUSH2        0x0421
1052 JUMPI        
1053 PUSH2        0x0002
1056 JUMP         
1057 JUMPDEST     
1058 CALLER       
1059 PUSH1        0x01
1061 PUSH1        0xa0
1063 PUSH1        0x02
1065 EXP          
1066 SUB          
1067 AND          
1068 PUSH1        0x00
1070 SWAP1        
1071 DUP2         
1072 MSTORE       
1073 PUSH1        0x06
1075 PUSH1        0x20
1077 MSTORE       
1078 PUSH1        0x40
1080 SWAP1        
1081 SHA3         
1082 SLOAD        
1083 PUSH1        0xff
1085 AND          
1086 ISZERO       
1087 PUSH2        0x0447
1090 JUMPI        
1091 PUSH2        0x0002
1094 JUMP         
1095 JUMPDEST     
1268 JUMPDEST     
1269 PUSH1        0x01
1271 PUSH1        0xa0
1273 PUSH1        0x02
1275 EXP          
1276 SUB          
1277 DUP3         
1278 DUP2         
1279 AND          
1280 PUSH1        0x00
1282 DUP2         
1283 DUP2         
1284 MSTORE       
1285 PUSH1        0x05
1287 PUSH1        0x20
1289 SWAP1        
1290 DUP2         
1291 MSTORE       
1292 PUSH1        0x40
1294 DUP3         
1295 SHA3         
1296 DUP1         
1297 SLOAD        
1298 DUP7         
1299 ADD          
1300 SWAP1        
1301 SSTORE       
1302 PUSH1        0x04
1304 DUP1         
1305 SLOAD        
1306 DUP7         
1307 ADD          
1308 SWAP1        
1309 SSTORE       
1310 SWAP1        
1311 SLOAD        
1312 PUSH1        0x60
1314 DUP6         
1315 DUP2         
1316 MSTORE       
1317 SWAP3        
1318 SWAP4        
1319 AND          
1320 SWAP2        
1321 PUSH32       0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1354 SWAP2        
1355 SWAP1        
1356 LOG3         
1357 POP          
1358 POP          
1359 JUMP         
1360 JUMPDEST     
1361 PUSH1        0x01
1363 PUSH1        0xa0
1365 PUSH1        0x02
1367 EXP          
1368 SUB          
1369 DUP3         
1370 AND          
1371 PUSH1        0x00
1373 DUP2         
1374 DUP2         
1375 MSTORE       
1376 PUSH1        0x06
1378 PUSH1        0x20
1380 MSTORE       
1381 PUSH1        0x40
1383 SWAP1        
1384 DUP2         
1385 SWAP1        
1386 SHA3         
1387 DUP1         
1388 SLOAD        
1389 PUSH1        0xff
1391 NOT          
1392 AND          
1393 DUP5         
1394 OR           
1395 SWAP1        
1396 SSTORE       
1397 PUSH1        0x60
1399 SWAP2        
1400 DUP3         
1401 MSTORE       
1402 PUSH1        0x80
1404 DUP4         
1405 SWAP1        
1406 MSTORE       
1407 PUSH32       0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
1440 SWAP2        
1441 LOG1         
1442 POP          
1443 POP          
1444 JUMP         
1445 JUMPDEST     
1446 PUSH1        0x01
1448 PUSH1        0xa0
1450 PUSH1        0x02
1452 EXP          
1453 SUB          
1454 DUP4         
1455 AND          
1456 DUP2         
1457 MSTORE       
1458 PUSH1        0x40
1460 DUP2         
1461 SHA3         
1462 SLOAD        
1463 DUP3         
1464 DUP2         
1465 ADD          
1466 LT           
1467 ISZERO       
1468 PUSH2        0x05c4
1471 JUMPI        
1472 PUSH2        0x0002
1475 JUMP         
1476 JUMPDEST     
1477 PUSH1        0x01
1479 PUSH1        0xa0
1481 PUSH1        0x02
1483 EXP          
1484 SUB          
1485 DUP5         
1486 AND          
1487 DUP2         
1488 MSTORE       
1489 PUSH1        0x06
1491 PUSH1        0x20
1493 MSTORE       
1494 PUSH1        0x40
1496 DUP2         
1497 SHA3         
1498 SLOAD        
1499 PUSH1        0xff
1501 AND          
1502 ISZERO       
1503 PUSH2        0x05e7
1506 JUMPI        
1507 PUSH2        0x0002
1510 JUMP         
1511 JUMPDEST     
1512 PUSH1        0x07
1514 PUSH1        0x20
1516 SWAP1        
1517 DUP2         
1518 MSTORE       
1519 PUSH1        0x40
1521 DUP1         
1522 DUP4         
1523 SHA3         
1524 CALLER       
1525 PUSH1        0x01
1527 PUSH1        0xa0
1529 PUSH1        0x02
1531 EXP          
1532 SUB          
1533 SWAP1        
1534 DUP2         
1535 AND          
1536 DUP1         
1537 DUP7         
1538 MSTORE       
1539 SWAP2        
1540 DUP5         
1541 MSTORE       
1542 DUP3         
1543 DUP6         
1544 SHA3         
1545 SLOAD        
1546 SWAP1        
1547 DUP9         
1548 AND          
1549 DUP6         
1550 MSTORE       
1551 PUSH1        0x08
1553 DUP5         
1554 MSTORE       
1555 DUP3         
1556 DUP6         
1557 SHA3         
1558 SWAP2        
1559 DUP6         
1560 MSTORE       
1561 SWAP3        
1562 MSTORE       
1563 DUP3         
1564 SHA3         
1565 SLOAD        
1566 DUP4         
1567 ADD          
1568 GT           
1569 ISZERO       
1570 PUSH2        0x062a
1573 JUMPI        
1574 PUSH2        0x0002
1577 JUMP         
1578 JUMPDEST     
1579 DUP2         
1580 PUSH1        0x05
1582 PUSH1        0x00
1584 POP          
1585 PUSH1        0x00
1587 DUP7         
1588 PUSH1        0x01
1590 PUSH1        0xa0
1592 PUSH1        0x02
1594 EXP          
1595 SUB          
1596 AND          
1597 DUP2         
1598 MSTORE       
1599 PUSH1        0x20
1601 ADD          
1602 SWAP1        
1603 DUP2         
1604 MSTORE       
1605 PUSH1        0x20
1607 ADD          
1608 PUSH1        0x00
1610 SHA3         
1611 PUSH1        0x00
1613 DUP3         
1614 DUP3         
1615 DUP3         
1616 POP          
1617 SLOAD        
1618 SUB          
1619 SWAP3        
1620 POP          
1621 POP          
1622 DUP2         
1623 SWAP1        
1624 SSTORE       
1625 POP          
1626 DUP2         
1627 PUSH1        0x05
1629 PUSH1        0x00
1631 POP          
1632 PUSH1        0x00
1634 DUP6         
1635 PUSH1        0x01
1637 PUSH1        0xa0
1639 PUSH1        0x02
1641 EXP          
1642 SUB          
1643 AND          
1644 DUP2         
1645 MSTORE       
1646 PUSH1        0x20
1648 ADD          
1649 SWAP1        
1650 DUP2         
1651 MSTORE       
1652 PUSH1        0x20
1654 ADD          
1655 PUSH1        0x00
1657 SHA3         
1658 PUSH1        0x00
1660 DUP3         
1661 DUP3         
1662 DUP3         
1663 POP          
1664 SLOAD        
1665 ADD          
1666 SWAP3        
1667 POP          
1668 POP          
1669 DUP2         
1670 SWAP1        
1671 SSTORE       
1672 POP          
1673 DUP2         
1674 PUSH1        0x08
1676 PUSH1        0x00
1678 POP          
1679 PUSH1        0x00
1681 DUP7         
1682 PUSH1        0x01
1684 PUSH1        0xa0
1686 PUSH1        0x02
1688 EXP          
1689 SUB          
1690 AND          
1691 DUP2         
1692 MSTORE       
1693 PUSH1        0x20
1695 ADD          
1696 SWAP1        
1697 DUP2         
1698 MSTORE       
1699 PUSH1        0x20
1701 ADD          
1702 PUSH1        0x00
1704 SHA3         
1705 PUSH1        0x00
1707 POP          
1708 PUSH1        0x00
1710 CALLER       
1711 PUSH1        0x01
1713 PUSH1        0xa0
1715 PUSH1        0x02
1717 EXP          
1718 SUB          
1719 AND          
1720 DUP2         
1721 MSTORE       
1722 PUSH1        0x20
1724 ADD          
1725 SWAP1        
1726 DUP2         
1727 MSTORE       
1728 PUSH1        0x20
1730 ADD          
1731 PUSH1        0x00
1733 SHA3         
1734 PUSH1        0x00
1736 DUP3         
1737 DUP3         
1738 DUP3         
1739 POP          
1740 SLOAD        
1741 ADD          
1742 SWAP3        
1743 POP          
1744 POP          
1745 DUP2         
1746 SWAP1        
1747 SSTORE       
1748 POP          
1749 DUP3         
1750 PUSH1        0x01
1752 PUSH1        0xa0
1754 PUSH1        0x02
1756 EXP          
1757 SUB          
1758 AND          
1759 CALLER       
1760 PUSH1        0x01
1762 PUSH1        0xa0
1764 PUSH1        0x02
1766 EXP          
1767 SUB          
1768 AND          
1769 PUSH32       0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
1802 DUP5         
1803 PUSH1        0x40
1805 MLOAD        
1806 DUP1         
1807 DUP3         
1808 DUP2         
1809 MSTORE       
1810 PUSH1        0x20
1812 ADD          
1813 SWAP2        
1814 POP          
1815 POP          
1816 PUSH1        0x40
1818 MLOAD        
1819 DUP1         
1820 SWAP2        
1821 SUB          
1822 SWAP1        
1823 LOG3         
1824 SWAP4        
1825 SWAP3        
1826 POP          
1827 POP          
1828 POP          
1829 JUMP         

exec
/bin/bash -lc "node - <<'NODE'
for (const n of [213,312,466,497,609,656,720,757,785,793,938,1023,1057,1078,1268,1360,1445,1476,1494,1511,1578,1673,1747]) console.log(n,'0x'+n.toString(16));
NODE" in /tmp/codex-ry7p50js
 succeeded in 0ms:
213 0xd5
312 0x138
466 0x1d2
497 0x1f1
609 0x261
656 0x290
720 0x2d0
757 0x2f5
785 0x311
793 0x319
938 0x3aa
1023 0x3ff
1057 0x421
1078 0x436
1268 0x4f4
1360 0x550
1445 0x5a5
1476 0x5c4
1494 0x5d6
1511 0x5e7
1578 0x62a
1673 0x689
1747 0x6d3

codex
{"no_findings":false,"summary":"BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.","findings":[{"severity":"high","category":"access_control","title":"Owner-only mint can arbitrarily inflate supply","exploit_scenario":"Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience.","recommendation":"If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.","evidence":"Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.","locations":["selector:0x79c65068","selector:0x8da5cb5b","pc:0x1f1","pc:0x4f4"]},{"severity":"high","category":"access_control","title":"Owner can freeze arbitrary senders via a hidden boolean mapping","exploit_scenario":"Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell.","recommendation":"Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.","evidence":"Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.","locations":["selector:0xe724529c","selector:0xa9059cbb","selector:0x23b872dd","selector:0xb414d4b6","pc:0x311","pc:0x550","pc:0x421","pc:0x5c4"]},{"severity":"medium","category":"other","title":"allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping","exploit_scenario":"The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows.","recommendation":"Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.","evidence":"approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.","locations":["selector:0x095ea7b3","selector:0xdd62ed3e","selector:0x23b872dd","pc:0x138","pc:0x2d0","pc:0x5e7","pc:0x689"]}]}
tokens used
58,638
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T02:41:13.677020+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 3662,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.",
    "raw_final": {
        "summary": "BYTECODE_BUNDLE describes a non-proxy ERC20-like contract. The material risks are owner-controlled token administration and a non-standard allowance model; the two reported CALL sites are not the primary issue here because one is the old-Solidity identity-precompile string copy helper and the other is a payable fallback path.",
        "findings": [
            {
                "title": "Owner-only mint can arbitrarily inflate supply",
                "category": "access_control",
                "evidence": "Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.",
                "severity": "high",
                "locations": [
                    "selector:0x79c65068",
                    "selector:0x8da5cb5b",
                    "pc:0x1f1",
                    "pc:0x4f4"
                ],
                "recommendation": "If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.",
                "exploit_scenario": "Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience."
            },
            {
                "title": "Owner can freeze arbitrary senders via a hidden boolean mapping",
                "category": "access_control",
                "evidence": "Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.",
                "severity": "high",
                "locations": [
                    "selector:0xe724529c",
                    "selector:0xa9059cbb",
                    "selector:0x23b872dd",
                    "selector:0xb414d4b6",
                    "pc:0x311",
                    "pc:0x550",
                    "pc:0x421",
                    "pc:0x5c4"
                ],
                "recommendation": "Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.",
                "exploit_scenario": "Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell."
            },
            {
                "title": "allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping",
                "category": "other",
                "evidence": "approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.",
                "severity": "medium",
                "locations": [
                    "selector:0x095ea7b3",
                    "selector:0xdd62ed3e",
                    "selector:0x23b872dd",
                    "pc:0x138",
                    "pc:0x2d0",
                    "pc:0x5e7",
                    "pc:0x689"
                ],
                "recommendation": "Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.",
                "exploit_scenario": "The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
2
EXT*/BALANCE
0
Total opcodes
1239
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x00b9
0000000a: JUMPI
0000000b: PUSH1 0xe0
0000000d: PUSH1 0x02
0000000f: EXP
00000010: PUSH1 0x00
00000012: CALLDATALOAD
00000013: DIV
00000014: PUSH4 0x06fdde03
00000019: DUP2
0000001a: EQ
0000001b: PUSH2 0x00dc
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x095ea7b3
00000025: EQ
00000026: PUSH2 0x0138
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x18160ddd
00000030: EQ
00000031: PUSH2 0x0173
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x23b872dd
0000003b: EQ
0000003c: PUSH2 0x017c
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x313ce567
00000046: EQ
00000047: PUSH2 0x01ae
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x70a08231
00000051: EQ
00000052: PUSH2 0x01ba
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0x79c65068
0000005c: EQ
0000005d: PUSH2 0x01d2
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0x8da5cb5b
00000067: EQ
00000068: PUSH2 0x01f6
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0x95d89b41
00000072: EQ
00000073: PUSH2 0x0208
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0xa9059cbb
0000007d: EQ
0000007e: PUSH2 0x0261
00000081: JUMPI
00000082: DUP1
00000083: PUSH4 0xb414d4b6
00000088: EQ
00000089: PUSH2 0x0290
0000008c: JUMPI
0000008d: DUP1
0000008e: PUSH4 0xdc3080f2
00000093: EQ
00000094: PUSH2 0x02ab
00000097: JUMPI
00000098: DUP1
00000099: PUSH4 0xdd62ed3e
0000009e: EQ
0000009f: PUSH2 0x02d0
000000a2: JUMPI
000000a3: DUP1
000000a4: PUSH4 0xe724529c
000000a9: EQ
000000aa: PUSH2 0x02f5
000000ad: JUMPI
000000ae: DUP1
000000af: PUSH4 0xf2fde38b
000000b4: EQ
000000b5: PUSH2 0x0319
000000b8: JUMPI
000000b9: JUMPDEST
000000ba: PUSH2 0x033a
000000bd: PUSH1 0x00
000000bf: DUP1
000000c0: SLOAD
000000c1: PUSH1 0x01
000000c3: PUSH1 0xa0
000000c5: PUSH1 0x02
000000c7: EXP
000000c8: SUB
000000c9: AND
000000ca: SWAP1
000000cb: CALLVALUE
000000cc: PUSH1 0x60
000000ce: DUP3
000000cf: DUP2
000000d0: DUP2
000000d1: DUP2
000000d2: DUP6
000000d3: DUP9
000000d4: DUP4
000000d5: CALL
000000d6: POP
000000d7: POP
000000d8: POP
000000d9: POP
000000da: POP
000000db: JUMP
000000dc: JUMPDEST
000000dd: PUSH2 0x033c
000000e0: PUSH1 0x01
000000e2: DUP1
000000e3: SLOAD
000000e4: PUSH1 0x20
000000e6: PUSH1 0x02
000000e8: DUP3
000000e9: DUP5
000000ea: AND
000000eb: ISZERO
000000ec: PUSH2 0x0100
000000ef: MUL
000000f0: PUSH1 0x00
000000f2: NOT
000000f3: ADD
000000f4: SWAP1
000000f5: SWAP3
000000f6: AND
000000f7: SWAP2
000000f8: SWAP1
000000f9: SWAP2
000000fa: DIV
000000fb: PUSH1 0x1f
000000fd: DUP2
000000fe: ADD
000000ff: DUP3
00000100: SWAP1
00000101: DIV
00000102: SWAP1
00000103: SWAP2
00000104: MUL
00000105: PUSH1 0x80
00000107: SWAP1
00000108: DUP2
00000109: ADD
0000010a: PUSH1 0x40
0000010c: MSTORE
0000010d: PUSH1 0x60
0000010f: DUP3
00000110: DUP2
00000111: MSTORE
00000112: SWAP3
00000113: SWAP2
00000114: SWAP1
00000115: DUP3
00000116: DUP3
00000117: DUP1
00000118: ISZERO
00000119: PUSH2 0x03f7
0000011c: JUMPI
0000011d: DUP1
0000011e: PUSH1 0x1f
00000120: LT
00000121: PUSH2 0x03cc
00000124: JUMPI
00000125: PUSH2 0x0100
00000128: DUP1
00000129: DUP4
0000012a: SLOAD
0000012b: DIV
0000012c: MUL
0000012d: DUP4
0000012e: MSTORE
0000012f: SWAP2
00000130: PUSH1 0x20
00000132: ADD
00000133: SWAP2
00000134: PUSH2 0x03f7
00000137: JUMP
00000138: JUMPDEST
00000139: CALLER
0000013a: PUSH1 0x01
0000013c: PUSH1 0xa0
0000013e: PUSH1 0x02
00000140: EXP
00000141: SUB
00000142: SWAP1
00000143: DUP2
00000144: AND
00000145: PUSH1 0x00
00000147: SWAP1
00000148: DUP2
00000149: MSTORE
0000014a: PUSH1 0x07
0000014c: PUSH1 0x20
0000014e: SWAP1
0000014f: DUP2
00000150: MSTORE
00000151: PUSH1 0x40
00000153: DUP1
00000154: DUP4
00000155: KECCAK256
00000156: PUSH1 0x04
00000158: CALLDATALOAD
00000159: SWAP1
0000015a: SWAP5
0000015b: AND
0000015c: DUP4
0000015d: MSTORE
0000015e: SWAP3
0000015f: SWAP1
00000160: MSTORE
00000161: SWAP1
00000162: DUP2
00000163: KECCAK256
00000164: PUSH1 0x24
00000166: CALLDATALOAD
00000167: SWAP1
00000168: SSTORE
00000169: JUMPDEST
0000016a: PUSH1 0x60
0000016c: SWAP1
0000016d: DUP2
0000016e: MSTORE
0000016f: PUSH1 0x20
00000171: SWAP1
00000172: RETURN
00000173: JUMPDEST
00000174: PUSH2 0x0169
00000177: PUSH1 0x04
00000179: SLOAD
0000017a: DUP2
0000017b: JUMP
0000017c: JUMPDEST
0000017d: PUSH2 0x0169
00000180: PUSH1 0x04
00000182: CALLDATALOAD
00000183: PUSH1 0x24
00000185: CALLDATALOAD
00000186: PUSH1 0x44
00000188: CALLDATALOAD
00000189: PUSH1 0x01
0000018b: PUSH1 0xa0
0000018d: PUSH1 0x02
0000018f: EXP
00000190: SUB
00000191: DUP4
00000192: AND
00000193: PUSH1 0x00
00000195: SWAP1
00000196: DUP2
00000197: MSTORE
00000198: PUSH1 0x05
0000019a: PUSH1 0x20
0000019c: MSTORE
0000019d: PUSH1 0x40
0000019f: DUP2
000001a0: KECCAK256
000001a1: SLOAD
000001a2: DUP3
000001a3: SWAP1
000001a4: LT
000001a5: ISZERO
000001a6: PUSH2 0x05a5
000001a9: JUMPI
000001aa: PUSH2 0x0002
000001ad: JUMP
000001ae: JUMPDEST
000001af: PUSH2 0x0169
000001b2: PUSH1 0x03
000001b4: SLOAD
000001b5: PUSH1 0xff
000001b7: AND
000001b8: DUP2
000001b9: JUMP
000001ba: JUMPDEST
000001bb: PUSH2 0x0169
000001be: PUSH1 0x04
000001c0: CALLDATALOAD
000001c1: PUSH1 0x05
000001c3: PUSH1 0x20
000001c5: MSTORE
000001c6: PUSH1 0x00
000001c8: SWAP1
000001c9: DUP2
000001ca: MSTORE
000001cb: PUSH1 0x40
000001cd: SWAP1
000001ce: KECCAK256
000001cf: SLOAD
000001d0: DUP2
000001d1: JUMP
000001d2: JUMPDEST
000001d3: PUSH2 0x033a
000001d6: PUSH1 0x04
000001d8: CALLDATALOAD
000001d9: PUSH1 0x24
000001db: CALLDATALOAD
000001dc: PUSH1 0x00
000001de: SLOAD
000001df: CALLER
000001e0: PUSH1 0x01
000001e2: PUSH1 0xa0
000001e4: PUSH1 0x02
000001e6: EXP
000001e7: SUB
000001e8: SWAP1
000001e9: DUP2
000001ea: AND
000001eb: SWAP2
000001ec: AND
000001ed: EQ
000001ee: PUSH2 0x04f4
000001f1: JUMPI
000001f2: PUSH2 0x0002
000001f5: JUMP
000001f6: JUMPDEST
000001f7: PUSH2 0x0169
000001fa: PUSH1 0x00
000001fc: SLOAD
000001fd: PUSH1 0x01
000001ff: PUSH1 0xa0
00000201: PUSH1 0x02
00000203: EXP
00000204: SUB
00000205: AND
00000206: DUP2
00000207: JUMP
00000208: JUMPDEST
00000209: PUSH2 0x033c
0000020c: PUSH1 0x02
0000020e: DUP1
0000020f: SLOAD
00000210: PUSH1 0x20
00000212: PUSH1 0x1f
00000214: PUSH1 0x00
00000216: NOT
00000217: PUSH1 0x01
00000219: DUP5
0000021a: AND
0000021b: ISZERO
0000021c: PUSH2 0x0100
0000021f: MUL
00000220: ADD
00000221: SWAP1
00000222: SWAP3
00000223: AND
00000224: DUP4
00000225: SWAP1
00000226: DIV
00000227: SWAP2
00000228: DUP3
00000229: ADD
0000022a: DUP2
0000022b: SWAP1
0000022c: DIV
0000022d: MUL
0000022e: PUSH1 0x80
00000230: SWAP1
00000231: DUP2
00000232: ADD
00000233: PUSH1 0x40
00000235: MSTORE
00000236: PUSH1 0x60
00000238: DUP3
00000239: DUP2
0000023a: MSTORE
0000023b: SWAP3
0000023c: SWAP2
0000023d: SWAP1
0000023e: DUP3
0000023f: DUP3
00000240: DUP1
00000241: ISZERO
00000242: PUSH2 0x03f7
00000245: JUMPI
00000246: DUP1
00000247: PUSH1 0x1f
00000249: LT
0000024a: PUSH2 0x03cc
0000024d: JUMPI
0000024e: PUSH2 0x0100
00000251: DUP1
00000252: DUP4
00000253: SLOAD
00000254: DIV
00000255: MUL
00000256: DUP4
00000257: MSTORE
00000258: SWAP2
00000259: PUSH1 0x20
0000025b: ADD
0000025c: SWAP2
0000025d: PUSH2 0x03f7
00000260: JUMP
00000261: JUMPDEST
00000262: PUSH2 0x033a
00000265: PUSH1 0x04
00000267: CALLDATALOAD
00000268: PUSH1 0x24
0000026a: CALLDATALOAD
0000026b: CALLER
0000026c: PUSH1 0x01
0000026e: PUSH1 0xa0
00000270: PUSH1 0x02
00000272: EXP
00000273: SUB
00000274: AND
00000275: PUSH1 0x00
00000277: SWAP1
00000278: DUP2
00000279: MSTORE
0000027a: PUSH1 0x05
0000027c: PUSH1 0x20
0000027e: MSTORE
0000027f: PUSH1 0x40
00000281: SWAP1
00000282: KECCAK256
00000283: SLOAD
00000284: DUP2
00000285: SWAP1
00000286: LT
00000287: ISZERO
00000288: PUSH2 0x03ff
0000028b: JUMPI
0000028c: PUSH2 0x0002
0000028f: JUMP
00000290: JUMPDEST
00000291: PUSH2 0x0169
00000294: PUSH1 0x04
00000296: CALLDATALOAD
00000297: PUSH1 0x06
00000299: PUSH1 0x20
0000029b: MSTORE
0000029c: PUSH1 0x00
0000029e: SWAP1
0000029f: DUP2
000002a0: MSTORE
000002a1: PUSH1 0x40
000002a3: SWAP1
000002a4: KECCAK256
000002a5: SLOAD
000002a6: PUSH1 0xff
000002a8: AND
000002a9: DUP2
000002aa: JUMP
000002ab: JUMPDEST
000002ac: PUSH1 0x08
000002ae: PUSH1 0x20
000002b0: SWAP1
000002b1: DUP2
000002b2: MSTORE
000002b3: PUSH1 0x04
000002b5: CALLDATALOAD
000002b6: PUSH1 0x00
000002b8: SWAP1
000002b9: DUP2
000002ba: MSTORE
000002bb: PUSH1 0x40
000002bd: DUP1
000002be: DUP3
000002bf: KECCAK256
000002c0: SWAP1
000002c1: SWAP3
000002c2: MSTORE
000002c3: PUSH1 0x24
000002c5: CALLDATALOAD
000002c6: DUP2
000002c7: MSTORE
000002c8: KECCAK256
000002c9: SLOAD
000002ca: PUSH2 0x0169
000002cd: SWAP1
000002ce: DUP2
000002cf: JUMP
000002d0: JUMPDEST
000002d1: PUSH1 0x07
000002d3: PUSH1 0x20
000002d5: SWAP1
000002d6: DUP2
000002d7: MSTORE
000002d8: PUSH1 0x04
000002da: CALLDATALOAD
000002db: PUSH1 0x00
000002dd: SWAP1
000002de: DUP2
000002df: MSTORE
000002e0: PUSH1 0x40
000002e2: DUP1
000002e3: DUP3
000002e4: KECCAK256
000002e5: SWAP1
000002e6: SWAP3
000002e7: MSTORE
000002e8: PUSH1 0x24
000002ea: CALLDATALOAD
000002eb: DUP2
000002ec: MSTORE
000002ed: KECCAK256
000002ee: SLOAD
000002ef: PUSH2 0x0169
000002f2: SWAP1
000002f3: DUP2
000002f4: JUMP
000002f5: JUMPDEST
000002f6: PUSH2 0x033a
000002f9: PUSH1 0x04
000002fb: CALLDATALOAD
000002fc: PUSH1 0x24
000002fe: CALLDATALOAD
000002ff: PUSH1 0x00
00000301: SLOAD
00000302: CALLER
00000303: PUSH1 0x01
00000305: PUSH1 0xa0
00000307: PUSH1 0x02
00000309: EXP
0000030a: SUB
0000030b: SWAP1
0000030c: DUP2
0000030d: AND
0000030e: SWAP2
0000030f: AND
00000310: EQ
00000311: PUSH2 0x0550
00000314: JUMPI
00000315: PUSH2 0x0002
00000318: JUMP
00000319: JUMPDEST
0000031a: PUSH2 0x033a
0000031d: PUSH1 0x04
0000031f: CALLDATALOAD
00000320: PUSH1 0x00
00000322: SLOAD
00000323: CALLER
00000324: PUSH1 0x01
00000326: PUSH1 0xa0
00000328: PUSH1 0x02
0000032a: EXP
0000032b: SUB
0000032c: SWAP1
0000032d: DUP2
0000032e: AND
0000032f: SWAP2
00000330: AND
00000331: EQ
00000332: PUSH2 0x03aa
00000335: JUMPI
00000336: PUSH2 0x0002
00000339: JUMP
0000033a: JUMPDEST
0000033b: STOP
0000033c: JUMPDEST
0000033d: PUSH1 0x40
0000033f: MLOAD
00000340: DUP1
00000341: DUP1
00000342: PUSH1 0x20
00000344: ADD
00000345: DUP3
00000346: DUP2
00000347: SUB
00000348: DUP3
00000349: MSTORE
0000034a: DUP4
0000034b: DUP2
0000034c: DUP2
0000034d: MLOAD
0000034e: DUP2
0000034f: MSTORE
00000350: PUSH1 0x20
00000352: ADD
00000353: SWAP2
00000354: POP
00000355: DUP1
00000356: MLOAD
00000357: SWAP1
00000358: PUSH1 0x20
0000035a: ADD
0000035b: SWAP1
0000035c: DUP1
0000035d: DUP4
0000035e: DUP4
0000035f: DUP3
00000360: SWAP1
00000361: PUSH1 0x00
00000363: PUSH1 0x04
00000365: PUSH1 0x20
00000367: DUP5
00000368: PUSH1 0x1f
0000036a: ADD
0000036b: DIV
0000036c: PUSH1 0x0f
0000036e: MUL
0000036f: PUSH1 0x03
00000371: ADD
00000372: CALL
00000373: POP
00000374: SWAP1
00000375: POP
00000376: SWAP1
00000377: DUP2
00000378: ADD
00000379: SWAP1
0000037a: PUSH1 0x1f
0000037c: AND
0000037d: DUP1
0000037e: ISZERO
0000037f: PUSH2 0x039c
00000382: JUMPI
00000383: DUP1
00000384: DUP3
00000385: SUB
00000386: DUP1
00000387: MLOAD
00000388: PUSH1 0x01
0000038a: DUP4
0000038b: PUSH1 0x20
0000038d: SUB
0000038e: PUSH2 0x0100
00000391: EXP
00000392: SUB
00000393: NOT
00000394: AND
00000395: DUP2
00000396: MSTORE
00000397: PUSH1 0x20
00000399: ADD
0000039a: SWAP2
0000039b: POP
0000039c: JUMPDEST
0000039d: POP
0000039e: SWAP3
0000039f: POP
000003a0: POP
000003a1: POP
000003a2: PUSH1 0x40
000003a4: MLOAD
000003a5: DUP1
000003a6: SWAP2
000003a7: SUB
000003a8: SWAP1
000003a9: RETURN
000003aa: JUMPDEST
000003ab: PUSH1 0x00
000003ad: DUP1
000003ae: SLOAD
000003af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003c4: NOT
000003c5: AND
000003c6: DUP3
000003c7: OR
000003c8: SWAP1
000003c9: SSTORE
000003ca: POP
000003cb: JUMP
000003cc: JUMPDEST
000003cd: DUP3
000003ce: ADD
000003cf: SWAP2
000003d0: SWAP1
000003d1: PUSH1 0x00
000003d3: MSTORE
000003d4: PUSH1 0x20
000003d6: PUSH1 0x00
000003d8: KECCAK256
000003d9: SWAP1
000003da: JUMPDEST
000003db: DUP2
000003dc: SLOAD
000003dd: DUP2
000003de: MSTORE
000003df: SWAP1
000003e0: PUSH1 0x01
000003e2: ADD
000003e3: SWAP1
000003e4: PUSH1 0x20
000003e6: ADD
000003e7: DUP1
000003e8: DUP4
000003e9: GT
000003ea: PUSH2 0x03da
000003ed: JUMPI
000003ee: DUP3
000003ef: SWAP1
000003f0: SUB
000003f1: PUSH1 0x1f
000003f3: AND
000003f4: DUP3
000003f5: ADD
000003f6: SWAP2
000003f7: JUMPDEST
000003f8: POP
000003f9: POP
000003fa: POP
000003fb: POP
000003fc: POP
000003fd: DUP2
000003fe: JUMP
000003ff: JUMPDEST
00000400: PUSH1 0x01
00000402: PUSH1 0xa0
00000404: PUSH1 0x02
00000406: EXP
00000407: SUB
00000408: DUP3
00000409: AND
0000040a: PUSH1 0x00
0000040c: SWAP1
0000040d: DUP2
0000040e: MSTORE
0000040f: PUSH1 0x40
00000411: SWAP1
00000412: KECCAK256
00000413: SLOAD
00000414: DUP1
00000415: DUP3
00000416: ADD
00000417: LT
00000418: ISZERO
00000419: PUSH2 0x0421
0000041c: JUMPI
0000041d: PUSH2 0x0002
00000420: JUMP
00000421: JUMPDEST
00000422: CALLER
00000423: PUSH1 0x01
00000425: PUSH1 0xa0
00000427: PUSH1 0x02
00000429: EXP
0000042a: SUB
0000042b: AND
0000042c: PUSH1 0x00
0000042e: SWAP1
0000042f: DUP2
00000430: MSTORE
00000431: PUSH1 0x06
00000433: PUSH1 0x20
00000435: MSTORE
00000436: PUSH1 0x40
00000438: SWAP1
00000439: KECCAK256
0000043a: SLOAD
0000043b: PUSH1 0xff
0000043d: AND
0000043e: ISZERO
0000043f: PUSH2 0x0447
00000442: JUMPI
00000443: PUSH2 0x0002
00000446: JUMP
00000447: JUMPDEST
00000448: DUP1
00000449: PUSH1 0x05
0000044b: PUSH1 0x00
0000044d: POP
0000044e: PUSH1 0x00
00000450: CALLER
00000451: PUSH1 0x01
00000453: PUSH1 0xa0
00000455: PUSH1 0x02
00000457: EXP
00000458: SUB
00000459: AND
0000045a: DUP2
0000045b: MSTORE
0000045c: PUSH1 0x20
0000045e: ADD
0000045f: SWAP1
00000460: DUP2
00000461: MSTORE
00000462: PUSH1 0x20
00000464: ADD
00000465: PUSH1 0x00
00000467: KECCAK256
00000468: PUSH1 0x00
0000046a: DUP3
0000046b: DUP3
0000046c: DUP3
0000046d: POP
0000046e: SLOAD
0000046f: SUB
00000470: SWAP3
00000471: POP
00000472: POP
00000473: DUP2
00000474: SWAP1
00000475: SSTORE
00000476: POP
00000477: DUP1
00000478: PUSH1 0x05
0000047a: PUSH1 0x00
0000047c: POP
0000047d: PUSH1 0x00
0000047f: DUP5
00000480: PUSH1 0x01
00000482: PUSH1 0xa0
00000484: PUSH1 0x02
00000486: EXP
00000487: SUB
00000488: AND
00000489: DUP2
0000048a: MSTORE
0000048b: PUSH1 0x20
0000048d: ADD
0000048e: SWAP1
0000048f: DUP2
00000490: MSTORE
00000491: PUSH1 0x20
00000493: ADD
00000494: PUSH1 0x00
00000496: KECCAK256
00000497: PUSH1 0x00
00000499: DUP3
0000049a: DUP3
0000049b: DUP3
0000049c: POP
0000049d: SLOAD
0000049e: ADD
0000049f: SWAP3
000004a0: POP
000004a1: POP
000004a2: DUP2
000004a3: SWAP1
000004a4: SSTORE
000004a5: POP
000004a6: DUP2
000004a7: PUSH1 0x01
000004a9: PUSH1 0xa0
000004ab: PUSH1 0x02
000004ad: EXP
000004ae: SUB
000004af: AND
000004b0: CALLER
000004b1: PUSH1 0x01
000004b3: PUSH1 0xa0
000004b5: PUSH1 0x02
000004b7: EXP
000004b8: SUB
000004b9: AND
000004ba: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000004db: DUP4
000004dc: PUSH1 0x40
000004de: MLOAD
000004df: DUP1
000004e0: DUP3
000004e1: DUP2
000004e2: MSTORE
000004e3: PUSH1 0x20
000004e5: ADD
000004e6: SWAP2
000004e7: POP
000004e8: POP
000004e9: PUSH1 0x40
000004eb: MLOAD
000004ec: DUP1
000004ed: SWAP2
000004ee: SUB
000004ef: SWAP1
000004f0: LOG3
000004f1: POP
000004f2: POP
000004f3: JUMP
000004f4: JUMPDEST
000004f5: PUSH1 0x01
000004f7: PUSH1 0xa0
000004f9: PUSH1 0x02
000004fb: EXP
000004fc: SUB
000004fd: DUP3
000004fe: DUP2
000004ff: AND
00000500: PUSH1 0x00
00000502: DUP2
00000503: DUP2
00000504: MSTORE
00000505: PUSH1 0x05
00000507: PUSH1 0x20
00000509: SWAP1
0000050a: DUP2
0000050b: MSTORE
0000050c: PUSH1 0x40
0000050e: DUP3
0000050f: KECCAK256
00000510: DUP1
00000511: SLOAD
00000512: DUP7
00000513: ADD
00000514: SWAP1
00000515: SSTORE
00000516: PUSH1 0x04
00000518: DUP1
00000519: SLOAD
0000051a: DUP7
0000051b: ADD
0000051c: SWAP1
0000051d: SSTORE
0000051e: SWAP1
0000051f: SLOAD
00000520: PUSH1 0x60
00000522: DUP6
00000523: DUP2
00000524: MSTORE
00000525: SWAP3
00000526: SWAP4
00000527: AND
00000528: SWAP2
00000529: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000054a: SWAP2
0000054b: SWAP1
0000054c: LOG3
0000054d: POP
0000054e: POP
0000054f: JUMP
00000550: JUMPDEST
00000551: PUSH1 0x01
00000553: PUSH1 0xa0
00000555: PUSH1 0x02
00000557: EXP
00000558: SUB
00000559: DUP3
0000055a: AND
0000055b: PUSH1 0x00
0000055d: DUP2
0000055e: DUP2
0000055f: MSTORE
00000560: PUSH1 0x06
00000562: PUSH1 0x20
00000564: MSTORE
00000565: PUSH1 0x40
00000567: SWAP1
00000568: DUP2
00000569: SWAP1
0000056a: KECCAK256
0000056b: DUP1
0000056c: SLOAD
0000056d: PUSH1 0xff
0000056f: NOT
00000570: AND
00000571: DUP5
00000572: OR
00000573: SWAP1
00000574: SSTORE
00000575: PUSH1 0x60
00000577: SWAP2
00000578: DUP3
00000579: MSTORE
0000057a: PUSH1 0x80
0000057c: DUP4
0000057d: SWAP1
0000057e: MSTORE
0000057f: PUSH32 0x48335238b4855f35377ed80f164e8c6f3c366e54ac00b96a6402d4a9814a03a5
000005a0: SWAP2
000005a1: LOG1
000005a2: POP
000005a3: POP
000005a4: JUMP
000005a5: JUMPDEST
000005a6: PUSH1 0x01
000005a8: PUSH1 0xa0
000005aa: PUSH1 0x02
000005ac: EXP
000005ad: SUB
000005ae: DUP4
000005af: AND
000005b0: DUP2
000005b1: MSTORE
000005b2: PUSH1 0x40
000005b4: DUP2
000005b5: KECCAK256
000005b6: SLOAD
000005b7: DUP3
000005b8: DUP2
000005b9: ADD
000005ba: LT
000005bb: ISZERO
000005bc: PUSH2 0x05c4
000005bf: JUMPI
000005c0: PUSH2 0x0002
000005c3: JUMP
000005c4: JUMPDEST
000005c5: PUSH1 0x01
000005c7: PUSH1 0xa0
000005c9: PUSH1 0x02
000005cb: EXP
000005cc: SUB
000005cd: DUP5
000005ce: AND
000005cf: DUP2
000005d0: MSTORE
000005d1: PUSH1 0x06
000005d3: PUSH1 0x20
000005d5: MSTORE
000005d6: PUSH1 0x40
000005d8: DUP2
000005d9: KECCAK256
000005da: SLOAD
000005db: PUSH1 0xff
000005dd: AND
000005de: ISZERO
000005df: PUSH2 0x05e7
000005e2: JUMPI
000005e3: PUSH2 0x0002
000005e6: JUMP
000005e7: JUMPDEST
000005e8: PUSH1 0x07
000005ea: PUSH1 0x20
000005ec: SWAP1
000005ed: DUP2
000005ee: MSTORE
000005ef: PUSH1 0x40
000005f1: DUP1
000005f2: DUP4
000005f3: KECCAK256
000005f4: CALLER
000005f5: PUSH1 0x01
000005f7: PUSH1 0xa0
000005f9: PUSH1 0x02
000005fb: EXP
000005fc: SUB
000005fd: SWAP1
000005fe: DUP2
000005ff: AND
00000600: DUP1
00000601: DUP7
00000602: MSTORE
00000603: SWAP2
00000604: DUP5
00000605: MSTORE
00000606: DUP3
00000607: DUP6
00000608: KECCAK256
00000609: SLOAD
0000060a: SWAP1
0000060b: DUP9
0000060c: AND
0000060d: DUP6
0000060e: MSTORE
0000060f: PUSH1 0x08
00000611: DUP5
00000612: MSTORE
00000613: DUP3
00000614: DUP6
00000615: KECCAK256
00000616: SWAP2
00000617: DUP6
00000618: MSTORE
00000619: SWAP3
0000061a: MSTORE
0000061b: DUP3
0000061c: KECCAK256
0000061d: SLOAD
0000061e: DUP4
0000061f: ADD
00000620: GT
00000621: ISZERO
00000622: PUSH2 0x062a
00000625: JUMPI
00000626: PUSH2 0x0002
00000629: JUMP
0000062a: JUMPDEST
0000062b: DUP2
0000062c: PUSH1 0x05
0000062e: PUSH1 0x00
00000630: POP
00000631: PUSH1 0x00
00000633: DUP7
00000634: PUSH1 0x01
00000636: PUSH1 0xa0
00000638: PUSH1 0x02
0000063a: EXP
0000063b: SUB
0000063c: AND
0000063d: DUP2
0000063e: MSTORE
0000063f: PUSH1 0x20
00000641: ADD
00000642: SWAP1
00000643: DUP2
00000644: MSTORE
00000645: PUSH1 0x20
00000647: ADD
00000648: PUSH1 0x00
0000064a: KECCAK256
0000064b: PUSH1 0x00
0000064d: DUP3
0000064e: DUP3
0000064f: DUP3
00000650: POP
00000651: SLOAD
00000652: SUB
00000653: SWAP3
00000654: POP
00000655: POP
00000656: DUP2
00000657: SWAP1
00000658: SSTORE
00000659: POP
0000065a: DUP2
0000065b: PUSH1 0x05
0000065d: PUSH1 0x00
0000065f: POP
00000660: PUSH1 0x00
00000662: DUP6
00000663: PUSH1 0x01
00000665: PUSH1 0xa0
00000667: PUSH1 0x02
00000669: EXP
0000066a: SUB
0000066b: AND
0000066c: DUP2
0000066d: MSTORE
0000066e: PUSH1 0x20
00000670: ADD
00000671: SWAP1
00000672: DUP2
00000673: MSTORE
00000674: PUSH1 0x20
00000676: ADD
00000677: PUSH1 0x00
00000679: KECCAK256
0000067a: PUSH1 0x00
0000067c: DUP3
0000067d: DUP3
0000067e: DUP3
0000067f: POP
00000680: SLOAD
00000681: ADD
00000682: SWAP3
00000683: POP
00000684: POP
00000685: DUP2
00000686: SWAP1
00000687: SSTORE
00000688: POP
00000689: DUP2
0000068a: PUSH1 0x08
0000068c: PUSH1 0x00
0000068e: POP
0000068f: PUSH1 0x00
00000691: DUP7
00000692: PUSH1 0x01
00000694: PUSH1 0xa0
00000696: PUSH1 0x02
00000698: EXP
00000699: SUB
0000069a: AND
0000069b: DUP2
0000069c: MSTORE
0000069d: PUSH1 0x20
0000069f: ADD
000006a0: SWAP1
000006a1: DUP2
000006a2: MSTORE
000006a3: PUSH1 0x20
000006a5: ADD
000006a6: PUSH1 0x00
000006a8: KECCAK256
000006a9: PUSH1 0x00
000006ab: POP
000006ac: PUSH1 0x00
000006ae: CALLER
000006af: PUSH1 0x01
000006b1: PUSH1 0xa0
000006b3: PUSH1 0x02
000006b5: EXP
000006b6: SUB
000006b7: AND
000006b8: DUP2
000006b9: MSTORE
000006ba: PUSH1 0x20
000006bc: ADD
000006bd: SWAP1
000006be: DUP2
000006bf: MSTORE
000006c0: PUSH1 0x20
000006c2: ADD
000006c3: PUSH1 0x00
000006c5: KECCAK256
000006c6: PUSH1 0x00
000006c8: DUP3
000006c9: DUP3
000006ca: DUP3
000006cb: POP
000006cc: SLOAD
000006cd: ADD
000006ce: SWAP3
000006cf: POP
000006d0: POP
000006d1: DUP2
000006d2: SWAP1
000006d3: SSTORE
000006d4: POP
000006d5: DUP3
000006d6: PUSH1 0x01
000006d8: PUSH1 0xa0
000006da: PUSH1 0x02
000006dc: EXP
000006dd: SUB
000006de: AND
000006df: CALLER
000006e0: PUSH1 0x01
000006e2: PUSH1 0xa0
000006e4: PUSH1 0x02
000006e6: EXP
000006e7: SUB
000006e8: AND
000006e9: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
0000070a: DUP5
0000070b: PUSH1 0x40
0000070d: MLOAD
0000070e: DUP1
0000070f: DUP3
00000710: DUP2
00000711: MSTORE
00000712: PUSH1 0x20
00000714: ADD
00000715: SWAP2
00000716: POP
00000717: POP
00000718: PUSH1 0x40
0000071a: MLOAD
0000071b: DUP1
0000071c: SWAP2
0000071d: SUB
0000071e: SWAP1
0000071f: LOG3
00000720: SWAP4
00000721: SWAP3
00000722: POP
00000723: POP
00000724: POP
00000725: JUMP
View stderr
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6
call_targets: 0x0000000000000000000000000000000000000004, 0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x095ea7b3",
            "selector": "0x095ea7b3",
            "calldata_variants": [
                "0x095ea7b3",
                "0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x79c65068",
            "selector": "0x79c65068",
            "calldata_variants": [
                "0x79c65068",
                "0x79c650680000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 213,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 882,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 2,
    "guards_detected": [],
    "untrusted_call_count": 2
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6
call_targets: 0x0000000000000000000000000000000000000004, 0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x5aeb52f09a97e96bf9053d8417c2845aae4a2de087b76cb013a54e0575a2b5f6",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x41a7820c86f4bea29e6c9239aeb0fbdba12dd790"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x095ea7b3",
            "selector": "0x095ea7b3",
            "calldata_variants": [
                "0x095ea7b3",
                "0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18160ddd",
            "selector": "0x18160ddd",
            "calldata_variants": [
                "0x18160ddd",
                "0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x79c65068",
            "selector": "0x79c65068",
            "calldata_variants": [
                "0x79c65068",
                "0x79c650680000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8da5cb5b",
            "selector": "0x8da5cb5b",
            "calldata_variants": [
                "0x8da5cb5b",
                "0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 213,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 882,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 2,
    "guards_detected": []
}
high access_control codex Owner-only mint can arbitrarily inflate supply 85 no
view
evidence_json
{
    "evidence": "Selector 0x79c65068 enters at pc 0x1d2. It checks CALLER against slot 0 ownership at pc 0x1f1, then jumps to pc 0x4f4, where slot 5 (balances) is increased and slot 4 (total supply) is increased before emitting a Transfer event from the zero address. BYTECODE_BUNDLE also shows owner() at selector 0x8da5cb5b reading slot 0.",
    "locations": [
        "selector:0x79c65068",
        "selector:0x8da5cb5b",
        "pc:0x1f1",
        "pc:0x4f4"
    ],
    "recommendation": "If unlimited minting is not intended, remove this path entirely or hard-cap supply in bytecode. If minting is intended, gate it behind stronger governance/timelock controls and make the privilege explicit to integrators and holders.",
    "exploit_scenario": "Best-effort selector inference from bytecode: selector 0x79c65068 behaves like an owner-only mint(address,uint256). Whoever controls slot 0 can mint arbitrary balances to themselves or an accomplice, then dump the new supply against holders. This is a direct accounting/inflation risk, not just an admin convenience."
}
high access_control codex Owner can freeze arbitrary senders via a hidden boolean mapping 85 no
view
evidence_json
{
    "evidence": "Selector 0xe724529c checks slot 0 ownership at pc 0x311 and writes a byte into slot 6 at pc 0x550. transfer(selector 0xa9059cbb) checks slot6[msg.sender] == 0 at pc 0x421-0x447. transferFrom(selector 0x23b872dd) checks slot6[from] == 0 at pc 0x5c4-0x5e7. Selector 0xb414d4b6 reads the same slot-6 mapping, consistent with a public status getter.",
    "locations": [
        "selector:0xe724529c",
        "selector:0xa9059cbb",
        "selector:0x23b872dd",
        "selector:0xb414d4b6",
        "pc:0x311",
        "pc:0x550",
        "pc:0x421",
        "pc:0x5c4"
    ],
    "recommendation": "Remove sender-freeze logic unless it is an explicit, disclosed requirement. If a compliance blacklist is required, place it behind transparent governance, emit standard indexed events, and document that transfers can be blocked.",
    "exploit_scenario": "Best-effort selector inference: selector 0xe724529c is an owner-only setter for a boolean mapping in slot 6, and both transfer paths reject when that flag is set. An owner can let users buy/receive tokens and later freeze them so they cannot transfer or sell."
}
medium other codex allowance() does not track remaining spend; transferFrom uses a separate spent-amount mapping 75 no
view
evidence_json
{
    "evidence": "approve(selector 0x095ea7b3) writes the user-supplied amount into slot 7 at pc 0x138. allowance(selector 0xdd62ed3e) reads raw slot 7 at pc 0x2d0. transferFrom(selector 0x23b872dd) validates amount using slot7[from][spender] and slot8[from][spender] at pc 0x5e7-0x62a, then increments slot 8 at pc 0x689-0x6d3. It never decrements slot 7, so the public allowance view does not appear to return remaining allowance.",
    "locations": [
        "selector:0x095ea7b3",
        "selector:0xdd62ed3e",
        "selector:0x23b872dd",
        "pc:0x138",
        "pc:0x2d0",
        "pc:0x5e7",
        "pc:0x689"
    ],
    "recommendation": "Use standard ERC20 allowance accounting: either decrement the allowance mapping on each transferFrom, or have allowance() return approved minus spent and reset spent state when approve changes the allowance. Also emit a standard Approval event on approve/consumption if compatibility matters.",
    "exploit_scenario": "The contract appears to store approved amount in one mapping and cumulative spent amount in another. After partial spending, allowance() still returns the original approved value instead of the remaining allowance. Integrations that trust allowance() can submit transferFrom calls that revert unexpectedly, causing operational DoS or stuck flows."
}