c73bdf6c-5147-4fd5-ad47-f180be523585
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30531 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 104045 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 104046 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 104047 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 104048 | capability.graph | complete | 1 / 3 | 1 week ago |
| 104049 | detector.run | complete | 1 / 3 | 1 week ago |
| 104050 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:342374] OpenAI Codex v0.77.0 (research preview)
[codex:342374] --------
[codex:342374] workdir: /tmp/codex-multi-izhz5eih
[codex:342374] model: gpt-5.2-codex
[codex:342374] provider: openai
[codex:342374] approval: never
[codex:342374] sandbox: read-only
[codex:342374] reasoning effort: xhigh
[codex:342374] reasoning summaries: auto
[codex:342374] session id: 019b6b0c-98f1-7811-bfef-6683ca8eede2
[codex:342374] --------
[codex:342374] user
[codex:342374] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:342374] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:342374]
[codex:342374] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:342374]
[codex:342374] Output MUST be valid JSON matching the provided schema.
[codex:342374] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:342374] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:342374]
[codex:342374] Output constraints (IMPORTANT):
[codex:342374] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:342374] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:342374] mcp startup: no servers
[codex:342374]
[codex:342374] thinking
[codex:342374] **Reading BYTECODE_BUNDLE.txt**
[codex:342374] exec
[codex:342374] /bin/bash -lc ls in /tmp/codex-multi-izhz5eih succeeded in 6ms:
[codex:342374] BYTECODE_BUNDLE.txt
[codex:342374] codex-output-schema.json
[codex:342374] exec
[codex:342374] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-izhz5eih succeeded in 5ms:
[codex:342374] Runtime bytecode bundle for best-effort auditing.
[codex:342374] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:342374]
[codex:342374] FILE: runtime_bytecode.hex
[codex:342374] 0x6080604052600436106100a4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063049e1d4d146100a657806310bfce71146100e35780633018205f1461010c5780633e104a95146101375780634ee7f87d1461016257806362c529e41461019f57806392eefe9b146101c85780639ce110d7146101f1578063ee8bd82d1461021c578063f77c479114610259575b005b3480156100b257600080fd5b506100cd60048036036100c89190810190610e11565b610284565b6040516100da9190610ed2565b60405180910390f35b3480156100ef57600080fd5b5061010a60048036036101059190810190610d94565b61036b565b005b34801561011857600080fd5b506101216103ab565b60405161012e9190610e8e565b60405180910390f35b34801561014357600080fd5b5061014c6103d4565b6040516101599190610e8e565b60405180910390f35b34801561016e57600080fd5b5061018960048036036101849190810190610d2d565b6103fe565b6040516101969190610eed565b60405180910390f35b3480156101ab57600080fd5b506101c660048036036101c19190810190610e11565b610563565b005b3480156101d457600080fd5b506101ef60048036036101ea9190810190610d04565b610718565b005b3480156101fd57600080fd5b506102066108b5565b6040516102139190610e8e565b60405180910390f35b34801561022857600080fd5b50610243600480360361023e9190810190610dd5565b6108db565b6040516102509190610e8e565b60405180910390f35b34801561026557600080fd5b5061026e610942565b60405161027b9190610e8e565b60405180910390f35b6000806060600080610294610967565b60008088600001519650886020015195508860400151945088608001519350886060015192506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b6103208787876103fe565b915061032c82846108db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614975050505050505050919050565b60008090505b81518110156103a75761039a828281518110151561038b57fe5b90602001906020020151610563565b8080600101915050610371565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183805190602001908083835b60208310151561047a5780518252602082019150602081019050602083039250610455565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019350505050604051809103902090506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250816040518083805190602001908083835b60208310151561051d57805182526020820191506020810190506020830392506104f8565b6001836020036101000a03801982511681845116808217855250505050505090500182600019166000191681526020019250505060405180910390209150509392505050565b60006060600080846000015193508460200151925084604001519150846080015190507f74d34c6fe876d2d910521ea7c31bdea6530879732d5e8fa3781ce25171fa176084826040516105b7929190610ea9565b60405180910390a16105c885610284565b156106d7578373ffffffffffffffffffffffffffffffffffffffff16828460405180828051906020019080838360005b838110156106135780820151818401526020810190506105f8565b50505050905090810190601f1680156106405780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af19250505015610698577f9ae6eab77ab97680a0708bbb21af686ae24276636c6aa70f8a02f4cccd49499b848260405161068b929190610ea9565b60405180910390a16106d2565b7f422d7d1308c28fc21ce33958ef24b1078048fc1a9d39bdc51931eb2e9939fd0384826040516106c9929190610ea9565b60405180910390a15b610711565b7f1d7ce720a2f369d4eb35904f7bb3f97b6fdcfc76cf000cbd281d405ec68c19568482604051610708929190610ea9565b60405180910390a15b5050505050565b7f4f7b0265dc15e282f56ae0820603286a6547460256b0fe068e6ed578cb3d8bb6816040516107479190610e8e565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156107f95750600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561087a57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c4387c894a24bbdaab0ebb3e90d2d0f0d1900a6b4878e87c1fc3bfe75c1f0df8160405161086d9190610e8e565b60405180910390a16108b2565b7f6e7c18ac33fbdcd4f970e95dbb26c2f291e243f724c43b33c701f00f75826513816040516108a99190610e8e565b60405180910390a15b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001838360000151846020015185604001516040516000815260200160405260405161090c9493929190610f08565b60206040516020810390808403906000865af1158015610930573d6000803e3d6000fd5b50505060206040510351905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060405190810160405280600060ff16815260200160008019168152602001600080191681525090565b600061099e823561103d565b905092915050565b600082601f83011215156109b957600080fd5b81356109cc6109c782610f7a565b610f4d565b9150818183526020840193506020810190508360005b83811015610a1257813586016109f88882610b9c565b8452602084019350602083019250506001810190506109e2565b5050505092915050565b6000610a28823561105d565b905092915050565b600082601f8301121515610a4357600080fd5b8135610a56610a5182610fa2565b610f4d565b91508082526020830160208301858383011115610a7257600080fd5b610a7d83828461107e565b50505092915050565b600082601f8301121515610a9957600080fd5b8135610aac610aa782610fce565b610f4d565b91508082526020830160208301858383011115610ac857600080fd5b610ad383828461107e565b50505092915050565b600060608284031215610aee57600080fd5b610af86060610f4d565b90506000610b0884828501610cf0565b6000830152506020610b1c84828501610a1c565b6020830152506040610b3084828501610a1c565b60408301525092915050565b600060608284031215610b4e57600080fd5b610b586060610f4d565b90506000610b6884828501610cf0565b6000830152506020610b7c84828501610a1c565b6020830152506040610b9084828501610a1c565b60408301525092915050565b600060e08284031215610bae57600080fd5b610bb860a0610f4d565b90506000610bc884828501610992565b600083015250602082013567ffffffffffffffff811115610be857600080fd5b610bf484828501610a30565b6020830152506040610c0884828501610cdc565b6040830152506060610c1c84828501610adc565b60608301525060c0610c3084828501610992565b60808301525092915050565b600060e08284031215610c4e57600080fd5b610c5860a0610f4d565b90506000610c6884828501610992565b600083015250602082013567ffffffffffffffff811115610c8857600080fd5b610c9484828501610a30565b6020830152506040610ca884828501610cdc565b6040830152506060610cbc84828501610adc565b60608301525060c0610cd084828501610992565b60808301525092915050565b6000610ce88235611067565b905092915050565b6000610cfc8235611071565b905092915050565b600060208284031215610d1657600080fd5b6000610d2484828501610992565b91505092915050565b600080600060608486031215610d4257600080fd5b6000610d5086828701610992565b935050602084013567ffffffffffffffff811115610d6d57600080fd5b610d7986828701610a86565b9250506040610d8a86828701610cdc565b9150509250925092565b600060208284031215610da657600080fd5b600082013567ffffffffffffffff811115610dc057600080fd5b610dcc848285016109a6565b91505092915050565b60008060808385031215610de857600080fd5b6000610df685828601610a1c565b9250506020610e0785828601610b3c565b9150509250929050565b600060208284031215610e2357600080fd5b600082013567ffffffffffffffff811115610e3d57600080fd5b610e4984828501610c3c565b91505092915050565b610e5b81610ffa565b82525050565b610e6a8161101a565b82525050565b610e7981611026565b82525050565b610e8881611030565b82525050565b6000602082019050610ea36000830184610e52565b92915050565b6000604082019050610ebe6000830185610e52565b610ecb6020830184610e52565b9392505050565b6000602082019050610ee76000830184610e61565b92915050565b6000602082019050610f026000830184610e70565b92915050565b6000608082019050610f1d6000830187610e70565b610f2a6020830186610e7f565b610f376040830185610e70565b610f446060830184610e70565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715610f7057600080fd5b8060405250919050565b600067ffffffffffffffff821115610f9157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610fb957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610fe557600080fd5b601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000819050919050565b600060ff82169050919050565b828183376000838301525050505600a265627a7a723058202fcc1c69fded4506ef93642b65dedd7105332c053862afcdc0ffd9683aeed9d46c6578706572696d656e74616cf50037
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing bytecode for vulnerabilities**
[codex:342374]
[codex:342374] I'm carefully examining the bytecode's function selectors, storage slots, and code snippets to understand contract behavior—especially ownership patterns and signature verification—to identify any potential security issues like unprotected initialization or misuse of critical functions.
[codex:342374] exec
[codex:342374] /bin/bash -lc 'command -v evm || command -v hevm || command -v cast || command -v solc' in /tmp/codex-multi-izhz5eih succeeded in 5ms:
[codex:342374] /home/noahkuhn/.foundry/bin/cast
[codex:342374]
[codex:342374] thinking
[codex:342374] **Checking cast command options**
[codex:342374] exec
[codex:342374] /bin/bash -lc 'cast --help | head -n 40' in /tmp/codex-multi-izhz5eih succeeded in 25ms:
[codex:342374] A Swiss Army knife for interacting with Ethereum applications from the command line
[codex:342374]
[codex:342374] Usage: cast [OPTIONS] <COMMAND>
[codex:342374]
[codex:342374] Commands:
[codex:342374] 4byte Get the function signatures for the given selector from
[codex:342374] <https://openchain.xyz> [aliases: 4, 4b]
[codex:342374] 4byte-calldata Decode ABI-encoded calldata using <https://openchain.xyz> [aliases: 4c,
[codex:342374] 4bc]
[codex:342374] 4byte-event Get the event signature for a given topic 0 from <https://openchain.xyz>
[codex:342374] [aliases: 4e, 4be, topic0-event, t0e]
[codex:342374] abi-encode ABI encode the given function argument, excluding the selector [aliases:
[codex:342374] ae]
[codex:342374] abi-encode-event ABI encode an event and its arguments to generate topics and data [aliases:
[codex:342374] aee]
[codex:342374] access-list Create an access list for a transaction [aliases: ac, acl]
[codex:342374] address-zero Prints the zero address [aliases: --address-zero, az]
[codex:342374] admin Fetch the EIP-1967 admin account [aliases: adm]
[codex:342374] age Get the timestamp of a block [aliases: a]
[codex:342374] artifact Generate an artifact file, that can be used to deploy a contract locally
[codex:342374]
[codex:342374] thinking
[codex:342374] **Searching for disassemble method**
[codex:342374] exec
[codex:342374] /bin/bash -lc 'cast --help | rg -n "dis"' in /tmp/codex-multi-izhz5eih succeeded in 10ms:
[codex:342374] 53: disassemble Disassembles a hex-encoded bytecode into a human-readable representation
[codex:342374] 155: - never: Force disable color output
[codex:342374]
[codex:342374] thinking
[codex:342374] **Preparing to run disassembly**
[codex:342374] exec
[codex:342374] /bin/bash -lc 'cast disassemble $(cat runtime_bytecode.hex)' in /tmp/codex-multi-izhz5eih succeeded in 13ms:
[codex:342374] cat: runtime_bytecode.hex: No such file or directory
[codex:342374]
[codex:342374]
[codex:342374] thinking
[codex:342374] **Preparing to extract bytecode string**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] # extract 0x... after FILE runtime_bytecode.hex
[codex:342374] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text)
[codex:342374] print(m.group(1) if m else 'not found')
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 26ms:
[codex:342374] 0x6080604052600436106100a4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063049e1d4d146100a657806310bfce71146100e35780633018205f1461010c5780633e104a95146101375780634ee7f87d1461016257806362c529e41461019f57806392eefe9b146101c85780639ce110d7146101f1578063ee8bd82d1461021c578063f77c479114610259575b005b3480156100b257600080fd5b506100cd60048036036100c89190810190610e11565b610284565b6040516100da9190610ed2565b60405180910390f35b3480156100ef57600080fd5b5061010a60048036036101059190810190610d94565b61036b565b005b34801561011857600080fd5b506101216103ab565b60405161012e9190610e8e565b60405180910390f35b34801561014357600080fd5b5061014c6103d4565b6040516101599190610e8e565b60405180910390f35b34801561016e57600080fd5b5061018960048036036101849190810190610d2d565b6103fe565b6040516101969190610eed565b60405180910390f35b3480156101ab57600080fd5b506101c660048036036101c19190810190610e11565b610563565b005b3480156101d457600080fd5b506101ef60048036036101ea9190810190610d04565b610718565b005b3480156101fd57600080fd5b506102066108b5565b6040516102139190610e8e565b60405180910390f35b34801561022857600080fd5b50610243600480360361023e9190810190610dd5565b6108db565b6040516102509190610e8e565b60405180910390f35b34801561026557600080fd5b5061026e610942565b60405161027b9190610e8e565b60405180910390f35b6000806060600080610294610967565b60008088600001519650886020015195508860400151945088608001519350886060015192506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b6103208787876103fe565b915061032c82846108db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614975050505050505050919050565b60008090505b81518110156103a75761039a828281518110151561038b57fe5b90602001906020020151610563565b8080600101915050610371565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183805190602001908083835b60208310151561047a5780518252602082019150602081019050602083039250610455565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019350505050604051809103902090506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250816040518083805190602001908083835b60208310151561051d57805182526020820191506020810190506020830392506104f8565b6001836020036101000a03801982511681845116808217855250505050505090500182600019166000191681526020019250505060405180910390209150509392505050565b60006060600080846000015193508460200151925084604001519150846080015190507f74d34c6fe876d2d910521ea7c31bdea6530879732d5e8fa3781ce25171fa176084826040516105b7929190610ea9565b60405180910390a16105c885610284565b156106d7578373ffffffffffffffffffffffffffffffffffffffff16828460405180828051906020019080838360005b838110156106135780820151818401526020810190506105f8565b50505050905090810190601f1680156106405780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af19250505015610698577f9ae6eab77ab97680a0708bbb21af686ae24276636c6aa70f8a02f4cccd49499b848260405161068b929190610ea9565b60405180910390a16106d2565b7f422d7d1308c28fc21ce33958ef24b1078048fc1a9d39bdc51931eb2e9939fd0384826040516106c9929190610ea9565b60405180910390a15b610711565b7f1d7ce720a2f369d4eb35904f7bb3f97b6fdcfc76cf000cbd281d405ec68c19568482604051610708929190610ea9565b60405180910390a15b5050505050565b7f4f7b0265dc15e282f56ae0820603286a6547460256b0fe068e6ed578cb3d8bb6816040516107479190610e8e565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156107f95750600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561087a57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c4387c894a24bbdaab0ebb3e90d2d0f0d1900a6b4878e87c1fc3bfe75c1f0df8160405161086d9190610e8e565b60405180910390a16108b2565b7f6e7c18ac33fbdcd4f970e95dbb26c2f291e243f724c43b33c701f00f75826513816040516108a99190610e8e565b60405180910390a15b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001838360000151846020015185604001516040516000815260200160405260405161090c9493929190610f08565b60206040516020810390808403906000865af1158015610930573d6000803e3d6000fd5b50505060206040510351905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060405190810160405280600060ff16815260200160008019168152602001600080191681525090565b600061099e823561103d565b905092915050565b600082601f83011215156109b957600080fd5b81356109cc6109c782610f7a565b610f4d565b9150818183526020840193506020810190508360005b83811015610a1257813586016109f88882610b9c565b8452602084019350602083019250506001810190506109e2565b5050505092915050565b6000610a28823561105d565b905092915050565b600082601f8301121515610a4357600080fd5b8135610a56610a5182610fa2565b610f4d565b91508082526020830160208301858383011115610a7257600080fd5b610a7d83828461107e565b50505092915050565b600082601f8301121515610a9957600080fd5b8135610aac610aa782610fce565b610f4d565b91508082526020830160208301858383011115610ac857600080fd5b610ad383828461107e565b50505092915050565b600060608284031215610aee57600080fd5b610af86060610f4d565b90506000610b0884828501610cf0565b6000830152506020610b1c84828501610a1c565b6020830152506040610b3084828501610a1c565b60408301525092915050565b600060608284031215610b4e57600080fd5b610b586060610f4d565b90506000610b6884828501610cf0565b6000830152506020610b7c84828501610a1c565b6020830152506040610b9084828501610a1c565b60408301525092915050565b600060e08284031215610bae57600080fd5b610bb860a0610f4d565b90506000610bc884828501610992565b600083015250602082013567ffffffffffffffff811115610be857600080fd5b610bf484828501610a30565b6020830152506040610c0884828501610cdc565b6040830152506060610c1c84828501610adc565b60608301525060c0610c3084828501610992565b60808301525092915050565b600060e08284031215610c4e57600080fd5b610c5860a0610f4d565b90506000610c6884828501610992565b600083015250602082013567ffffffffffffffff811115610c8857600080fd5b610c9484828501610a30565b6020830152506040610ca884828501610cdc565b6040830152506060610cbc84828501610adc565b60608301525060c0610cd084828501610992565b60808301525092915050565b6000610ce88235611067565b905092915050565b6000610cfc8235611071565b905092915050565b600060208284031215610d1657600080fd5b6000610d2484828501610992565b91505092915050565b600080600060608486031215610d4257600080fd5b6000610d5086828701610992565b935050602084013567ffffffffffffffff811115610d6d57600080fd5b610d7986828701610a86565b9250506040610d8a86828701610cdc565b9150509250925092565b600060208284031215610da657600080fd5b600082013567ffffffffffffffff811115610dc057600080fd5b610dcc848285016109a6565b91505092915050565b60008060808385031215610de857600080fd5b6000610df685828601610a1c565b9250506020610e0785828601610b3c565b9150509250929050565b600060208284031215610e2357600080fd5b600082013567ffffffffffffffff811115610e3d57600080fd5b610e4984828501610c3c565b91505092915050565b610e5b81610ffa565b82525050565b610e6a8161101a565b82525050565b610e7981611026565b82525050565b610e8881611030565b82525050565b6000602082019050610ea36000830184610e52565b92915050565b6000604082019050610ebe6000830185610e52565b610ecb6020830184610e52565b9392505050565b6000602082019050610ee76000830184610e61565b92915050565b6000602082019050610f026000830184610e70565b92915050565b6000608082019050610f1d6000830187610e70565b610f2a6020830186610e7f565b610f376040830185610e70565b610f446060830184610e70565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715610f7057600080fd5b8060405250919050565b600067ffffffffffffffff821115610f9157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610fb957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610fe557600080fd5b601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000819050919050565b600060ff82169050919050565b828183376000838301525050505600a265627a7a723058202fcc1c69fded4506ef93642b65dedd7105332c053862afcdc0ffd9683aeed9d46c6578706572696d656e74616cf50037
[codex:342374]
[codex:342374] thinking
[codex:342374] **Preparing to disassemble bytecode**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess, textwrap, sys
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text)
[codex:342374] bytecode=m.group(1)
[codex:342374] # call cast disassemble
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] print(proc.stdout)
[codex:342374] print(proc.stderr,file=sys.stderr)
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 44ms:
[codex:342374] 00000000: PUSH1 0x80
[codex:342374] 00000002: PUSH1 0x40
[codex:342374] 00000004: MSTORE
[codex:342374] 00000005: PUSH1 0x04
[codex:342374] 00000007: CALLDATASIZE
[codex:342374] 00000008: LT
[codex:342374] 00000009: PUSH2 0x00a4
[codex:342374] 0000000c: JUMPI
[codex:342374] 0000000d: PUSH1 0x00
[codex:342374] 0000000f: CALLDATALOAD
[codex:342374] 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
[codex:342374] 0000002e: SWAP1
[codex:342374] 0000002f: DIV
[codex:342374] 00000030: PUSH4 0xffffffff
[codex:342374] 00000035: AND
[codex:342374] 00000036: DUP1
[codex:342374] 00000037: PUSH4 0x049e1d4d
[codex:342374] 0000003c: EQ
[codex:342374] 0000003d: PUSH2 0x00a6
[codex:342374] 00000040: JUMPI
[codex:342374]
[codex:342374] thinking
[codex:342374] **Examining disassembly near 0x0718**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess, sys
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=proc.stdout.splitlines()
[codex:342374] # find index of 0x0718
[codex:342374] for i,l in enumerate(lines):
[codex:342374] if l.startswith('00000718'):
[codex:342374] start=max(0,i-10)
[codex:342374] end=i+80
[codex:342374] for j in range(start,end):
[codex:342374] print(lines[j])
[codex:342374] break
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 38ms:
[codex:342374] 0000070e: SUB
[codex:342374] 0000070f: SWAP1
[codex:342374] 00000710: LOG1
[codex:342374] 00000711: JUMPDEST
[codex:342374] 00000712: POP
[codex:342374] 00000713: POP
[codex:342374] 00000714: POP
[codex:342374] 00000715: POP
[codex:342374] 00000716: POP
[codex:342374] 00000717: JUMP
[codex:342374] 00000718: JUMPDEST
[codex:342374] 00000719: PUSH32 0x4f7b0265dc15e282f56ae0820603286a6547460256b0fe068e6ed578cb3d8bb6
[codex:342374] 0000073a: DUP2
[codex:342374] 0000073b: PUSH1 0x40
[codex:342374] 0000073d: MLOAD
[codex:342374] 0000073e: PUSH2 0x0747
[codex:342374] 00000741: SWAP2
[codex:342374] 00000742: SWAP1
[codex:342374] 00000743: PUSH2 0x0e8e
[codex:342374] 00000746: JUMP
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=proc.stdout.splitlines()
[codex:342374] # show continuation after 0x083c
[codex:342374] for i,l in enumerate(lines):
[codex:342374] if l.startswith('0000083c'):
[codex:342374] for j in range(i, i+60):
[codex:342374] print(lines[j])
[codex:342374] break
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 40ms:
[codex:342374] 0000083c: SWAP1
[codex:342374] 0000083d: SSTORE
[codex:342374] 0000083e: POP
[codex:342374] 0000083f: PUSH32 0x5c4387c894a24bbdaab0ebb3e90d2d0f0d1900a6b4878e87c1fc3bfe75c1f0df
[codex:342374] 00000860: DUP2
[codex:342374] 00000861: PUSH1 0x40
[codex:342374] 00000863: MLOAD
[codex:342374] 00000864: PUSH2 0x086d
[codex:342374] 00000867: SWAP2
[codex:342374] 00000868: SWAP1
[codex:342374] 00000869: PUSH2 0x0e8e
[codex:342374] 0000086c: JUMP
[codex:342374] 0000086d: JUMPDEST
[codex:342374] 0000086e: PUSH1 0x40
[codex:342374] 00000870: MLOAD
[codex:342374] 00000871: DUP1
[codex:342374] 00000872: SWAP2
[codex:342374] 00000873: SUB
[codex:342374] 00000874: SWAP1
[codex:342374] 00000875: LOG1
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing storage slots and ownership logic**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=proc.stdout.splitlines()
[codex:342374] for i,l in enumerate(lines):
[codex:342374] if l.startswith('000008db'):
[codex:342374] for j in range(i, i+80):
[codex:342374] print(lines[j])
[codex:342374] break
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 45ms:
[codex:342374] 000008db: JUMPDEST
[codex:342374] 000008dc: PUSH1 0x00
[codex:342374] 000008de: PUSH1 0x01
[codex:342374] 000008e0: DUP4
[codex:342374] 000008e1: DUP4
[codex:342374] 000008e2: PUSH1 0x00
[codex:342374] 000008e4: ADD
[codex:342374] 000008e5: MLOAD
[codex:342374] 000008e6: DUP5
[codex:342374] 000008e7: PUSH1 0x20
[codex:342374] 000008e9: ADD
[codex:342374] 000008ea: MLOAD
[codex:342374] 000008eb: DUP6
[codex:342374] 000008ec: PUSH1 0x40
[codex:342374] 000008ee: ADD
[codex:342374] 000008ef: MLOAD
[codex:342374] 000008f0: PUSH1 0x40
[codex:342374] 000008f2: MLOAD
[codex:342374] 000008f3: PUSH1 0x00
[codex:342374] 000008f5: DUP2
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing signature verification and call logic**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=[l for l in proc.stdout.splitlines() if 'SSTORE' in l]
[codex:342374] print('\\n'.join(lines))
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 37ms:
[codex:342374] 0000083d: SSTORE
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing signature verification logic**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text().lower()
[codex:342374] const='7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0'
[codex:342374] print(const in text)
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 29ms:
[codex:342374] False
[codex:342374]
[codex:342374] thinking
[codex:342374] **Investigating use of specific constants in code**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] import re
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=proc.stdout.splitlines()
[codex:342374] for l in lines:
[codex:342374] if 'PUSH1 0x1b' in l or 'PUSH1 0x1c' in l or 'PUSH1 0x00' in l:
[codex:342374] pass
[codex:342374] # show lines with PUSH1 0x1b or 0x1c
[codex:342374] for l in lines:
[codex:342374] if 'PUSH1 0x1b' in l or 'PUSH1 0x1c' in l:
[codex:342374] print(l)
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 38ms:
[codex:342374] 000004bd: PUSH1 0x1c
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing signature malleability and replay risks**
[codex:342374] exec
[codex:342374] /bin/bash -lc "python - <<'PY'
[codex:342374] import re, subprocess
[codex:342374] from pathlib import Path
[codex:342374] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:342374] bytecode=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', text).group(1)
[codex:342374] proc=subprocess.run(['cast','disassemble', bytecode], capture_output=True, text=True)
[codex:342374] lines=proc.stdout.splitlines()
[codex:342374] # find ADDRESS opcode occurrences
[codex:342374] for i,l in enumerate(lines):
[codex:342374] if 'ADDRESS' in l:
[codex:342374] print(i, l)
[codex:342374] PY" in /tmp/codex-multi-izhz5eih succeeded in 41ms:
[codex:342374]
[codex:342374]
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing signature replay and initialization risks**
[codex:342374] thinking
[codex:342374] **Mapping function arguments and replay implications**
[codex:342374]
[codex:342374] I'll clarify how the execute function uses three key arguments to compute the hash and verify signatures, confirming the absence of state changes allows replay, and plan to reference exact bytecode lines for precise evidence.
[codex:342374] exec
[codex:342374] /bin/bash -lc 'nl -ba BYTECODE_BUNDLE.txt | head -n 40' in /tmp/codex-multi-izhz5eih succeeded in 6ms:
[codex:342374] 1 Runtime bytecode bundle for best-effort auditing.
[codex:342374] 2 Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:342374] 3
[codex:342374] 4 FILE: runtime_bytecode.hex
[codex:342374] 5 0x6080604052600436106100a4576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063049e1d4d146100a657806310bfce71146100e35780633018205f1461010c5780633e104a95146101375780634ee7f87d1461016257806362c529e41461019f57806392eefe9b146101c85780639ce110d7146101f1578063ee8bd82d1461021c578063f77c479114610259575b005b3480156100b257600080fd5b506100cd60048036036100c89190810190610e11565b610284565b6040516100da9190610ed2565b60405180910390f35b3480156100ef57600080fd5b5061010a60048036036101059190810190610d94565b61036b565b005b34801561011857600080fd5b506101216103ab565b60405161012e9190610e8e565b60405180910390f35b34801561014357600080fd5b5061014c6103d4565b6040516101599190610e8e565b60405180910390f35b34801561016e57600080fd5b5061018960048036036101849190810190610d2d565b6103fe565b6040516101969190610eed565b60405180910390f35b3480156101ab57600080fd5b506101c660048036036101c19190810190610e11565b610563565b005b3480156101d457600080fd5b506101ef60048036036101ea9190810190610d04565b610718565b005b3480156101fd57600080fd5b506102066108b5565b6040516102139190610e8e565b60405180910390f35b34801561022857600080fd5b50610243600480360361023e9190810190610dd5565b6108db565b6040516102509190610e8e565b60405180910390f35b34801561026557600080fd5b5061026e610942565b60405161027b9190610e8e565b60405180910390f35b6000806060600080610294610967565b60008088600001519650886020015195508860400151945088608001519350886060015192506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561031557600080fd5b6103208787876103fe565b915061032c82846108db565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614975050505050505050919050565b60008090505b81518110156103a75761039a828281518110151561038b57fe5b90602001906020020151610563565b8080600101915050610371565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183805190602001908083835b60208310151561047a5780518252602082019150602081019050602083039250610455565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019350505050604051809103902090506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250816040518083805190602001908083835b60208310151561051d57805182526020820191506020810190506020830392506104f8565b6001836020036101000a03801982511681845116808217855250505050505090500182600019166000191681526020019250505060405180910390209150509392505050565b60006060600080846000015193508460200151925084604001519150846080015190507f74d34c6fe876d2d910521ea7c31bdea6530879732d5e8fa3781ce25171fa176084826040516105b7929190610ea9565b60405180910390a16105c885610284565b156106d7578373ffffffffffffffffffffffffffffffffffffffff16828460405180828051906020019080838360005b838110156106135780820151818401526020810190506105f8565b50505050905090810190601f1680156106405780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af19250505015610698577f9ae6eab77ab97680a0708bbb21af686ae24276636c6aa70f8a02f4cccd49499b848260405161068b929190610ea9565b60405180910390a16106d2565b7f422d7d1308c28fc21ce33958ef24b1078048fc1a9d39bdc51931eb2e9939fd0384826040516106c9929190610ea9565b60405180910390a15b610711565b7f1d7ce720a2f369d4eb35904f7bb3f97b6fdcfc76cf000cbd281d405ec68c19568482604051610708929190610ea9565b60405180910390a15b5050505050565b7f4f7b0265dc15e282f56ae0820603286a6547460256b0fe068e6ed578cb3d8bb6816040516107479190610e8e565b60405180910390a1600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156107f95750600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561087a57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c4387c894a24bbdaab0ebb3e90d2d0f0d1900a6b4878e87c1fc3bfe75c1f0df8160405161086d9190610e8e565b60405180910390a16108b2565b7f6e7c18ac33fbdcd4f970e95dbb26c2f291e243f724c43b33c701f00f75826513816040516108a99190610e8e565b60405180910390a15b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001838360000151846020015185604001516040516000815260200160405260405161090c9493929190610f08565b60206040516020810390808403906000865af1158015610930573d6000803e3d6000fd5b50505060206040510351905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060405190810160405280600060ff16815260200160008019168152602001600080191681525090565b600061099e823561103d565b905092915050565b600082601f83011215156109b957600080fd5b81356109cc6109c782610f7a565b610f4d565b9150818183526020840193506020810190508360005b83811015610a1257813586016109f88882610b9c565b8452602084019350602083019250506001810190506109e2565b5050505092915050565b6000610a28823561105d565b905092915050565b600082601f8301121515610a4357600080fd5b8135610a56610a5182610fa2565b610f4d565b91508082526020830160208301858383011115610a7257600080fd5b610a7d83828461107e565b50505092915050565b600082601f8301121515610a9957600080fd5b8135610aac610aa782610fce565b610f4d565b91508082526020830160208301858383011115610ac857600080fd5b610ad383828461107e565b50505092915050565b600060608284031215610aee57600080fd5b610af86060610f4d565b90506000610b0884828501610cf0565b6000830152506020610b1c84828501610a1c565b6020830152506040610b3084828501610a1c565b60408301525092915050565b600060608284031215610b4e57600080fd5b610b586060610f4d565b90506000610b6884828501610cf0565b6000830152506020610b7c84828501610a1c565b6020830152506040610b9084828501610a1c565b60408301525092915050565b600060e08284031215610bae57600080fd5b610bb860a0610f4d565b90506000610bc884828501610992565b600083015250602082013567ffffffffffffffff811115610be857600080fd5b610bf484828501610a30565b6020830152506040610c0884828501610cdc565b6040830152506060610c1c84828501610adc565b60608301525060c0610c3084828501610992565b60808301525092915050565b600060e08284031215610c4e57600080fd5b610c5860a0610f4d565b90506000610c6884828501610992565b600083015250602082013567ffffffffffffffff811115610c8857600080fd5b610c9484828501610a30565b6020830152506040610ca884828501610cdc565b6040830152506060610cbc84828501610adc565b60608301525060c0610cd084828501610992565b60808301525092915050565b6000610ce88235611067565b905092915050565b6000610cfc8235611071565b905092915050565b600060208284031215610d1657600080fd5b6000610d2484828501610992565b91505092915050565b600080600060608486031215610d4257600080fd5b6000610d5086828701610992565b935050602084013567ffffffffffffffff811115610d6d57600080fd5b610d7986828701610a86565b9250506040610d8a86828701610cdc565b9150509250925092565b600060208284031215610da657600080fd5b600082013567ffffffffffffffff811115610dc057600080fd5b610dcc848285016109a6565b91505092915050565b60008060808385031215610de857600080fd5b6000610df685828601610a1c565b9250506020610e0785828601610b3c565b9150509250929050565b600060208284031215610e2357600080fd5b600082013567ffffffffffffffff811115610e3d57600080fd5b610e4984828501610c3c565b91505092915050565b610e5b81610ffa565b82525050565b610e6a8161101a565b82525050565b610e7981611026565b82525050565b610e8881611030565b82525050565b6000602082019050610ea36000830184610e52565b92915050565b6000604082019050610ebe6000830185610e52565b610ecb6020830184610e52565b9392505050565b6000602082019050610ee76000830184610e61565b92915050565b6000602082019050610f026000830184610e70565b92915050565b6000608082019050610f1d6000830187610e70565b610f2a6020830186610e7f565b610f376040830185610e70565b610f446060830184610e70565b95945050505050565b6000604051905081810181811067ffffffffffffffff82111715610f7057600080fd5b8060405250919050565b600067ffffffffffffffff821115610f9157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610fb957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610fe557600080fd5b601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000819050919050565b600060ff82169050919050565b828183376000838301525050505600a265627a7a723058202fcc1c69fded4506ef93642b65dedd7105332c053862afcdc0ffd9683aeed9d46c6578706572696d656e74616cf50037
[codex:342374]
[codex:342374] thinking
[codex:342374] **Analyzing bytecode line referencing**
[codex:342374] exec
[codex:342374] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-izhz5eih succeeded in 6ms:
[codex:342374] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:342374]
[codex:342374] thinking
[codex:342374] **Summarizing security findings**
[codex:342374] codex
[codex:342374] {"no_findings":false,"summary":"Found replayable signature execution, a permissive slot0 initialization path, and missing ECDSA malleability checks.","findings":[{"severity":"high","category":"auth","title":"Signed execution appears replayable (no nonce/used-hash storage)","exploit_scenario":"If a signer authorizes a call, any relayer can submit the same calldata again to repeat the CALL and drain funds or repeat side effects, because no state is updated to mark the signature as used.","recommendation":"Add a nonce or used-hash mapping in storage, include it in the signed payload, and update it before performing the external CALL; revert on reuse.","evidence":"Execution path at 0x0563 performs an external CALL (`5af1` at 0x0651) after signature verification; the only SSTORE in the entire runtime is at 0x083d (owner update), so no nonce/used-hash is recorded.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"medium","category":"access_control","title":"Slot0 can be set by anyone if it is zero (initializer-style bypass)","exploit_scenario":"If slot0 is left as the zero address at deployment, any caller can invoke the setter to write their own address to slot0 and become the authorized signer/role guarded by that slot.","recommendation":"Require the caller to be the admin even on initialization, or ensure slot0 is set during deployment and remove the `slot0 == 0` bypass.","evidence":"Function at 0x0718 checks `CALLER == slot1` OR `slot0 == 0`, then performs `SSTORE` at 0x083d to update slot0, allowing any caller when slot0 is zero.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"low","category":"auth","title":"ECDSA malleability not checked (no v/s validation)","exploit_scenario":"An attacker can produce an alternative (malleable) signature for the same message, which can undermine off-chain signature uniqueness tracking or interact poorly with replay protection if added externally.","recommendation":"Validate `v` is 27/28 and `s` is in the lower half-order before calling `ecrecover`.","evidence":"Signature recovery uses a direct precompile call (address 0x01) in the 0x08db function without any preceding range checks; the half-order constant is absent from bytecode.","locations":["BYTECODE_BUNDLE.txt:5"]}]}
[codex:342374] tokens used
[codex:342374] 132,911
[codex:342374] {"no_findings":false,"summary":"Found replayable signature execution, a permissive slot0 initialization path, and missing ECDSA malleability checks.","findings":[{"severity":"high","category":"auth","title":"Signed execution appears replayable (no nonce/used-hash storage)","exploit_scenario":"If a signer authorizes a call, any relayer can submit the same calldata again to repeat the CALL and drain funds or repeat side effects, because no state is updated to mark the signature as used.","recommendation":"Add a nonce or used-hash mapping in storage, include it in the signed payload, and update it before performing the external CALL; revert on reuse.","evidence":"Execution path at 0x0563 performs an external CALL (`5af1` at 0x0651) after signature verification; the only SSTORE in the entire runtime is at 0x083d (owner update), so no nonce/used-hash is recorded.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"medium","category":"access_control","title":"Slot0 can be set by anyone if it is zero (initializer-style bypass)","exploit_scenario":"If slot0 is left as the zero address at deployment, any caller can invoke the setter to write their own address to slot0 and become the authorized signer/role guarded by that slot.","recommendation":"Require the caller to be the admin even on initialization, or ensure slot0 is set during deployment and remove the `slot0 == 0` bypass.","evidence":"Function at 0x0718 checks `CALLER == slot1` OR `slot0 == 0`, then performs `SSTORE` at 0x083d to update slot0, allowing any caller when slot0 is zero.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"low","category":"auth","title":"ECDSA malleability not checked (no v/s validation)","exploit_scenario":"An attacker can produce an alternative (malleable) signature for the same message, which can undermine off-chain signature uniqueness tracking or interact poorly with replay protection if added externally.","recommendation":"Validate `v` is 27/28 and `s` is in the lower half-order before calling `ecrecover`.","evidence":"Signature recovery uses a direct precompile call (address 0x01) in the 0x08db function without any preceding range checks; the half-order constant is absent from bytecode.","locations":["BYTECODE_BUNDLE.txt:5"]}]}
{
"codex": {
"ran_at": "2025-12-29T17:06:25.952038+00:00",
"returncode": 0
},
"summary": "Found replayable signature execution, a permissive slot0 initialization path, and missing ECDSA malleability checks.",
"raw_final": {
"summary": "Found replayable signature execution, a permissive slot0 initialization path, and missing ECDSA malleability checks.",
"findings": [
{
"title": "Signed execution appears replayable (no nonce/used-hash storage)",
"category": "auth",
"evidence": "Execution path at 0x0563 performs an external CALL (`5af1` at 0x0651) after signature verification; the only SSTORE in the entire runtime is at 0x083d (owner update), so no nonce/used-hash is recorded.",
"severity": "high",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Add a nonce or used-hash mapping in storage, include it in the signed payload, and update it before performing the external CALL; revert on reuse.",
"exploit_scenario": "If a signer authorizes a call, any relayer can submit the same calldata again to repeat the CALL and drain funds or repeat side effects, because no state is updated to mark the signature as used."
},
{
"title": "Slot0 can be set by anyone if it is zero (initializer-style bypass)",
"category": "access_control",
"evidence": "Function at 0x0718 checks `CALLER == slot1` OR `slot0 == 0`, then performs `SSTORE` at 0x083d to update slot0, allowing any caller when slot0 is zero.",
"severity": "medium",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Require the caller to be the admin even on initialization, or ensure slot0 is set during deployment and remove the `slot0 == 0` bypass.",
"exploit_scenario": "If slot0 is left as the zero address at deployment, any caller can invoke the setter to write their own address to slot0 and become the authorized signer/role guarded by that slot."
},
{
"title": "ECDSA malleability not checked (no v/s validation)",
"category": "auth",
"evidence": "Signature recovery uses a direct precompile call (address 0x01) in the 0x08db function without any preceding range checks; the half-order constant is absent from bytecode.",
"severity": "low",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Validate `v` is 27/28 and `s` is in the lower half-order before calling `ecrecover`.",
"exploit_scenario": "An attacker can produce an alternative (malleable) signature for the same message, which can undermine off-chain signature uniqueness tracking or interact poorly with replay protection if added externally."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00a4 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002e: SWAP1 0000002f: DIV 00000030: PUSH4 0xffffffff 00000035: AND 00000036: DUP1 00000037: PUSH4 0x049e1d4d 0000003c: EQ 0000003d: PUSH2 0x00a6 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0x10bfce71 00000047: EQ 00000048: PUSH2 0x00e3 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0x3018205f 00000052: EQ 00000053: PUSH2 0x010c 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0x3e104a95 0000005d: EQ 0000005e: PUSH2 0x0137 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0x4ee7f87d 00000068: EQ 00000069: PUSH2 0x0162 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0x62c529e4 00000073: EQ 00000074: PUSH2 0x019f 00000077: JUMPI 00000078: DUP1 00000079: PUSH4 0x92eefe9b 0000007e: EQ 0000007f: PUSH2 0x01c8 00000082: JUMPI 00000083: DUP1 00000084: PUSH4 0x9ce110d7 00000089: EQ 0000008a: PUSH2 0x01f1 0000008d: JUMPI 0000008e: DUP1 0000008f: PUSH4 0xee8bd82d 00000094: EQ 00000095: PUSH2 0x021c 00000098: JUMPI 00000099: DUP1 0000009a: PUSH4 0xf77c4791 0000009f: EQ 000000a0: PUSH2 0x0259 000000a3: JUMPI 000000a4: JUMPDEST 000000a5: STOP 000000a6: JUMPDEST 000000a7: CALLVALUE 000000a8: DUP1 000000a9: ISZERO 000000aa: PUSH2 0x00b2 000000ad: JUMPI 000000ae: PUSH1 0x00 000000b0: DUP1 000000b1: REVERT 000000b2: JUMPDEST 000000b3: POP 000000b4: PUSH2 0x00cd 000000b7: PUSH1 0x04 000000b9: DUP1 000000ba: CALLDATASIZE 000000bb: SUB 000000bc: PUSH2 0x00c8 000000bf: SWAP2 000000c0: SWAP1 000000c1: DUP2 000000c2: ADD 000000c3: SWAP1 000000c4: PUSH2 0x0e11 000000c7: JUMP 000000c8: JUMPDEST 000000c9: PUSH2 0x0284 000000cc: JUMP 000000cd: JUMPDEST 000000ce: PUSH1 0x40 000000d0: MLOAD 000000d1: PUSH2 0x00da 000000d4: SWAP2 000000d5: SWAP1 000000d6: PUSH2 0x0ed2 000000d9: JUMP 000000da: JUMPDEST 000000db: PUSH1 0x40 000000dd: MLOAD 000000de: DUP1 000000df: SWAP2 000000e0: SUB 000000e1: SWAP1 000000e2: RETURN 000000e3: JUMPDEST 000000e4: CALLVALUE 000000e5: DUP1 000000e6: ISZERO 000000e7: PUSH2 0x00ef 000000ea: JUMPI 000000eb: PUSH1 0x00 000000ed: DUP1 000000ee: REVERT 000000ef: JUMPDEST 000000f0: POP 000000f1: PUSH2 0x010a 000000f4: PUSH1 0x04 000000f6: DUP1 000000f7: CALLDATASIZE 000000f8: SUB 000000f9: PUSH2 0x0105 000000fc: SWAP2 000000fd: SWAP1 000000fe: DUP2 000000ff: ADD 00000100: SWAP1 00000101: PUSH2 0x0d94 00000104: JUMP 00000105: JUMPDEST 00000106: PUSH2 0x036b 00000109: JUMP 0000010a: JUMPDEST 0000010b: STOP 0000010c: JUMPDEST 0000010d: CALLVALUE 0000010e: DUP1 0000010f: ISZERO 00000110: PUSH2 0x0118 00000113: JUMPI 00000114: PUSH1 0x00 00000116: DUP1 00000117: REVERT 00000118: JUMPDEST 00000119: POP 0000011a: PUSH2 0x0121 0000011d: PUSH2 0x03ab 00000120: JUMP 00000121: JUMPDEST 00000122: PUSH1 0x40 00000124: MLOAD 00000125: PUSH2 0x012e 00000128: SWAP2 00000129: SWAP1 0000012a: PUSH2 0x0e8e 0000012d: JUMP 0000012e: JUMPDEST 0000012f: PUSH1 0x40 00000131: MLOAD 00000132: DUP1 00000133: SWAP2 00000134: SUB 00000135: SWAP1 00000136: RETURN 00000137: JUMPDEST 00000138: CALLVALUE 00000139: DUP1 0000013a: ISZERO 0000013b: PUSH2 0x0143 0000013e: JUMPI 0000013f: PUSH1 0x00 00000141: DUP1 00000142: REVERT 00000143: JUMPDEST 00000144: POP 00000145: PUSH2 0x014c 00000148: PUSH2 0x03d4 0000014b: JUMP 0000014c: JUMPDEST 0000014d: PUSH1 0x40 0000014f: MLOAD 00000150: PUSH2 0x0159 00000153: SWAP2 00000154: SWAP1 00000155: PUSH2 0x0e8e 00000158: JUMP 00000159: JUMPDEST 0000015a: PUSH1 0x40 0000015c: MLOAD 0000015d: DUP1 0000015e: SWAP2 0000015f: SUB 00000160: SWAP1 00000161: RETURN 00000162: JUMPDEST 00000163: CALLVALUE 00000164: DUP1 00000165: ISZERO 00000166: PUSH2 0x016e 00000169: JUMPI 0000016a: PUSH1 0x00 0000016c: DUP1 0000016d: REVERT 0000016e: JUMPDEST 0000016f: POP 00000170: PUSH2 0x0189 00000173: PUSH1 0x04 00000175: DUP1 00000176: CALLDATASIZE 00000177: SUB 00000178: PUSH2 0x0184 0000017b: SWAP2 0000017c: SWAP1 0000017d: DUP2 0000017e: ADD 0000017f: SWAP1 00000180: PUSH2 0x0d2d 00000183: JUMP 00000184: JUMPDEST 00000185: PUSH2 0x03fe 00000188: JUMP 00000189: JUMPDEST 0000018a: PUSH1 0x40 0000018c: MLOAD 0000018d: PUSH2 0x0196 00000190: SWAP2 00000191: SWAP1 00000192: PUSH2 0x0eed 00000195: JUMP 00000196: JUMPDEST 00000197: PUSH1 0x40 00000199: MLOAD 0000019a: DUP1 0000019b: SWAP2 0000019c: SUB 0000019d: SWAP1 0000019e: RETURN 0000019f: JUMPDEST 000001a0: CALLVALUE 000001a1: DUP1 000001a2: ISZERO 000001a3: PUSH2 0x01ab 000001a6: JUMPI 000001a7: PUSH1 0x00 000001a9: DUP1 000001aa: REVERT 000001ab: JUMPDEST 000001ac: POP 000001ad: PUSH2 0x01c6 000001b0: PUSH1 0x04 000001b2: DUP1 000001b3: CALLDATASIZE 000001b4: SUB 000001b5: PUSH2 0x01c1 000001b8: SWAP2 000001b9: SWAP1 000001ba: DUP2 000001bb: ADD 000001bc: SWAP1 000001bd: PUSH2 0x0e11 000001c0: JUMP 000001c1: JUMPDEST 000001c2: PUSH2 0x0563 000001c5: JUMP 000001c6: JUMPDEST 000001c7: STOP 000001c8: JUMPDEST 000001c9: CALLVALUE 000001ca: DUP1 000001cb: ISZERO 000001cc: PUSH2 0x01d4 000001cf: JUMPI 000001d0: PUSH1 0x00 000001d2: DUP1 000001d3: REVERT 000001d4: JUMPDEST 000001d5: POP 000001d6: PUSH2 0x01ef 000001d9: PUSH1 0x04 000001db: DUP1 000001dc: CALLDATASIZE 000001dd: SUB 000001de: PUSH2 0x01ea 000001e1: SWAP2 000001e2: SWAP1 000001e3: DUP2 000001e4: ADD 000001e5: SWAP1 000001e6: PUSH2 0x0d04 000001e9: JUMP 000001ea: JUMPDEST 000001eb: PUSH2 0x0718 000001ee: JUMP 000001ef: JUMPDEST 000001f0: STOP 000001f1: JUMPDEST 000001f2: CALLVALUE 000001f3: DUP1 000001f4: ISZERO 000001f5: PUSH2 0x01fd 000001f8: JUMPI 000001f9: PUSH1 0x00 000001fb: DUP1 000001fc: REVERT 000001fd: JUMPDEST 000001fe: POP 000001ff: PUSH2 0x0206 00000202: PUSH2 0x08b5 00000205: JUMP 00000206: JUMPDEST 00000207: PUSH1 0x40 00000209: MLOAD 0000020a: PUSH2 0x0213 0000020d: SWAP2 0000020e: SWAP1 0000020f: PUSH2 0x0e8e 00000212: JUMP 00000213: JUMPDEST 00000214: PUSH1 0x40 00000216: MLOAD 00000217: DUP1 00000218: SWAP2 00000219: SUB 0000021a: SWAP1 0000021b: RETURN 0000021c: JUMPDEST 0000021d: CALLVALUE 0000021e: DUP1 0000021f: ISZERO 00000220: PUSH2 0x0228 00000223: JUMPI 00000224: PUSH1 0x00 00000226: DUP1 00000227: REVERT 00000228: JUMPDEST 00000229: POP 0000022a: PUSH2 0x0243 0000022d: PUSH1 0x04 0000022f: DUP1 00000230: CALLDATASIZE 00000231: SUB 00000232: PUSH2 0x023e 00000235: SWAP2 00000236: SWAP1 00000237: DUP2 00000238: ADD 00000239: SWAP1 0000023a: PUSH2 0x0dd5 0000023d: JUMP 0000023e: JUMPDEST 0000023f: PUSH2 0x08db 00000242: JUMP 00000243: JUMPDEST 00000244: PUSH1 0x40 00000246: MLOAD 00000247: PUSH2 0x0250 0000024a: SWAP2 0000024b: SWAP1 0000024c: PUSH2 0x0e8e 0000024f: JUMP 00000250: JUMPDEST 00000251: PUSH1 0x40 00000253: MLOAD 00000254: DUP1 00000255: SWAP2 00000256: SUB 00000257: SWAP1 00000258: RETURN 00000259: JUMPDEST 0000025a: CALLVALUE 0000025b: DUP1 0000025c: ISZERO 0000025d: PUSH2 0x0265 00000260: JUMPI 00000261: PUSH1 0x00 00000263: DUP1 00000264: REVERT 00000265: JUMPDEST 00000266: POP 00000267: PUSH2 0x026e 0000026a: PUSH2 0x0942 0000026d: JUMP 0000026e: JUMPDEST 0000026f: PUSH1 0x40 00000271: MLOAD 00000272: PUSH2 0x027b 00000275: SWAP2 00000276: SWAP1 00000277: PUSH2 0x0e8e 0000027a: JUMP 0000027b: JUMPDEST 0000027c: PUSH1 0x40 0000027e: MLOAD 0000027f: DUP1 00000280: SWAP2 00000281: SUB 00000282: SWAP1 00000283: RETURN 00000284: JUMPDEST 00000285: PUSH1 0x00 00000287: DUP1 00000288: PUSH1 0x60 0000028a: PUSH1 0x00 0000028c: DUP1 0000028d: PUSH2 0x0294 00000290: PUSH2 0x0967 00000293: JUMP 00000294: JUMPDEST 00000295: PUSH1 0x00 00000297: DUP1 00000298: DUP9 00000299: PUSH1 0x00 0000029b: ADD 0000029c: MLOAD 0000029d: SWAP7 0000029e: POP 0000029f: DUP9 000002a0: PUSH1 0x20 000002a2: ADD 000002a3: MLOAD 000002a4: SWAP6 000002a5: POP 000002a6: DUP9 000002a7: PUSH1 0x40 000002a9: ADD 000002aa: MLOAD 000002ab: SWAP5 000002ac: POP 000002ad: DUP9 000002ae: PUSH1 0x80 000002b0: ADD 000002b1: MLOAD 000002b2: SWAP4 000002b3: POP 000002b4: DUP9 000002b5: PUSH1 0x60 000002b7: ADD 000002b8: MLOAD 000002b9: SWAP3 000002ba: POP 000002bb: PUSH1 0x00 000002bd: DUP1 000002be: SWAP1 000002bf: SLOAD 000002c0: SWAP1 000002c1: PUSH2 0x0100 000002c4: EXP 000002c5: SWAP1 000002c6: DIV 000002c7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002dc: AND 000002dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002f2: AND 000002f3: DUP5 000002f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000309: AND 0000030a: EQ 0000030b: ISZERO 0000030c: ISZERO 0000030d: PUSH2 0x0315 00000310: JUMPI 00000311: PUSH1 0x00 00000313: DUP1 00000314: REVERT 00000315: JUMPDEST 00000316: PUSH2 0x0320 00000319: DUP8 0000031a: DUP8 0000031b: DUP8 0000031c: PUSH2 0x03fe 0000031f: JUMP 00000320: JUMPDEST 00000321: SWAP2 00000322: POP 00000323: PUSH2 0x032c 00000326: DUP3 00000327: DUP5 00000328: PUSH2 0x08db 0000032b: JUMP 0000032c: JUMPDEST 0000032d: SWAP1 0000032e: POP 0000032f: DUP4 00000330: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000345: AND 00000346: DUP2 00000347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000035c: AND 0000035d: EQ 0000035e: SWAP8 0000035f: POP 00000360: POP 00000361: POP 00000362: POP 00000363: POP 00000364: POP 00000365: POP 00000366: POP 00000367: SWAP2 00000368: SWAP1 00000369: POP 0000036a: JUMP 0000036b: JUMPDEST 0000036c: PUSH1 0x00 0000036e: DUP1 0000036f: SWAP1 00000370: POP 00000371: JUMPDEST 00000372: DUP2 00000373: MLOAD 00000374: DUP2 00000375: LT 00000376: ISZERO 00000377: PUSH2 0x03a7 0000037a: JUMPI 0000037b: PUSH2 0x039a 0000037e: DUP3 0000037f: DUP3 00000380: DUP2 00000381: MLOAD 00000382: DUP2 00000383: LT 00000384: ISZERO 00000385: ISZERO 00000386: PUSH2 0x038b 00000389: JUMPI 0000038a: INVALID 0000038b: JUMPDEST 0000038c: SWAP1 0000038d: PUSH1 0x20 0000038f: ADD 00000390: SWAP1 00000391: PUSH1 0x20 00000393: MUL 00000394: ADD 00000395: MLOAD 00000396: PUSH2 0x0563 00000399: JUMP 0000039a: JUMPDEST 0000039b: DUP1 0000039c: DUP1 0000039d: PUSH1 0x01 0000039f: ADD 000003a0: SWAP2 000003a1: POP 000003a2: POP 000003a3: PUSH2 0x0371 000003a6: JUMP 000003a7: JUMPDEST 000003a8: POP 000003a9: POP 000003aa: JUMP 000003ab: JUMPDEST 000003ac: PUSH1 0x00 000003ae: DUP1 000003af: PUSH1 0x00 000003b1: SWAP1 000003b2: SLOAD 000003b3: SWAP1 000003b4: PUSH2 0x0100 000003b7: EXP 000003b8: SWAP1 000003b9: DIV 000003ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003cf: AND 000003d0: SWAP1 000003d1: POP 000003d2: SWAP1 000003d3: JUMP 000003d4: JUMPDEST 000003d5: PUSH1 0x00 000003d7: PUSH1 0x01 000003d9: PUSH1 0x00 000003db: SWAP1 000003dc: SLOAD 000003dd: SWAP1 000003de: PUSH2 0x0100 000003e1: EXP 000003e2: SWAP1 000003e3: DIV 000003e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003f9: AND 000003fa: SWAP1 000003fb: POP 000003fc: SWAP1 000003fd: JUMP 000003fe: JUMPDEST 000003ff: PUSH1 0x00 00000401: DUP1 00000402: DUP5 00000403: DUP5 00000404: DUP5 00000405: PUSH1 0x40 00000407: MLOAD 00000408: DUP1 00000409: DUP5 0000040a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000041f: AND 00000420: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000435: AND 00000436: PUSH13 0x01000000000000000000000000 00000444: MUL 00000445: DUP2 00000446: MSTORE 00000447: PUSH1 0x14 00000449: ADD 0000044a: DUP4 0000044b: DUP1 0000044c: MLOAD 0000044d: SWAP1 0000044e: PUSH1 0x20 00000450: ADD 00000451: SWAP1 00000452: DUP1 00000453: DUP4 00000454: DUP4 00000455: JUMPDEST 00000456: PUSH1 0x20 00000458: DUP4 00000459: LT 0000045a: ISZERO 0000045b: ISZERO 0000045c: PUSH2 0x047a 0000045f: JUMPI 00000460: DUP1 00000461: MLOAD 00000462: DUP3 00000463: MSTORE 00000464: PUSH1 0x20 00000466: DUP3 00000467: ADD 00000468: SWAP2 00000469: POP 0000046a: PUSH1 0x20 0000046c: DUP2 0000046d: ADD 0000046e: SWAP1 0000046f: POP 00000470: PUSH1 0x20 00000472: DUP4 00000473: SUB 00000474: SWAP3 00000475: POP 00000476: PUSH2 0x0455 00000479: JUMP 0000047a: JUMPDEST 0000047b: PUSH1 0x01 0000047d: DUP4 0000047e: PUSH1 0x20 00000480: SUB 00000481: PUSH2 0x0100 00000484: EXP 00000485: SUB 00000486: DUP1 00000487: NOT 00000488: DUP3 00000489: MLOAD 0000048a: AND 0000048b: DUP2 0000048c: DUP5 0000048d: MLOAD 0000048e: AND 0000048f: DUP1 00000490: DUP3 00000491: OR 00000492: DUP6 00000493: MSTORE 00000494: POP 00000495: POP 00000496: POP 00000497: POP 00000498: POP 00000499: POP 0000049a: SWAP1 0000049b: POP 0000049c: ADD 0000049d: DUP3 0000049e: DUP2 0000049f: MSTORE 000004a0: PUSH1 0x20 000004a2: ADD 000004a3: SWAP4 000004a4: POP 000004a5: POP 000004a6: POP 000004a7: POP 000004a8: PUSH1 0x40 000004aa: MLOAD 000004ab: DUP1 000004ac: SWAP2 000004ad: SUB 000004ae: SWAP1 000004af: KECCAK256 000004b0: SWAP1 000004b1: POP 000004b2: PUSH1 0x40 000004b4: DUP1 000004b5: MLOAD 000004b6: SWAP1 000004b7: DUP2 000004b8: ADD 000004b9: PUSH1 0x40 000004bb: MSTORE 000004bc: DUP1 000004bd: PUSH1 0x1c 000004bf: DUP2 000004c0: MSTORE 000004c1: PUSH1 0x20 000004c3: ADD 000004c4: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 000004e5: DUP2 000004e6: MSTORE 000004e7: POP 000004e8: DUP2 000004e9: PUSH1 0x40 000004eb: MLOAD 000004ec: DUP1 000004ed: DUP4 000004ee: DUP1 000004ef: MLOAD 000004f0: SWAP1 000004f1: PUSH1 0x20 000004f3: ADD 000004f4: SWAP1 000004f5: DUP1 000004f6: DUP4 000004f7: DUP4 000004f8: JUMPDEST 000004f9: PUSH1 0x20 000004fb: DUP4 000004fc: LT 000004fd: ISZERO 000004fe: ISZERO 000004ff: PUSH2 0x051d 00000502: JUMPI 00000503: DUP1 00000504: MLOAD 00000505: DUP3 00000506: MSTORE 00000507: PUSH1 0x20 00000509: DUP3 0000050a: ADD 0000050b: SWAP2 0000050c: POP 0000050d: PUSH1 0x20 0000050f: DUP2 00000510: ADD 00000511: SWAP1 00000512: POP 00000513: PUSH1 0x20 00000515: DUP4 00000516: SUB 00000517: SWAP3 00000518: POP 00000519: PUSH2 0x04f8 0000051c: JUMP 0000051d: JUMPDEST 0000051e: PUSH1 0x01 00000520: DUP4 00000521: PUSH1 0x20 00000523: SUB 00000524: PUSH2 0x0100 00000527: EXP 00000528: SUB 00000529: DUP1 0000052a: NOT 0000052b: DUP3 0000052c: MLOAD 0000052d: AND 0000052e: DUP2 0000052f: DUP5 00000530: MLOAD 00000531: AND 00000532: DUP1 00000533: DUP3 00000534: OR 00000535: DUP6 00000536: MSTORE 00000537: POP 00000538: POP 00000539: POP 0000053a: POP 0000053b: POP 0000053c: POP 0000053d: SWAP1 0000053e: POP 0000053f: ADD 00000540: DUP3 00000541: PUSH1 0x00 00000543: NOT 00000544: AND 00000545: PUSH1 0x00 00000547: NOT 00000548: AND 00000549: DUP2 0000054a: MSTORE 0000054b: PUSH1 0x20 0000054d: ADD 0000054e: SWAP3 0000054f: POP 00000550: POP 00000551: POP 00000552: PUSH1 0x40 00000554: MLOAD 00000555: DUP1 00000556: SWAP2 00000557: SUB 00000558: SWAP1 00000559: KECCAK256 0000055a: SWAP2 0000055b: POP 0000055c: POP 0000055d: SWAP4 0000055e: SWAP3 0000055f: POP 00000560: POP 00000561: POP 00000562: JUMP 00000563: JUMPDEST 00000564: PUSH1 0x00 00000566: PUSH1 0x60 00000568: PUSH1 0x00 0000056a: DUP1 0000056b: DUP5 0000056c: PUSH1 0x00 0000056e: ADD 0000056f: MLOAD 00000570: SWAP4 00000571: POP 00000572: DUP5 00000573: PUSH1 0x20 00000575: ADD 00000576: MLOAD 00000577: SWAP3 00000578: POP 00000579: DUP5 0000057a: PUSH1 0x40 0000057c: ADD 0000057d: MLOAD 0000057e: SWAP2 0000057f: POP 00000580: DUP5 00000581: PUSH1 0x80 00000583: ADD 00000584: MLOAD 00000585: SWAP1 00000586: POP 00000587: PUSH32 0x74d34c6fe876d2d910521ea7c31bdea6530879732d5e8fa3781ce25171fa1760 000005a8: DUP5 000005a9: DUP3 000005aa: PUSH1 0x40 000005ac: MLOAD 000005ad: PUSH2 0x05b7 000005b0: SWAP3 000005b1: SWAP2 000005b2: SWAP1 000005b3: PUSH2 0x0ea9 000005b6: JUMP 000005b7: JUMPDEST 000005b8: PUSH1 0x40 000005ba: MLOAD 000005bb: DUP1 000005bc: SWAP2 000005bd: SUB 000005be: SWAP1 000005bf: LOG1 000005c0: PUSH2 0x05c8 000005c3: DUP6 000005c4: PUSH2 0x0284 000005c7: JUMP 000005c8: JUMPDEST 000005c9: ISZERO 000005ca: PUSH2 0x06d7 000005cd: JUMPI 000005ce: DUP4 000005cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005e4: AND 000005e5: DUP3 000005e6: DUP5 000005e7: PUSH1 0x40 000005e9: MLOAD 000005ea: DUP1 000005eb: DUP3 000005ec: DUP1 000005ed: MLOAD 000005ee: SWAP1 000005ef: PUSH1 0x20 000005f1: ADD 000005f2: SWAP1 000005f3: DUP1 000005f4: DUP4 000005f5: DUP4 000005f6: PUSH1 0x00 000005f8: JUMPDEST 000005f9: DUP4 000005fa: DUP2 000005fb: LT 000005fc: ISZERO 000005fd: PUSH2 0x0613 00000600: JUMPI 00000601: DUP1 00000602: DUP3 00000603: ADD 00000604: MLOAD 00000605: DUP2 00000606: DUP5 00000607: ADD 00000608: MSTORE 00000609: PUSH1 0x20 0000060b: DUP2 0000060c: ADD 0000060d: SWAP1 0000060e: POP 0000060f: PUSH2 0x05f8 00000612: JUMP 00000613: JUMPDEST 00000614: POP 00000615: POP 00000616: POP 00000617: POP 00000618: SWAP1 00000619: POP 0000061a: SWAP1 0000061b: DUP2 0000061c: ADD 0000061d: SWAP1 0000061e: PUSH1 0x1f 00000620: AND 00000621: DUP1 00000622: ISZERO 00000623: PUSH2 0x0640 00000626: JUMPI 00000627: DUP1 00000628: DUP3 00000629: SUB 0000062a: DUP1 0000062b: MLOAD 0000062c: PUSH1 0x01 0000062e: DUP4 0000062f: PUSH1 0x20 00000631: SUB 00000632: PUSH2 0x0100 00000635: EXP 00000636: SUB 00000637: NOT 00000638: AND 00000639: DUP2 0000063a: MSTORE 0000063b: PUSH1 0x20 0000063d: ADD 0000063e: SWAP2 0000063f: POP 00000640: JUMPDEST 00000641: POP 00000642: SWAP2 00000643: POP 00000644: POP 00000645: PUSH1 0x00 00000647: PUSH1 0x40 00000649: MLOAD 0000064a: DUP1 0000064b: DUP4 0000064c: SUB 0000064d: DUP2 0000064e: DUP6 0000064f: DUP8 00000650: GAS 00000651: CALL 00000652: SWAP3 00000653: POP 00000654: POP 00000655: POP 00000656: ISZERO 00000657: PUSH2 0x0698 0000065a: JUMPI 0000065b: PUSH32 0x9ae6eab77ab97680a0708bbb21af686ae24276636c6aa70f8a02f4cccd49499b 0000067c: DUP5 0000067d: DUP3 0000067e: PUSH1 0x40 00000680: MLOAD 00000681: PUSH2 0x068b 00000684: SWAP3 00000685: SWAP2 00000686: SWAP1 00000687: PUSH2 0x0ea9 0000068a: JUMP 0000068b: JUMPDEST 0000068c: PUSH1 0x40 0000068e: MLOAD 0000068f: DUP1 00000690: SWAP2 00000691: SUB 00000692: SWAP1 00000693: LOG1 00000694: PUSH2 0x06d2 00000697: JUMP 00000698: JUMPDEST 00000699: PUSH32 0x422d7d1308c28fc21ce33958ef24b1078048fc1a9d39bdc51931eb2e9939fd03 000006ba: DUP5 000006bb: DUP3 000006bc: PUSH1 0x40 000006be: MLOAD 000006bf: PUSH2 0x06c9 000006c2: SWAP3 000006c3: SWAP2 000006c4: SWAP1 000006c5: PUSH2 0x0ea9 000006c8: JUMP 000006c9: JUMPDEST 000006ca: PUSH1 0x40 000006cc: MLOAD 000006cd: DUP1 000006ce: SWAP2 000006cf: SUB 000006d0: SWAP1 000006d1: LOG1 000006d2: JUMPDEST 000006d3: PUSH2 0x0711 000006d6: JUMP 000006d7: JUMPDEST 000006d8: PUSH32 0x1d7ce720a2f369d4eb35904f7bb3f97b6fdcfc76cf000cbd281d405ec68c1956 000006f9: DUP5 000006fa: DUP3 000006fb: PUSH1 0x40 000006fd: MLOAD 000006fe: PUSH2 0x0708 00000701: SWAP3 00000702: SWAP2 00000703: SWAP1 00000704: PUSH2 0x0ea9 00000707: JUMP 00000708: JUMPDEST 00000709: PUSH1 0x40 0000070b: MLOAD 0000070c: DUP1 0000070d: SWAP2 0000070e: SUB 0000070f: SWAP1 00000710: LOG1 00000711: JUMPDEST 00000712: POP 00000713: POP 00000714: POP 00000715: POP 00000716: POP 00000717: JUMP 00000718: JUMPDEST 00000719: PUSH32 0x4f7b0265dc15e282f56ae0820603286a6547460256b0fe068e6ed578cb3d8bb6 0000073a: DUP2 0000073b: PUSH1 0x40 0000073d: MLOAD 0000073e: PUSH2 0x0747 00000741: SWAP2 00000742: SWAP1 00000743: PUSH2 0x0e8e 00000746: JUMP 00000747: JUMPDEST 00000748: PUSH1 0x40 0000074a: MLOAD 0000074b: DUP1 0000074c: SWAP2 0000074d: SUB 0000074e: SWAP1 0000074f: LOG1 00000750: PUSH1 0x01 00000752: PUSH1 0x00 00000754: SWAP1 00000755: SLOAD 00000756: SWAP1 00000757: PUSH2 0x0100 0000075a: EXP 0000075b: SWAP1 0000075c: DIV 0000075d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000772: AND 00000773: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000788: AND 00000789: CALLER 0000078a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000079f: AND 000007a0: EQ 000007a1: DUP1 000007a2: ISZERO 000007a3: PUSH2 0x07f9 000007a6: JUMPI 000007a7: POP 000007a8: PUSH1 0x00 000007aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007bf: AND 000007c0: PUSH1 0x00 000007c2: DUP1 000007c3: SWAP1 000007c4: SLOAD 000007c5: SWAP1 000007c6: PUSH2 0x0100 000007c9: EXP 000007ca: SWAP1 000007cb: DIV 000007cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007e1: AND 000007e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007f7: AND 000007f8: EQ 000007f9: JUMPDEST 000007fa: ISZERO 000007fb: PUSH2 0x087a 000007fe: JUMPI 000007ff: DUP1 00000800: PUSH1 0x00 00000802: DUP1 00000803: PUSH2 0x0100 00000806: EXP 00000807: DUP2 00000808: SLOAD 00000809: DUP2 0000080a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000081f: MUL 00000820: NOT 00000821: AND 00000822: SWAP1 00000823: DUP4 00000824: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000839: AND 0000083a: MUL 0000083b: OR 0000083c: SWAP1 0000083d: SSTORE 0000083e: POP 0000083f: PUSH32 0x5c4387c894a24bbdaab0ebb3e90d2d0f0d1900a6b4878e87c1fc3bfe75c1f0df 00000860: DUP2 00000861: PUSH1 0x40 00000863: MLOAD 00000864: PUSH2 0x086d 00000867: SWAP2 00000868: SWAP1 00000869: PUSH2 0x0e8e 0000086c: JUMP 0000086d: JUMPDEST 0000086e: PUSH1 0x40 00000870: MLOAD 00000871: DUP1 00000872: SWAP2 00000873: SUB 00000874: SWAP1 00000875: LOG1 00000876: PUSH2 0x08b2 00000879: JUMP 0000087a: JUMPDEST 0000087b: PUSH32 0x6e7c18ac33fbdcd4f970e95dbb26c2f291e243f724c43b33c701f00f75826513 0000089c: DUP2 0000089d: PUSH1 0x40 0000089f: MLOAD 000008a0: PUSH2 0x08a9 000008a3: SWAP2 000008a4: SWAP1 000008a5: PUSH2 0x0e8e 000008a8: JUMP 000008a9: JUMPDEST 000008aa: PUSH1 0x40 000008ac: MLOAD 000008ad: DUP1 000008ae: SWAP2 000008af: SUB 000008b0: SWAP1 000008b1: LOG1 000008b2: JUMPDEST 000008b3: POP 000008b4: JUMP 000008b5: JUMPDEST 000008b6: PUSH1 0x01 000008b8: PUSH1 0x00 000008ba: SWAP1 000008bb: SLOAD 000008bc: SWAP1 000008bd: PUSH2 0x0100 000008c0: EXP 000008c1: SWAP1 000008c2: DIV 000008c3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008d8: AND 000008d9: DUP2 000008da: JUMP 000008db: JUMPDEST 000008dc: PUSH1 0x00 000008de: PUSH1 0x01 000008e0: DUP4 000008e1: DUP4 000008e2: PUSH1 0x00 000008e4: ADD 000008e5: MLOAD 000008e6: DUP5 000008e7: PUSH1 0x20 000008e9: ADD 000008ea: MLOAD 000008eb: DUP6 000008ec: PUSH1 0x40 000008ee: ADD 000008ef: MLOAD 000008f0: PUSH1 0x40 000008f2: MLOAD 000008f3: PUSH1 0x00 000008f5: DUP2 000008f6: MSTORE 000008f7: PUSH1 0x20 000008f9: ADD 000008fa: PUSH1 0x40 000008fc: MSTORE 000008fd: PUSH1 0x40 000008ff: MLOAD 00000900: PUSH2 0x090c 00000903: SWAP5 00000904: SWAP4 00000905: SWAP3 00000906: SWAP2 00000907: SWAP1 00000908: PUSH2 0x0f08 0000090b: JUMP 0000090c: JUMPDEST 0000090d: PUSH1 0x20 0000090f: PUSH1 0x40 00000911: MLOAD 00000912: PUSH1 0x20 00000914: DUP2 00000915: SUB 00000916: SWAP1 00000917: DUP1 00000918: DUP5 00000919: SUB 0000091a: SWAP1 0000091b: PUSH1 0x00 0000091d: DUP7 0000091e: GAS 0000091f: CALL 00000920: ISZERO 00000921: DUP1 00000922: ISZERO 00000923: PUSH2 0x0930 00000926: JUMPI 00000927: RETURNDATASIZE 00000928: PUSH1 0x00 0000092a: DUP1 0000092b: RETURNDATACOPY 0000092c: RETURNDATASIZE 0000092d: PUSH1 0x00 0000092f: REVERT 00000930: JUMPDEST 00000931: POP 00000932: POP 00000933: POP 00000934: PUSH1 0x20 00000936: PUSH1 0x40 00000938: MLOAD 00000939: SUB 0000093a: MLOAD 0000093b: SWAP1 0000093c: POP 0000093d: SWAP3 0000093e: SWAP2 0000093f: POP 00000940: POP 00000941: JUMP 00000942: JUMPDEST 00000943: PUSH1 0x00 00000945: DUP1 00000946: SWAP1 00000947: SLOAD 00000948: SWAP1 00000949: PUSH2 0x0100 0000094c: EXP 0000094d: SWAP1 0000094e: DIV 0000094f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000964: AND 00000965: DUP2 00000966: JUMP 00000967: JUMPDEST 00000968: PUSH1 0x60 0000096a: PUSH1 0x40 0000096c: MLOAD 0000096d: SWAP1 0000096e: DUP2 0000096f: ADD 00000970: PUSH1 0x40 00000972: MSTORE 00000973: DUP1 00000974: PUSH1 0x00 00000976: PUSH1 0xff 00000978: AND 00000979: DUP2 0000097a: MSTORE 0000097b: PUSH1 0x20 0000097d: ADD 0000097e: PUSH1 0x00 00000980: DUP1 00000981: NOT 00000982: AND 00000983: DUP2 00000984: MSTORE 00000985: PUSH1 0x20 00000987: ADD 00000988: PUSH1 0x00 0000098a: DUP1 0000098b: NOT 0000098c: AND 0000098d: DUP2 0000098e: MSTORE 0000098f: POP 00000990: SWAP1 00000991: JUMP 00000992: JUMPDEST 00000993: PUSH1 0x00 00000995: PUSH2 0x099e 00000998: DUP3 00000999: CALLDATALOAD 0000099a: PUSH2 0x103d 0000099d: JUMP 0000099e: JUMPDEST 0000099f: SWAP1 000009a0: POP 000009a1: SWAP3 000009a2: SWAP2 000009a3: POP 000009a4: POP 000009a5: JUMP 000009a6: JUMPDEST 000009a7: PUSH1 0x00 000009a9: DUP3 000009aa: PUSH1 0x1f 000009ac: DUP4 000009ad: ADD 000009ae: SLT 000009af: ISZERO 000009b0: ISZERO 000009b1: PUSH2 0x09b9 000009b4: JUMPI 000009b5: PUSH1 0x00 000009b7: DUP1 000009b8: REVERT 000009b9: JUMPDEST 000009ba: DUP2 000009bb: CALLDATALOAD 000009bc: PUSH2 0x09cc 000009bf: PUSH2 0x09c7 000009c2: DUP3 000009c3: PUSH2 0x0f7a 000009c6: JUMP 000009c7: JUMPDEST 000009c8: PUSH2 0x0f4d 000009cb: JUMP 000009cc: JUMPDEST 000009cd: SWAP2 000009ce: POP 000009cf: DUP2 000009d0: DUP2 000009d1: DUP4 000009d2: MSTORE 000009d3: PUSH1 0x20 000009d5: DUP5 000009d6: ADD 000009d7: SWAP4 000009d8: POP 000009d9: PUSH1 0x20 000009db: DUP2 000009dc: ADD 000009dd: SWAP1 000009de: POP 000009df: DUP4 000009e0: PUSH1 0x00 000009e2: JUMPDEST 000009e3: DUP4 000009e4: DUP2 000009e5: LT 000009e6: ISZERO 000009e7: PUSH2 0x0a12 000009ea: JUMPI 000009eb: DUP2 000009ec: CALLDATALOAD 000009ed: DUP7 000009ee: ADD 000009ef: PUSH2 0x09f8 000009f2: DUP9 000009f3: DUP3 000009f4: PUSH2 0x0b9c 000009f7: JUMP 000009f8: JUMPDEST 000009f9: DUP5 000009fa: MSTORE 000009fb: PUSH1 0x20 000009fd: DUP5 000009fe: ADD 000009ff: SWAP4 00000a00: POP 00000a01: PUSH1 0x20 00000a03: DUP4 00000a04: ADD 00000a05: SWAP3 00000a06: POP 00000a07: POP 00000a08: PUSH1 0x01 00000a0a: DUP2 00000a0b: ADD 00000a0c: SWAP1 00000a0d: POP 00000a0e: PUSH2 0x09e2 00000a11: JUMP 00000a12: JUMPDEST 00000a13: POP 00000a14: POP 00000a15: POP 00000a16: POP 00000a17: SWAP3 00000a18: SWAP2 00000a19: POP 00000a1a: POP 00000a1b: JUMP 00000a1c: JUMPDEST 00000a1d: PUSH1 0x00 00000a1f: PUSH2 0x0a28 00000a22: DUP3 00000a23: CALLDATALOAD 00000a24: PUSH2 0x105d 00000a27: JUMP 00000a28: JUMPDEST 00000a29: SWAP1 00000a2a: POP 00000a2b: SWAP3 00000a2c: SWAP2 00000a2d: POP 00000a2e: POP 00000a2f: JUMP 00000a30: JUMPDEST 00000a31: PUSH1 0x00 00000a33: DUP3 00000a34: PUSH1 0x1f 00000a36: DUP4 00000a37: ADD 00000a38: SLT 00000a39: ISZERO 00000a3a: ISZERO 00000a3b: PUSH2 0x0a43 00000a3e: JUMPI 00000a3f: PUSH1 0x00 00000a41: DUP1 00000a42: REVERT 00000a43: JUMPDEST 00000a44: DUP2 00000a45: CALLDATALOAD 00000a46: PUSH2 0x0a56 00000a49: PUSH2 0x0a51 00000a4c: DUP3 00000a4d: PUSH2 0x0fa2 00000a50: JUMP 00000a51: JUMPDEST 00000a52: PUSH2 0x0f4d 00000a55: JUMP 00000a56: JUMPDEST 00000a57: SWAP2 00000a58: POP 00000a59: DUP1 00000a5a: DUP3 00000a5b: MSTORE 00000a5c: PUSH1 0x20 00000a5e: DUP4 00000a5f: ADD 00000a60: PUSH1 0x20 00000a62: DUP4 00000a63: ADD 00000a64: DUP6 00000a65: DUP4 00000a66: DUP4 00000a67: ADD 00000a68: GT 00000a69: ISZERO 00000a6a: PUSH2 0x0a72 00000a6d: JUMPI 00000a6e: PUSH1 0x00 00000a70: DUP1 00000a71: REVERT 00000a72: JUMPDEST 00000a73: PUSH2 0x0a7d 00000a76: DUP4 00000a77: DUP3 00000a78: DUP5 00000a79: PUSH2 0x107e 00000a7c: JUMP 00000a7d: JUMPDEST 00000a7e: POP 00000a7f: POP 00000a80: POP 00000a81: SWAP3 00000a82: SWAP2 00000a83: POP 00000a84: POP 00000a85: JUMP 00000a86: JUMPDEST 00000a87: PUSH1 0x00 00000a89: DUP3 00000a8a: PUSH1 0x1f 00000a8c: DUP4 00000a8d: ADD 00000a8e: SLT 00000a8f: ISZERO 00000a90: ISZERO 00000a91: PUSH2 0x0a99 00000a94: JUMPI 00000a95: PUSH1 0x00 00000a97: DUP1 00000a98: REVERT 00000a99: JUMPDEST 00000a9a: DUP2 00000a9b: CALLDATALOAD 00000a9c: PUSH2 0x0aac 00000a9f: PUSH2 0x0aa7 00000aa2: DUP3 00000aa3: PUSH2 0x0fce 00000aa6: JUMP 00000aa7: JUMPDEST 00000aa8: PUSH2 0x0f4d 00000aab: JUMP 00000aac: JUMPDEST 00000aad: SWAP2 00000aae: POP 00000aaf: DUP1 00000ab0: DUP3 00000ab1: MSTORE 00000ab2: PUSH1 0x20 00000ab4: DUP4 00000ab5: ADD 00000ab6: PUSH1 0x20 00000ab8: DUP4 00000ab9: ADD 00000aba: DUP6 00000abb: DUP4 00000abc: DUP4 00000abd: ADD 00000abe: GT 00000abf: ISZERO 00000ac0: PUSH2 0x0ac8 00000ac3: JUMPI 00000ac4: PUSH1 0x00 00000ac6: DUP1 00000ac7: REVERT 00000ac8: JUMPDEST 00000ac9: PUSH2 0x0ad3 00000acc: DUP4 00000acd: DUP3 00000ace: DUP5 00000acf: PUSH2 0x107e 00000ad2: JUMP 00000ad3: JUMPDEST 00000ad4: POP 00000ad5: POP 00000ad6: POP 00000ad7: SWAP3 00000ad8: SWAP2 00000ad9: POP 00000ada: POP 00000adb: JUMP 00000adc: JUMPDEST 00000add: PUSH1 0x00 00000adf: PUSH1 0x60 00000ae1: DUP3 00000ae2: DUP5 00000ae3: SUB 00000ae4: SLT 00000ae5: ISZERO 00000ae6: PUSH2 0x0aee 00000ae9: JUMPI 00000aea: PUSH1 0x00 00000aec: DUP1 00000aed: REVERT 00000aee: JUMPDEST 00000aef: PUSH2 0x0af8 00000af2: PUSH1 0x60 00000af4: PUSH2 0x0f4d 00000af7: JUMP 00000af8: JUMPDEST 00000af9: SWAP1 00000afa: POP 00000afb: PUSH1 0x00 00000afd: PUSH2 0x0b08 00000b00: DUP5 00000b01: DUP3 00000b02: DUP6 00000b03: ADD 00000b04: PUSH2 0x0cf0 00000b07: JUMP 00000b08: JUMPDEST 00000b09: PUSH1 0x00 00000b0b: DUP4 00000b0c: ADD 00000b0d: MSTORE 00000b0e: POP 00000b0f: PUSH1 0x20 00000b11: PUSH2 0x0b1c 00000b14: DUP5 00000b15: DUP3 00000b16: DUP6 00000b17: ADD 00000b18: PUSH2 0x0a1c 00000b1b: JUMP 00000b1c: JUMPDEST 00000b1d: PUSH1 0x20 00000b1f: DUP4 00000b20: ADD 00000b21: MSTORE 00000b22: POP 00000b23: PUSH1 0x40 00000b25: PUSH2 0x0b30 00000b28: DUP5 00000b29: DUP3 00000b2a: DUP6 00000b2b: ADD 00000b2c: PUSH2 0x0a1c 00000b2f: JUMP 00000b30: JUMPDEST 00000b31: PUSH1 0x40 00000b33: DUP4 00000b34: ADD 00000b35: MSTORE 00000b36: POP 00000b37: SWAP3 00000b38: SWAP2 00000b39: POP 00000b3a: POP 00000b3b: JUMP 00000b3c: JUMPDEST 00000b3d: PUSH1 0x00 00000b3f: PUSH1 0x60 00000b41: DUP3 00000b42: DUP5 00000b43: SUB 00000b44: SLT 00000b45: ISZERO 00000b46: PUSH2 0x0b4e 00000b49: JUMPI 00000b4a: PUSH1 0x00 00000b4c: DUP1 00000b4d: REVERT 00000b4e: JUMPDEST 00000b4f: PUSH2 0x0b58 00000b52: PUSH1 0x60 00000b54: PUSH2 0x0f4d 00000b57: JUMP 00000b58: JUMPDEST 00000b59: SWAP1 00000b5a: POP 00000b5b: PUSH1 0x00 00000b5d: PUSH2 0x0b68 00000b60: DUP5 00000b61: DUP3 00000b62: DUP6 00000b63: ADD 00000b64: PUSH2 0x0cf0 00000b67: JUMP 00000b68: JUMPDEST 00000b69: PUSH1 0x00 00000b6b: DUP4 00000b6c: ADD 00000b6d: MSTORE 00000b6e: POP 00000b6f: PUSH1 0x20 00000b71: PUSH2 0x0b7c 00000b74: DUP5 00000b75: DUP3 00000b76: DUP6 00000b77: ADD 00000b78: PUSH2 0x0a1c 00000b7b: JUMP 00000b7c: JUMPDEST 00000b7d: PUSH1 0x20 00000b7f: DUP4 00000b80: ADD 00000b81: MSTORE 00000b82: POP 00000b83: PUSH1 0x40 00000b85: PUSH2 0x0b90 00000b88: DUP5 00000b89: DUP3 00000b8a: DUP6 00000b8b: ADD 00000b8c: PUSH2 0x0a1c 00000b8f: JUMP 00000b90: JUMPDEST 00000b91: PUSH1 0x40 00000b93: DUP4 00000b94: ADD 00000b95: MSTORE 00000b96: POP 00000b97: SWAP3 00000b98: SWAP2 00000b99: POP 00000b9a: POP 00000b9b: JUMP 00000b9c: JUMPDEST 00000b9d: PUSH1 0x00 00000b9f: PUSH1 0xe0 00000ba1: DUP3 00000ba2: DUP5 00000ba3: SUB 00000ba4: SLT 00000ba5: ISZERO 00000ba6: PUSH2 0x0bae 00000ba9: JUMPI 00000baa: PUSH1 0x00 00000bac: DUP1 00000bad: REVERT 00000bae: JUMPDEST 00000baf: PUSH2 0x0bb8 00000bb2: PUSH1 0xa0 00000bb4: PUSH2 0x0f4d 00000bb7: JUMP 00000bb8: JUMPDEST 00000bb9: SWAP1 00000bba: POP 00000bbb: PUSH1 0x00 00000bbd: PUSH2 0x0bc8 00000bc0: DUP5 00000bc1: DUP3 00000bc2: DUP6 00000bc3: ADD 00000bc4: PUSH2 0x0992 00000bc7: JUMP 00000bc8: JUMPDEST 00000bc9: PUSH1 0x00 00000bcb: DUP4 00000bcc: ADD 00000bcd: MSTORE 00000bce: POP 00000bcf: PUSH1 0x20 00000bd1: DUP3 00000bd2: ADD 00000bd3: CALLDATALOAD 00000bd4: PUSH8 0xffffffffffffffff 00000bdd: DUP2 00000bde: GT 00000bdf: ISZERO 00000be0: PUSH2 0x0be8 00000be3: JUMPI 00000be4: PUSH1 0x00 00000be6: DUP1 00000be7: REVERT 00000be8: JUMPDEST 00000be9: PUSH2 0x0bf4 00000bec: DUP5 00000bed: DUP3 00000bee: DUP6 00000bef: ADD 00000bf0: PUSH2 0x0a30 00000bf3: JUMP 00000bf4: JUMPDEST 00000bf5: PUSH1 0x20 00000bf7: DUP4 00000bf8: ADD 00000bf9: MSTORE 00000bfa: POP 00000bfb: PUSH1 0x40 00000bfd: PUSH2 0x0c08 00000c00: DUP5 00000c01: DUP3 00000c02: DUP6 00000c03: ADD 00000c04: PUSH2 0x0cdc 00000c07: JUMP 00000c08: JUMPDEST 00000c09: PUSH1 0x40 00000c0b: DUP4 00000c0c: ADD 00000c0d: MSTORE 00000c0e: POP 00000c0f: PUSH1 0x60 00000c11: PUSH2 0x0c1c 00000c14: DUP5 00000c15: DUP3 00000c16: DUP6 00000c17: ADD 00000c18: PUSH2 0x0adc 00000c1b: JUMP 00000c1c: JUMPDEST 00000c1d: PUSH1 0x60 00000c1f: DUP4 00000c20: ADD 00000c21: MSTORE 00000c22: POP 00000c23: PUSH1 0xc0 00000c25: PUSH2 0x0c30 00000c28: DUP5 00000c29: DUP3 00000c2a: DUP6 00000c2b: ADD 00000c2c: PUSH2 0x0992 00000c2f: JUMP 00000c30: JUMPDEST 00000c31: PUSH1 0x80 00000c33: DUP4 00000c34: ADD 00000c35: MSTORE 00000c36: POP 00000c37: SWAP3 00000c38: SWAP2 00000c39: POP 00000c3a: POP 00000c3b: JUMP 00000c3c: JUMPDEST 00000c3d: PUSH1 0x00 00000c3f: PUSH1 0xe0 00000c41: DUP3 00000c42: DUP5 00000c43: SUB 00000c44: SLT 00000c45: ISZERO 00000c46: PUSH2 0x0c4e 00000c49: JUMPI 00000c4a: PUSH1 0x00 00000c4c: DUP1 00000c4d: REVERT 00000c4e: JUMPDEST 00000c4f: PUSH2 0x0c58 00000c52: PUSH1 0xa0 00000c54: PUSH2 0x0f4d 00000c57: JUMP 00000c58: JUMPDEST 00000c59: SWAP1 00000c5a: POP 00000c5b: PUSH1 0x00 00000c5d: PUSH2 0x0c68 00000c60: DUP5 00000c61: DUP3 00000c62: DUP6 00000c63: ADD 00000c64: PUSH2 0x0992 00000c67: JUMP 00000c68: JUMPDEST 00000c69: PUSH1 0x00 00000c6b: DUP4 00000c6c: ADD 00000c6d: MSTORE 00000c6e: POP 00000c6f: PUSH1 0x20 00000c71: DUP3 00000c72: ADD 00000c73: CALLDATALOAD 00000c74: PUSH8 0xffffffffffffffff 00000c7d: DUP2 00000c7e: GT 00000c7f: ISZERO 00000c80: PUSH2 0x0c88 00000c83: JUMPI 00000c84: PUSH1 0x00 00000c86: DUP1 00000c87: REVERT 00000c88: JUMPDEST 00000c89: PUSH2 0x0c94 00000c8c: DUP5 00000c8d: DUP3 00000c8e: DUP6 00000c8f: ADD 00000c90: PUSH2 0x0a30 00000c93: JUMP 00000c94: JUMPDEST 00000c95: PUSH1 0x20 00000c97: DUP4 00000c98: ADD 00000c99: MSTORE 00000c9a: POP 00000c9b: PUSH1 0x40 00000c9d: PUSH2 0x0ca8 00000ca0: DUP5 00000ca1: DUP3 00000ca2: DUP6 00000ca3: ADD 00000ca4: PUSH2 0x0cdc 00000ca7: JUMP 00000ca8: JUMPDEST 00000ca9: PUSH1 0x40 00000cab: DUP4 00000cac: ADD 00000cad: MSTORE 00000cae: POP 00000caf: PUSH1 0x60 00000cb1: PUSH2 0x0cbc 00000cb4: DUP5 00000cb5: DUP3 00000cb6: DUP6 00000cb7: ADD 00000cb8: PUSH2 0x0adc 00000cbb: JUMP 00000cbc: JUMPDEST 00000cbd: PUSH1 0x60 00000cbf: DUP4 00000cc0: ADD 00000cc1: MSTORE 00000cc2: POP 00000cc3: PUSH1 0xc0 00000cc5: PUSH2 0x0cd0 00000cc8: DUP5 00000cc9: DUP3 00000cca: DUP6 00000ccb: ADD 00000ccc: PUSH2 0x0992 00000ccf: JUMP 00000cd0: JUMPDEST 00000cd1: PUSH1 0x80 00000cd3: DUP4 00000cd4: ADD 00000cd5: MSTORE 00000cd6: POP 00000cd7: SWAP3 00000cd8: SWAP2 00000cd9: POP 00000cda: POP 00000cdb: JUMP 00000cdc: JUMPDEST 00000cdd: PUSH1 0x00 00000cdf: PUSH2 0x0ce8 00000ce2: DUP3 00000ce3: CALLDATALOAD 00000ce4: PUSH2 0x1067 00000ce7: JUMP 00000ce8: JUMPDEST 00000ce9: SWAP1 00000cea: POP 00000ceb: SWAP3 00000cec: SWAP2 00000ced: POP 00000cee: POP 00000cef: JUMP 00000cf0: JUMPDEST 00000cf1: PUSH1 0x00 00000cf3: PUSH2 0x0cfc 00000cf6: DUP3 00000cf7: CALLDATALOAD 00000cf8: PUSH2 0x1071 00000cfb: JUMP 00000cfc: JUMPDEST 00000cfd: SWAP1 00000cfe: POP 00000cff: SWAP3 00000d00: SWAP2 00000d01: POP 00000d02: POP 00000d03: JUMP 00000d04: JUMPDEST 00000d05: PUSH1 0x00 00000d07: PUSH1 0x20 00000d09: DUP3 00000d0a: DUP5 00000d0b: SUB 00000d0c: SLT 00000d0d: ISZERO 00000d0e: PUSH2 0x0d16 00000d11: JUMPI 00000d12: PUSH1 0x00 00000d14: DUP1 00000d15: REVERT 00000d16: JUMPDEST 00000d17: PUSH1 0x00 00000d19: PUSH2 0x0d24 00000d1c: DUP5 00000d1d: DUP3 00000d1e: DUP6 00000d1f: ADD 00000d20: PUSH2 0x0992 00000d23: JUMP 00000d24: JUMPDEST 00000d25: SWAP2 00000d26: POP 00000d27: POP 00000d28: SWAP3 00000d29: SWAP2 00000d2a: POP 00000d2b: POP 00000d2c: JUMP 00000d2d: JUMPDEST 00000d2e: PUSH1 0x00 00000d30: DUP1 00000d31: PUSH1 0x00 00000d33: PUSH1 0x60 00000d35: DUP5 00000d36: DUP7 00000d37: SUB 00000d38: SLT 00000d39: ISZERO 00000d3a: PUSH2 0x0d42 00000d3d: JUMPI 00000d3e: PUSH1 0x00 00000d40: DUP1 00000d41: REVERT 00000d42: JUMPDEST 00000d43: PUSH1 0x00 00000d45: PUSH2 0x0d50 00000d48: DUP7 00000d49: DUP3 00000d4a: DUP8 00000d4b: ADD 00000d4c: PUSH2 0x0992 00000d4f: JUMP 00000d50: JUMPDEST 00000d51: SWAP4 00000d52: POP 00000d53: POP 00000d54: PUSH1 0x20 00000d56: DUP5 00000d57: ADD 00000d58: CALLDATALOAD 00000d59: PUSH8 0xffffffffffffffff 00000d62: DUP2 00000d63: GT 00000d64: ISZERO 00000d65: PUSH2 0x0d6d 00000d68: JUMPI 00000d69: PUSH1 0x00 00000d6b: DUP1 00000d6c: REVERT 00000d6d: JUMPDEST 00000d6e: PUSH2 0x0d79 00000d71: DUP7 00000d72: DUP3 00000d73: DUP8 00000d74: ADD 00000d75: PUSH2 0x0a86 00000d78: JUMP 00000d79: JUMPDEST 00000d7a: SWAP3 00000d7b: POP 00000d7c: POP 00000d7d: PUSH1 0x40 00000d7f: PUSH2 0x0d8a 00000d82: DUP7 00000d83: DUP3 00000d84: DUP8 00000d85: ADD 00000d86: PUSH2 0x0cdc 00000d89: JUMP 00000d8a: JUMPDEST 00000d8b: SWAP2 00000d8c: POP 00000d8d: POP 00000d8e: SWAP3 00000d8f: POP 00000d90: SWAP3 00000d91: POP 00000d92: SWAP3 00000d93: JUMP 00000d94: JUMPDEST 00000d95: PUSH1 0x00 00000d97: PUSH1 0x20 00000d99: DUP3 00000d9a: DUP5 00000d9b: SUB 00000d9c: SLT 00000d9d: ISZERO 00000d9e: PUSH2 0x0da6 00000da1: JUMPI 00000da2: PUSH1 0x00 00000da4: DUP1 00000da5: REVERT 00000da6: JUMPDEST 00000da7: PUSH1 0x00 00000da9: DUP3 00000daa: ADD 00000dab: CALLDATALOAD 00000dac: PUSH8 0xffffffffffffffff 00000db5: DUP2 00000db6: GT 00000db7: ISZERO 00000db8: PUSH2 0x0dc0 00000dbb: JUMPI 00000dbc: PUSH1 0x00 00000dbe: DUP1 00000dbf: REVERT 00000dc0: JUMPDEST 00000dc1: PUSH2 0x0dcc 00000dc4: DUP5 00000dc5: DUP3 00000dc6: DUP6 00000dc7: ADD 00000dc8: PUSH2 0x09a6 00000dcb: JUMP 00000dcc: JUMPDEST 00000dcd: SWAP2 00000dce: POP 00000dcf: POP 00000dd0: SWAP3 00000dd1: SWAP2 00000dd2: POP 00000dd3: POP 00000dd4: JUMP 00000dd5: JUMPDEST 00000dd6: PUSH1 0x00 00000dd8: DUP1 00000dd9: PUSH1 0x80 00000ddb: DUP4 00000ddc: DUP6 00000ddd: SUB 00000dde: SLT 00000ddf: ISZERO 00000de0: PUSH2 0x0de8 00000de3: JUMPI 00000de4: PUSH1 0x00 00000de6: DUP1 00000de7: REVERT 00000de8: JUMPDEST 00000de9: PUSH1 0x00 00000deb: PUSH2 0x0df6 00000dee: DUP6 00000def: DUP3 00000df0: DUP7 00000df1: ADD 00000df2: PUSH2 0x0a1c 00000df5: JUMP 00000df6: JUMPDEST 00000df7: SWAP3 00000df8: POP 00000df9: POP 00000dfa: PUSH1 0x20 00000dfc: PUSH2 0x0e07 00000dff: DUP6 00000e00: DUP3 00000e01: DUP7 00000e02: ADD 00000e03: PUSH2 0x0b3c 00000e06: JUMP 00000e07: JUMPDEST 00000e08: SWAP2 00000e09: POP 00000e0a: POP 00000e0b: SWAP3 00000e0c: POP 00000e0d: SWAP3 00000e0e: SWAP1 00000e0f: POP 00000e10: JUMP 00000e11: JUMPDEST 00000e12: PUSH1 0x00 00000e14: PUSH1 0x20 00000e16: DUP3 00000e17: DUP5 00000e18: SUB 00000e19: SLT 00000e1a: ISZERO 00000e1b: PUSH2 0x0e23 00000e1e: JUMPI 00000e1f: PUSH1 0x00 00000e21: DUP1 00000e22: REVERT 00000e23: JUMPDEST 00000e24: PUSH1 0x00 00000e26: DUP3 00000e27: ADD 00000e28: CALLDATALOAD 00000e29: PUSH8 0xffffffffffffffff 00000e32: DUP2 00000e33: GT 00000e34: ISZERO 00000e35: PUSH2 0x0e3d 00000e38: JUMPI 00000e39: PUSH1 0x00 00000e3b: DUP1 00000e3c: REVERT 00000e3d: JUMPDEST 00000e3e: PUSH2 0x0e49 00000e41: DUP5 00000e42: DUP3 00000e43: DUP6 00000e44: ADD 00000e45: PUSH2 0x0c3c 00000e48: JUMP 00000e49: JUMPDEST 00000e4a: SWAP2 00000e4b: POP 00000e4c: POP 00000e4d: SWAP3 00000e4e: SWAP2 00000e4f: POP 00000e50: POP 00000e51: JUMP 00000e52: JUMPDEST 00000e53: PUSH2 0x0e5b 00000e56: DUP2 00000e57: PUSH2 0x0ffa 00000e5a: JUMP 00000e5b: JUMPDEST 00000e5c: DUP3 00000e5d: MSTORE 00000e5e: POP 00000e5f: POP 00000e60: JUMP 00000e61: JUMPDEST 00000e62: PUSH2 0x0e6a 00000e65: DUP2 00000e66: PUSH2 0x101a 00000e69: JUMP 00000e6a: JUMPDEST 00000e6b: DUP3 00000e6c: MSTORE 00000e6d: POP 00000e6e: POP 00000e6f: JUMP 00000e70: JUMPDEST 00000e71: PUSH2 0x0e79 00000e74: DUP2 00000e75: PUSH2 0x1026 00000e78: JUMP 00000e79: JUMPDEST 00000e7a: DUP3 00000e7b: MSTORE 00000e7c: POP 00000e7d: POP 00000e7e: JUMP 00000e7f: JUMPDEST 00000e80: PUSH2 0x0e88 00000e83: DUP2 00000e84: PUSH2 0x1030 00000e87: JUMP 00000e88: JUMPDEST 00000e89: DUP3 00000e8a: MSTORE 00000e8b: POP 00000e8c: POP 00000e8d: JUMP 00000e8e: JUMPDEST 00000e8f: PUSH1 0x00 00000e91: PUSH1 0x20 00000e93: DUP3 00000e94: ADD 00000e95: SWAP1 00000e96: POP 00000e97: PUSH2 0x0ea3 00000e9a: PUSH1 0x00 00000e9c: DUP4 00000e9d: ADD 00000e9e: DUP5 00000e9f: PUSH2 0x0e52 00000ea2: JUMP 00000ea3: JUMPDEST 00000ea4: SWAP3 00000ea5: SWAP2 00000ea6: POP 00000ea7: POP 00000ea8: JUMP 00000ea9: JUMPDEST 00000eaa: PUSH1 0x00 00000eac: PUSH1 0x40 00000eae: DUP3 00000eaf: ADD 00000eb0: SWAP1 00000eb1: POP 00000eb2: PUSH2 0x0ebe 00000eb5: PUSH1 0x00 00000eb7: DUP4 00000eb8: ADD 00000eb9: DUP6 00000eba: PUSH2 0x0e52 00000ebd: JUMP 00000ebe: JUMPDEST 00000ebf: PUSH2 0x0ecb 00000ec2: PUSH1 0x20 00000ec4: DUP4 00000ec5: ADD 00000ec6: DUP5 00000ec7: PUSH2 0x0e52 00000eca: JUMP 00000ecb: JUMPDEST 00000ecc: SWAP4 00000ecd: SWAP3 00000ece: POP 00000ecf: POP 00000ed0: POP 00000ed1: JUMP 00000ed2: JUMPDEST 00000ed3: PUSH1 0x00 00000ed5: PUSH1 0x20 00000ed7: DUP3 00000ed8: ADD 00000ed9: SWAP1 00000eda: POP 00000edb: PUSH2 0x0ee7 00000ede: PUSH1 0x00 00000ee0: DUP4 00000ee1: ADD 00000ee2: DUP5 00000ee3: PUSH2 0x0e61 00000ee6: JUMP 00000ee7: JUMPDEST 00000ee8: SWAP3 00000ee9: SWAP2 00000eea: POP 00000eeb: POP 00000eec: JUMP 00000eed: JUMPDEST 00000eee: PUSH1 0x00 00000ef0: PUSH1 0x20 00000ef2: DUP3 00000ef3: ADD 00000ef4: SWAP1 00000ef5: POP 00000ef6: PUSH2 0x0f02 00000ef9: PUSH1 0x00 00000efb: DUP4 00000efc: ADD 00000efd: DUP5 00000efe: PUSH2 0x0e70 00000f01: JUMP 00000f02: JUMPDEST 00000f03: SWAP3 00000f04: SWAP2 00000f05: POP 00000f06: POP 00000f07: JUMP 00000f08: JUMPDEST 00000f09: PUSH1 0x00 00000f0b: PUSH1 0x80 00000f0d: DUP3 00000f0e: ADD 00000f0f: SWAP1 00000f10: POP 00000f11: PUSH2 0x0f1d 00000f14: PUSH1 0x00 00000f16: DUP4 00000f17: ADD 00000f18: DUP8 00000f19: PUSH2 0x0e70 00000f1c: JUMP 00000f1d: JUMPDEST 00000f1e: PUSH2 0x0f2a 00000f21: PUSH1 0x20 00000f23: DUP4 00000f24: ADD 00000f25: DUP7 00000f26: PUSH2 0x0e7f 00000f29: JUMP 00000f2a: JUMPDEST 00000f2b: PUSH2 0x0f37 00000f2e: PUSH1 0x40 00000f30: DUP4 00000f31: ADD 00000f32: DUP6 00000f33: PUSH2 0x0e70 00000f36: JUMP 00000f37: JUMPDEST 00000f38: PUSH2 0x0f44 00000f3b: PUSH1 0x60 00000f3d: DUP4 00000f3e: ADD 00000f3f: DUP5 00000f40: PUSH2 0x0e70 00000f43: JUMP 00000f44: JUMPDEST 00000f45: SWAP6 00000f46: SWAP5 00000f47: POP 00000f48: POP 00000f49: POP 00000f4a: POP 00000f4b: POP 00000f4c: JUMP 00000f4d: JUMPDEST 00000f4e: PUSH1 0x00 00000f50: PUSH1 0x40 00000f52: MLOAD 00000f53: SWAP1 00000f54: POP 00000f55: DUP2 00000f56: DUP2 00000f57: ADD 00000f58: DUP2 00000f59: DUP2 00000f5a: LT 00000f5b: PUSH8 0xffffffffffffffff 00000f64: DUP3 00000f65: GT 00000f66: OR 00000f67: ISZERO 00000f68: PUSH2 0x0f70 00000f6b: JUMPI 00000f6c: PUSH1 0x00 00000f6e: DUP1 00000f6f: REVERT 00000f70: JUMPDEST 00000f71: DUP1 00000f72: PUSH1 0x40 00000f74: MSTORE 00000f75: POP 00000f76: SWAP2 00000f77: SWAP1 00000f78: POP 00000f79: JUMP 00000f7a: JUMPDEST 00000f7b: PUSH1 0x00 00000f7d: PUSH8 0xffffffffffffffff 00000f86: DUP3 00000f87: GT 00000f88: ISZERO 00000f89: PUSH2 0x0f91 00000f8c: JUMPI 00000f8d: PUSH1 0x00 00000f8f: DUP1 00000f90: REVERT 00000f91: JUMPDEST 00000f92: PUSH1 0x20 00000f94: DUP3 00000f95: MUL 00000f96: SWAP1 00000f97: POP 00000f98: PUSH1 0x20 00000f9a: DUP2 00000f9b: ADD 00000f9c: SWAP1 00000f9d: POP 00000f9e: SWAP2 00000f9f: SWAP1 00000fa0: POP 00000fa1: JUMP 00000fa2: JUMPDEST 00000fa3: PUSH1 0x00 00000fa5: PUSH8 0xffffffffffffffff 00000fae: DUP3 00000faf: GT 00000fb0: ISZERO 00000fb1: PUSH2 0x0fb9 00000fb4: JUMPI 00000fb5: PUSH1 0x00 00000fb7: DUP1 00000fb8: REVERT 00000fb9: JUMPDEST 00000fba: PUSH1 0x1f 00000fbc: NOT 00000fbd: PUSH1 0x1f 00000fbf: DUP4 00000fc0: ADD 00000fc1: AND 00000fc2: SWAP1 00000fc3: POP 00000fc4: PUSH1 0x20 00000fc6: DUP2 00000fc7: ADD 00000fc8: SWAP1 00000fc9: POP 00000fca: SWAP2 00000fcb: SWAP1 00000fcc: POP 00000fcd: JUMP 00000fce: JUMPDEST 00000fcf: PUSH1 0x00 00000fd1: PUSH8 0xffffffffffffffff 00000fda: DUP3 00000fdb: GT 00000fdc: ISZERO 00000fdd: PUSH2 0x0fe5 00000fe0: JUMPI 00000fe1: PUSH1 0x00 00000fe3: DUP1 00000fe4: REVERT 00000fe5: JUMPDEST 00000fe6: PUSH1 0x1f 00000fe8: NOT 00000fe9: PUSH1 0x1f 00000feb: DUP4 00000fec: ADD 00000fed: AND 00000fee: SWAP1 00000fef: POP 00000ff0: PUSH1 0x20 00000ff2: DUP2 00000ff3: ADD 00000ff4: SWAP1 00000ff5: POP 00000ff6: SWAP2 00000ff7: SWAP1 00000ff8: POP 00000ff9: JUMP 00000ffa: JUMPDEST 00000ffb: PUSH1 0x00 00000ffd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001012: DUP3 00001013: AND 00001014: SWAP1 00001015: POP 00001016: SWAP2 00001017: SWAP1 00001018: POP 00001019: JUMP 0000101a: JUMPDEST 0000101b: PUSH1 0x00 0000101d: DUP2 0000101e: ISZERO 0000101f: ISZERO 00001020: SWAP1 00001021: POP 00001022: SWAP2 00001023: SWAP1 00001024: POP 00001025: JUMP 00001026: JUMPDEST 00001027: PUSH1 0x00 00001029: DUP2 0000102a: SWAP1 0000102b: POP 0000102c: SWAP2 0000102d: SWAP1 0000102e: POP 0000102f: JUMP 00001030: JUMPDEST 00001031: PUSH1 0x00 00001033: PUSH1 0xff 00001035: DUP3 00001036: AND 00001037: SWAP1 00001038: POP 00001039: SWAP2 0000103a: SWAP1 0000103b: POP 0000103c: JUMP 0000103d: JUMPDEST 0000103e: PUSH1 0x00 00001040: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001055: DUP3 00001056: AND 00001057: SWAP1 00001058: POP 00001059: SWAP2 0000105a: SWAP1 0000105b: POP 0000105c: JUMP 0000105d: JUMPDEST 0000105e: PUSH1 0x00 00001060: DUP2 00001061: SWAP1 00001062: POP 00001063: SWAP2 00001064: SWAP1 00001065: POP 00001066: JUMP 00001067: JUMPDEST 00001068: PUSH1 0x00 0000106a: DUP2 0000106b: SWAP1 0000106c: POP 0000106d: SWAP2 0000106e: SWAP1 0000106f: POP 00001070: JUMP 00001071: JUMPDEST 00001072: PUSH1 0x00 00001074: PUSH1 0xff 00001076: DUP3 00001077: AND 00001078: SWAP1 00001079: POP 0000107a: SWAP2 0000107b: SWAP1 0000107c: POP 0000107d: JUMP 0000107e: JUMPDEST 0000107f: DUP3 00001080: DUP2 00001081: DUP4 00001082: CALLDATACOPY 00001083: PUSH1 0x00 00001085: DUP4 00001086: DUP4 00001087: ADD 00001088: MSTORE 00001089: POP 0000108a: POP 0000108b: POP 0000108c: JUMP 0000108d: STOP 0000108e: LOG2 0000108f: PUSH6 0x627a7a723058 00001096: KECCAK256 00001097: UNKNOWN(0x2F) 00001098: UNKNOWN(0xCC) 00001099: SHR 0000109a: PUSH10 0xfded4506ef93642b65de 000010a5: UNKNOWN(0xDD) 000010a6: PUSH18 0x05332c053862afcdc0ffd9683aeed9d46c65 000010b9: PUSH25
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | codex | Signed execution appears replayable (no nonce/used-hash storage) | 85 | no | — |
viewevidence_json{
"evidence": "Execution path at 0x0563 performs an external CALL (`5af1` at 0x0651) after signature verification; the only SSTORE in the entire runtime is at 0x083d (owner update), so no nonce/used-hash is recorded.",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Add a nonce or used-hash mapping in storage, include it in the signed payload, and update it before performing the external CALL; revert on reuse.",
"exploit_scenario": "If a signer authorizes a call, any relayer can submit the same calldata again to repeat the CALL and drain funds or repeat side effects, because no state is updated to mark the signature as used."
}
|
| medium | access_control | codex | Slot0 can be set by anyone if it is zero (initializer-style bypass) | 75 | no | — |
viewevidence_json{
"evidence": "Function at 0x0718 checks `CALLER == slot1` OR `slot0 == 0`, then performs `SSTORE` at 0x083d to update slot0, allowing any caller when slot0 is zero.",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Require the caller to be the admin even on initialization, or ensure slot0 is set during deployment and remove the `slot0 == 0` bypass.",
"exploit_scenario": "If slot0 is left as the zero address at deployment, any caller can invoke the setter to write their own address to slot0 and become the authorized signer/role guarded by that slot."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x241c59cffa57ba06a0fe8294eb3c7380ae6d148713b07713832f79bc1cb24204
call_targets:
0x3ef1c8133d80665ec873ac41e152dda3251a7606
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x241c59cffa57ba06a0fe8294eb3c7380ae6d148713b07713832f79bc1cb24204",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x3ef1c8133d80665ec873ac41e152dda3251a7606"
],
"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": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x049e1d4d",
"selector": "0x049e1d4d",
"calldata_variants": [
"0x049e1d4d",
"0x049e1d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10bfce71",
"selector": "0x10bfce71",
"calldata_variants": [
"0x10bfce71",
"0x10bfce710000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3018205f",
"selector": "0x3018205f",
"calldata_variants": [
"0x3018205f",
"0x3018205f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3e104a95",
"selector": "0x3e104a95",
"calldata_variants": [
"0x3e104a95",
"0x3e104a950000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4ee7f87d",
"selector": "0x4ee7f87d",
"calldata_variants": [
"0x4ee7f87d",
"0x4ee7f87d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x62c529e4",
"selector": "0x62c529e4",
"calldata_variants": [
"0x62c529e4",
"0x62c529e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x92eefe9b",
"selector": "0x92eefe9b",
"calldata_variants": [
"0x92eefe9b",
"0x92eefe9b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1617,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2335,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [
{
"pc": 1929,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 2
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x241c59cffa57ba06a0fe8294eb3c7380ae6d148713b07713832f79bc1cb24204
call_targets:
0x3ef1c8133d80665ec873ac41e152dda3251a7606
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x241c59cffa57ba06a0fe8294eb3c7380ae6d148713b07713832f79bc1cb24204",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x3ef1c8133d80665ec873ac41e152dda3251a7606"
],
"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": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x049e1d4d",
"selector": "0x049e1d4d",
"calldata_variants": [
"0x049e1d4d",
"0x049e1d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10bfce71",
"selector": "0x10bfce71",
"calldata_variants": [
"0x10bfce71",
"0x10bfce710000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3018205f",
"selector": "0x3018205f",
"calldata_variants": [
"0x3018205f",
"0x3018205f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3e104a95",
"selector": "0x3e104a95",
"calldata_variants": [
"0x3e104a95",
"0x3e104a950000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4ee7f87d",
"selector": "0x4ee7f87d",
"calldata_variants": [
"0x4ee7f87d",
"0x4ee7f87d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x62c529e4",
"selector": "0x62c529e4",
"calldata_variants": [
"0x62c529e4",
"0x62c529e40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x92eefe9b",
"selector": "0x92eefe9b",
"calldata_variants": [
"0x92eefe9b",
"0x92eefe9b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1617,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2335,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": [
{
"pc": 1929,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| low | auth | codex | ECDSA malleability not checked (no v/s validation) | 65 | no | — |
viewevidence_json{
"evidence": "Signature recovery uses a direct precompile call (address 0x01) in the 0x08db function without any preceding range checks; the half-order constant is absent from bytecode.",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Validate `v` is 27/28 and `s` is in the lower half-order before calling `ecrecover`.",
"exploit_scenario": "An attacker can produce an alternative (malleable) signature for the same message, which can undermine off-chain signature uniqueness tracking or interact poorly with replay protection if added externally."
}
|