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

Analysis Run

1a24ef76-b3fa-419d-9583-62d57d946e47

complete
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 4:23 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30327 report.consolidate complete 1 / 1 3 months ago
74146 artifact.fetch complete 1 / 3 1 week ago
74147 tool.cast_disasm complete 1 / 3 1 week ago
74148 analysis.bundle complete 1 / 3 1 week ago
74149 capability.graph complete 1 / 3 1 week ago
74150 detector.run complete 1 / 3 1 week ago
74151 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
1
No findings?
no
Summary
Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.
View stderr
[codex:1400082] OpenAI Codex v0.77.0 (research preview)
[codex:1400082] --------
[codex:1400082] workdir: /tmp/codex-multi-7e2sjpps
[codex:1400082] model: gpt-5.2-codex
[codex:1400082] provider: openai
[codex:1400082] approval: never
[codex:1400082] sandbox: read-only
[codex:1400082] reasoning effort: xhigh
[codex:1400082] reasoning summaries: auto
[codex:1400082] session id: 019b65bf-44aa-7020-88c0-622876b11dd6
[codex:1400082] --------
[codex:1400082] user
[codex:1400082] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1400082] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1400082] 
[codex:1400082] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1400082] 
[codex:1400082] Output MUST be valid JSON matching the provided schema.
[codex:1400082] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1400082] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1400082] 
[codex:1400082] Output constraints (IMPORTANT):
[codex:1400082] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1400082] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1400082] mcp startup: no servers
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Deciding how to read BYTECODE_BUNDLE**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-7e2sjpps succeeded in 5ms:
[codex:1400082] Runtime bytecode bundle for best-effort auditing.
[codex:1400082] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1400082] 
[codex:1400082] FILE: runtime_bytecode.hex
[codex:1400082] 0x73c54b77b28ee4d18cd3d93991f08b79bc85c71097331415610769575f3560e01c4214156119aa57600480355f1a565b610100565b61018f565b61022c565b6102ae565b611378565b61143f565b611506565b6115c0565b6117e6565b611802565b611854565b61187f565b61033e565b6103d0565b6118e4565b611945565b61167a565b611709565b610a74565b610db6565b610822565b611170565b611292565b6104a5565b61057b565b61069a565b610ee1565b611024565b806001013560f01c5f5f825f85600301358060081b60e01c905f1a1b866008013560601c8388601c015f375af1156119ae57601c010180361181355f1a570000000000005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d81601a013560601c60015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c805f5d81601a013560601c60025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c60015d82602e013560601c60025d826045013560e81c836042013560e81c7f3c8a7d8d000000000000000000000000000000000000000000000000000000005f523060045260245260445260645260a06084525f60a4525f60c45f5f5f945af1156119ae5760480180361181355f1a57005b806001013560601c81601d013560e81c82601a013560e81c8284601501358060081b60e01c905f1a1b83837fa34123a7000000000000000000000000000000000000000000000000000000005f526004526024526044525f60645f5f5f945af1156119ae577f4f1eb3d8000000000000000000000000000000000000000000000000000000005f52306004526024526044526fffffffffffffffffffffffffffffffff6064526fffffffffffffffffffffffffffffffff6084525f60a45f5f5f945af1156119ae5760200180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a6401000276ad73fffd8963efd1fc6a506488495d951d5263988d258261052c57905061052e565b505b91907fc31b8d7a000000000000000000000000000000000000000000000000000000005f52306004526024526044526064525f60845f5f5f945af1156119ae57602f0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a61063c5782602f01358060081b60e01c905f1a1b7fe67ce706000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b82602f01358060081b60e01c905f1a1b907f8dae7333000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b806001013560601c81601a013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577fbd6015b4000000000000000000000000000000000000000000000000000000007fdd93f59a0000000000000000000000000000000000000000000000000000000083602e01355f1a610746579050610748565b505b5f52306004525f60245f5f5f945af1156119ae57602f0180361181355f1a57005b7360744434d6339a6b27d73d9eda62b6f66a0a04fa331461092a575f5c803314156119ba57600435805f12156107d75760015c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575f5b50602435805f12156108205760025c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575b005b736b175474e89094c44da98b954eedeac495271d0f6a52b7d2dcc80cd2e40000007360744434d6339a6b27d73d9eda62b6f66a0a04fa7f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae57806001013560f01c80827f5cffe9de000000000000000000000000000000000000000000000000000000005f5230600452736b175474e89094c44da98b954eedeac495271d0f6024526a52b7d2dcc80cd2e4000000604452608060645281908160845260030160a43760a4015f5f915f5f7360744434d6339a6b27d73d9eda62b6f66a0a04fa5af1156119ae576003010180361181355f1a57005b3060043514156119ba576a52b7d2dcc80cd2e4000000736b175474e89094c44da98b954eedeac495271d0f80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760c4355f1a15610c625760ca358060081b60e01c905f1a1b60cf3560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760fc80355f1a565b60c5358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e3358060081b60e01c905f1a1b60e83560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e33560601c8073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610dad5760de358060081b60e01c905f1a1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82736b175474e89094c44da98b954eedeac495271d0f14610d59579050610d5b565b505b907f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae575f5b5060f780355f1a565b60c5358060081b60e01c905f1a1b60ca3560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b80600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5780600601358060081b60e01c905f1a1b81600b013560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601f0180361181355f1a57005b80600101358060081b60e01c905f1a1b816006013560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601a0180361181355f1a57005b80602101358060081b60e01c905f1a1b81603a013560601c826026013560601c8360010135818473ba12222222228d8ba445958a75a0704d566bf2c87f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f52bbbe29000000000000000000000000000000000000000000000000000000005f5260e0600452306024525f604452306064525f6084525f60a4527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60c45260e4525f6101045261012452610144526101645260c0610184525f6101a4525f5f6101c45f5f73ba12222222228d8ba445958a75a0704d566bf2c85af1156119ae57604e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01803560011a90355f1a7f3df02124000000000000000000000000000000000000000000000000000000007f5b41b9080000000000000000000000000000000000000000000000000000000086603001355f1a61134c57905061134e565b505b5f526004526024526044525f6064525f60845f5f5f945af1156119ae5760310180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b80601501358060081b60e01c905f1a1b816001013560601c82601a013560601c7fb6f9de95000000000000000000000000000000000000000000000000000000005f525f60045260806024523060445242606452600260845273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a45260c45260e45f5f935f935af1156119ae57602e0180361181355f1a57005b80602e01358060081b60e01c905f1a1b816001013560601c82601a013560601c83601501358060081b60e01c905f1a1b8181847f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f791ac947000000000000000000000000000000000000000000000000000000005f526004525f60245260a06044523060645242608452600260a45260c45273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260e4526101045f5f935f935af1156119ae5760330180361181355f1a57005b47325f5f5f935f935af1156119ae5760010180361181355f1a57005b806001013560601c8160150135327fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5760350180361181355f1a57005b80600101358060081b60e01c905f1a1b415f5f5f935f935af1156119ae5760060180361181355f1a57005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2307f70a08231000000000000000000000000000000000000000000000000000000005f526004525f60245f5f6020945af1156119ae575f518082600101358060081b60e01c905f1a1b116119b357005b7fd0e30db0000000000000000000000000000000000000000000000000000000005f525f5f60045f84600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b7f2e1a7d4d000000000000000000000000000000000000000000000000000000005f5280600101358060081b60e01c905f1a1b6004525f5f60245f5f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b5f5ffd5b60045ffd5b5f5260205ffd5b005b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd95f5260205ff35b5f5260205ff35b5f5260205260405260605260805260a05260c05260e05ff35b595ff3
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Preparing to analyze bytecode for vulnerabilities**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc 'nl -ba BYTECODE_BUNDLE.txt' in /tmp/codex-multi-7e2sjpps succeeded in 6ms:
[codex:1400082]      1	Runtime bytecode bundle for best-effort auditing.
[codex:1400082]      2	Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1400082]      3	
[codex:1400082]      4	FILE: runtime_bytecode.hex
[codex:1400082]      5	0x73c54b77b28ee4d18cd3d93991f08b79bc85c71097331415610769575f3560e01c4214156119aa57600480355f1a565b610100565b61018f565b61022c565b6102ae565b611378565b61143f565b611506565b6115c0565b6117e6565b611802565b611854565b61187f565b61033e565b6103d0565b6118e4565b611945565b61167a565b611709565b610a74565b610db6565b610822565b611170565b611292565b6104a5565b61057b565b61069a565b610ee1565b611024565b806001013560f01c5f5f825f85600301358060081b60e01c905f1a1b866008013560601c8388601c015f375af1156119ae57601c010180361181355f1a570000000000005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57601a0180361181355f1a57005b806001013560601c805f5d81601a013560601c60015d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f523060045260016024526044526401000276ad60645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c805f5d81601a013560601c60025d81601501358060081b60e01c905f1a1b7f128acb08000000000000000000000000000000000000000000000000000000005f52306004525f60245260445273fffd8963efd1fc6a506488495d951d5263988d2560645260a06084525f60a4525f60c45f5f5f945af1156119ae57602e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c60015d82602e013560601c60025d826045013560e81c836042013560e81c7f3c8a7d8d000000000000000000000000000000000000000000000000000000005f523060045260245260445260645260a06084525f60a4525f60c45f5f5f945af1156119ae5760480180361181355f1a57005b806001013560601c81601d013560e81c82601a013560e81c8284601501358060081b60e01c905f1a1b83837fa34123a7000000000000000000000000000000000000000000000000000000005f526004526024526044525f60645f5f5f945af1156119ae577f4f1eb3d8000000000000000000000000000000000000000000000000000000005f52306004526024526044526fffffffffffffffffffffffffffffffff6064526fffffffffffffffffffffffffffffffff6084525f60a45f5f5f945af1156119ae5760200180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a6401000276ad73fffd8963efd1fc6a506488495d951d5263988d258261052c57905061052e565b505b91907fc31b8d7a000000000000000000000000000000000000000000000000000000005f52306004526024526044526064525f60845f5f5f945af1156119ae57602f0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01355f1a61063c5782602f01358060081b60e01c905f1a1b7fe67ce706000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b82602f01358060081b60e01c905f1a1b907f8dae7333000000000000000000000000000000000000000000000000000000005f5260045260245260606044525f6064525f60845f5f5f945af1156119ae5760340180361181355f1a57005b806001013560601c81601a013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577fbd6015b4000000000000000000000000000000000000000000000000000000007fdd93f59a0000000000000000000000000000000000000000000000000000000083602e01355f1a610746579050610748565b505b5f52306004525f60245f5f5f945af1156119ae57602f0180361181355f1a57005b7360744434d6339a6b27d73d9eda62b6f66a0a04fa331461092a575f5c803314156119ba57600435805f12156107d75760015c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575f5b50602435805f12156108205760025c90827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae575b005b736b175474e89094c44da98b954eedeac495271d0f6a52b7d2dcc80cd2e40000007360744434d6339a6b27d73d9eda62b6f66a0a04fa7f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae57806001013560f01c80827f5cffe9de000000000000000000000000000000000000000000000000000000005f5230600452736b175474e89094c44da98b954eedeac495271d0f6024526a52b7d2dcc80cd2e4000000604452608060645281908160845260030160a43760a4015f5f915f5f7360744434d6339a6b27d73d9eda62b6f66a0a04fa5af1156119ae576003010180361181355f1a57005b3060043514156119ba576a52b7d2dcc80cd2e4000000736b175474e89094c44da98b954eedeac495271d0f80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760c4355f1a15610c625760ca358060081b60e01c905f1a1b60cf3560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760fc80355f1a565b60c5358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e3358060081b60e01c905f1a1b60e83560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5760e33560601c8073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214610dad5760de358060081b60e01c905f1a1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82736b175474e89094c44da98b954eedeac495271d0f14610d59579050610d5b565b505b907f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae575f5b5060f780355f1a565b60c5358060081b60e01c905f1a1b60ca3560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576a52b7d2dcc80cd2e3ffffff736b175474e89094c44da98b954eedeac495271d0f7f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae576119bc565b80600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f617ba037000000000000000000000000000000000000000000000000000000005f52600452602452306044525f6064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae5780600601358060081b60e01c905f1a1b81600b013560601c7fa415bcad000000000000000000000000000000000000000000000000000000005f5260045260245260026044525f606452306084525f5f60a45f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601f0180361181355f1a57005b80600101358060081b60e01c905f1a1b816006013560601c80827387870bca3f3fd6335c3f4ce8392d69350b4fa4e27f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f573ade81000000000000000000000000000000000000000000000000000000005f526004526024526002604452306064525f5f60845f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27f69328dec000000000000000000000000000000000000000000000000000000005f52600452602452306044525f5f60645f5f7387870bca3f3fd6335c3f4ce8392d69350b4fa4e25af1156119ae57601a0180361181355f1a57005b80602101358060081b60e01c905f1a1b81603a013560601c826026013560601c8360010135818473ba12222222228d8ba445958a75a0704d566bf2c87f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f52bbbe29000000000000000000000000000000000000000000000000000000005f5260e0600452306024525f604452306064525f6084525f60a4527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60c45260e4525f6101045261012452610144526101645260c0610184525f6101a4525f5f6101c45f5f73ba12222222228d8ba445958a75a0704d566bf2c85af1156119ae57604e0180361181355f1a57005b806001013560601c81601501358060081b60e01c905f1a1b82601a013560601c81837f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5782602e01803560011a90355f1a7f3df02124000000000000000000000000000000000000000000000000000000007f5b41b9080000000000000000000000000000000000000000000000000000000086603001355f1a61134c57905061134e565b505b5f526004526024526044525f6064525f60845f5f5f945af1156119ae5760310180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae57601f0180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f525f6004526024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b806001013560601c81601f013560601c82601501358060081b60e01c905f1a1b827fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5781601a01358060081b60e01c905f1a1b7f022c0d9f000000000000000000000000000000000000000000000000000000005f526004525f6024523060445260806064525f6084525f60a45f5f5f945af1156119ae5760330180361181355f1a57005b80601501358060081b60e01c905f1a1b816001013560601c82601a013560601c7fb6f9de95000000000000000000000000000000000000000000000000000000005f525f60045260806024523060445242606452600260845273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a45260c45260e45f5f935f935af1156119ae57602e0180361181355f1a57005b80602e01358060081b60e01c905f1a1b816001013560601c82601a013560601c83601501358060081b60e01c905f1a1b8181847f095ea7b3000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae577f791ac947000000000000000000000000000000000000000000000000000000005f526004525f60245260a06044523060645242608452600260a45260c45273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260e4526101045f5f935f935af1156119ae5760330180361181355f1a57005b47325f5f5f935f935af1156119ae5760010180361181355f1a57005b806001013560601c8160150135327fa9059cbb000000000000000000000000000000000000000000000000000000005f526004526024525f60445f5f5f945af1156119ae5760350180361181355f1a57005b80600101358060081b60e01c905f1a1b415f5f5f935f935af1156119ae5760060180361181355f1a57005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2307f70a08231000000000000000000000000000000000000000000000000000000005f526004525f60245f5f6020945af1156119ae575f518082600101358060081b60e01c905f1a1b116119b357005b7fd0e30db0000000000000000000000000000000000000000000000000000000005f525f5f60045f84600101358060081b60e01c905f1a1b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b7f2e1a7d4d000000000000000000000000000000000000000000000000000000005f5280600101358060081b60e01c905f1a1b6004525f5f60245f5f73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1156119ae5760060180361181355f1a57005b5f5ffd5b60045ffd5b5f5260205ffd5b005b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd95f5260205ff35b5f5260205ff35b5f5260205260405260605260805260a05260c05260e05ff35b595ff3
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing bytecode for external calls and access control**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] from textwrap import wrap
[codex:1400082] 
[codex:1400082] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1]
[codex:1400082] # extract hex string after newline
[codex:1400082] hexstr=hexdata.strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] # opcode map
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] # add DUP/SWAP
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1400082] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082] 
[codex:1400082] # include TLOAD/TSTORE if present
[codex:1400082] opcodes[0x5c]='TLOAD'
[codex:1400082] opcodes[0x5d]='TSTORE'
[codex:1400082] 
[codex:1400082] # disassemble first N bytes for readability
[codex:1400082] N=400
[codex:1400082] pc=0
[codex:1400082] while pc < min(len(code), N):
[codex:1400082]     op = code[pc]
[codex:1400082]     name = opcodes.get(op, f'OP{op:02x}')
[codex:1400082]     if 0x60 <= op <= 0x7f:
[codex:1400082]         n = op-0x5f
[codex:1400082]         data = code[pc+1:pc+1+n]
[codex:1400082]         print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:1400082]         pc += 1+n
[codex:1400082]     else:
[codex:1400082]         print(f\"{pc:04x}: {name}\")
[codex:1400082]         pc += 1
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 75ms:
[codex:1400082] 0000: PUSH20 0xc54b77b28ee4d18cd3d93991f08b79bc85c71097
[codex:1400082] 0015: CALLER
[codex:1400082] 0016: EQ
[codex:1400082] 0017: ISZERO
[codex:1400082] 0018: PUSH2 0x0769
[codex:1400082] 001b: JUMPI
[codex:1400082] 001c: PUSH0
[codex:1400082] 001d: CALLDATALOAD
[codex:1400082] 001e: PUSH1 0xe0
[codex:1400082] 0020: SHR
[codex:1400082] 0021: TIMESTAMP
[codex:1400082] 0022: EQ
[codex:1400082] 0023: ISZERO
[codex:1400082] 0024: PUSH2 0x19aa
[codex:1400082] 0027: JUMPI
[codex:1400082] 0028: PUSH1 0x04
[codex:1400082] 002a: DUP1
[codex:1400082] 002b: CALLDATALOAD
[codex:1400082] 002c: PUSH0
[codex:1400082] 002d: BYTE
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing custom dispatcher and potential vulnerabilities**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] print('DELEGATECALL count', code.count(b'\\xf4'))
[codex:1400082] print('SELFDESTRUCT count', code.count(b'\\xff'))
[codex:1400082] print('SSTORE count', code.count(b'\\x55'))
[codex:1400082] print('SLOAD count', code.count(b'\\x54'))
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 17ms:
[codex:1400082] DELEGATECALL count 0
[codex:1400082] SELFDESTRUCT count 170
[codex:1400082] SSTORE count 0
[codex:1400082] SLOAD count 7
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing SELFDESTRUCT opcode presence**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] opnames = {
[codex:1400082] 0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT',0xf0:'CREATE',0xf5:'CREATE2',0xfd:'REVERT',0xfa:'STATICCALL',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN'
[codex:1400082] }
[codex:1400082] 
[codex:1400082] i=0
[codex:1400082] ops=[]
[codex:1400082] while i < len(code):
[codex:1400082]     op=code[i]
[codex:1400082]     if 0x60 <= op <= 0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         i+=1+n
[codex:1400082]         continue
[codex:1400082]     ops.append(op)
[codex:1400082]     i+=1
[codex:1400082] 
[codex:1400082] from collections import Counter
[codex:1400082] c=Counter(ops)
[codex:1400082] for op,val in sorted(c.items()):
[codex:1400082]     if op in opnames:
[codex:1400082]         print(opnames[op], val)
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 19ms:
[codex:1400082] CALL 59
[codex:1400082] RETURN 4
[codex:1400082] REVERT 3
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing CALL access control risks**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1400082] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082] 
[codex:1400082] # disassemble with pc map
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082]     op=code[pc]
[codex:1400082]     name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082]     if 0x60<=op<=0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         data=code[pc+1:pc+1+n]
[codex:1400082]         out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082]         pc+=1+n
[codex:1400082]     else:
[codex:1400082]         out.append((pc,name))
[codex:1400082]         pc+=1
[codex:1400082] 
[codex:1400082] # print around 0x0760-0x07a0
[codex:1400082] for pc,name in out:
[codex:1400082]     if 0x0740 <= pc <= 0x07c0:
[codex:1400082]         print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 22ms:
[codex:1400082] 0740: SWAP1
[codex:1400082] 0741: POP
[codex:1400082] 0742: PUSH2 0x0748
[codex:1400082] 0745: JUMP
[codex:1400082] 0746: JUMPDEST
[codex:1400082] 0747: POP
[codex:1400082] 0748: JUMPDEST
[codex:1400082] 0749: PUSH0
[codex:1400082] 074a: MSTORE
[codex:1400082] 074b: ADDRESS
[codex:1400082] 074c: PUSH1 0x04
[codex:1400082] 074e: MSTORE
[codex:1400082] 074f: PUSH0
[codex:1400082] 0750: PUSH1 0x24
[codex:1400082] 0752: PUSH0
[codex:1400082] 0753: PUSH0
[codex:1400082] 0754: PUSH0
[codex:1400082] 0755: SWAP5
[codex:1400082] 0756: GAS
[codex:1400082] 0757: CALL
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing advanced transient storage and call patterns**
[codex:1400082] 
[codex:1400082] I'm examining the contract’s use of transient storage for reentrancy protection and its dynamic call logic to detect any concrete vulnerabilities. The bytecode shows checks on callers, ephemeral storage, and calls with user-controlled calldata; I’m curious about risks like mis-handling non-standard token returns and unrestricted external calls, so I’m exploring CALL usage patterns and caller checks in detail.
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1400082] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082] 
[codex:1400082] # disassemble into list with pc
[codex:1400082] pc=0
[codex:1400082] ops=[]
[codex:1400082] while pc < len(code):
[codex:1400082]     op=code[pc]
[codex:1400082]     if 0x60<=op<=0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         data=code[pc+1:pc+1+n]
[codex:1400082]         ops.append((pc,op,f\"PUSH{n} 0x{data.hex()}\"))
[codex:1400082]         pc+=1+n
[codex:1400082]     else:
[codex:1400082]         ops.append((pc,op,opcodes.get(op,f'OP{op:02x}')))
[codex:1400082]         pc+=1
[codex:1400082] 
[codex:1400082] # show context around CALL
[codex:1400082] for idx,(pc,op,name) in enumerate(ops):
[codex:1400082]     if name=='CALL':
[codex:1400082]         start=max(0, idx-6)
[codex:1400082]         end=min(len(ops), idx+3)
[codex:1400082]         print('\\nCALL at', hex(pc))
[codex:1400082]         for j in range(start,end):
[codex:1400082]             print(f\"  {ops[j][0]:04x}: {ops[j][2]}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 22ms:
[codex:1400082] 
[codex:1400082] CALL at 0xe8
[codex:1400082]   00e1: DUP9
[codex:1400082]   00e2: PUSH1 0x1c
[codex:1400082]   00e4: ADD
[codex:1400082]   00e5: PUSH0
[codex:1400082]   00e6: CALLDATACOPY
[codex:1400082]   00e7: GAS
[codex:1400082]   00e8: CALL
[codex:1400082]   00e9: ISZERO
[codex:1400082]   00ea: PUSH2 0x19ae
[codex:1400082] 
[codex:1400082] CALL at 0x17d
[codex:1400082]   0176: PUSH1 0xc4
[codex:1400082]   0178: PUSH0
[codex:1400082]   0179: PUSH0
[codex:1400082]   017a: PUSH0
[codex:1400082]   017b: SWAP5
[codex:1400082]   017c: GAS
[codex:1400082]   017d: CALL
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Examining call success and storage patterns**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] # parse to opcodes ignoring push data
[codex:1400082] ops=[]
[codex:1400082] pc=0
[codex:1400082] while pc < len(code):
[codex:1400082]     op=code[pc]
[codex:1400082]     if 0x60 <= op <= 0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         pc+=1+n
[codex:1400082]     else:
[codex:1400082]         ops.append((pc,op))
[codex:1400082]         pc+=1
[codex:1400082] 
[codex:1400082] # find ORIGIN
[codex:1400082] for pc,op in ops:
[codex:1400082]     if op==0x32:
[codex:1400082]         print('ORIGIN at', hex(pc))
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 18ms:
[codex:1400082] ORIGIN at 0x17e8
[codex:1400082] ORIGIN at 0x1810
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Identifying potential tx.origin usage**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1400082] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082] 
[codex:1400082] # disassemble with pc map
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082]     op=code[pc]
[codex:1400082]     name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082]     if 0x60<=op<=0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         data=code[pc+1:pc+1+n]
[codex:1400082]         out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082]         pc+=1+n
[codex:1400082]     else:
[codex:1400082]         out.append((pc,name))
[codex:1400082]         pc+=1
[codex:1400082] 
[codex:1400082] # print around 0x17e0-0x1820
[codex:1400082] for pc,name in out:
[codex:1400082]     if 0x17d0 <= pc <= 0x1825:
[codex:1400082]         print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 21ms:
[codex:1400082] 17d0: SWAP4
[codex:1400082] 17d1: PUSH0
[codex:1400082] 17d2: SWAP4
[codex:1400082] 17d3: GAS
[codex:1400082] 17d4: CALL
[codex:1400082] 17d5: ISZERO
[codex:1400082] 17d6: PUSH2 0x19ae
[codex:1400082] 17d9: JUMPI
[codex:1400082] 17da: PUSH1 0x33
[codex:1400082] 17dc: ADD
[codex:1400082] 17dd: DUP1
[codex:1400082] 17de: CALLDATASIZE
[codex:1400082] 17df: GT
[codex:1400082] 17e0: DUP2
[codex:1400082] 17e1: CALLDATALOAD
[codex:1400082] 17e2: PUSH0
[codex:1400082] 17e3: BYTE
[codex:1400082] 17e4: JUMPI
[codex:1400082] 17e5: STOP
[codex:1400082] 17e6: JUMPDEST
[codex:1400082] 
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Analyzing tx.origin usage risks**
[codex:1400082] thinking
[codex:1400082] **Confirming presence of tx.origin patterns**
[codex:1400082] 
[codex:1400082] I’m verifying bytecode snippets that show the contract using tx.origin in ETH and token transfers. I’m gathering hexadecimal evidence to support the pattern found around opcode 0x17e6 and 0x1810 to back up the analysis.
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] for sub in ['47325f5f5f935f935af1','327fa9059cbb']:
[codex:1400082]     idx=hexstr.find(sub)
[codex:1400082]     print(sub, idx)
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 19ms:
[codex:1400082] 47325f5f5f935f935af1 12238
[codex:1400082] 327fa9059cbb 12320
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Summarizing tx.origin issue as finding**
[codex:1400082] exec
[codex:1400082] /bin/bash -lc "python - <<'PY'
[codex:1400082] import binascii
[codex:1400082] hexstr=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n',1)[0].strip()
[codex:1400082] if hexstr.startswith('0x'): hexstr=hexstr[2:]
[codex:1400082] code=bytes.fromhex(hexstr)
[codex:1400082] 
[codex:1400082] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:1400082] opcodes.update({0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1400082] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1400082] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1400082] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1400082] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1400082] 0x5f:'PUSH0',0x5c:'TLOAD',0x5d:'TSTORE',
[codex:1400082] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1400082] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1400082] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'} )
[codex:1400082] 
[codex:1400082] # disassemble to list
[codex:1400082] pc=0
[codex:1400082] out=[]
[codex:1400082] while pc < len(code):
[codex:1400082]     op=code[pc]
[codex:1400082]     name=opcodes.get(op,f'OP{op:02x}')
[codex:1400082]     if 0x60<=op<=0x7f:
[codex:1400082]         n=op-0x5f
[codex:1400082]         data=code[pc+1:pc+1+n]
[codex:1400082]         out.append((pc,f\"{name} 0x{data.hex()}\"))
[codex:1400082]         pc+=1+n
[codex:1400082]     else:
[codex:1400082]         out.append((pc,name))
[codex:1400082]         pc+=1
[codex:1400082] 
[codex:1400082] # print around 0x0920-0x09c0
[codex:1400082] for pc,name in out:
[codex:1400082]     if 0x0900 <= pc <= 0x09c0:
[codex:1400082]         print(f\"{pc:04x}: {name}\")
[codex:1400082] PY" in /tmp/codex-multi-7e2sjpps succeeded in 21ms:
[codex:1400082] 0900: PUSH0
[codex:1400082] 0901: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa
[codex:1400082] 0916: GAS
[codex:1400082] 0917: CALL
[codex:1400082] 0918: ISZERO
[codex:1400082] 0919: PUSH2 0x19ae
[codex:1400082] 091c: JUMPI
[codex:1400082] 091d: PUSH1 0x03
[codex:1400082] 091f: ADD
[codex:1400082] 0920: ADD
[codex:1400082] 0921: DUP1
[codex:1400082] 0922: CALLDATASIZE
[codex:1400082] 0923: GT
[codex:1400082] 0924: DUP2
[codex:1400082] 0925: CALLDATALOAD
[codex:1400082] 0926: PUSH0
[codex:1400082] 0927: BYTE
[codex:1400082] 0928: JUMPI
[codex:1400082] 0929: STOP
[codex:1400082] 092a: JUMPDEST
[codex:1400082] 
[codex:1400082] thinking
[codex:1400082] **Summarizing tx.origin misuse issue**
[codex:1400082] codex
[codex:1400082] {"no_findings":false,"summary":"Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.","findings":[{"severity":"low","category":"other","title":"Payouts/sweeps use tx.origin as recipient","exploit_scenario":"If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer’s EOA when the router holds leftover ETH/tokens.","recommendation":"Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.","evidence":"Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).","locations":["BYTECODE_BUNDLE.txt:5"]}]}
[codex:1400082] tokens used
[codex:1400082] 65,538
[codex:1400082] {"no_findings":false,"summary":"Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.","findings":[{"severity":"low","category":"other","title":"Payouts/sweeps use tx.origin as recipient","exploit_scenario":"If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer’s EOA when the router holds leftover ETH/tokens.","recommendation":"Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.","evidence":"Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).","locations":["BYTECODE_BUNDLE.txt:5"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T16:23:06.619378+00:00",
        "returncode": 0
    },
    "summary": "Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.",
    "raw_final": {
        "summary": "Identified 1 low-severity issue: tx.origin is used as the payout recipient for ETH and ERC20 sweep paths, which can misdirect funds when calls are made through contracts.",
        "findings": [
            {
                "title": "Payouts/sweeps use tx.origin as recipient",
                "category": "other",
                "evidence": "Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).",
                "severity": "low",
                "locations": [
                    "BYTECODE_BUNDLE.txt:5"
                ],
                "recommendation": "Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.",
                "exploit_scenario": "If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer\u2019s EOA when the router holds leftover ETH/tokens."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
59
EXT*/BALANCE
0
Total opcodes
2817
Flags
call_family_heavy
View cast disassembly output
00000000: PUSH20 0xc54b77b28ee4d18cd3d93991f08b79bc85c71097
00000015: CALLER
00000016: EQ
00000017: ISZERO
00000018: PUSH2 0x0769
0000001b: JUMPI
0000001c: PUSH0
0000001d: CALLDATALOAD
0000001e: PUSH1 0xe0
00000020: SHR
00000021: TIMESTAMP
00000022: EQ
00000023: ISZERO
00000024: PUSH2 0x19aa
00000027: JUMPI
00000028: PUSH1 0x04
0000002a: DUP1
0000002b: CALLDATALOAD
0000002c: PUSH0
0000002d: BYTE
0000002e: JUMP
0000002f: JUMPDEST
00000030: PUSH2 0x0100
00000033: JUMP
00000034: JUMPDEST
00000035: PUSH2 0x018f
00000038: JUMP
00000039: JUMPDEST
0000003a: PUSH2 0x022c
0000003d: JUMP
0000003e: JUMPDEST
0000003f: PUSH2 0x02ae
00000042: JUMP
00000043: JUMPDEST
00000044: PUSH2 0x1378
00000047: JUMP
00000048: JUMPDEST
00000049: PUSH2 0x143f
0000004c: JUMP
0000004d: JUMPDEST
0000004e: PUSH2 0x1506
00000051: JUMP
00000052: JUMPDEST
00000053: PUSH2 0x15c0
00000056: JUMP
00000057: JUMPDEST
00000058: PUSH2 0x17e6
0000005b: JUMP
0000005c: JUMPDEST
0000005d: PUSH2 0x1802
00000060: JUMP
00000061: JUMPDEST
00000062: PUSH2 0x1854
00000065: JUMP
00000066: JUMPDEST
00000067: PUSH2 0x187f
0000006a: JUMP
0000006b: JUMPDEST
0000006c: PUSH2 0x033e
0000006f: JUMP
00000070: JUMPDEST
00000071: PUSH2 0x03d0
00000074: JUMP
00000075: JUMPDEST
00000076: PUSH2 0x18e4
00000079: JUMP
0000007a: JUMPDEST
0000007b: PUSH2 0x1945
0000007e: JUMP
0000007f: JUMPDEST
00000080: PUSH2 0x167a
00000083: JUMP
00000084: JUMPDEST
00000085: PUSH2 0x1709
00000088: JUMP
00000089: JUMPDEST
0000008a: PUSH2 0x0a74
0000008d: JUMP
0000008e: JUMPDEST
0000008f: PUSH2 0x0db6
00000092: JUMP
00000093: JUMPDEST
00000094: PUSH2 0x0822
00000097: JUMP
00000098: JUMPDEST
00000099: PUSH2 0x1170
0000009c: JUMP
0000009d: JUMPDEST
0000009e: PUSH2 0x1292
000000a1: JUMP
000000a2: JUMPDEST
000000a3: PUSH2 0x04a5
000000a6: JUMP
000000a7: JUMPDEST
000000a8: PUSH2 0x057b
000000ab: JUMP
000000ac: JUMPDEST
000000ad: PUSH2 0x069a
000000b0: JUMP
000000b1: JUMPDEST
000000b2: PUSH2 0x0ee1
000000b5: JUMP
000000b6: JUMPDEST
000000b7: PUSH2 0x1024
000000ba: JUMP
000000bb: JUMPDEST
000000bc: DUP1
000000bd: PUSH1 0x01
000000bf: ADD
000000c0: CALLDATALOAD
000000c1: PUSH1 0xf0
000000c3: SHR
000000c4: PUSH0
000000c5: PUSH0
000000c6: DUP3
000000c7: PUSH0
000000c8: DUP6
000000c9: PUSH1 0x03
000000cb: ADD
000000cc: CALLDATALOAD
000000cd: DUP1
000000ce: PUSH1 0x08
000000d0: SHL
000000d1: PUSH1 0xe0
000000d3: SHR
000000d4: SWAP1
000000d5: PUSH0
000000d6: BYTE
000000d7: SHL
000000d8: DUP7
000000d9: PUSH1 0x08
000000db: ADD
000000dc: CALLDATALOAD
000000dd: PUSH1 0x60
000000df: SHR
000000e0: DUP4
000000e1: DUP9
000000e2: PUSH1 0x1c
000000e4: ADD
000000e5: PUSH0
000000e6: CALLDATACOPY
000000e7: GAS
000000e8: CALL
000000e9: ISZERO
000000ea: PUSH2 0x19ae
000000ed: JUMPI
000000ee: PUSH1 0x1c
000000f0: ADD
000000f1: ADD
000000f2: DUP1
000000f3: CALLDATASIZE
000000f4: GT
000000f5: DUP2
000000f6: CALLDATALOAD
000000f7: PUSH0
000000f8: BYTE
000000f9: JUMPI
000000fa: STOP
000000fb: STOP
000000fc: STOP
000000fd: STOP
000000fe: STOP
000000ff: STOP
00000100: JUMPDEST
00000101: DUP1
00000102: PUSH1 0x01
00000104: ADD
00000105: CALLDATALOAD
00000106: PUSH1 0x60
00000108: SHR
00000109: DUP1
0000010a: PUSH0
0000010b: TSTORE
0000010c: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000121: PUSH1 0x01
00000123: TSTORE
00000124: DUP2
00000125: PUSH1 0x15
00000127: ADD
00000128: CALLDATALOAD
00000129: DUP1
0000012a: PUSH1 0x08
0000012c: SHL
0000012d: PUSH1 0xe0
0000012f: SHR
00000130: SWAP1
00000131: PUSH0
00000132: BYTE
00000133: SHL
00000134: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000
00000155: PUSH0
00000156: MSTORE
00000157: ADDRESS
00000158: PUSH1 0x04
0000015a: MSTORE
0000015b: PUSH1 0x01
0000015d: PUSH1 0x24
0000015f: MSTORE
00000160: PUSH1 0x44
00000162: MSTORE
00000163: PUSH5 0x01000276ad
00000169: PUSH1 0x64
0000016b: MSTORE
0000016c: PUSH1 0xa0
0000016e: PUSH1 0x84
00000170: MSTORE
00000171: PUSH0
00000172: PUSH1 0xa4
00000174: MSTORE
00000175: PUSH0
00000176: PUSH1 0xc4
00000178: PUSH0
00000179: PUSH0
0000017a: PUSH0
0000017b: SWAP5
0000017c: GAS
0000017d: CALL
0000017e: ISZERO
0000017f: PUSH2 0x19ae
00000182: JUMPI
00000183: PUSH1 0x1a
00000185: ADD
00000186: DUP1
00000187: CALLDATASIZE
00000188: GT
00000189: DUP2
0000018a: CALLDATALOAD
0000018b: PUSH0
0000018c: BYTE
0000018d: JUMPI
0000018e: STOP
0000018f: JUMPDEST
00000190: DUP1
00000191: PUSH1 0x01
00000193: ADD
00000194: CALLDATALOAD
00000195: PUSH1 0x60
00000197: SHR
00000198: DUP1
00000199: PUSH0
0000019a: TSTORE
0000019b: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000001b0: PUSH1 0x02
000001b2: TSTORE
000001b3: DUP2
000001b4: PUSH1 0x15
000001b6: ADD
000001b7: CALLDATALOAD
000001b8: DUP1
000001b9: PUSH1 0x08
000001bb: SHL
000001bc: PUSH1 0xe0
000001be: SHR
000001bf: SWAP1
000001c0: PUSH0
000001c1: BYTE
000001c2: SHL
000001c3: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000
000001e4: PUSH0
000001e5: MSTORE
000001e6: ADDRESS
000001e7: PUSH1 0x04
000001e9: MSTORE
000001ea: PUSH0
000001eb: PUSH1 0x24
000001ed: MSTORE
000001ee: PUSH1 0x44
000001f0: MSTORE
000001f1: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25
00000206: PUSH1 0x64
00000208: MSTORE
00000209: PUSH1 0xa0
0000020b: PUSH1 0x84
0000020d: MSTORE
0000020e: PUSH0
0000020f: PUSH1 0xa4
00000211: MSTORE
00000212: PUSH0
00000213: PUSH1 0xc4
00000215: PUSH0
00000216: PUSH0
00000217: PUSH0
00000218: SWAP5
00000219: GAS
0000021a: CALL
0000021b: ISZERO
0000021c: PUSH2 0x19ae
0000021f: JUMPI
00000220: PUSH1 0x1a
00000222: ADD
00000223: DUP1
00000224: CALLDATASIZE
00000225: GT
00000226: DUP2
00000227: CALLDATALOAD
00000228: PUSH0
00000229: BYTE
0000022a: JUMPI
0000022b: STOP
0000022c: JUMPDEST
0000022d: DUP1
0000022e: PUSH1 0x01
00000230: ADD
00000231: CALLDATALOAD
00000232: PUSH1 0x60
00000234: SHR
00000235: DUP1
00000236: PUSH0
00000237: TSTORE
00000238: DUP2
00000239: PUSH1 0x1a
0000023b: ADD
0000023c: CALLDATALOAD
0000023d: PUSH1 0x60
0000023f: SHR
00000240: PUSH1 0x01
00000242: TSTORE
00000243: DUP2
00000244: PUSH1 0x15
00000246: ADD
00000247: CALLDATALOAD
00000248: DUP1
00000249: PUSH1 0x08
0000024b: SHL
0000024c: PUSH1 0xe0
0000024e: SHR
0000024f: SWAP1
00000250: PUSH0
00000251: BYTE
00000252: SHL
00000253: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000
00000274: PUSH0
00000275: MSTORE
00000276: ADDRESS
00000277: PUSH1 0x04
00000279: MSTORE
0000027a: PUSH1 0x01
0000027c: PUSH1 0x24
0000027e: MSTORE
0000027f: PUSH1 0x44
00000281: MSTORE
00000282: PUSH5 0x01000276ad
00000288: PUSH1 0x64
0000028a: MSTORE
0000028b: PUSH1 0xa0
0000028d: PUSH1 0x84
0000028f: MSTORE
00000290: PUSH0
00000291: PUSH1 0xa4
00000293: MSTORE
00000294: PUSH0
00000295: PUSH1 0xc4
00000297: PUSH0
00000298: PUSH0
00000299: PUSH0
0000029a: SWAP5
0000029b: GAS
0000029c: CALL
0000029d: ISZERO
0000029e: PUSH2 0x19ae
000002a1: JUMPI
000002a2: PUSH1 0x2e
000002a4: ADD
000002a5: DUP1
000002a6: CALLDATASIZE
000002a7: GT
000002a8: DUP2
000002a9: CALLDATALOAD
000002aa: PUSH0
000002ab: BYTE
000002ac: JUMPI
000002ad: STOP
000002ae: JUMPDEST
000002af: DUP1
000002b0: PUSH1 0x01
000002b2: ADD
000002b3: CALLDATALOAD
000002b4: PUSH1 0x60
000002b6: SHR
000002b7: DUP1
000002b8: PUSH0
000002b9: TSTORE
000002ba: DUP2
000002bb: PUSH1 0x1a
000002bd: ADD
000002be: CALLDATALOAD
000002bf: PUSH1 0x60
000002c1: SHR
000002c2: PUSH1 0x02
000002c4: TSTORE
000002c5: DUP2
000002c6: PUSH1 0x15
000002c8: ADD
000002c9: CALLDATALOAD
000002ca: DUP1
000002cb: PUSH1 0x08
000002cd: SHL
000002ce: PUSH1 0xe0
000002d0: SHR
000002d1: SWAP1
000002d2: PUSH0
000002d3: BYTE
000002d4: SHL
000002d5: PUSH32 0x128acb0800000000000000000000000000000000000000000000000000000000
000002f6: PUSH0
000002f7: MSTORE
000002f8: ADDRESS
000002f9: PUSH1 0x04
000002fb: MSTORE
000002fc: PUSH0
000002fd: PUSH1 0x24
000002ff: MSTORE
00000300: PUSH1 0x44
00000302: MSTORE
00000303: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25
00000318: PUSH1 0x64
0000031a: MSTORE
0000031b: PUSH1 0xa0
0000031d: PUSH1 0x84
0000031f: MSTORE
00000320: PUSH0
00000321: PUSH1 0xa4
00000323: MSTORE
00000324: PUSH0
00000325: PUSH1 0xc4
00000327: PUSH0
00000328: PUSH0
00000329: PUSH0
0000032a: SWAP5
0000032b: GAS
0000032c: CALL
0000032d: ISZERO
0000032e: PUSH2 0x19ae
00000331: JUMPI
00000332: PUSH1 0x2e
00000334: ADD
00000335: DUP1
00000336: CALLDATASIZE
00000337: GT
00000338: DUP2
00000339: CALLDATALOAD
0000033a: PUSH0
0000033b: BYTE
0000033c: JUMPI
0000033d: STOP
0000033e: JUMPDEST
0000033f: DUP1
00000340: PUSH1 0x01
00000342: ADD
00000343: CALLDATALOAD
00000344: PUSH1 0x60
00000346: SHR
00000347: DUP2
00000348: PUSH1 0x15
0000034a: ADD
0000034b: CALLDATALOAD
0000034c: DUP1
0000034d: PUSH1 0x08
0000034f: SHL
00000350: PUSH1 0xe0
00000352: SHR
00000353: SWAP1
00000354: PUSH0
00000355: BYTE
00000356: SHL
00000357: DUP3
00000358: PUSH1 0x1a
0000035a: ADD
0000035b: CALLDATALOAD
0000035c: PUSH1 0x60
0000035e: SHR
0000035f: PUSH1 0x01
00000361: TSTORE
00000362: DUP3
00000363: PUSH1 0x2e
00000365: ADD
00000366: CALLDATALOAD
00000367: PUSH1 0x60
00000369: SHR
0000036a: PUSH1 0x02
0000036c: TSTORE
0000036d: DUP3
0000036e: PUSH1 0x45
00000370: ADD
00000371: CALLDATALOAD
00000372: PUSH1 0xe8
00000374: SHR
00000375: DUP4
00000376: PUSH1 0x42
00000378: ADD
00000379: CALLDATALOAD
0000037a: PUSH1 0xe8
0000037c: SHR
0000037d: PUSH32 0x3c8a7d8d00000000000000000000000000000000000000000000000000000000
0000039e: PUSH0
0000039f: MSTORE
000003a0: ADDRESS
000003a1: PUSH1 0x04
000003a3: MSTORE
000003a4: PUSH1 0x24
000003a6: MSTORE
000003a7: PUSH1 0x44
000003a9: MSTORE
000003aa: PUSH1 0x64
000003ac: MSTORE
000003ad: PUSH1 0xa0
000003af: PUSH1 0x84
000003b1: MSTORE
000003b2: PUSH0
000003b3: PUSH1 0xa4
000003b5: MSTORE
000003b6: PUSH0
000003b7: PUSH1 0xc4
000003b9: PUSH0
000003ba: PUSH0
000003bb: PUSH0
000003bc: SWAP5
000003bd: GAS
000003be: CALL
000003bf: ISZERO
000003c0: PUSH2 0x19ae
000003c3: JUMPI
000003c4: PUSH1 0x48
000003c6: ADD
000003c7: DUP1
000003c8: CALLDATASIZE
000003c9: GT
000003ca: DUP2
000003cb: CALLDATALOAD
000003cc: PUSH0
000003cd: BYTE
000003ce: JUMPI
000003cf: STOP
000003d0: JUMPDEST
000003d1: DUP1
000003d2: PUSH1 0x01
000003d4: ADD
000003d5: CALLDATALOAD
000003d6: PUSH1 0x60
000003d8: SHR
000003d9: DUP2
000003da: PUSH1 0x1d
000003dc: ADD
000003dd: CALLDATALOAD
000003de: PUSH1 0xe8
000003e0: SHR
000003e1: DUP3
000003e2: PUSH1 0x1a
000003e4: ADD
000003e5: CALLDATALOAD
000003e6: PUSH1 0xe8
000003e8: SHR
000003e9: DUP3
000003ea: DUP5
000003eb: PUSH1 0x15
000003ed: ADD
000003ee: CALLDATALOAD
000003ef: DUP1
000003f0: PUSH1 0x08
000003f2: SHL
000003f3: PUSH1 0xe0
000003f5: SHR
000003f6: SWAP1
000003f7: PUSH0
000003f8: BYTE
000003f9: SHL
000003fa: DUP4
000003fb: DUP4
000003fc: PUSH32 0xa34123a700000000000000000000000000000000000000000000000000000000
0000041d: PUSH0
0000041e: MSTORE
0000041f: PUSH1 0x04
00000421: MSTORE
00000422: PUSH1 0x24
00000424: MSTORE
00000425: PUSH1 0x44
00000427: MSTORE
00000428: PUSH0
00000429: PUSH1 0x64
0000042b: PUSH0
0000042c: PUSH0
0000042d: PUSH0
0000042e: SWAP5
0000042f: GAS
00000430: CALL
00000431: ISZERO
00000432: PUSH2 0x19ae
00000435: JUMPI
00000436: PUSH32 0x4f1eb3d800000000000000000000000000000000000000000000000000000000
00000457: PUSH0
00000458: MSTORE
00000459: ADDRESS
0000045a: PUSH1 0x04
0000045c: MSTORE
0000045d: PUSH1 0x24
0000045f: MSTORE
00000460: PUSH1 0x44
00000462: MSTORE
00000463: PUSH16 0xffffffffffffffffffffffffffffffff
00000474: PUSH1 0x64
00000476: MSTORE
00000477: PUSH16 0xffffffffffffffffffffffffffffffff
00000488: PUSH1 0x84
0000048a: MSTORE
0000048b: PUSH0
0000048c: PUSH1 0xa4
0000048e: PUSH0
0000048f: PUSH0
00000490: PUSH0
00000491: SWAP5
00000492: GAS
00000493: CALL
00000494: ISZERO
00000495: PUSH2 0x19ae
00000498: JUMPI
00000499: PUSH1 0x20
0000049b: ADD
0000049c: DUP1
0000049d: CALLDATASIZE
0000049e: GT
0000049f: DUP2
000004a0: CALLDATALOAD
000004a1: PUSH0
000004a2: BYTE
000004a3: JUMPI
000004a4: STOP
000004a5: JUMPDEST
000004a6: DUP1
000004a7: PUSH1 0x01
000004a9: ADD
000004aa: CALLDATALOAD
000004ab: PUSH1 0x60
000004ad: SHR
000004ae: DUP2
000004af: PUSH1 0x15
000004b1: ADD
000004b2: CALLDATALOAD
000004b3: DUP1
000004b4: PUSH1 0x08
000004b6: SHL
000004b7: PUSH1 0xe0
000004b9: SHR
000004ba: SWAP1
000004bb: PUSH0
000004bc: BYTE
000004bd: SHL
000004be: DUP3
000004bf: PUSH1 0x1a
000004c1: ADD
000004c2: CALLDATALOAD
000004c3: PUSH1 0x60
000004c5: SHR
000004c6: DUP2
000004c7: DUP4
000004c8: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
000004e9: PUSH0
000004ea: MSTORE
000004eb: PUSH1 0x04
000004ed: MSTORE
000004ee: PUSH1 0x24
000004f0: MSTORE
000004f1: PUSH0
000004f2: PUSH1 0x44
000004f4: PUSH0
000004f5: PUSH0
000004f6: PUSH0
000004f7: SWAP5
000004f8: GAS
000004f9: CALL
000004fa: ISZERO
000004fb: PUSH2 0x19ae
000004fe: JUMPI
000004ff: DUP3
00000500: PUSH1 0x2e
00000502: ADD
00000503: CALLDATALOAD
00000504: PUSH0
00000505: BYTE
00000506: PUSH5 0x01000276ad
0000050c: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25
00000521: DUP3
00000522: PUSH2 0x052c
00000525: JUMPI
00000526: SWAP1
00000527: POP
00000528: PUSH2 0x052e
0000052b: JUMP
0000052c: JUMPDEST
0000052d: POP
0000052e: JUMPDEST
0000052f: SWAP2
00000530: SWAP1
00000531: PUSH32 0xc31b8d7a00000000000000000000000000000000000000000000000000000000
00000552: PUSH0
00000553: MSTORE
00000554: ADDRESS
00000555: PUSH1 0x04
00000557: MSTORE
00000558: PUSH1 0x24
0000055a: MSTORE
0000055b: PUSH1 0x44
0000055d: MSTORE
0000055e: PUSH1 0x64
00000560: MSTORE
00000561: PUSH0
00000562: PUSH1 0x84
00000564: PUSH0
00000565: PUSH0
00000566: PUSH0
00000567: SWAP5
00000568: GAS
00000569: CALL
0000056a: ISZERO
0000056b: PUSH2 0x19ae
0000056e: JUMPI
0000056f: PUSH1 0x2f
00000571: ADD
00000572: DUP1
00000573: CALLDATASIZE
00000574: GT
00000575: DUP2
00000576: CALLDATALOAD
00000577: PUSH0
00000578: BYTE
00000579: JUMPI
0000057a: STOP
0000057b: JUMPDEST
0000057c: DUP1
0000057d: PUSH1 0x01
0000057f: ADD
00000580: CALLDATALOAD
00000581: PUSH1 0x60
00000583: SHR
00000584: DUP2
00000585: PUSH1 0x15
00000587: ADD
00000588: CALLDATALOAD
00000589: DUP1
0000058a: PUSH1 0x08
0000058c: SHL
0000058d: PUSH1 0xe0
0000058f: SHR
00000590: SWAP1
00000591: PUSH0
00000592: BYTE
00000593: SHL
00000594: DUP3
00000595: PUSH1 0x1a
00000597: ADD
00000598: CALLDATALOAD
00000599: PUSH1 0x60
0000059b: SHR
0000059c: DUP2
0000059d: DUP4
0000059e: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
000005bf: PUSH0
000005c0: MSTORE
000005c1: PUSH1 0x04
000005c3: MSTORE
000005c4: PUSH1 0x24
000005c6: MSTORE
000005c7: PUSH0
000005c8: PUSH1 0x44
000005ca: PUSH0
000005cb: PUSH0
000005cc: PUSH0
000005cd: SWAP5
000005ce: GAS
000005cf: CALL
000005d0: ISZERO
000005d1: PUSH2 0x19ae
000005d4: JUMPI
000005d5: DUP3
000005d6: PUSH1 0x2e
000005d8: ADD
000005d9: CALLDATALOAD
000005da: PUSH0
000005db: BYTE
000005dc: PUSH2 0x063c
000005df: JUMPI
000005e0: DUP3
000005e1: PUSH1 0x2f
000005e3: ADD
000005e4: CALLDATALOAD
000005e5: DUP1
000005e6: PUSH1 0x08
000005e8: SHL
000005e9: PUSH1 0xe0
000005eb: SHR
000005ec: SWAP1
000005ed: PUSH0
000005ee: BYTE
000005ef: SHL
000005f0: PUSH32 0xe67ce70600000000000000000000000000000000000000000000000000000000
00000611: PUSH0
00000612: MSTORE
00000613: PUSH1 0x04
00000615: MSTORE
00000616: PUSH1 0x24
00000618: MSTORE
00000619: PUSH1 0x60
0000061b: PUSH1 0x44
0000061d: MSTORE
0000061e: PUSH0
0000061f: PUSH1 0x64
00000621: MSTORE
00000622: PUSH0
00000623: PUSH1 0x84
00000625: PUSH0
00000626: PUSH0
00000627: PUSH0
00000628: SWAP5
00000629: GAS
0000062a: CALL
0000062b: ISZERO
0000062c: PUSH2 0x19ae
0000062f: JUMPI
00000630: PUSH1 0x34
00000632: ADD
00000633: DUP1
00000634: CALLDATASIZE
00000635: GT
00000636: DUP2
00000637: CALLDATALOAD
00000638: PUSH0
00000639: BYTE
0000063a: JUMPI
0000063b: STOP
0000063c: JUMPDEST
0000063d: DUP3
0000063e: PUSH1 0x2f
00000640: ADD
00000641: CALLDATALOAD
00000642: DUP1
00000643: PUSH1 0x08
00000645: SHL
00000646: PUSH1 0xe0
00000648: SHR
00000649: SWAP1
0000064a: PUSH0
0000064b: BYTE
0000064c: SHL
0000064d: SWAP1
0000064e: PUSH32 0x8dae733300000000000000000000000000000000000000000000000000000000
0000066f: PUSH0
00000670: MSTORE
00000671: PUSH1 0x04
00000673: MSTORE
00000674: PUSH1 0x24
00000676: MSTORE
00000677: PUSH1 0x60
00000679: PUSH1 0x44
0000067b: MSTORE
0000067c: PUSH0
0000067d: PUSH1 0x64
0000067f: MSTORE
00000680: PUSH0
00000681: PUSH1 0x84
00000683: PUSH0
00000684: PUSH0
00000685: PUSH0
00000686: SWAP5
00000687: GAS
00000688: CALL
00000689: ISZERO
0000068a: PUSH2 0x19ae
0000068d: JUMPI
0000068e: PUSH1 0x34
00000690: ADD
00000691: DUP1
00000692: CALLDATASIZE
00000693: GT
00000694: DUP2
00000695: CALLDATALOAD
00000696: PUSH0
00000697: BYTE
00000698: JUMPI
00000699: STOP
0000069a: JUMPDEST
0000069b: DUP1
0000069c: PUSH1 0x01
0000069e: ADD
0000069f: CALLDATALOAD
000006a0: PUSH1 0x60
000006a2: SHR
000006a3: DUP2
000006a4: PUSH1 0x1a
000006a6: ADD
000006a7: CALLDATALOAD
000006a8: PUSH1 0x60
000006aa: SHR
000006ab: DUP3
000006ac: PUSH1 0x15
000006ae: ADD
000006af: CALLDATALOAD
000006b0: DUP1
000006b1: PUSH1 0x08
000006b3: SHL
000006b4: PUSH1 0xe0
000006b6: SHR
000006b7: SWAP1
000006b8: PUSH0
000006b9: BYTE
000006ba: SHL
000006bb: DUP3
000006bc: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000006dd: PUSH0
000006de: MSTORE
000006df: PUSH1 0x04
000006e1: MSTORE
000006e2: PUSH1 0x24
000006e4: MSTORE
000006e5: PUSH0
000006e6: PUSH1 0x44
000006e8: PUSH0
000006e9: PUSH0
000006ea: PUSH0
000006eb: SWAP5
000006ec: GAS
000006ed: CALL
000006ee: ISZERO
000006ef: PUSH2 0x19ae
000006f2: JUMPI
000006f3: PUSH32 0xbd6015b400000000000000000000000000000000000000000000000000000000
00000714: PUSH32 0xdd93f59a00000000000000000000000000000000000000000000000000000000
00000735: DUP4
00000736: PUSH1 0x2e
00000738: ADD
00000739: CALLDATALOAD
0000073a: PUSH0
0000073b: BYTE
0000073c: PUSH2 0x0746
0000073f: JUMPI
00000740: SWAP1
00000741: POP
00000742: PUSH2 0x0748
00000745: JUMP
00000746: JUMPDEST
00000747: POP
00000748: JUMPDEST
00000749: PUSH0
0000074a: MSTORE
0000074b: ADDRESS
0000074c: PUSH1 0x04
0000074e: MSTORE
0000074f: PUSH0
00000750: PUSH1 0x24
00000752: PUSH0
00000753: PUSH0
00000754: PUSH0
00000755: SWAP5
00000756: GAS
00000757: CALL
00000758: ISZERO
00000759: PUSH2 0x19ae
0000075c: JUMPI
0000075d: PUSH1 0x2f
0000075f: ADD
00000760: DUP1
00000761: CALLDATASIZE
00000762: GT
00000763: DUP2
00000764: CALLDATALOAD
00000765: PUSH0
00000766: BYTE
00000767: JUMPI
00000768: STOP
00000769: JUMPDEST
0000076a: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa
0000077f: CALLER
00000780: EQ
00000781: PUSH2 0x092a
00000784: JUMPI
00000785: PUSH0
00000786: TLOAD
00000787: DUP1
00000788: CALLER
00000789: EQ
0000078a: ISZERO
0000078b: PUSH2 0x19ba
0000078e: JUMPI
0000078f: PUSH1 0x04
00000791: CALLDATALOAD
00000792: DUP1
00000793: PUSH0
00000794: SLT
00000795: ISZERO
00000796: PUSH2 0x07d7
00000799: JUMPI
0000079a: PUSH1 0x01
0000079c: TLOAD
0000079d: SWAP1
0000079e: DUP3
0000079f: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000007c0: PUSH0
000007c1: MSTORE
000007c2: PUSH1 0x04
000007c4: MSTORE
000007c5: PUSH1 0x24
000007c7: MSTORE
000007c8: PUSH0
000007c9: PUSH1 0x44
000007cb: PUSH0
000007cc: PUSH0
000007cd: PUSH0
000007ce: SWAP5
000007cf: GAS
000007d0: CALL
000007d1: ISZERO
000007d2: PUSH2 0x19ae
000007d5: JUMPI
000007d6: PUSH0
000007d7: JUMPDEST
000007d8: POP
000007d9: PUSH1 0x24
000007db: CALLDATALOAD
000007dc: DUP1
000007dd: PUSH0
000007de: SLT
000007df: ISZERO
000007e0: PUSH2 0x0820
000007e3: JUMPI
000007e4: PUSH1 0x02
000007e6: TLOAD
000007e7: SWAP1
000007e8: DUP3
000007e9: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
0000080a: PUSH0
0000080b: MSTORE
0000080c: PUSH1 0x04
0000080e: MSTORE
0000080f: PUSH1 0x24
00000811: MSTORE
00000812: PUSH0
00000813: PUSH1 0x44
00000815: PUSH0
00000816: PUSH0
00000817: PUSH0
00000818: SWAP5
00000819: GAS
0000081a: CALL
0000081b: ISZERO
0000081c: PUSH2 0x19ae
0000081f: JUMPI
00000820: JUMPDEST
00000821: STOP
00000822: JUMPDEST
00000823: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
00000838: PUSH11 0x52b7d2dcc80cd2e4000000
00000844: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa
00000859: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
0000087a: PUSH0
0000087b: MSTORE
0000087c: PUSH1 0x04
0000087e: MSTORE
0000087f: PUSH1 0x24
00000881: MSTORE
00000882: PUSH0
00000883: PUSH1 0x44
00000885: PUSH0
00000886: PUSH0
00000887: PUSH0
00000888: SWAP5
00000889: GAS
0000088a: CALL
0000088b: ISZERO
0000088c: PUSH2 0x19ae
0000088f: JUMPI
00000890: DUP1
00000891: PUSH1 0x01
00000893: ADD
00000894: CALLDATALOAD
00000895: PUSH1 0xf0
00000897: SHR
00000898: DUP1
00000899: DUP3
0000089a: PUSH32 0x5cffe9de00000000000000000000000000000000000000000000000000000000
000008bb: PUSH0
000008bc: MSTORE
000008bd: ADDRESS
000008be: PUSH1 0x04
000008c0: MSTORE
000008c1: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
000008d6: PUSH1 0x24
000008d8: MSTORE
000008d9: PUSH11 0x52b7d2dcc80cd2e4000000
000008e5: PUSH1 0x44
000008e7: MSTORE
000008e8: PUSH1 0x80
000008ea: PUSH1 0x64
000008ec: MSTORE
000008ed: DUP2
000008ee: SWAP1
000008ef: DUP2
000008f0: PUSH1 0x84
000008f2: MSTORE
000008f3: PUSH1 0x03
000008f5: ADD
000008f6: PUSH1 0xa4
000008f8: CALLDATACOPY
000008f9: PUSH1 0xa4
000008fb: ADD
000008fc: PUSH0
000008fd: PUSH0
000008fe: SWAP2
000008ff: PUSH0
00000900: PUSH0
00000901: PUSH20 0x60744434d6339a6b27d73d9eda62b6f66a0a04fa
00000916: GAS
00000917: CALL
00000918: ISZERO
00000919: PUSH2 0x19ae
0000091c: JUMPI
0000091d: PUSH1 0x03
0000091f: ADD
00000920: ADD
00000921: DUP1
00000922: CALLDATASIZE
00000923: GT
00000924: DUP2
00000925: CALLDATALOAD
00000926: PUSH0
00000927: BYTE
00000928: JUMPI
00000929: STOP
0000092a: JUMPDEST
0000092b: ADDRESS
0000092c: PUSH1 0x04
0000092e: CALLDATALOAD
0000092f: EQ
00000930: ISZERO
00000931: PUSH2 0x19ba
00000934: JUMPI
00000935: PUSH11 0x52b7d2dcc80cd2e4000000
00000941: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
00000956: DUP1
00000957: DUP3
00000958: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
0000096d: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
0000098e: PUSH0
0000098f: MSTORE
00000990: PUSH1 0x04
00000992: MSTORE
00000993: PUSH1 0x24
00000995: MSTORE
00000996: PUSH0
00000997: PUSH1 0x44
00000999: PUSH0
0000099a: PUSH0
0000099b: PUSH0
0000099c: SWAP5
0000099d: GAS
0000099e: CALL
0000099f: ISZERO
000009a0: PUSH2 0x19ae
000009a3: JUMPI
000009a4: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000
000009c5: PUSH0
000009c6: MSTORE
000009c7: PUSH1 0x04
000009c9: MSTORE
000009ca: PUSH1 0x24
000009cc: MSTORE
000009cd: ADDRESS
000009ce: PUSH1 0x44
000009d0: MSTORE
000009d1: PUSH0
000009d2: PUSH1 0x64
000009d4: MSTORE
000009d5: PUSH0
000009d6: PUSH0
000009d7: PUSH1 0x84
000009d9: PUSH0
000009da: PUSH0
000009db: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
000009f0: GAS
000009f1: CALL
000009f2: ISZERO
000009f3: PUSH2 0x19ae
000009f6: JUMPI
000009f7: PUSH1 0xc4
000009f9: CALLDATALOAD
000009fa: PUSH0
000009fb: BYTE
000009fc: ISZERO
000009fd: PUSH2 0x0c62
00000a00: JUMPI
00000a01: PUSH1 0xca
00000a03: CALLDATALOAD
00000a04: DUP1
00000a05: PUSH1 0x08
00000a07: SHL
00000a08: PUSH1 0xe0
00000a0a: SHR
00000a0b: SWAP1
00000a0c: PUSH0
00000a0d: BYTE
00000a0e: SHL
00000a0f: PUSH1 0xcf
00000a11: CALLDATALOAD
00000a12: PUSH1 0x60
00000a14: SHR
00000a15: PUSH32 0xa415bcad00000000000000000000000000000000000000000000000000000000
00000a36: PUSH0
00000a37: MSTORE
00000a38: PUSH1 0x04
00000a3a: MSTORE
00000a3b: PUSH1 0x24
00000a3d: MSTORE
00000a3e: PUSH1 0x02
00000a40: PUSH1 0x44
00000a42: MSTORE
00000a43: PUSH0
00000a44: PUSH1 0x64
00000a46: MSTORE
00000a47: ADDRESS
00000a48: PUSH1 0x84
00000a4a: MSTORE
00000a4b: PUSH0
00000a4c: PUSH0
00000a4d: PUSH1 0xa4
00000a4f: PUSH0
00000a50: PUSH0
00000a51: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000a66: GAS
00000a67: CALL
00000a68: ISZERO
00000a69: PUSH2 0x19ae
00000a6c: JUMPI
00000a6d: PUSH1 0xfc
00000a6f: DUP1
00000a70: CALLDATALOAD
00000a71: PUSH0
00000a72: BYTE
00000a73: JUMP
00000a74: JUMPDEST
00000a75: PUSH1 0xc5
00000a77: CALLDATALOAD
00000a78: DUP1
00000a79: PUSH1 0x08
00000a7b: SHL
00000a7c: PUSH1 0xe0
00000a7e: SHR
00000a7f: SWAP1
00000a80: PUSH0
00000a81: BYTE
00000a82: SHL
00000a83: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000a98: DUP1
00000a99: DUP3
00000a9a: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000aaf: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000ad0: PUSH0
00000ad1: MSTORE
00000ad2: PUSH1 0x04
00000ad4: MSTORE
00000ad5: PUSH1 0x24
00000ad7: MSTORE
00000ad8: PUSH0
00000ad9: PUSH1 0x44
00000adb: PUSH0
00000adc: PUSH0
00000add: PUSH0
00000ade: SWAP5
00000adf: GAS
00000ae0: CALL
00000ae1: ISZERO
00000ae2: PUSH2 0x19ae
00000ae5: JUMPI
00000ae6: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000
00000b07: PUSH0
00000b08: MSTORE
00000b09: PUSH1 0x04
00000b0b: MSTORE
00000b0c: PUSH1 0x24
00000b0e: MSTORE
00000b0f: ADDRESS
00000b10: PUSH1 0x44
00000b12: MSTORE
00000b13: PUSH0
00000b14: PUSH1 0x64
00000b16: MSTORE
00000b17: PUSH0
00000b18: PUSH0
00000b19: PUSH1 0x84
00000b1b: PUSH0
00000b1c: PUSH0
00000b1d: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000b32: GAS
00000b33: CALL
00000b34: ISZERO
00000b35: PUSH2 0x19ae
00000b38: JUMPI
00000b39: PUSH1 0xe3
00000b3b: CALLDATALOAD
00000b3c: DUP1
00000b3d: PUSH1 0x08
00000b3f: SHL
00000b40: PUSH1 0xe0
00000b42: SHR
00000b43: SWAP1
00000b44: PUSH0
00000b45: BYTE
00000b46: SHL
00000b47: PUSH1 0xe8
00000b49: CALLDATALOAD
00000b4a: PUSH1 0x60
00000b4c: SHR
00000b4d: DUP1
00000b4e: DUP3
00000b4f: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000b64: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000b85: PUSH0
00000b86: MSTORE
00000b87: PUSH1 0x04
00000b89: MSTORE
00000b8a: PUSH1 0x24
00000b8c: MSTORE
00000b8d: PUSH0
00000b8e: PUSH1 0x44
00000b90: PUSH0
00000b91: PUSH0
00000b92: PUSH0
00000b93: SWAP5
00000b94: GAS
00000b95: CALL
00000b96: ISZERO
00000b97: PUSH2 0x19ae
00000b9a: JUMPI
00000b9b: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000
00000bbc: PUSH0
00000bbd: MSTORE
00000bbe: PUSH1 0x04
00000bc0: MSTORE
00000bc1: PUSH1 0x24
00000bc3: MSTORE
00000bc4: ADDRESS
00000bc5: PUSH1 0x44
00000bc7: MSTORE
00000bc8: PUSH0
00000bc9: PUSH1 0x64
00000bcb: MSTORE
00000bcc: PUSH0
00000bcd: PUSH0
00000bce: PUSH1 0x84
00000bd0: PUSH0
00000bd1: PUSH0
00000bd2: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000be7: GAS
00000be8: CALL
00000be9: ISZERO
00000bea: PUSH2 0x19ae
00000bed: JUMPI
00000bee: PUSH11 0x52b7d2dcc80cd2e3ffffff
00000bfa: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
00000c0f: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000
00000c30: PUSH0
00000c31: MSTORE
00000c32: PUSH1 0x04
00000c34: MSTORE
00000c35: PUSH1 0x24
00000c37: MSTORE
00000c38: ADDRESS
00000c39: PUSH1 0x44
00000c3b: MSTORE
00000c3c: PUSH0
00000c3d: PUSH0
00000c3e: PUSH1 0x64
00000c40: PUSH0
00000c41: PUSH0
00000c42: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000c57: GAS
00000c58: CALL
00000c59: ISZERO
00000c5a: PUSH2 0x19ae
00000c5d: JUMPI
00000c5e: PUSH2 0x19bc
00000c61: JUMP
00000c62: JUMPDEST
00000c63: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000c84: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000c99: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000
00000cba: PUSH0
00000cbb: MSTORE
00000cbc: PUSH1 0x04
00000cbe: MSTORE
00000cbf: PUSH1 0x24
00000cc1: MSTORE
00000cc2: ADDRESS
00000cc3: PUSH1 0x44
00000cc5: MSTORE
00000cc6: PUSH0
00000cc7: PUSH0
00000cc8: PUSH1 0x64
00000cca: PUSH0
00000ccb: PUSH0
00000ccc: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000ce1: GAS
00000ce2: CALL
00000ce3: ISZERO
00000ce4: PUSH2 0x19ae
00000ce7: JUMPI
00000ce8: PUSH1 0xe3
00000cea: CALLDATALOAD
00000ceb: PUSH1 0x60
00000ced: SHR
00000cee: DUP1
00000cef: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000d04: EQ
00000d05: PUSH2 0x0dad
00000d08: JUMPI
00000d09: PUSH1 0xde
00000d0b: CALLDATALOAD
00000d0c: DUP1
00000d0d: PUSH1 0x08
00000d0f: SHL
00000d10: PUSH1 0xe0
00000d12: SHR
00000d13: SWAP1
00000d14: PUSH0
00000d15: BYTE
00000d16: SHL
00000d17: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000d38: DUP3
00000d39: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
00000d4e: EQ
00000d4f: PUSH2 0x0d59
00000d52: JUMPI
00000d53: SWAP1
00000d54: POP
00000d55: PUSH2 0x0d5b
00000d58: JUMP
00000d59: JUMPDEST
00000d5a: POP
00000d5b: JUMPDEST
00000d5c: SWAP1
00000d5d: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000
00000d7e: PUSH0
00000d7f: MSTORE
00000d80: PUSH1 0x04
00000d82: MSTORE
00000d83: PUSH1 0x24
00000d85: MSTORE
00000d86: ADDRESS
00000d87: PUSH1 0x44
00000d89: MSTORE
00000d8a: PUSH0
00000d8b: PUSH0
00000d8c: PUSH1 0x64
00000d8e: PUSH0
00000d8f: PUSH0
00000d90: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000da5: GAS
00000da6: CALL
00000da7: ISZERO
00000da8: PUSH2 0x19ae
00000dab: JUMPI
00000dac: PUSH0
00000dad: JUMPDEST
00000dae: POP
00000daf: PUSH1 0xf7
00000db1: DUP1
00000db2: CALLDATALOAD
00000db3: PUSH0
00000db4: BYTE
00000db5: JUMP
00000db6: JUMPDEST
00000db7: PUSH1 0xc5
00000db9: CALLDATALOAD
00000dba: DUP1
00000dbb: PUSH1 0x08
00000dbd: SHL
00000dbe: PUSH1 0xe0
00000dc0: SHR
00000dc1: SWAP1
00000dc2: PUSH0
00000dc3: BYTE
00000dc4: SHL
00000dc5: PUSH1 0xca
00000dc7: CALLDATALOAD
00000dc8: PUSH1 0x60
00000dca: SHR
00000dcb: DUP1
00000dcc: DUP3
00000dcd: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000de2: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000e03: PUSH0
00000e04: MSTORE
00000e05: PUSH1 0x04
00000e07: MSTORE
00000e08: PUSH1 0x24
00000e0a: MSTORE
00000e0b: PUSH0
00000e0c: PUSH1 0x44
00000e0e: PUSH0
00000e0f: PUSH0
00000e10: PUSH0
00000e11: SWAP5
00000e12: GAS
00000e13: CALL
00000e14: ISZERO
00000e15: PUSH2 0x19ae
00000e18: JUMPI
00000e19: PUSH32 0x573ade8100000000000000000000000000000000000000000000000000000000
00000e3a: PUSH0
00000e3b: MSTORE
00000e3c: PUSH1 0x04
00000e3e: MSTORE
00000e3f: PUSH1 0x24
00000e41: MSTORE
00000e42: PUSH1 0x02
00000e44: PUSH1 0x44
00000e46: MSTORE
00000e47: ADDRESS
00000e48: PUSH1 0x64
00000e4a: MSTORE
00000e4b: PUSH0
00000e4c: PUSH0
00000e4d: PUSH1 0x84
00000e4f: PUSH0
00000e50: PUSH0
00000e51: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000e66: GAS
00000e67: CALL
00000e68: ISZERO
00000e69: PUSH2 0x19ae
00000e6c: JUMPI
00000e6d: PUSH11 0x52b7d2dcc80cd2e3ffffff
00000e79: PUSH20 0x6b175474e89094c44da98b954eedeac495271d0f
00000e8e: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000
00000eaf: PUSH0
00000eb0: MSTORE
00000eb1: PUSH1 0x04
00000eb3: MSTORE
00000eb4: PUSH1 0x24
00000eb6: MSTORE
00000eb7: ADDRESS
00000eb8: PUSH1 0x44
00000eba: MSTORE
00000ebb: PUSH0
00000ebc: PUSH0
00000ebd: PUSH1 0x64
00000ebf: PUSH0
00000ec0: PUSH0
00000ec1: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000ed6: GAS
00000ed7: CALL
00000ed8: ISZERO
00000ed9: PUSH2 0x19ae
00000edc: JUMPI
00000edd: PUSH2 0x19bc
00000ee0: JUMP
00000ee1: JUMPDEST
00000ee2: DUP1
00000ee3: PUSH1 0x01
00000ee5: ADD
00000ee6: CALLDATALOAD
00000ee7: DUP1
00000ee8: PUSH1 0x08
00000eea: SHL
00000eeb: PUSH1 0xe0
00000eed: SHR
00000eee: SWAP1
00000eef: PUSH0
00000ef0: BYTE
00000ef1: SHL
00000ef2: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000f07: DUP1
00000f08: DUP3
00000f09: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000f1e: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00000f3f: PUSH0
00000f40: MSTORE
00000f41: PUSH1 0x04
00000f43: MSTORE
00000f44: PUSH1 0x24
00000f46: MSTORE
00000f47: PUSH0
00000f48: PUSH1 0x44
00000f4a: PUSH0
00000f4b: PUSH0
00000f4c: PUSH0
00000f4d: SWAP5
00000f4e: GAS
00000f4f: CALL
00000f50: ISZERO
00000f51: PUSH2 0x19ae
00000f54: JUMPI
00000f55: PUSH32 0x617ba03700000000000000000000000000000000000000000000000000000000
00000f76: PUSH0
00000f77: MSTORE
00000f78: PUSH1 0x04
00000f7a: MSTORE
00000f7b: PUSH1 0x24
00000f7d: MSTORE
00000f7e: ADDRESS
00000f7f: PUSH1 0x44
00000f81: MSTORE
00000f82: PUSH0
00000f83: PUSH1 0x64
00000f85: MSTORE
00000f86: PUSH0
00000f87: PUSH0
00000f88: PUSH1 0x84
00000f8a: PUSH0
00000f8b: PUSH0
00000f8c: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00000fa1: GAS
00000fa2: CALL
00000fa3: ISZERO
00000fa4: PUSH2 0x19ae
00000fa7: JUMPI
00000fa8: DUP1
00000fa9: PUSH1 0x06
00000fab: ADD
00000fac: CALLDATALOAD
00000fad: DUP1
00000fae: PUSH1 0x08
00000fb0: SHL
00000fb1: PUSH1 0xe0
00000fb3: SHR
00000fb4: SWAP1
00000fb5: PUSH0
00000fb6: BYTE
00000fb7: SHL
00000fb8: DUP2
00000fb9: PUSH1 0x0b
00000fbb: ADD
00000fbc: CALLDATALOAD
00000fbd: PUSH1 0x60
00000fbf: SHR
00000fc0: PUSH32 0xa415bcad00000000000000000000000000000000000000000000000000000000
00000fe1: PUSH0
00000fe2: MSTORE
00000fe3: PUSH1 0x04
00000fe5: MSTORE
00000fe6: PUSH1 0x24
00000fe8: MSTORE
00000fe9: PUSH1 0x02
00000feb: PUSH1 0x44
00000fed: MSTORE
00000fee: PUSH0
00000fef: PUSH1 0x64
00000ff1: MSTORE
00000ff2: ADDRESS
00000ff3: PUSH1 0x84
00000ff5: MSTORE
00000ff6: PUSH0
00000ff7: PUSH0
00000ff8: PUSH1 0xa4
00000ffa: PUSH0
00000ffb: PUSH0
00000ffc: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00001011: GAS
00001012: CALL
00001013: ISZERO
00001014: PUSH2 0x19ae
00001017: JUMPI
00001018: PUSH1 0x1f
0000101a: ADD
0000101b: DUP1
0000101c: CALLDATASIZE
0000101d: GT
0000101e: DUP2
0000101f: CALLDATALOAD
00001020: PUSH0
00001021: BYTE
00001022: JUMPI
00001023: STOP
00001024: JUMPDEST
00001025: DUP1
00001026: PUSH1 0x01
00001028: ADD
00001029: CALLDATALOAD
0000102a: DUP1
0000102b: PUSH1 0x08
0000102d: SHL
0000102e: PUSH1 0xe0
00001030: SHR
00001031: SWAP1
00001032: PUSH0
00001033: BYTE
00001034: SHL
00001035: DUP2
00001036: PUSH1 0x06
00001038: ADD
00001039: CALLDATALOAD
0000103a: PUSH1 0x60
0000103c: SHR
0000103d: DUP1
0000103e: DUP3
0000103f: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
00001054: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00001075: PUSH0
00001076: MSTORE
00001077: PUSH1 0x04
00001079: MSTORE
0000107a: PUSH1 0x24
0000107c: MSTORE
0000107d: PUSH0
0000107e: PUSH1 0x44
00001080: PUSH0
00001081: PUSH0
00001082: PUSH0
00001083: SWAP5
00001084: GAS
00001085: CALL
00001086: ISZERO
00001087: PUSH2 0x19ae
0000108a: JUMPI
0000108b: PUSH32 0x573ade8100000000000000000000000000000000000000000000000000000000
000010ac: PUSH0
000010ad: MSTORE
000010ae: PUSH1 0x04
000010b0: MSTORE
000010b1: PUSH1 0x24
000010b3: MSTORE
000010b4: PUSH1 0x02
000010b6: PUSH1 0x44
000010b8: MSTORE
000010b9: ADDRESS
000010ba: PUSH1 0x64
000010bc: MSTORE
000010bd: PUSH0
000010be: PUSH0
000010bf: PUSH1 0x84
000010c1: PUSH0
000010c2: PUSH0
000010c3: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
000010d8: GAS
000010d9: CALL
000010da: ISZERO
000010db: PUSH2 0x19ae
000010de: JUMPI
000010df: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001100: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001115: PUSH32 0x69328dec00000000000000000000000000000000000000000000000000000000
00001136: PUSH0
00001137: MSTORE
00001138: PUSH1 0x04
0000113a: MSTORE
0000113b: PUSH1 0x24
0000113d: MSTORE
0000113e: ADDRESS
0000113f: PUSH1 0x44
00001141: MSTORE
00001142: PUSH0
00001143: PUSH0
00001144: PUSH1 0x64
00001146: PUSH0
00001147: PUSH0
00001148: PUSH20 0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2
0000115d: GAS
0000115e: CALL
0000115f: ISZERO
00001160: PUSH2 0x19ae
00001163: JUMPI
00001164: PUSH1 0x1a
00001166: ADD
00001167: DUP1
00001168: CALLDATASIZE
00001169: GT
0000116a: DUP2
0000116b: CALLDATALOAD
0000116c: PUSH0
0000116d: BYTE
0000116e: JUMPI
0000116f: STOP
00001170: JUMPDEST
00001171: DUP1
00001172: PUSH1 0x21
00001174: ADD
00001175: CALLDATALOAD
00001176: DUP1
00001177: PUSH1 0x08
00001179: SHL
0000117a: PUSH1 0xe0
0000117c: SHR
0000117d: SWAP1
0000117e: PUSH0
0000117f: BYTE
00001180: SHL
00001181: DUP2
00001182: PUSH1 0x3a
00001184: ADD
00001185: CALLDATALOAD
00001186: PUSH1 0x60
00001188: SHR
00001189: DUP3
0000118a: PUSH1 0x26
0000118c: ADD
0000118d: CALLDATALOAD
0000118e: PUSH1 0x60
00001190: SHR
00001191: DUP4
00001192: PUSH1 0x01
00001194: ADD
00001195: CALLDATALOAD
00001196: DUP2
00001197: DUP5
00001198: PUSH20 0xba12222222228d8ba445958a75a0704d566bf2c8
000011ad: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
000011ce: PUSH0
000011cf: MSTORE
000011d0: PUSH1 0x04
000011d2: MSTORE
000011d3: PUSH1 0x24
000011d5: MSTORE
000011d6: PUSH0
000011d7: PUSH1 0x44
000011d9: PUSH0
000011da: PUSH0
000011db: PUSH0
000011dc: SWAP5
000011dd: GAS
000011de: CALL
000011df: ISZERO
000011e0: PUSH2 0x19ae
000011e3: JUMPI
000011e4: PUSH32 0x52bbbe2900000000000000000000000000000000000000000000000000000000
00001205: PUSH0
00001206: MSTORE
00001207: PUSH1 0xe0
00001209: PUSH1 0x04
0000120b: MSTORE
0000120c: ADDRESS
0000120d: PUSH1 0x24
0000120f: MSTORE
00001210: PUSH0
00001211: PUSH1 0x44
00001213: MSTORE
00001214: ADDRESS
00001215: PUSH1 0x64
00001217: MSTORE
00001218: PUSH0
00001219: PUSH1 0x84
0000121b: MSTORE
0000121c: PUSH0
0000121d: PUSH1 0xa4
0000121f: MSTORE
00001220: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001241: PUSH1 0xc4
00001243: MSTORE
00001244: PUSH1 0xe4
00001246: MSTORE
00001247: PUSH0
00001248: PUSH2 0x0104
0000124b: MSTORE
0000124c: PUSH2 0x0124
0000124f: MSTORE
00001250: PUSH2 0x0144
00001253: MSTORE
00001254: PUSH2 0x0164
00001257: MSTORE
00001258: PUSH1 0xc0
0000125a: PUSH2 0x0184
0000125d: MSTORE
0000125e: PUSH0
0000125f: PUSH2 0x01a4
00001262: MSTORE
00001263: PUSH0
00001264: PUSH0
00001265: PUSH2 0x01c4
00001268: PUSH0
00001269: PUSH0
0000126a: PUSH20 0xba12222222228d8ba445958a75a0704d566bf2c8
0000127f: GAS
00001280: CALL
00001281: ISZERO
00001282: PUSH2 0x19ae
00001285: JUMPI
00001286: PUSH1 0x4e
00001288: ADD
00001289: DUP1
0000128a: CALLDATASIZE
0000128b: GT
0000128c: DUP2
0000128d: CALLDATALOAD
0000128e: PUSH0
0000128f: BYTE
00001290: JUMPI
00001291: STOP
00001292: JUMPDEST
00001293: DUP1
00001294: PUSH1 0x01
00001296: ADD
00001297: CALLDATALOAD
00001298: PUSH1 0x60
0000129a: SHR
0000129b: DUP2
0000129c: PUSH1 0x15
0000129e: ADD
0000129f: CALLDATALOAD
000012a0: DUP1
000012a1: PUSH1 0x08
000012a3: SHL
000012a4: PUSH1 0xe0
000012a6: SHR
000012a7: SWAP1
000012a8: PUSH0
000012a9: BYTE
000012aa: SHL
000012ab: DUP3
000012ac: PUSH1 0x1a
000012ae: ADD
000012af: CALLDATALOAD
000012b0: PUSH1 0x60
000012b2: SHR
000012b3: DUP2
000012b4: DUP4
000012b5: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
000012d6: PUSH0
000012d7: MSTORE
000012d8: PUSH1 0x04
000012da: MSTORE
000012db: PUSH1 0x24
000012dd: MSTORE
000012de: PUSH0
000012df: PUSH1 0x44
000012e1: PUSH0
000012e2: PUSH0
000012e3: PUSH0
000012e4: SWAP5
000012e5: GAS
000012e6: CALL
000012e7: ISZERO
000012e8: PUSH2 0x19ae
000012eb: JUMPI
000012ec: DUP3
000012ed: PUSH1 0x2e
000012ef: ADD
000012f0: DUP1
000012f1: CALLDATALOAD
000012f2: PUSH1 0x01
000012f4: BYTE
000012f5: SWAP1
000012f6: CALLDATALOAD
000012f7: PUSH0
000012f8: BYTE
000012f9: PUSH32 0x3df0212400000000000000000000000000000000000000000000000000000000
0000131a: PUSH32 0x5b41b90800000000000000000000000000000000000000000000000000000000
0000133b: DUP7
0000133c: PUSH1 0x30
0000133e: ADD
0000133f: CALLDATALOAD
00001340: PUSH0
00001341: BYTE
00001342: PUSH2 0x134c
00001345: JUMPI
00001346: SWAP1
00001347: POP
00001348: PUSH2 0x134e
0000134b: JUMP
0000134c: JUMPDEST
0000134d: POP
0000134e: JUMPDEST
0000134f: PUSH0
00001350: MSTORE
00001351: PUSH1 0x04
00001353: MSTORE
00001354: PUSH1 0x24
00001356: MSTORE
00001357: PUSH1 0x44
00001359: MSTORE
0000135a: PUSH0
0000135b: PUSH1 0x64
0000135d: MSTORE
0000135e: PUSH0
0000135f: PUSH1 0x84
00001361: PUSH0
00001362: PUSH0
00001363: PUSH0
00001364: SWAP5
00001365: GAS
00001366: CALL
00001367: ISZERO
00001368: PUSH2 0x19ae
0000136b: JUMPI
0000136c: PUSH1 0x31
0000136e: ADD
0000136f: DUP1
00001370: CALLDATASIZE
00001371: GT
00001372: DUP2
00001373: CALLDATALOAD
00001374: PUSH0
00001375: BYTE
00001376: JUMPI
00001377: STOP
00001378: JUMPDEST
00001379: DUP1
0000137a: PUSH1 0x01
0000137c: ADD
0000137d: CALLDATALOAD
0000137e: PUSH1 0x60
00001380: SHR
00001381: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001396: DUP3
00001397: PUSH1 0x15
00001399: ADD
0000139a: CALLDATALOAD
0000139b: DUP1
0000139c: PUSH1 0x08
0000139e: SHL
0000139f: PUSH1 0xe0
000013a1: SHR
000013a2: SWAP1
000013a3: PUSH0
000013a4: BYTE
000013a5: SHL
000013a6: DUP3
000013a7: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000013c8: PUSH0
000013c9: MSTORE
000013ca: PUSH1 0x04
000013cc: MSTORE
000013cd: PUSH1 0x24
000013cf: MSTORE
000013d0: PUSH0
000013d1: PUSH1 0x44
000013d3: PUSH0
000013d4: PUSH0
000013d5: PUSH0
000013d6: SWAP5
000013d7: GAS
000013d8: CALL
000013d9: ISZERO
000013da: PUSH2 0x19ae
000013dd: JUMPI
000013de: DUP2
000013df: PUSH1 0x1a
000013e1: ADD
000013e2: CALLDATALOAD
000013e3: DUP1
000013e4: PUSH1 0x08
000013e6: SHL
000013e7: PUSH1 0xe0
000013e9: SHR
000013ea: SWAP1
000013eb: PUSH0
000013ec: BYTE
000013ed: SHL
000013ee: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000
0000140f: PUSH0
00001410: MSTORE
00001411: PUSH0
00001412: PUSH1 0x04
00001414: MSTORE
00001415: PUSH1 0x24
00001417: MSTORE
00001418: ADDRESS
00001419: PUSH1 0x44
0000141b: MSTORE
0000141c: PUSH1 0x80
0000141e: PUSH1 0x64
00001420: MSTORE
00001421: PUSH0
00001422: PUSH1 0x84
00001424: MSTORE
00001425: PUSH0
00001426: PUSH1 0xa4
00001428: PUSH0
00001429: PUSH0
0000142a: PUSH0
0000142b: SWAP5
0000142c: GAS
0000142d: CALL
0000142e: ISZERO
0000142f: PUSH2 0x19ae
00001432: JUMPI
00001433: PUSH1 0x1f
00001435: ADD
00001436: DUP1
00001437: CALLDATASIZE
00001438: GT
00001439: DUP2
0000143a: CALLDATALOAD
0000143b: PUSH0
0000143c: BYTE
0000143d: JUMPI
0000143e: STOP
0000143f: JUMPDEST
00001440: DUP1
00001441: PUSH1 0x01
00001443: ADD
00001444: CALLDATALOAD
00001445: PUSH1 0x60
00001447: SHR
00001448: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
0000145d: DUP3
0000145e: PUSH1 0x15
00001460: ADD
00001461: CALLDATALOAD
00001462: DUP1
00001463: PUSH1 0x08
00001465: SHL
00001466: PUSH1 0xe0
00001468: SHR
00001469: SWAP1
0000146a: PUSH0
0000146b: BYTE
0000146c: SHL
0000146d: DUP3
0000146e: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
0000148f: PUSH0
00001490: MSTORE
00001491: PUSH1 0x04
00001493: MSTORE
00001494: PUSH1 0x24
00001496: MSTORE
00001497: PUSH0
00001498: PUSH1 0x44
0000149a: PUSH0
0000149b: PUSH0
0000149c: PUSH0
0000149d: SWAP5
0000149e: GAS
0000149f: CALL
000014a0: ISZERO
000014a1: PUSH2 0x19ae
000014a4: JUMPI
000014a5: DUP2
000014a6: PUSH1 0x1a
000014a8: ADD
000014a9: CALLDATALOAD
000014aa: DUP1
000014ab: PUSH1 0x08
000014ad: SHL
000014ae: PUSH1 0xe0
000014b0: SHR
000014b1: SWAP1
000014b2: PUSH0
000014b3: BYTE
000014b4: SHL
000014b5: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000
000014d6: PUSH0
000014d7: MSTORE
000014d8: PUSH1 0x04
000014da: MSTORE
000014db: PUSH0
000014dc: PUSH1 0x24
000014de: MSTORE
000014df: ADDRESS
000014e0: PUSH1 0x44
000014e2: MSTORE
000014e3: PUSH1 0x80
000014e5: PUSH1 0x64
000014e7: MSTORE
000014e8: PUSH0
000014e9: PUSH1 0x84
000014eb: MSTORE
000014ec: PUSH0
000014ed: PUSH1 0xa4
000014ef: PUSH0
000014f0: PUSH0
000014f1: PUSH0
000014f2: SWAP5
000014f3: GAS
000014f4: CALL
000014f5: ISZERO
000014f6: PUSH2 0x19ae
000014f9: JUMPI
000014fa: PUSH1 0x1f
000014fc: ADD
000014fd: DUP1
000014fe: CALLDATASIZE
000014ff: GT
00001500: DUP2
00001501: CALLDATALOAD
00001502: PUSH0
00001503: BYTE
00001504: JUMPI
00001505: STOP
00001506: JUMPDEST
00001507: DUP1
00001508: PUSH1 0x01
0000150a: ADD
0000150b: CALLDATALOAD
0000150c: PUSH1 0x60
0000150e: SHR
0000150f: DUP2
00001510: PUSH1 0x1f
00001512: ADD
00001513: CALLDATALOAD
00001514: PUSH1 0x60
00001516: SHR
00001517: DUP3
00001518: PUSH1 0x15
0000151a: ADD
0000151b: CALLDATALOAD
0000151c: DUP1
0000151d: PUSH1 0x08
0000151f: SHL
00001520: PUSH1 0xe0
00001522: SHR
00001523: SWAP1
00001524: PUSH0
00001525: BYTE
00001526: SHL
00001527: DUP3
00001528: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001549: PUSH0
0000154a: MSTORE
0000154b: PUSH1 0x04
0000154d: MSTORE
0000154e: PUSH1 0x24
00001550: MSTORE
00001551: PUSH0
00001552: PUSH1 0x44
00001554: PUSH0
00001555: PUSH0
00001556: PUSH0
00001557: SWAP5
00001558: GAS
00001559: CALL
0000155a: ISZERO
0000155b: PUSH2 0x19ae
0000155e: JUMPI
0000155f: DUP2
00001560: PUSH1 0x1a
00001562: ADD
00001563: CALLDATALOAD
00001564: DUP1
00001565: PUSH1 0x08
00001567: SHL
00001568: PUSH1 0xe0
0000156a: SHR
0000156b: SWAP1
0000156c: PUSH0
0000156d: BYTE
0000156e: SHL
0000156f: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000
00001590: PUSH0
00001591: MSTORE
00001592: PUSH0
00001593: PUSH1 0x04
00001595: MSTORE
00001596: PUSH1 0x24
00001598: MSTORE
00001599: ADDRESS
0000159a: PUSH1 0x44
0000159c: MSTORE
0000159d: PUSH1 0x80
0000159f: PUSH1 0x64
000015a1: MSTORE
000015a2: PUSH0
000015a3: PUSH1 0x84
000015a5: MSTORE
000015a6: PUSH0
000015a7: PUSH1 0xa4
000015a9: PUSH0
000015aa: PUSH0
000015ab: PUSH0
000015ac: SWAP5
000015ad: GAS
000015ae: CALL
000015af: ISZERO
000015b0: PUSH2 0x19ae
000015b3: JUMPI
000015b4: PUSH1 0x33
000015b6: ADD
000015b7: DUP1
000015b8: CALLDATASIZE
000015b9: GT
000015ba: DUP2
000015bb: CALLDATALOAD
000015bc: PUSH0
000015bd: BYTE
000015be: JUMPI
000015bf: STOP
000015c0: JUMPDEST
000015c1: DUP1
000015c2: PUSH1 0x01
000015c4: ADD
000015c5: CALLDATALOAD
000015c6: PUSH1 0x60
000015c8: SHR
000015c9: DUP2
000015ca: PUSH1 0x1f
000015cc: ADD
000015cd: CALLDATALOAD
000015ce: PUSH1 0x60
000015d0: SHR
000015d1: DUP3
000015d2: PUSH1 0x15
000015d4: ADD
000015d5: CALLDATALOAD
000015d6: DUP1
000015d7: PUSH1 0x08
000015d9: SHL
000015da: PUSH1 0xe0
000015dc: SHR
000015dd: SWAP1
000015de: PUSH0
000015df: BYTE
000015e0: SHL
000015e1: DUP3
000015e2: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001603: PUSH0
00001604: MSTORE
00001605: PUSH1 0x04
00001607: MSTORE
00001608: PUSH1 0x24
0000160a: MSTORE
0000160b: PUSH0
0000160c: PUSH1 0x44
0000160e: PUSH0
0000160f: PUSH0
00001610: PUSH0
00001611: SWAP5
00001612: GAS
00001613: CALL
00001614: ISZERO
00001615: PUSH2 0x19ae
00001618: JUMPI
00001619: DUP2
0000161a: PUSH1 0x1a
0000161c: ADD
0000161d: CALLDATALOAD
0000161e: DUP1
0000161f: PUSH1 0x08
00001621: SHL
00001622: PUSH1 0xe0
00001624: SHR
00001625: SWAP1
00001626: PUSH0
00001627: BYTE
00001628: SHL
00001629: PUSH32 0x022c0d9f00000000000000000000000000000000000000000000000000000000
0000164a: PUSH0
0000164b: MSTORE
0000164c: PUSH1 0x04
0000164e: MSTORE
0000164f: PUSH0
00001650: PUSH1 0x24
00001652: MSTORE
00001653: ADDRESS
00001654: PUSH1 0x44
00001656: MSTORE
00001657: PUSH1 0x80
00001659: PUSH1 0x64
0000165b: MSTORE
0000165c: PUSH0
0000165d: PUSH1 0x84
0000165f: MSTORE
00001660: PUSH0
00001661: PUSH1 0xa4
00001663: PUSH0
00001664: PUSH0
00001665: PUSH0
00001666: SWAP5
00001667: GAS
00001668: CALL
00001669: ISZERO
0000166a: PUSH2 0x19ae
0000166d: JUMPI
0000166e: PUSH1 0x33
00001670: ADD
00001671: DUP1
00001672: CALLDATASIZE
00001673: GT
00001674: DUP2
00001675: CALLDATALOAD
00001676: PUSH0
00001677: BYTE
00001678: JUMPI
00001679: STOP
0000167a: JUMPDEST
0000167b: DUP1
0000167c: PUSH1 0x15
0000167e: ADD
0000167f: CALLDATALOAD
00001680: DUP1
00001681: PUSH1 0x08
00001683: SHL
00001684: PUSH1 0xe0
00001686: SHR
00001687: SWAP1
00001688: PUSH0
00001689: BYTE
0000168a: SHL
0000168b: DUP2
0000168c: PUSH1 0x01
0000168e: ADD
0000168f: CALLDATALOAD
00001690: PUSH1 0x60
00001692: SHR
00001693: DUP3
00001694: PUSH1 0x1a
00001696: ADD
00001697: CALLDATALOAD
00001698: PUSH1 0x60
0000169a: SHR
0000169b: PUSH32 0xb6f9de9500000000000000000000000000000000000000000000000000000000
000016bc: PUSH0
000016bd: MSTORE
000016be: PUSH0
000016bf: PUSH1 0x04
000016c1: MSTORE
000016c2: PUSH1 0x80
000016c4: PUSH1 0x24
000016c6: MSTORE
000016c7: ADDRESS
000016c8: PUSH1 0x44
000016ca: MSTORE
000016cb: TIMESTAMP
000016cc: PUSH1 0x64
000016ce: MSTORE
000016cf: PUSH1 0x02
000016d1: PUSH1 0x84
000016d3: MSTORE
000016d4: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000016e9: PUSH1 0xa4
000016eb: MSTORE
000016ec: PUSH1 0xc4
000016ee: MSTORE
000016ef: PUSH1 0xe4
000016f1: PUSH0
000016f2: PUSH0
000016f3: SWAP4
000016f4: PUSH0
000016f5: SWAP4
000016f6: GAS
000016f7: CALL
000016f8: ISZERO
000016f9: PUSH2 0x19ae
000016fc: JUMPI
000016fd: PUSH1 0x2e
000016ff: ADD
00001700: DUP1
00001701: CALLDATASIZE
00001702: GT
00001703: DUP2
00001704: CALLDATALOAD
00001705: PUSH0
00001706: BYTE
00001707: JUMPI
00001708: STOP
00001709: JUMPDEST
0000170a: DUP1
0000170b: PUSH1 0x2e
0000170d: ADD
0000170e: CALLDATALOAD
0000170f: DUP1
00001710: PUSH1 0x08
00001712: SHL
00001713: PUSH1 0xe0
00001715: SHR
00001716: SWAP1
00001717: PUSH0
00001718: BYTE
00001719: SHL
0000171a: DUP2
0000171b: PUSH1 0x01
0000171d: ADD
0000171e: CALLDATALOAD
0000171f: PUSH1 0x60
00001721: SHR
00001722: DUP3
00001723: PUSH1 0x1a
00001725: ADD
00001726: CALLDATALOAD
00001727: PUSH1 0x60
00001729: SHR
0000172a: DUP4
0000172b: PUSH1 0x15
0000172d: ADD
0000172e: CALLDATALOAD
0000172f: DUP1
00001730: PUSH1 0x08
00001732: SHL
00001733: PUSH1 0xe0
00001735: SHR
00001736: SWAP1
00001737: PUSH0
00001738: BYTE
00001739: SHL
0000173a: DUP2
0000173b: DUP2
0000173c: DUP5
0000173d: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
0000175e: PUSH0
0000175f: MSTORE
00001760: PUSH1 0x04
00001762: MSTORE
00001763: PUSH1 0x24
00001765: MSTORE
00001766: PUSH0
00001767: PUSH1 0x44
00001769: PUSH0
0000176a: PUSH0
0000176b: PUSH0
0000176c: SWAP5
0000176d: GAS
0000176e: CALL
0000176f: ISZERO
00001770: PUSH2 0x19ae
00001773: JUMPI
00001774: PUSH32 0x791ac94700000000000000000000000000000000000000000000000000000000
00001795: PUSH0
00001796: MSTORE
00001797: PUSH1 0x04
00001799: MSTORE
0000179a: PUSH0
0000179b: PUSH1 0x24
0000179d: MSTORE
0000179e: PUSH1 0xa0
000017a0: PUSH1 0x44
000017a2: MSTORE
000017a3: ADDRESS
000017a4: PUSH1 0x64
000017a6: MSTORE
000017a7: TIMESTAMP
000017a8: PUSH1 0x84
000017aa: MSTORE
000017ab: PUSH1 0x02
000017ad: PUSH1 0xa4
000017af: MSTORE
000017b0: PUSH1 0xc4
000017b2: MSTORE
000017b3: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
000017c8: PUSH1 0xe4
000017ca: MSTORE
000017cb: PUSH2 0x0104
000017ce: PUSH0
000017cf: PUSH0
000017d0: SWAP4
000017d1: PUSH0
000017d2: SWAP4
000017d3: GAS
000017d4: CALL
000017d5: ISZERO
000017d6: PUSH2 0x19ae
000017d9: JUMPI
000017da: PUSH1 0x33
000017dc: ADD
000017dd: DUP1
000017de: CALLDATASIZE
000017df: GT
000017e0: DUP2
000017e1: CALLDATALOAD
000017e2: PUSH0
000017e3: BYTE
000017e4: JUMPI
000017e5: STOP
000017e6: JUMPDEST
000017e7: SELFBALANCE
000017e8: ORIGIN
000017e9: PUSH0
000017ea: PUSH0
000017eb: PUSH0
000017ec: SWAP4
000017ed: PUSH0
000017ee: SWAP4
000017ef: GAS
000017f0: CALL
000017f1: ISZERO
000017f2: PUSH2 0x19ae
000017f5: JUMPI
000017f6: PUSH1 0x01
000017f8: ADD
000017f9: DUP1
000017fa: CALLDATASIZE
000017fb: GT
000017fc: DUP2
000017fd: CALLDATALOAD
000017fe: PUSH0
000017ff: BYTE
00001800: JUMPI
00001801: STOP
00001802: JUMPDEST
00001803: DUP1
00001804: PUSH1 0x01
00001806: ADD
00001807: CALLDATALOAD
00001808: PUSH1 0x60
0000180a: SHR
0000180b: DUP2
0000180c: PUSH1 0x15
0000180e: ADD
0000180f: CALLDATALOAD
00001810: ORIGIN
00001811: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001832: PUSH0
00001833: MSTORE
00001834: PUSH1 0x04
00001836: MSTORE
00001837: PUSH1 0x24
00001839: MSTORE
0000183a: PUSH0
0000183b: PUSH1 0x44
0000183d: PUSH0
0000183e: PUSH0
0000183f: PUSH0
00001840: SWAP5
00001841: GAS
00001842: CALL
00001843: ISZERO
00001844: PUSH2 0x19ae
00001847: JUMPI
00001848: PUSH1 0x35
0000184a: ADD
0000184b: DUP1
0000184c: CALLDATASIZE
0000184d: GT
0000184e: DUP2
0000184f: CALLDATALOAD
00001850: PUSH0
00001851: BYTE
00001852: JUMPI
00001853: STOP
00001854: JUMPDEST
00001855: DUP1
00001856: PUSH1 0x01
00001858: ADD
00001859: CALLDATALOAD
0000185a: DUP1
0000185b: PUSH1 0x08
0000185d: SHL
0000185e: PUSH1 0xe0
00001860: SHR
00001861: SWAP1
00001862: PUSH0
00001863: BYTE
00001864: SHL
00001865: COINBASE
00001866: PUSH0
00001867: PUSH0
00001868: PUSH0
00001869: SWAP4
0000186a: PUSH0
0000186b: SWAP4
0000186c: GAS
0000186d: CALL
0000186e: ISZERO
0000186f: PUSH2 0x19ae
00001872: JUMPI
00001873: PUSH1 0x06
00001875: ADD
00001876: DUP1
00001877: CALLDATASIZE
00001878: GT
00001879: DUP2
0000187a: CALLDATALOAD
0000187b: PUSH0
0000187c: BYTE
0000187d: JUMPI
0000187e: STOP
0000187f: JUMPDEST
00001880: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001895: ADDRESS
00001896: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
000018b7: PUSH0
000018b8: MSTORE
000018b9: PUSH1 0x04
000018bb: MSTORE
000018bc: PUSH0
000018bd: PUSH1 0x24
000018bf: PUSH0
000018c0: PUSH0
000018c1: PUSH1 0x20
000018c3: SWAP5
000018c4: GAS
000018c5: CALL
000018c6: ISZERO
000018c7: PUSH2 0x19ae
000018ca: JUMPI
000018cb: PUSH0
000018cc: MLOAD
000018cd: DUP1
000018ce: DUP3
000018cf: PUSH1 0x01
000018d1: ADD
000018d2: CALLDATALOAD
000018d3: DUP1
000018d4: PUSH1 0x08
000018d6: SHL
000018d7: PUSH1 0xe0
000018d9: SHR
000018da: SWAP1
000018db: PUSH0
000018dc: BYTE
000018dd: SHL
000018de: GT
000018df: PUSH2 0x19b3
000018e2: JUMPI
000018e3: STOP
000018e4: JUMPDEST
000018e5: PUSH32 0xd0e30db000000000000000000000000000000000000000000000000000000000
00001906: PUSH0
00001907: MSTORE
00001908: PUSH0
00001909: PUSH0
0000190a: PUSH1 0x04
0000190c: PUSH0
0000190d: DUP5
0000190e: PUSH1 0x01
00001910: ADD
00001911: CALLDATALOAD
00001912: DUP1
00001913: PUSH1 0x08
00001915: SHL
00001916: PUSH1 0xe0
00001918: SHR
00001919: SWAP1
0000191a: PUSH0
0000191b: BYTE
0000191c: SHL
0000191d: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001932: GAS
00001933: CALL
00001934: ISZERO
00001935: PUSH2 0x19ae
00001938: JUMPI
00001939: PUSH1 0x06
0000193b: ADD
0000193c: DUP1
0000193d: CALLDATASIZE
0000193e: GT
0000193f: DUP2
00001940: CALLDATALOAD
00001941: PUSH0
00001942: BYTE
00001943: JUMPI
00001944: STOP
00001945: JUMPDEST
00001946: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000
00001967: PUSH0
00001968: MSTORE
00001969: DUP1
0000196a: PUSH1 0x01
0000196c: ADD
0000196d: CALLDATALOAD
0000196e: DUP1
0000196f: PUSH1 0x08
00001971: SHL
00001972: PUSH1 0xe0
00001974: SHR
00001975: SWAP1
00001976: PUSH0
00001977: BYTE
00001978: SHL
00001979: PUSH1 0x04
0000197b: MSTORE
0000197c: PUSH0
0000197d: PUSH0
0000197e: PUSH1 0x24
00001980: PUSH0
00001981: PUSH0
00001982: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001997: GAS
00001998: CALL
00001999: ISZERO
0000199a: PUSH2 0x19ae
0000199d: JUMPI
0000199e: PUSH1 0x06
000019a0: ADD
000019a1: DUP1
000019a2: CALLDATASIZE
000019a3: GT
000019a4: DUP2
000019a5: CALLDATALOAD
000019a6: PUSH0
000019a7: BYTE
000019a8: JUMPI
000019a9: STOP
000019aa: JUMPDEST
000019ab: PUSH0
000019ac: PUSH0
000019ad: REVERT
000019ae: JUMPDEST
000019af: PUSH1 0x04
000019b1: PUSH0
000019b2: REVERT
000019b3: JUMPDEST
000019b4: PUSH0
000019b5: MSTORE
000019b6: PUSH1 0x20
000019b8: PUSH0
000019b9: REVERT
000019ba: JUMPDEST
000019bb: STOP
000019bc: JUMPDEST
000019bd: PUSH32 0x439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9
000019de: PUSH0
000019df: MSTORE
000019e0: PUSH1 0x20
000019e2: PUSH0
000019e3: RETURN
000019e4: JUMPDEST
000019e5: PUSH0
000019e6: MSTORE
000019e7: PUSH1 0x20
000019e9: PUSH0
000019ea: RETURN
000019eb: JUMPDEST
000019ec: PUSH0
000019ed: MSTORE
000019ee: PUSH1 0x20
000019f0: MSTORE
000019f1: PUSH1 0x40
000019f3: MSTORE
000019f4: PUSH1 0x60
000019f6: MSTORE
000019f7: PUSH1 0x80
000019f9: MSTORE
000019fa: PUSH1 0xa0
000019fc: MSTORE
000019fd: PUSH1 0xc0
000019ff: MSTORE
00001a00: PUSH1 0xe0
00001a02: PUSH0
00001a03: RETURN
00001a04: JUMPDEST
00001a05: MSIZE
00001a06: PUSH0
00001a07: RETURN

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x",
            "selector": "fallback",
            "calldata_variants": [
                "0x"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 22,
            "type": "msg_sender_eq_const",
            "value": 1.1263541648644118e+48
        },
        {
            "pc": 1920,
            "type": "msg_sender_eq_const",
            "value": 5.5065594205696735e+47
        },
        {
            "pc": 1929,
            "type": "msg_sender_eq_const",
            "value": 0
        },
        {
            "pc": 6120,
            "type": "tx_origin_used"
        },
        {
            "pc": 6160,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b
call_targets: 0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x",
            "selector": "fallback",
            "calldata_variants": [
                "0x"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 232,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1879,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant_zero",
            "target_expression_category": "computed"
        },
        {
            "pc": 2327,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant_zero",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 59,
    "guards_detected": [
        {
            "pc": 22,
            "type": "msg_sender_eq_const",
            "value": 1.1263541648644118e+48
        },
        {
            "pc": 1920,
            "type": "msg_sender_eq_const",
            "value": 5.5065594205696735e+47
        },
        {
            "pc": 1929,
            "type": "msg_sender_eq_const",
            "value": 0
        },
        {
            "pc": 6120,
            "type": "tx_origin_used"
        },
        {
            "pc": 6160,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 6
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b
call_targets: 0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xe963091fdfb14d6acf075b94d11bf7692973f3e211f4a8dc2926e3b6daef402b",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6dc71298ce1b61ba4c83d5cdf4b3b1e9aa558a7f"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x",
            "selector": "fallback",
            "calldata_variants": [
                "0x"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 232,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5879,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant",
            "target_expression_category": "constant"
        },
        {
            "pc": 6100,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant",
            "target_expression_category": "constant"
        }
    ],
    "eth_value_calls": 6,
    "guards_detected": [
        {
            "pc": 22,
            "type": "msg_sender_eq_const",
            "value": 1.1263541648644118e+48
        },
        {
            "pc": 1920,
            "type": "msg_sender_eq_const",
            "value": 5.5065594205696735e+47
        },
        {
            "pc": 1929,
            "type": "msg_sender_eq_const",
            "value": 0
        },
        {
            "pc": 6120,
            "type": "tx_origin_used"
        },
        {
            "pc": 6160,
            "type": "tx_origin_used"
        }
    ]
}
low other codex Payouts/sweeps use tx.origin as recipient 65 no
view
evidence_json
{
    "evidence": "Runtime shows ORIGIN used directly in CALL paths, e.g. `...47325f5f5f935f935af1...` (SELFBALANCE + ORIGIN + CALL) and `...327fa9059cbb...` (ERC20 transfer selector with ORIGIN as recipient).",
    "locations": [
        "BYTECODE_BUNDLE.txt:5"
    ],
    "recommendation": "Avoid tx.origin for payouts. Use msg.sender or an explicit recipient address from calldata, and gate sweep functionality with explicit access control if it should not be public.",
    "exploit_scenario": "If this router is called through a contract (multisig, relayer, or other integrating contract), any sweep of ETH or tokens sends funds to the EOA tx.origin rather than the calling contract or an explicit recipient. This can break custody assumptions for contract wallets and allow unintended fund redirection to the signer\u2019s EOA when the router holds leftover ETH/tokens."
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 59
}