61b6e8d3-1c26-43a5-ac80-2116ec147eeb
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 |
|---|---|---|---|---|
| 31698 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95611 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95612 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95613 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95614 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95615 | detector.run | complete | 1 / 3 | 1 week ago |
| 95616 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:647063] OpenAI Codex v0.77.0 (research preview)
[codex:647063] --------
[codex:647063] workdir: /tmp/codex-multi-bpocr_8w
[codex:647063] model: gpt-5.2-codex
[codex:647063] provider: openai
[codex:647063] approval: never
[codex:647063] sandbox: read-only
[codex:647063] reasoning effort: xhigh
[codex:647063] reasoning summaries: auto
[codex:647063] session id: 019b8c9e-35b3-7b30-a28c-92490f43d875
[codex:647063] --------
[codex:647063] user
[codex:647063] You are a profit-focused exploit hunter. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:647063]
[codex:647063] Read `AUDIT_BUNDLE.txt` completely before concluding. Treat `lib/` and `@openzeppelin/` as trusted unless misused.
[codex:647063]
[codex:647063] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:647063] - Gas inefficiency, code quality, naming, or best practices
[codex:647063] - Theoretical vulnerabilities without a clear extraction path
[codex:647063] - Centralization risks (admin can rug) - assume admin keys are secure
[codex:647063] - Front-running unless it enables theft beyond MEV
[codex:647063] - DoS, griefing, or issues that don't result in attacker profit
[codex:647063] - Missing events, view function issues, or informational findings
[codex:647063]
[codex:647063] HIGH-VALUE PATTERNS TO HUNT:
[codex:647063] - Reentrancy: external calls before state updates that allow double-withdrawal
[codex:647063] - Access control: missing/bypassable auth on withdraw, transfer, or mint functions
[codex:647063] - Flash loan attacks: borrow -> manipulate -> profit in single tx
[codex:647063] - Price oracle manipulation: TWAP with short window, spot price reads, stale prices
[codex:647063] - Signature replay: missing nonce, chainId, or deadline in permit/meta-tx
[codex:647063] - Proxy hijacking: unprotected initialize(), storage collision, UUPS without auth
[codex:647063] - Accounting errors: rounding that favors attacker, share inflation, first depositor attacks
[codex:647063] - Unchecked external calls: return value ignored on token transfers enabling fake tokens
[codex:647063] - Cross-function reentrancy: state read in function A, modified via reentrant call, used stale in A
[codex:647063]
[codex:647063] For each finding, you MUST provide:
[codex:647063] 1. Exact file and line numbers of vulnerable code
[codex:647063] 2. Step-by-step exploit transaction sequence
[codex:647063] 3. Estimated profit potential (order of magnitude: contract balance, LP reserves, etc.)
[codex:647063]
[codex:647063] If no concrete profit path exists: set no_findings=true. Do NOT pad with low-severity noise.
[codex:647063]
[codex:647063] Output MUST be valid JSON matching the provided schema.
[codex:647063] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:647063] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:647063] mcp startup: no servers
[codex:647063]
[codex:647063] thinking
[codex:647063] **Preparing to audit instructions**
[codex:647063] exec
[codex:647063] /bin/bash -lc ls in /tmp/codex-multi-bpocr_8w succeeded in 6ms:
[codex:647063] AUDIT_BUNDLE.txt
[codex:647063] codex-output-schema.json
[codex:647063] contracts
[codex:647063] exec
[codex:647063] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-bpocr_8w succeeded in 6ms:
[codex:647063] This file concatenates first-party Solidity sources only (lib/@openzeppelin excluded).
[codex:647063]
[codex:647063] ================================================================================
[codex:647063] FILE: contracts/contracts/CENNZnetBridge.sol
[codex:647063] ================================================================================
[codex:647063] // SPDX-License-Identifier: Apache-2.0
[codex:647063] pragma solidity ^0.8.0;
[codex:647063]
[codex:647063] import "@openzeppelin/contracts/utils/math/Math.sol";
[codex:647063] import "@openzeppelin/contracts/access/Ownable.sol";
[codex:647063]
[codex:647063] // Proof of a witnessed event by CENNZnet validators
[codex:647063] struct CENNZnetEventProof {
[codex:647063] // The Id (nonce) of the event
[codex:647063] uint256 eventId;
[codex:647063] // The validator set Id which witnessed the event
[codex:647063] uint32 validatorSetId;
[codex:647063] // v,r,s are sparse arrays expected to align w public key in 'validators'
[codex:647063] // i.e. v[i], r[i], s[i] matches the i-th validator[i]
[codex:647063] // v part of validator signatures
[codex:647063] exec
[codex:647063] /bin/bash -lc "sed -n '200,400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-bpocr_8w succeeded in 6ms:
[codex:647063] address constant public ETH_RESERVED_TOKEN_ADDRESS = address(0);
[codex:647063] // CENNZ ERC20 contract address
[codex:647063] address constant public CENNZ_TOKEN_ADDRESS = 0x1122B6a0E00DCe0563082b6e2953f3A943855c1F;
[codex:647063]
[codex:647063] constructor(address _bridge) {
[codex:647063] bridge = CENNZnetBridge(_bridge);
[codex:647063] }
[codex:647063]
[codex:647063] event Endow(uint256 amount);
[codex:647063] event Deposit(address indexed, address tokenType, uint256 amount, bytes32 cennznetAddress);
[codex:647063] event Withdraw(address indexed, address tokenType, uint256 amount);
[codex:647063]
[codex:647063] // Deposit amount of tokenType the pegged version of the token will be claim-able on CENNZnet.
[codex:647063] // tokenType '0' is reserved for native Eth
[codex:647063] function deposit(address tokenType, uint256 amount, bytes32 cennznetAddress) payable external {
[codex:647063] require(depositsActive, "deposits paused");
[codex:647063] require(cennznetAddress != bytes32(0), "invalid CENNZnet address");
[codex:647063]
[codex:647063] if (tokenType == ETH_RESERVED_TOKEN_ADDRESS) {
[codex:647063] require(msg.value == amount, "incorrect deposit amount");
[codex:647063]
[codex:647063] thinking
[codex:647063] **Analyzing validator threshold vulnerability**
[codex:647063] exec
[codex:647063] /bin/bash -lc "nl -ba contracts/contracts/CENNZnetBridge.sol | sed -n '40,160p'" in /tmp/codex-multi-bpocr_8w succeeded in 6ms:
[codex:647063] 40 // Acceptance threshold in %
[codex:647063] 41 uint public thresholdPercent = 60;
[codex:647063] 42 // Number of eras before a bridge message will be considered expired
[codex:647063] 43 uint public proofTTL = 3;
[codex:647063] 44 // Whether the bridge is active or not
[codex:647063] 45 bool public active = true;
[codex:647063] 46 // Max reward paid out to successful caller of `setValidator`
[codex:647063] 47 uint public maxRewardPayout = 1e18;
[codex:647063] 48
[codex:647063] 49 event SetValidators(bytes32 validatorSetDigest, uint reward, uint32 validatorSetId);
[codex:647063] 50
[codex:647063] 51 // Verify a message was authorised by CENNZnet validators.
[codex:647063] 52 // Callable by anyone.
[codex:647063] 53 // Caller must provide `verificationFee`.
[codex:647063] 54 // Requires signatures from a threshold CENNZnet validators at proof.validatorSetId.
[codex:647063] 55 // Requires proof is not older than `proofTTL` eras
[codex:647063] 56 // Halts on failure
[codex:647063] 57 //
[codex:647063] 58 // Parameters:
[codex:647063] 59 // - message: the unhashed message data packed wide w validatorSetId & eventId e.g. `abi.encode(arg0, arg2, validatorSetId, eventId);`
[codex:647063]
[codex:647063] thinking
[codex:647063] **Analyzing signature threshold rounding vulnerability**
[codex:647063]
[codex:647063] I'm examining the potential exploit where the acceptance threshold for signatures is computed with floor rounding, possibly allowing withdrawals with fewer signatures than intended—especially risky if the validator set is small or threshold low, which could enable an attacker to profitably bypass verification under certain conditions.
[codex:647063] exec
[codex:647063] /bin/bash -lc "nl -ba contracts/contracts/ERC20Peg.sol | sed -n '1,200p'" in /tmp/codex-multi-bpocr_8w succeeded in 6ms:
[codex:647063] 1 // SPDX-License-Identifier: Apache-2.0
[codex:647063] 2 pragma solidity ^0.8.0;
[codex:647063] 3
[codex:647063] 4 import "./CENNZnetBridge.sol";
[codex:647063] 5 import "@openzeppelin/contracts/access/Ownable.sol";
[codex:647063] 6 import "@openzeppelin/contracts/utils/math/SafeMath.sol";
[codex:647063] 7 import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:647063] 8
[codex:647063] 9 // Provides an Eth/ERC20/GA CENNZnet peg
[codex:647063] 10 // - depositing: lock Eth/ERC20 tokens to redeem CENNZnet "generic asset" 1:1
[codex:647063] 11 // - withdrawing: burn or lock GAs to redeem Eth/ERC20 tokens 1:1
[codex:647063] 12 contract ERC20Peg is Ownable {
[codex:647063] 13 using SafeMath for uint256;
[codex:647063] 14 // whether the peg is accepting deposits
[codex:647063] 15 bool public depositsActive;
[codex:647063] 16 // whether CENNZ deposists are on
[codex:647063] 17 bool public cennzDepositsActive;
[codex:647063] 18 // whether the peg is accepting withdrawals
[codex:647063] 19 bool public withdrawalsActive;
[codex:647063] 20 // CENNZnet bridge contract address
[codex:647063]
[codex:647063]
[codex:647063]
[codex:647063] thinking
[codex:647063] **Analyzing potential signature and reward vulnerabilities**
[codex:647063] thinking
[codex:647063] ```json
[codex:647063] {
[codex:647063] "no_findings": false,
[codex:647063] "summary": "1 critical finding: signature threshold rounding allows zero-signature proofs on small validator sets, enabling unauthorized withdrawals.",
[codex:647063] "findings": [
[codex:647063] {
[codex:647063] "severity": "critical",
[codex:647063] "category": "auth",
[codex:647063] "title": "Signature threshold rounds down to zero on small validator sets, bypassing validator signatures",
[codex:647063] "exploit_scenario": "1) If the active validator set size is 1 (or thresholdPercent configured so that `_validators.length * thresholdPercent / 100 == 0`), construct a `CENNZnetEventProof` with that single validator address, an unused `eventId`, and `v`, `r`, `s` arrays of length 1 with `r[0] = 0` to omit the signature. 2) Call `ERC20Peg.withdraw` with any `tokenType`, `amount`, and your address as recipient, paying the verification fee if required. 3) `verifyMessage` computes `acceptanceThreshold = 0`, skips signature verification, marks the `eventId` used, and `ERC20Peg` transfers funds to the caller. Repeat with new unused `eventId`s to drain the full balance. Profit potential includes the entire ETH and ERC20 token balances held by `ERC20Peg` (contract TVL) plus any ETH fees collected by `CENNZnetBridge` via `setValidators` reward.",
[codex:647063] "recommendation": "Compute the acceptance threshold using a ceiling function (e.g., `(len * thresholdPercent + 99) / 100`) and enforce a minimum threshold of 1; additionally, require `thresholdPercent > 0` to prevent zero thresholds.",
[codex:647063] "evidence": "The acceptance threshold is computed via integer division (floor), without a minimum limit, and signatures contribute only when `r[i] != 0`. Thus, if the threshold computes to zero, an empty signature set satisfies `witnessCount >= acceptanceThreshold`, allowing bypass of signature checks.",
[codex:647063] "locations": [
[codex:647063] "contracts/contracts/CENNZnetBridge.sol:75",
[codex:647063] "contracts/contracts/CENNZnetBridge.sol:81",
[codex:647063] "contracts/contracts/CENNZnetBridge.sol:92",
[codex:647063] "contracts/contracts/ERC20Peg.sol:62",
[codex:647063] "contracts/contracts/ERC20Peg.sol:64"
[codex:647063] ]
[codex:647063] }
[codex:647063] ]
[codex:647063] }
[codex:647063] ```
[codex:647063] thinking
[codex:647063] **Verifying acceptance threshold bug details**
[codex:647063] codex
[codex:647063] {"no_findings":false,"summary":"1 critical finding: signature threshold rounds down to zero on small validator sets, allowing signature bypass and unauthorized withdrawals.","findings":[{"severity":"critical","category":"auth","title":"Signature threshold can round down to zero, allowing proofs with no signatures on small validator sets","exploit_scenario":"1) If the active validator set size is 1 (or `thresholdPercent` is configured so `_validators.length * thresholdPercent / 100 == 0`), build a `CENNZnetEventProof` that uses the known validator address, an unused `eventId`, and `v/r/s` arrays of length 1 with `r[0]=0` to omit the signature. 2) Call `ERC20Peg.withdraw` for any `tokenType` and `amount`, sending the verification fee if required. 3) `verifyMessage` computes `acceptanceTreshold=0`, skips signature checks, marks the `eventId` used, and `ERC20Peg` transfers assets to you. Repeat with fresh `eventId`s to drain balances. Profit: up to the full ETH and ERC20 balances held by `ERC20Peg` (order of magnitude = contract TVL), plus any ETH fees in `CENNZnetBridge` if abusing `setValidators` rewards.","recommendation":"Compute the threshold using a ceiling (e.g., `(len * thresholdPercent + 99) / 100`) and enforce a minimum of 1; optionally disallow `thresholdPercent == 0`.","evidence":"`acceptanceTreshold` is computed using integer truncation and no minimum, and signatures are only counted when `r[i] != 0`, so when the threshold computes to 0, empty signatures satisfy `witnessCount >= acceptanceTreshold`.","locations":["contracts/contracts/CENNZnetBridge.sol:75","contracts/contracts/CENNZnetBridge.sol:81","contracts/contracts/CENNZnetBridge.sol:92","contracts/contracts/ERC20Peg.sol:62","contracts/contracts/ERC20Peg.sol:64"]}]}
[codex:647063] tokens used
[codex:647063] 23,330
[codex:647063] {"no_findings":false,"summary":"1 critical finding: signature threshold rounds down to zero on small validator sets, allowing signature bypass and unauthorized withdrawals.","findings":[{"severity":"critical","category":"auth","title":"Signature threshold can round down to zero, allowing proofs with no signatures on small validator sets","exploit_scenario":"1) If the active validator set size is 1 (or `thresholdPercent` is configured so `_validators.length * thresholdPercent / 100 == 0`), build a `CENNZnetEventProof` that uses the known validator address, an unused `eventId`, and `v/r/s` arrays of length 1 with `r[0]=0` to omit the signature. 2) Call `ERC20Peg.withdraw` for any `tokenType` and `amount`, sending the verification fee if required. 3) `verifyMessage` computes `acceptanceTreshold=0`, skips signature checks, marks the `eventId` used, and `ERC20Peg` transfers assets to you. Repeat with fresh `eventId`s to drain balances. Profit: up to the full ETH and ERC20 balances held by `ERC20Peg` (order of magnitude = contract TVL), plus any ETH fees in `CENNZnetBridge` if abusing `setValidators` rewards.","recommendation":"Compute the threshold using a ceiling (e.g., `(len * thresholdPercent + 99) / 100`) and enforce a minimum of 1; optionally disallow `thresholdPercent == 0`.","evidence":"`acceptanceTreshold` is computed using integer truncation and no minimum, and signatures are only counted when `r[i] != 0`, so when the threshold computes to 0, empty signatures satisfy `witnessCount >= acceptanceTreshold`.","locations":["contracts/contracts/CENNZnetBridge.sol:75","contracts/contracts/CENNZnetBridge.sol:81","contracts/contracts/CENNZnetBridge.sol:92","contracts/contracts/ERC20Peg.sol:62","contracts/contracts/ERC20Peg.sol:64"]}]}
{
"codex": {
"ran_at": "2026-01-05T05:29:07.883250+00:00",
"returncode": 0
},
"summary": "1 critical finding: signature threshold rounds down to zero on small validator sets, allowing signature bypass and unauthorized withdrawals.",
"raw_final": {
"summary": "1 critical finding: signature threshold rounds down to zero on small validator sets, allowing signature bypass and unauthorized withdrawals.",
"findings": [
{
"title": "Signature threshold can round down to zero, allowing proofs with no signatures on small validator sets",
"category": "auth",
"evidence": "`acceptanceTreshold` is computed using integer truncation and no minimum, and signatures are only counted when `r[i] != 0`, so when the threshold computes to 0, empty signatures satisfy `witnessCount >= acceptanceTreshold`.",
"severity": "critical",
"locations": [
"contracts/contracts/CENNZnetBridge.sol:75",
"contracts/contracts/CENNZnetBridge.sol:81",
"contracts/contracts/CENNZnetBridge.sol:92",
"contracts/contracts/ERC20Peg.sol:62",
"contracts/contracts/ERC20Peg.sol:64"
],
"recommendation": "Compute the threshold using a ceiling (e.g., `(len * thresholdPercent + 99) / 100`) and enforce a minimum of 1; optionally disallow `thresholdPercent == 0`.",
"exploit_scenario": "1) If the active validator set size is 1 (or `thresholdPercent` is configured so `_validators.length * thresholdPercent / 100 == 0`), build a `CENNZnetEventProof` that uses the known validator address, an unused `eventId`, and `v/r/s` arrays of length 1 with `r[0]=0` to omit the signature. 2) Call `ERC20Peg.withdraw` for any `tokenType` and `amount`, sending the verification fee if required. 3) `verifyMessage` computes `acceptanceTreshold=0`, skips signature checks, marks the `eventId` used, and `ERC20Peg` transfers assets to you. Repeat with fresh `eventId`s to drain balances. Profit: up to the full ETH and ERC20 balances held by `ERC20Peg` (order of magnitude = contract TVL), plus any ETH fees in `CENNZnetBridge` if abusing `setValidators` rewards."
}
],
"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 0x00fe 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x7e771dc0 00000019: GT 0000001a: PUSH2 0x0095 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xc8c76243 00000024: GT 00000025: PUSH2 0x0064 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xc8c76243 0000002f: EQ 00000030: PUSH2 0x0251 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xe5703512 0000003a: EQ 0000003b: PUSH2 0x0266 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe78cea92 00000045: EQ 00000046: PUSH2 0x027b 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf275c0ce 00000050: EQ 00000051: PUSH2 0x029b 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf2fde38b 0000005b: EQ 0000005c: PUSH2 0x02bc 0000005f: JUMPI 00000060: PUSH1 0x00 00000062: DUP1 00000063: REVERT 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x7e771dc0 0000006b: EQ 0000006c: PUSH2 0x01ea 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x8324e6d7 00000076: EQ 00000077: PUSH2 0x01fd 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x8da5cb5b 00000081: EQ 00000082: PUSH2 0x021e 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xc0e8e635 0000008c: EQ 0000008d: PUSH2 0x023c 00000090: JUMPI 00000091: PUSH1 0x00 00000093: DUP1 00000094: REVERT 00000095: JUMPDEST 00000096: DUP1 00000097: PUSH4 0x4500ca4d 0000009c: GT 0000009d: PUSH2 0x00d1 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x4500ca4d 000000a7: EQ 000000a8: PUSH2 0x017a 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0x4f2e70a9 000000b2: EQ 000000b3: PUSH2 0x01ab 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0x56bb54a7 000000bd: EQ 000000be: PUSH2 0x01c0 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x715018a6 000000c8: EQ 000000c9: PUSH2 0x01d5 000000cc: JUMPI 000000cd: PUSH1 0x00 000000cf: DUP1 000000d0: REVERT 000000d1: JUMPDEST 000000d2: DUP1 000000d3: PUSH4 0x02191980 000000d8: EQ 000000d9: PUSH2 0x0103 000000dc: JUMPI 000000dd: DUP1 000000de: PUSH4 0x06e30dfc 000000e3: EQ 000000e4: PUSH2 0x011a 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0x26b3293f 000000ee: EQ 000000ef: PUSH2 0x0122 000000f2: JUMPI 000000f3: DUP1 000000f4: PUSH4 0x3945ee77 000000f9: EQ 000000fa: PUSH2 0x0135 000000fd: JUMPI 000000fe: JUMPDEST 000000ff: PUSH1 0x00 00000101: DUP1 00000102: REVERT 00000103: JUMPDEST 00000104: CALLVALUE 00000105: DUP1 00000106: ISZERO 00000107: PUSH2 0x010f 0000010a: JUMPI 0000010b: PUSH1 0x00 0000010d: DUP1 0000010e: REVERT 0000010f: JUMPDEST 00000110: POP 00000111: PUSH2 0x0118 00000114: PUSH2 0x02dc 00000117: JUMP 00000118: JUMPDEST 00000119: STOP 0000011a: JUMPDEST 0000011b: PUSH2 0x0118 0000011e: PUSH2 0x031e 00000121: JUMP 00000122: JUMPDEST 00000123: PUSH2 0x0118 00000126: PUSH2 0x0130 00000129: CALLDATASIZE 0000012a: PUSH1 0x04 0000012c: PUSH2 0x0d63 0000012f: JUMP 00000130: JUMPDEST 00000131: PUSH2 0x03c2 00000134: JUMP 00000135: JUMPDEST 00000136: CALLVALUE 00000137: DUP1 00000138: ISZERO 00000139: PUSH2 0x0141 0000013c: JUMPI 0000013d: PUSH1 0x00 0000013f: DUP1 00000140: REVERT 00000141: JUMPDEST 00000142: POP 00000143: PUSH2 0x015d 00000146: PUSH20 0x1122b6a0e00dce0563082b6e2953f3a943855c1f 0000015b: DUP2 0000015c: JUMP 0000015d: JUMPDEST 0000015e: PUSH1 0x40 00000160: MLOAD 00000161: PUSH1 0x01 00000163: PUSH1 0x01 00000165: PUSH1 0xa0 00000167: SHL 00000168: SUB 00000169: SWAP1 0000016a: SWAP2 0000016b: AND 0000016c: DUP2 0000016d: MSTORE 0000016e: PUSH1 0x20 00000170: ADD 00000171: JUMPDEST 00000172: PUSH1 0x40 00000174: MLOAD 00000175: DUP1 00000176: SWAP2 00000177: SUB 00000178: SWAP1 00000179: RETURN 0000017a: JUMPDEST 0000017b: CALLVALUE 0000017c: DUP1 0000017d: ISZERO 0000017e: PUSH2 0x0186 00000181: JUMPI 00000182: PUSH1 0x00 00000184: DUP1 00000185: REVERT 00000186: JUMPDEST 00000187: POP 00000188: PUSH1 0x00 0000018a: SLOAD 0000018b: PUSH2 0x019b 0000018e: SWAP1 0000018f: PUSH1 0x01 00000191: PUSH1 0xb0 00000193: SHL 00000194: SWAP1 00000195: DIV 00000196: PUSH1 0xff 00000198: AND 00000199: DUP2 0000019a: JUMP 0000019b: JUMPDEST 0000019c: PUSH1 0x40 0000019e: MLOAD 0000019f: SWAP1 000001a0: ISZERO 000001a1: ISZERO 000001a2: DUP2 000001a3: MSTORE 000001a4: PUSH1 0x20 000001a6: ADD 000001a7: PUSH2 0x0171 000001aa: JUMP 000001ab: JUMPDEST 000001ac: CALLVALUE 000001ad: DUP1 000001ae: ISZERO 000001af: PUSH2 0x01b7 000001b2: JUMPI 000001b3: PUSH1 0x00 000001b5: DUP1 000001b6: REVERT 000001b7: JUMPDEST 000001b8: POP 000001b9: PUSH2 0x015d 000001bc: PUSH1 0x00 000001be: DUP2 000001bf: JUMP 000001c0: JUMPDEST 000001c1: CALLVALUE 000001c2: DUP1 000001c3: ISZERO 000001c4: PUSH2 0x01cc 000001c7: JUMPI 000001c8: PUSH1 0x00 000001ca: DUP1 000001cb: REVERT 000001cc: JUMPDEST 000001cd: POP 000001ce: PUSH2 0x0118 000001d1: PUSH2 0x058f 000001d4: JUMP 000001d5: JUMPDEST 000001d6: CALLVALUE 000001d7: DUP1 000001d8: ISZERO 000001d9: PUSH2 0x01e1 000001dc: JUMPI 000001dd: PUSH1 0x00 000001df: DUP1 000001e0: REVERT 000001e1: JUMPDEST 000001e2: POP 000001e3: PUSH2 0x0118 000001e6: PUSH2 0x05c8 000001e9: JUMP 000001ea: JUMPDEST 000001eb: PUSH2 0x0118 000001ee: PUSH2 0x01f8 000001f1: CALLDATASIZE 000001f2: PUSH1 0x04 000001f4: PUSH2 0x0cf9 000001f7: JUMP 000001f8: JUMPDEST 000001f9: PUSH2 0x05fe 000001fc: JUMP 000001fd: JUMPDEST 000001fe: CALLVALUE 000001ff: DUP1 00000200: ISZERO 00000201: PUSH2 0x0209 00000204: JUMPI 00000205: PUSH1 0x00 00000207: DUP1 00000208: REVERT 00000209: JUMPDEST 0000020a: POP 0000020b: PUSH1 0x00 0000020d: SLOAD 0000020e: PUSH2 0x019b 00000211: SWAP1 00000212: PUSH1 0x01 00000214: PUSH1 0xa8 00000216: SHL 00000217: SWAP1 00000218: DIV 00000219: PUSH1 0xff 0000021b: AND 0000021c: DUP2 0000021d: JUMP 0000021e: JUMPDEST 0000021f: CALLVALUE 00000220: DUP1 00000221: ISZERO 00000222: PUSH2 0x022a 00000225: JUMPI 00000226: PUSH1 0x00 00000228: DUP1 00000229: REVERT 0000022a: JUMPDEST 0000022b: POP 0000022c: PUSH1 0x00 0000022e: SLOAD 0000022f: PUSH1 0x01 00000231: PUSH1 0x01 00000233: PUSH1 0xa0 00000235: SHL 00000236: SUB 00000237: AND 00000238: PUSH2 0x015d 0000023b: JUMP 0000023c: JUMPDEST 0000023d: CALLVALUE 0000023e: DUP1 0000023f: ISZERO 00000240: PUSH2 0x0248 00000243: JUMPI 00000244: PUSH1 0x00 00000246: DUP1 00000247: REVERT 00000248: JUMPDEST 00000249: POP 0000024a: PUSH2 0x0118 0000024d: PUSH2 0x0815 00000250: JUMP 00000251: JUMPDEST 00000252: CALLVALUE 00000253: DUP1 00000254: ISZERO 00000255: PUSH2 0x025d 00000258: JUMPI 00000259: PUSH1 0x00 0000025b: DUP1 0000025c: REVERT 0000025d: JUMPDEST 0000025e: POP 0000025f: PUSH2 0x0118 00000262: PUSH2 0x0854 00000265: JUMP 00000266: JUMPDEST 00000267: CALLVALUE 00000268: DUP1 00000269: ISZERO 0000026a: PUSH2 0x0272 0000026d: JUMPI 0000026e: PUSH1 0x00 00000270: DUP1 00000271: REVERT 00000272: JUMPDEST 00000273: POP 00000274: PUSH2 0x0118 00000277: PUSH2 0x0893 0000027a: JUMP 0000027b: JUMPDEST 0000027c: CALLVALUE 0000027d: DUP1 0000027e: ISZERO 0000027f: PUSH2 0x0287 00000282: JUMPI 00000283: PUSH1 0x00 00000285: DUP1 00000286: REVERT 00000287: JUMPDEST 00000288: POP 00000289: PUSH1 0x01 0000028b: SLOAD 0000028c: PUSH2 0x015d 0000028f: SWAP1 00000290: PUSH1 0x01 00000292: PUSH1 0x01 00000294: PUSH1 0xa0 00000296: SHL 00000297: SUB 00000298: AND 00000299: DUP2 0000029a: JUMP 0000029b: JUMPDEST 0000029c: CALLVALUE 0000029d: DUP1 0000029e: ISZERO 0000029f: PUSH2 0x02a7 000002a2: JUMPI 000002a3: PUSH1 0x00 000002a5: DUP1 000002a6: REVERT 000002a7: JUMPDEST 000002a8: POP 000002a9: PUSH1 0x00 000002ab: SLOAD 000002ac: PUSH2 0x019b 000002af: SWAP1 000002b0: PUSH1 0x01 000002b2: PUSH1 0xa0 000002b4: SHL 000002b5: SWAP1 000002b6: DIV 000002b7: PUSH1 0xff 000002b9: AND 000002ba: DUP2 000002bb: JUMP 000002bc: JUMPDEST 000002bd: CALLVALUE 000002be: DUP1 000002bf: ISZERO 000002c0: PUSH2 0x02c8 000002c3: JUMPI 000002c4: PUSH1 0x00 000002c6: DUP1 000002c7: REVERT 000002c8: JUMPDEST 000002c9: POP 000002ca: PUSH2 0x0118 000002cd: PUSH2 0x02d7 000002d0: CALLDATASIZE 000002d1: PUSH1 0x04 000002d3: PUSH2 0x0cdf 000002d6: JUMP 000002d7: JUMPDEST 000002d8: PUSH2 0x08d2 000002db: JUMP 000002dc: JUMPDEST 000002dd: PUSH1 0x00 000002df: SLOAD 000002e0: PUSH1 0x01 000002e2: PUSH1 0x01 000002e4: PUSH1 0xa0 000002e6: SHL 000002e7: SUB 000002e8: AND 000002e9: CALLER 000002ea: EQ 000002eb: PUSH2 0x030f 000002ee: JUMPI 000002ef: PUSH1 0x40 000002f1: MLOAD 000002f2: PUSH3 0x461bcd 000002f6: PUSH1 0xe5 000002f8: SHL 000002f9: DUP2 000002fa: MSTORE 000002fb: PUSH1 0x04 000002fd: ADD 000002fe: PUSH2 0x0306 00000301: SWAP1 00000302: PUSH2 0x0fa5 00000305: JUMP 00000306: JUMPDEST 00000307: PUSH1 0x40 00000309: MLOAD 0000030a: DUP1 0000030b: SWAP2 0000030c: SUB 0000030d: SWAP1 0000030e: REVERT 0000030f: JUMPDEST 00000310: PUSH1 0x00 00000312: DUP1 00000313: SLOAD 00000314: PUSH1 0xff 00000316: PUSH1 0xa0 00000318: SHL 00000319: NOT 0000031a: AND 0000031b: SWAP1 0000031c: SSTORE 0000031d: JUMP 0000031e: JUMPDEST 0000031f: PUSH1 0x00 00000321: SLOAD 00000322: PUSH1 0x01 00000324: PUSH1 0x01 00000326: PUSH1 0xa0 00000328: SHL 00000329: SUB 0000032a: AND 0000032b: CALLER 0000032c: EQ 0000032d: PUSH2 0x0348 00000330: JUMPI 00000331: PUSH1 0x40 00000333: MLOAD 00000334: PUSH3 0x461bcd 00000338: PUSH1 0xe5 0000033a: SHL 0000033b: DUP2 0000033c: MSTORE 0000033d: PUSH1 0x04 0000033f: ADD 00000340: PUSH2 0x0306 00000343: SWAP1 00000344: PUSH2 0x0fa5 00000347: JUMP 00000348: JUMPDEST 00000349: PUSH1 0x00 0000034b: CALLVALUE 0000034c: GT 0000034d: PUSH2 0x038d 00000350: JUMPI 00000351: PUSH1 0x40 00000353: MLOAD 00000354: PUSH3 0x461bcd 00000358: PUSH1 0xe5 0000035a: SHL 0000035b: DUP2 0000035c: MSTORE 0000035d: PUSH1 0x20 0000035f: PUSH1 0x04 00000361: DUP3 00000362: ADD 00000363: MSTORE 00000364: PUSH1 0x12 00000366: PUSH1 0x24 00000368: DUP3 00000369: ADD 0000036a: MSTORE 0000036b: PUSH18 0x6d75737420656e646f77206e6f6e7a65726f 0000037e: PUSH1 0x70 00000380: SHL 00000381: PUSH1 0x44 00000383: DUP3 00000384: ADD 00000385: MSTORE 00000386: PUSH1 0x64 00000388: ADD 00000389: PUSH2 0x0306 0000038c: JUMP 0000038d: JUMPDEST 0000038e: PUSH1 0x40 00000390: MLOAD 00000391: CALLVALUE 00000392: DUP2 00000393: MSTORE 00000394: PUSH32 0x28543ecc7e8f50ea4f5cea4bc2211d57d865b287538e2c0105081d65591e63a4 000003b5: SWAP1 000003b6: PUSH1 0x20 000003b8: ADD 000003b9: PUSH1 0x40 000003bb: MLOAD 000003bc: DUP1 000003bd: SWAP2 000003be: SUB 000003bf: SWAP1 000003c0: LOG1 000003c1: JUMP 000003c2: JUMPDEST 000003c3: PUSH1 0x00 000003c5: SLOAD 000003c6: PUSH1 0x01 000003c8: PUSH1 0xa0 000003ca: SHL 000003cb: SWAP1 000003cc: DIV 000003cd: PUSH1 0xff 000003cf: AND 000003d0: PUSH2 0x040d 000003d3: JUMPI 000003d4: PUSH1 0x40 000003d6: MLOAD 000003d7: PUSH3 0x461bcd 000003db: PUSH1 0xe5 000003dd: SHL 000003de: DUP2 000003df: MSTORE 000003e0: PUSH1 0x20 000003e2: PUSH1 0x04 000003e4: DUP3 000003e5: ADD 000003e6: MSTORE 000003e7: PUSH1 0x0f 000003e9: PUSH1 0x24 000003eb: DUP3 000003ec: ADD 000003ed: MSTORE 000003ee: PUSH15 0x19195c1bdcda5d1cc81c185d5cd959 000003fe: PUSH1 0x8a 00000400: SHL 00000401: PUSH1 0x44 00000403: DUP3 00000404: ADD 00000405: MSTORE 00000406: PUSH1 0x64 00000408: ADD 00000409: PUSH2 0x0306 0000040c: JUMP 0000040d: JUMPDEST 0000040e: DUP1 0000040f: PUSH2 0x045a 00000412: JUMPI 00000413: PUSH1 0x40 00000415: MLOAD 00000416: PUSH3 0x461bcd 0000041a: PUSH1 0xe5 0000041c: SHL 0000041d: DUP2 0000041e: MSTORE 0000041f: PUSH1 0x20 00000421: PUSH1 0x04 00000423: DUP3 00000424: ADD 00000425: MSTORE 00000426: PUSH1 0x18 00000428: PUSH1 0x24 0000042a: DUP3 0000042b: ADD 0000042c: MSTORE 0000042d: PUSH32 0x696e76616c69642043454e4e5a6e657420616464726573730000000000000000 0000044e: PUSH1 0x44 00000450: DUP3 00000451: ADD 00000452: MSTORE 00000453: PUSH1 0x64 00000455: ADD 00000456: PUSH2 0x0306 00000459: JUMP 0000045a: JUMPDEST 0000045b: PUSH1 0x01 0000045d: PUSH1 0x01 0000045f: PUSH1 0xa0 00000461: SHL 00000462: SUB 00000463: DUP4 00000464: AND 00000465: PUSH2 0x04bc 00000468: JUMPI 00000469: DUP2 0000046a: CALLVALUE 0000046b: EQ 0000046c: PUSH2 0x04b7 0000046f: JUMPI 00000470: PUSH1 0x40 00000472: MLOAD 00000473: PUSH3 0x461bcd 00000477: PUSH1 0xe5 00000479: SHL 0000047a: DUP2 0000047b: MSTORE 0000047c: PUSH1 0x20 0000047e: PUSH1 0x04 00000480: DUP3 00000481: ADD 00000482: MSTORE 00000483: PUSH1 0x18 00000485: PUSH1 0x24 00000487: DUP3 00000488: ADD 00000489: MSTORE 0000048a: PUSH32 0x696e636f7272656374206465706f73697420616d6f756e740000000000000000 000004ab: PUSH1 0x44 000004ad: DUP3 000004ae: ADD 000004af: MSTORE 000004b0: PUSH1 0x64 000004b2: ADD 000004b3: PUSH2 0x0306 000004b6: JUMP 000004b7: JUMPDEST 000004b8: PUSH2 0x053e 000004bb: JUMP 000004bc: JUMPDEST 000004bd: PUSH1 0x01 000004bf: PUSH1 0x01 000004c1: PUSH1 0xa0 000004c3: SHL 000004c4: SUB 000004c5: DUP4 000004c6: AND 000004c7: PUSH20 0x1122b6a0e00dce0563082b6e2953f3a943855c1f 000004dc: EQ 000004dd: ISZERO 000004de: PUSH2 0x0532 000004e1: JUMPI 000004e2: PUSH1 0x00 000004e4: SLOAD 000004e5: PUSH1 0x01 000004e7: PUSH1 0xa8 000004e9: SHL 000004ea: SWAP1 000004eb: DIV 000004ec: PUSH1 0xff 000004ee: AND 000004ef: PUSH2 0x0532 000004f2: JUMPI 000004f3: PUSH1 0x40 000004f5: MLOAD 000004f6: PUSH3 0x461bcd 000004fa: PUSH1 0xe5 000004fc: SHL 000004fd: DUP2 000004fe: MSTORE 000004ff: PUSH1 0x20 00000501: PUSH1 0x04 00000503: DUP3 00000504: ADD 00000505: MSTORE 00000506: PUSH1 0x15 00000508: PUSH1 0x24 0000050a: DUP3 0000050b: ADD 0000050c: MSTORE 0000050d: PUSH21 0x18d95b9b9e8819195c1bdcda5d1cc81c185d5cd959 00000523: PUSH1 0x5a 00000525: SHL 00000526: PUSH1 0x44 00000528: DUP3 00000529: ADD 0000052a: MSTORE 0000052b: PUSH1 0x64 0000052d: ADD 0000052e: PUSH2 0x0306 00000531: JUMP 00000532: JUMPDEST 00000533: PUSH2 0x053e 00000536: DUP4 00000537: CALLER 00000538: ADDRESS 00000539: DUP6 0000053a: PUSH2 0x096d 0000053d: JUMP 0000053e: JUMPDEST 0000053f: PUSH1 0x40 00000541: DUP1 00000542: MLOAD 00000543: PUSH1 0x01 00000545: PUSH1 0x01 00000547: PUSH1 0xa0 00000549: SHL 0000054a: SUB 0000054b: DUP6 0000054c: AND 0000054d: DUP2 0000054e: MSTORE 0000054f: PUSH1 0x20 00000551: DUP2 00000552: ADD 00000553: DUP5 00000554: SWAP1 00000555: MSTORE 00000556: SWAP1 00000557: DUP2 00000558: ADD 00000559: DUP3 0000055a: SWAP1 0000055b: MSTORE 0000055c: CALLER 0000055d: SWAP1 0000055e: PUSH32 0x76bb911c362d5b1feb3058bc7dc9354703e4b6eb9c61cc845f73da880cf62f61 0000057f: SWAP1 00000580: PUSH1 0x60 00000582: ADD 00000583: PUSH1 0x40 00000585: MLOAD 00000586: DUP1 00000587: SWAP2 00000588: SUB 00000589: SWAP1 0000058a: LOG2 0000058b: POP 0000058c: POP 0000058d: POP 0000058e: JUMP 0000058f: JUMPDEST 00000590: PUSH1 0x00 00000592: SLOAD 00000593: PUSH1 0x01 00000595: PUSH1 0x01 00000597: PUSH1 0xa0 00000599: SHL 0000059a: SUB 0000059b: AND 0000059c: CALLER 0000059d: EQ 0000059e: PUSH2 0x05b9 000005a1: JUMPI 000005a2: PUSH1 0x40 000005a4: MLOAD 000005a5: PUSH3 0x461bcd 000005a9: PUSH1 0xe5 000005ab: SHL 000005ac: DUP2 000005ad: MSTORE 000005ae: PUSH1 0x04 000005b0: ADD 000005b1: PUSH2 0x0306 000005b4: SWAP1 000005b5: PUSH2 0x0fa5 000005b8: JUMP 000005b9: JUMPDEST 000005ba: PUSH1 0x00 000005bc: DUP1 000005bd: SLOAD 000005be: PUSH1 0xff 000005c0: PUSH1 0xb0 000005c2: SHL 000005c3: NOT 000005c4: AND 000005c5: SWAP1 000005c6: SSTORE 000005c7: JUMP 000005c8: JUMPDEST 000005c9: PUSH1 0x00 000005cb: SLOAD 000005cc: PUSH1 0x01 000005ce: PUSH1 0x01 000005d0: PUSH1 0xa0 000005d2: SHL 000005d3: SUB 000005d4: AND 000005d5: CALLER 000005d6: EQ 000005d7: PUSH2 0x05f2 000005da: JUMPI 000005db: PUSH1 0x40 000005dd: MLOAD 000005de: PUSH3 0x461bcd 000005e2: PUSH1 0xe5 000005e4: SHL 000005e5: DUP2 000005e6: MSTORE 000005e7: PUSH1 0x04 000005e9: ADD 000005ea: PUSH2 0x0306 000005ed: SWAP1 000005ee: PUSH2 0x0fa5 000005f1: JUMP 000005f2: JUMPDEST 000005f3: PUSH2 0x05fc 000005f6: PUSH1 0x00 000005f8: PUSH2 0x09de 000005fb: JUMP 000005fc: JUMPDEST 000005fd: JUMP 000005fe: JUMPDEST 000005ff: PUSH1 0x00 00000601: SLOAD 00000602: PUSH1 0x01 00000604: PUSH1 0xb0 00000606: SHL 00000607: SWAP1 00000608: DIV 00000609: PUSH1 0xff 0000060b: AND 0000060c: PUSH2 0x064c 0000060f: JUMPI 00000610: PUSH1 0x40 00000612: MLOAD 00000613: PUSH3 0x461bcd 00000617: PUSH1 0xe5 00000619: SHL 0000061a: DUP2 0000061b: MSTORE 0000061c: PUSH1 0x20 0000061e: PUSH1 0x04 00000620: DUP3 00000621: ADD 00000622: MSTORE 00000623: PUSH1 0x12 00000625: PUSH1 0x24 00000627: DUP3 00000628: ADD 00000629: MSTORE 0000062a: PUSH18 0x1dda5d1a191c985dd85b1cc81c185d5cd959 0000063d: PUSH1 0x72 0000063f: SHL 00000640: PUSH1 0x44 00000642: DUP3 00000643: ADD 00000644: MSTORE 00000645: PUSH1 0x64 00000647: ADD 00000648: PUSH2 0x0306 0000064b: JUMP 0000064c: JUMPDEST 0000064d: PUSH1 0x00 0000064f: DUP5 00000650: DUP5 00000651: DUP5 00000652: PUSH2 0x0661 00000655: PUSH1 0x40 00000657: DUP7 00000658: ADD 00000659: PUSH1 0x20 0000065b: DUP8 0000065c: ADD 0000065d: PUSH2 0x0db5 00000660: JUMP 00000661: JUMPDEST 00000662: PUSH1 0x40 00000664: DUP1 00000665: MLOAD 00000666: PUSH1 0x01 00000668: PUSH1 0x01 0000066a: PUSH1 0xa0 0000066c: SHL 0000066d: SUB 0000066e: SWAP6 0000066f: DUP7 00000670: AND 00000671: PUSH1 0x20 00000673: DUP3 00000674: ADD 00000675: MSTORE 00000676: SWAP1 00000677: DUP2 00000678: ADD 00000679: SWAP4 0000067a: SWAP1 0000067b: SWAP4 0000067c: MSTORE 0000067d: SWAP3 0000067e: AND 0000067f: PUSH1 0x60 00000681: DUP3 00000682: ADD 00000683: MSTORE 00000684: PUSH4 0xffffffff 00000689: SWAP1 0000068a: SWAP2 0000068b: AND 0000068c: PUSH1 0x80 0000068e: DUP3 0000068f: ADD 00000690: MSTORE 00000691: DUP3 00000692: CALLDATALOAD 00000693: PUSH1 0xa0 00000695: DUP3 00000696: ADD 00000697: MSTORE 00000698: PUSH1 0xc0 0000069a: ADD 0000069b: PUSH1 0x40 0000069d: DUP1 0000069e: MLOAD 0000069f: PUSH1 0x1f 000006a1: NOT 000006a2: DUP2 000006a3: DUP5 000006a4: SUB 000006a5: ADD 000006a6: DUP2 000006a7: MSTORE 000006a8: SWAP1 000006a9: DUP3 000006aa: SWAP1 000006ab: MSTORE 000006ac: PUSH1 0x01 000006ae: SLOAD 000006af: PUSH4 0x63c75f5f 000006b4: PUSH1 0xe1 000006b6: SHL 000006b7: DUP4 000006b8: MSTORE 000006b9: SWAP1 000006ba: SWAP3 000006bb: POP 000006bc: PUSH1 0x01 000006be: PUSH1 0x01 000006c0: PUSH1 0xa0 000006c2: SHL 000006c3: SUB 000006c4: AND 000006c5: SWAP1 000006c6: PUSH4 0xc78ebebe 000006cb: SWAP1 000006cc: CALLVALUE 000006cd: SWAP1 000006ce: PUSH2 0x06dd 000006d1: SWAP1 000006d2: DUP6 000006d3: SWAP1 000006d4: DUP8 000006d5: SWAP1 000006d6: PUSH1 0x04 000006d8: ADD 000006d9: PUSH2 0x0e91 000006dc: JUMP 000006dd: JUMPDEST 000006de: PUSH1 0x00 000006e0: PUSH1 0x40 000006e2: MLOAD 000006e3: DUP1 000006e4: DUP4 000006e5: SUB 000006e6: DUP2 000006e7: DUP6 000006e8: DUP9 000006e9: DUP1 000006ea: EXTCODESIZE 000006eb: ISZERO 000006ec: DUP1 000006ed: ISZERO 000006ee: PUSH2 0x06f6 000006f1: JUMPI 000006f2: PUSH1 0x00 000006f4: DUP1 000006f5: REVERT 000006f6: JUMPDEST 000006f7: POP 000006f8: GAS 000006f9: CALL 000006fa: ISZERO 000006fb: DUP1 000006fc: ISZERO 000006fd: PUSH2 0x070a 00000700: JUMPI 00000701: RETURNDATASIZE 00000702: PUSH1 0x00 00000704: DUP1 00000705: RETURNDATACOPY 00000706: RETURNDATASIZE 00000707: PUSH1 0x00 00000709: REVERT 0000070a: JUMPDEST 0000070b: POP 0000070c: POP 0000070d: POP 0000070e: POP 0000070f: POP 00000710: PUSH1 0x01 00000712: PUSH1 0x01 00000714: PUSH1 0xa0 00000716: SHL 00000717: SUB 00000718: DUP6 00000719: AND 0000071a: PUSH2 0x07bd 0000071d: JUMPI 0000071e: PUSH1 0x00 00000720: DUP4 00000721: PUSH1 0x01 00000723: PUSH1 0x01 00000725: PUSH1 0xa0 00000727: SHL 00000728: SUB 00000729: AND 0000072a: DUP6 0000072b: PUSH1 0x40 0000072d: MLOAD 0000072e: PUSH1 0x00 00000730: PUSH1 0x40 00000732: MLOAD 00000733: DUP1 00000734: DUP4 00000735: SUB 00000736: DUP2 00000737: DUP6 00000738: DUP8 00000739: GAS 0000073a: CALL 0000073b: SWAP3 0000073c: POP 0000073d: POP 0000073e: POP 0000073f: RETURNDATASIZE 00000740: DUP1 00000741: PUSH1 0x00 00000743: DUP2 00000744: EQ 00000745: PUSH2 0x076a 00000748: JUMPI 00000749: PUSH1 0x40 0000074b: MLOAD 0000074c: SWAP2 0000074d: POP 0000074e: PUSH1 0x1f 00000750: NOT 00000751: PUSH1 0x3f 00000753: RETURNDATASIZE 00000754: ADD 00000755: AND 00000756: DUP3 00000757: ADD 00000758: PUSH1 0x40 0000075a: MSTORE 0000075b: RETURNDATASIZE 0000075c: DUP3 0000075d: MSTORE 0000075e: RETURNDATASIZE 0000075f: PUSH1 0x00 00000761: PUSH1 0x20 00000763: DUP5 00000764: ADD 00000765: RETURNDATACOPY 00000766: PUSH2 0x076f 00000769: JUMP 0000076a: JUMPDEST 0000076b: PUSH1 0x60 0000076d: SWAP2 0000076e: POP 0000076f: JUMPDEST 00000770: POP 00000771: POP 00000772: SWAP1 00000773: POP 00000774: DUP1 00000775: PUSH2 0x07b7 00000778: JUMPI 00000779: PUSH1 0x40 0000077b: MLOAD 0000077c: PUSH3 0x461bcd 00000780: PUSH1 0xe5 00000782: SHL 00000783: DUP2 00000784: MSTORE 00000785: PUSH1 0x20 00000787: PUSH1 0x04 00000789: DUP3 0000078a: ADD 0000078b: MSTORE 0000078c: PUSH1 0x14 0000078e: PUSH1 0x24 00000790: DUP3 00000791: ADD 00000792: MSTORE 00000793: PUSH20 0x2330b4b632b2103a379039b2b7321022ba3432b9 000007a8: PUSH1 0x61 000007aa: SHL 000007ab: PUSH1 0x44 000007ad: DUP3 000007ae: ADD 000007af: MSTORE 000007b0: PUSH1 0x64 000007b2: ADD 000007b3: PUSH2 0x0306 000007b6: JUMP 000007b7: JUMPDEST 000007b8: POP 000007b9: PUSH2 0x07c8 000007bc: JUMP 000007bd: JUMPDEST 000007be: PUSH2 0x07c8 000007c1: DUP6 000007c2: DUP5 000007c3: DUP7 000007c4: PUSH2 0x0a2e 000007c7: JUMP 000007c8: JUMPDEST 000007c9: PUSH1 0x40 000007cb: DUP1 000007cc: MLOAD 000007cd: PUSH1 0x01 000007cf: PUSH1 0x01 000007d1: PUSH1 0xa0 000007d3: SHL 000007d4: SUB 000007d5: DUP8 000007d6: DUP2 000007d7: AND 000007d8: DUP3 000007d9: MSTORE 000007da: PUSH1 0x20 000007dc: DUP3 000007dd: ADD 000007de: DUP8 000007df: SWAP1 000007e0: MSTORE 000007e1: DUP6 000007e2: AND 000007e3: SWAP2 000007e4: PUSH32 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb 00000805: SWAP2 00000806: ADD 00000807: PUSH1 0x40 00000809: MLOAD 0000080a: DUP1 0000080b: SWAP2 0000080c: SUB 0000080d: SWAP1 0000080e: LOG2 0000080f: POP 00000810: POP 00000811: POP 00000812: POP 00000813: POP 00000814: JUMP 00000815: JUMPDEST 00000816: PUSH1 0x00 00000818: SLOAD 00000819: PUSH1 0x01 0000081b: PUSH1 0x01 0000081d: PUSH1 0xa0 0000081f: SHL 00000820: SUB 00000821: AND 00000822: CALLER 00000823: EQ 00000824: PUSH2 0x083f 00000827: JUMPI 00000828: PUSH1 0x40 0000082a: MLOAD 0000082b: PUSH3 0x461bcd 0000082f: PUSH1 0xe5 00000831: SHL 00000832: DUP2 00000833: MSTORE 00000834: PUSH1 0x04 00000836: ADD 00000837: PUSH2 0x0306 0000083a: SWAP1 0000083b: PUSH2 0x0fa5 0000083e: JUMP 0000083f: JUMPDEST 00000840: PUSH1 0x00 00000842: DUP1 00000843: SLOAD 00000844: PUSH1 0xff 00000846: PUSH1 0xa8 00000848: SHL 00000849: NOT 0000084a: AND 0000084b: PUSH1 0x01 0000084d: PUSH1 0xa8 0000084f: SHL 00000850: OR 00000851: SWAP1 00000852: SSTORE 00000853: JUMP 00000854: JUMPDEST 00000855: PUSH1 0x00 00000857: SLOAD 00000858: PUSH1 0x01 0000085a: PUSH1 0x01 0000085c: PUSH1 0xa0 0000085e: SHL 0000085f: SUB 00000860: AND 00000861: CALLER 00000862: EQ 00000863: PUSH2 0x087e 00000866: JUMPI 00000867: PUSH1 0x40 00000869: MLOAD 0000086a: PUSH3 0x461bcd 0000086e: PUSH1 0xe5 00000870: SHL 00000871: DUP2 00000872: MSTORE 00000873: PUSH1 0x04 00000875: ADD 00000876: PUSH2 0x0306 00000879: SWAP1 0000087a: PUSH2 0x0fa5 0000087d: JUMP 0000087e: JUMPDEST 0000087f: PUSH1 0x00 00000881: DUP1 00000882: SLOAD 00000883: PUSH1 0xff 00000885: PUSH1 0xb0 00000887: SHL 00000888: NOT 00000889: AND 0000088a: PUSH1 0x01 0000088c: PUSH1 0xb0 0000088e: SHL 0000088f: OR 00000890: SWAP1 00000891: SSTORE 00000892: JUMP 00000893: JUMPDEST 00000894: PUSH1 0x00 00000896: SLOAD 00000897: PUSH1 0x01 00000899: PUSH1 0x01 0000089b: PUSH1 0xa0 0000089d: SHL 0000089e: SUB 0000089f: AND 000008a0: CALLER 000008a1: EQ 000008a2: PUSH2 0x08bd 000008a5: JUMPI 000008a6: PUSH1 0x40 000008a8: MLOAD 000008a9: PUSH3 0x461bcd 000008ad: PUSH1 0xe5 000008af: SHL 000008b0: DUP2 000008b1: MSTORE 000008b2: PUSH1 0x04 000008b4: ADD 000008b5: PUSH2 0x0306 000008b8: SWAP1 000008b9: PUSH2 0x0fa5 000008bc: JUMP 000008bd: JUMPDEST 000008be: PUSH1 0x00 000008c0: DUP1 000008c1: SLOAD 000008c2: PUSH1 0xff 000008c4: PUSH1 0xa0 000008c6: SHL 000008c7: NOT 000008c8: AND 000008c9: PUSH1 0x01 000008cb: PUSH1 0xa0 000008cd: SHL 000008ce: OR 000008cf: SWAP1 000008d0: SSTORE 000008d1: JUMP 000008d2: JUMPDEST 000008d3: PUSH1 0x00 000008d5: SLOAD 000008d6: PUSH1 0x01 000008d8: PUSH1 0x01 000008da: PUSH1 0xa0 000008dc: SHL 000008dd: SUB 000008de: AND 000008df: CALLER 000008e0: EQ 000008e1: PUSH2 0x08fc 000008e4: JUMPI 000008e5: PUSH1 0x40 000008e7: MLOAD 000008e8: PUSH3 0x461bcd 000008ec: PUSH1 0xe5 000008ee: SHL 000008ef: DUP2 000008f0: MSTORE 000008f1: PUSH1 0x04 000008f3: ADD 000008f4: PUSH2 0x0306 000008f7: SWAP1 000008f8: PUSH2 0x0fa5 000008fb: JUMP 000008fc: JUMPDEST 000008fd: PUSH1 0x01 000008ff: PUSH1 0x01 00000901: PUSH1 0xa0 00000903: SHL 00000904: SUB 00000905: DUP2 00000906: AND 00000907: PUSH2 0x0961 0000090a: JUMPI 0000090b: PUSH1 0x40 0000090d: MLOAD 0000090e: PUSH3 0x461bcd 00000912: PUSH1 0xe5 00000914: SHL 00000915: DUP2 00000916: MSTORE 00000917: PUSH1 0x20 00000919: PUSH1 0x04 0000091b: DUP3 0000091c: ADD 0000091d: MSTORE 0000091e: PUSH1 0x26 00000920: PUSH1 0x24 00000922: DUP3 00000923: ADD 00000924: MSTORE 00000925: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 00000946: PUSH1 0x44 00000948: DUP3 00000949: ADD 0000094a: MSTORE 0000094b: PUSH6 0x646472657373 00000952: PUSH1 0xd0 00000954: SHL 00000955: PUSH1 0x64 00000957: DUP3 00000958: ADD 00000959: MSTORE 0000095a: PUSH1 0x84 0000095c: ADD 0000095d: PUSH2 0x0306 00000960: JUMP 00000961: JUMPDEST 00000962: PUSH2 0x096a 00000965: DUP2 00000966: PUSH2 0x09de 00000969: JUMP 0000096a: JUMPDEST 0000096b: POP 0000096c: JUMP 0000096d: JUMPDEST 0000096e: PUSH1 0x40 00000970: MLOAD 00000971: PUSH1 0x01 00000973: PUSH1 0x01 00000975: PUSH1 0xa0 00000977: SHL 00000978: SUB 00000979: DUP1 0000097a: DUP6 0000097b: AND 0000097c: PUSH1 0x24 0000097e: DUP4 0000097f: ADD 00000980: MSTORE 00000981: DUP4 00000982: AND 00000983: PUSH1 0x44 00000985: DUP3 00000986: ADD 00000987: MSTORE 00000988: PUSH1 0x64 0000098a: DUP2 0000098b: ADD 0000098c: DUP3 0000098d: SWAP1 0000098e: MSTORE 0000098f: PUSH2 0x09d8 00000992: SWAP1 00000993: DUP6 00000994: SWAP1 00000995: PUSH4 0x23b872dd 0000099a: PUSH1 0xe0 0000099c: SHL 0000099d: SWAP1 0000099e: PUSH1 0x84 000009a0: ADD 000009a1: JUMPDEST 000009a2: PUSH1 0x40 000009a4: DUP1 000009a5: MLOAD 000009a6: PUSH1 0x1f 000009a8: NOT 000009a9: DUP2 000009aa: DUP5 000009ab: SUB 000009ac: ADD 000009ad: DUP2 000009ae: MSTORE 000009af: SWAP2 000009b0: SWAP1 000009b1: MSTORE 000009b2: PUSH1 0x20 000009b4: DUP2 000009b5: ADD 000009b6: DUP1 000009b7: MLOAD 000009b8: PUSH1 0x01 000009ba: PUSH1 0x01 000009bc: PUSH1 0xe0 000009be: SHL 000009bf: SUB 000009c0: AND 000009c1: PUSH1 0x01 000009c3: PUSH1 0x01 000009c5: PUSH1 0xe0 000009c7: SHL 000009c8: SUB 000009c9: NOT 000009ca: SWAP1 000009cb: SWAP4 000009cc: AND 000009cd: SWAP3 000009ce: SWAP1 000009cf: SWAP3 000009d0: OR 000009d1: SWAP1 000009d2: SWAP2 000009d3: MSTORE 000009d4: PUSH2 0x0a63 000009d7: JUMP 000009d8: JUMPDEST 000009d9: POP 000009da: POP 000009db: POP 000009dc: POP 000009dd: JUMP 000009de: JUMPDEST 000009df: PUSH1 0x00 000009e1: DUP1 000009e2: SLOAD 000009e3: PUSH1 0x01 000009e5: PUSH1 0x01 000009e7: PUSH1 0xa0 000009e9: SHL 000009ea: SUB 000009eb: DUP4 000009ec: DUP2 000009ed: AND 000009ee: PUSH1 0x01 000009f0: PUSH1 0x01 000009f2: PUSH1 0xa0 000009f4: SHL 000009f5: SUB 000009f6: NOT 000009f7: DUP4 000009f8: AND 000009f9: DUP2 000009fa: OR 000009fb: DUP5 000009fc: SSTORE 000009fd: PUSH1 0x40 000009ff: MLOAD 00000a00: SWAP2 00000a01: SWAP1 00000a02: SWAP3 00000a03: AND 00000a04: SWAP3 00000a05: DUP4 00000a06: SWAP2 00000a07: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000a28: SWAP2 00000a29: SWAP1 00000a2a: LOG3 00000a2b: POP 00000a2c: POP 00000a2d: JUMP 00000a2e: JUMPDEST 00000a2f: PUSH1 0x40 00000a31: MLOAD 00000a32: PUSH1 0x01 00000a34: PUSH1 0x01 00000a36: PUSH1 0xa0 00000a38: SHL 00000a39: SUB 00000a3a: DUP4 00000a3b: AND 00000a3c: PUSH1 0x24 00000a3e: DUP3 00000a3f: ADD 00000a40: MSTORE 00000a41: PUSH1 0x44 00000a43: DUP2 00000a44: ADD 00000a45: DUP3 00000a46: SWAP1 00000a47: MSTORE 00000a48: PUSH2 0x0a5e 00000a4b: SWAP1 00000a4c: DUP5 00000a4d: SWAP1 00000a4e: PUSH4 0xa9059cbb 00000a53: PUSH1 0xe0 00000a55: SHL 00000a56: SWAP1 00000a57: PUSH1 0x64 00000a59: ADD 00000a5a: PUSH2 0x09a1 00000a5d: JUMP 00000a5e: JUMPDEST 00000a5f: POP 00000a60: POP 00000a61: POP 00000a62: JUMP 00000a63: JUMPDEST 00000a64: PUSH1 0x00 00000a66: PUSH2 0x0ab8 00000a69: DUP3 00000a6a: PUSH1 0x40 00000a6c: MLOAD 00000a6d: DUP1 00000a6e: PUSH1 0x40 00000a70: ADD 00000a71: PUSH1 0x40 00000a73: MSTORE 00000a74: DUP1 00000a75: PUSH1 0x20 00000a77: DUP2 00000a78: MSTORE 00000a79: PUSH1 0x20 00000a7b: ADD 00000a7c: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 00000a9d: DUP2 00000a9e: MSTORE 00000a9f: POP 00000aa0: DUP6 00000aa1: PUSH1 0x01 00000aa3: PUSH1 0x01 00000aa5: PUSH1 0xa0 00000aa7: SHL 00000aa8: SUB 00000aa9: AND 00000aaa: PUSH2 0x0b35 00000aad: SWAP1 00000aae: SWAP3 00000aaf: SWAP2 00000ab0: SWAP1 00000ab1: PUSH4 0xffffffff 00000ab6: AND 00000ab7: JUMP 00000ab8: JUMPDEST 00000ab9: DUP1 00000aba: MLOAD 00000abb: SWAP1 00000abc: SWAP2 00000abd: POP 00000abe: ISZERO 00000abf: PUSH2 0x0a5e 00000ac2: JUMPI 00000ac3: DUP1 00000ac4: DUP1 00000ac5: PUSH1 0x20 00000ac7: ADD 00000ac8: SWAP1 00000ac9: MLOAD 00000aca: DUP2 00000acb: ADD 00000acc: SWAP1 00000acd: PUSH2 0x0ad6 00000ad0: SWAP2 00000ad1: SWAP1 00000ad2: PUSH2 0x0d95 00000ad5: JUMP 00000ad6: JUMPDEST 00000ad7: PUSH2 0x0a5e 00000ada: JUMPI 00000adb: PUSH1 0x40 00000add: MLOAD 00000ade: PUSH3 0x461bcd 00000ae2: PUSH1 0xe5 00000ae4: SHL 00000ae5: DUP2 00000ae6: MSTORE 00000ae7: PUSH1 0x20 00000ae9: PUSH1 0x04 00000aeb: DUP3 00000aec: ADD 00000aed: MSTORE 00000aee: PUSH1 0x2a 00000af0: PUSH1 0x24 00000af2: DUP3 00000af3: ADD 00000af4: MSTORE 00000af5: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00000b16: PUSH1 0x44 00000b18: DUP3 00000b19: ADD 00000b1a: MSTORE 00000b1b: PUSH10 0x1bdd081cdd58d8d95959 00000b26: PUSH1 0xb2 00000b28: SHL 00000b29: PUSH1 0x64 00000b2b: DUP3 00000b2c: ADD 00000b2d: MSTORE 00000b2e: PUSH1 0x84 00000b30: ADD 00000b31: PUSH2 0x0306 00000b34: JUMP 00000b35: JUMPDEST 00000b36: PUSH1 0x60 00000b38: PUSH2 0x0b44 00000b3b: DUP5 00000b3c: DUP5 00000b3d: PUSH1 0x00 00000b3f: DUP6 00000b40: PUSH2 0x0b4e 00000b43: JUMP 00000b44: JUMPDEST 00000b45: SWAP1 00000b46: POP 00000b47: JUMPDEST 00000b48: SWAP4 00000b49: SWAP3 00000b4a: POP 00000b4b: POP 00000b4c: POP 00000b4d: JUMP 00000b4e: JUMPDEST 00000b4f: PUSH1 0x60 00000b51: DUP3 00000b52: SELFBALANCE 00000b53: LT 00000b54: ISZERO 00000b55: PUSH2 0x0baf 00000b58: JUMPI 00000b59: PUSH1 0x40 00000b5b: MLOAD 00000b5c: PUSH3 0x461bcd 00000b60: PUSH1 0xe5 00000b62: SHL 00000b63: DUP2 00000b64: MSTORE 00000b65: PUSH1 0x20 00000b67: PUSH1 0x04 00000b69: DUP3 00000b6a: ADD 00000b6b: MSTORE 00000b6c: PUSH1 0x26 00000b6e: PUSH1 0x24 00000b70: DUP3 00000b71: ADD 00000b72: MSTORE 00000b73: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f 00000b94: PUSH1 0x44 00000b96: DUP3 00000b97: ADD 00000b98: MSTORE 00000b99: PUSH6 0x1c8818d85b1b 00000ba0: PUSH1 0xd2 00000ba2: SHL 00000ba3: PUSH1 0x64 00000ba5: DUP3 00000ba6: ADD 00000ba7: MSTORE 00000ba8: PUSH1 0x84 00000baa: ADD 00000bab: PUSH2 0x0306 00000bae: JUMP 00000baf: JUMPDEST 00000bb0: DUP5 00000bb1: EXTCODESIZE 00000bb2: PUSH2 0x0bfd 00000bb5: JUMPI 00000bb6: PUSH1 0x40 00000bb8: MLOAD 00000bb9: PUSH3 0x461bcd 00000bbd: PUSH1 0xe5 00000bbf: SHL 00000bc0: DUP2 00000bc1: MSTORE 00000bc2: PUSH1 0x20 00000bc4: PUSH1 0x04 00000bc6: DUP3 00000bc7: ADD 00000bc8: MSTORE 00000bc9: PUSH1 0x1d 00000bcb: PUSH1 0x24 00000bcd: DUP3 00000bce: ADD 00000bcf: MSTORE 00000bd0: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00000bf1: PUSH1 0x44 00000bf3: DUP3 00000bf4: ADD 00000bf5: MSTORE 00000bf6: PUSH1 0x64 00000bf8: ADD 00000bf9: PUSH2 0x0306 00000bfc: JUMP 00000bfd: JUMPDEST 00000bfe: PUSH1 0x00 00000c00: DUP1 00000c01: DUP7 00000c02: PUSH1 0x01 00000c04: PUSH1 0x01 00000c06: PUSH1 0xa0 00000c08: SHL 00000c09: SUB 00000c0a: AND 00000c0b: DUP6 00000c0c: DUP8 00000c0d: PUSH1 0x40 00000c0f: MLOAD 00000c10: PUSH2 0x0c19 00000c13: SWAP2 00000c14: SWAP1 00000c15: PUSH2 0x0e75 00000c18: JUMP 00000c19: JUMPDEST 00000c1a: PUSH1 0x00 00000c1c: PUSH1 0x40 00000c1e: MLOAD 00000c1f: DUP1 00000c20: DUP4 00000c21: SUB 00000c22: DUP2 00000c23: DUP6 00000c24: DUP8 00000c25: GAS 00000c26: CALL 00000c27: SWAP3 00000c28: POP 00000c29: POP 00000c2a: POP 00000c2b: RETURNDATASIZE 00000c2c: DUP1 00000c2d: PUSH1 0x00 00000c2f: DUP2 00000c30: EQ 00000c31: PUSH2 0x0c56 00000c34: JUMPI 00000c35: PUSH1 0x40 00000c37: MLOAD 00000c38: SWAP2 00000c39: POP 00000c3a: PUSH1 0x1f 00000c3c: NOT 00000c3d: PUSH1 0x3f 00000c3f: RETURNDATASIZE 00000c40: ADD 00000c41: AND 00000c42: DUP3 00000c43: ADD 00000c44: PUSH1 0x40 00000c46: MSTORE 00000c47: RETURNDATASIZE 00000c48: DUP3 00000c49: MSTORE 00000c4a: RETURNDATASIZE 00000c4b: PUSH1 0x00 00000c4d: PUSH1 0x20 00000c4f: DUP5 00000c50: ADD 00000c51: RETURNDATACOPY 00000c52: PUSH2 0x0c5b 00000c55: JUMP 00000c56: JUMPDEST 00000c57: PUSH1 0x60 00000c59: SWAP2 00000c5a: POP 00000c5b: JUMPDEST 00000c5c: POP 00000c5d: SWAP2 00000c5e: POP 00000c5f: SWAP2 00000c60: POP 00000c61: PUSH2 0x0c6b 00000c64: DUP3 00000c65: DUP3 00000c66: DUP7 00000c67: PUSH2 0x0c76 00000c6a: JUMP 00000c6b: JUMPDEST 00000c6c: SWAP8 00000c6d: SWAP7 00000c6e: POP 00000c6f: POP 00000c70: POP 00000c71: POP 00000c72: POP 00000c73: POP 00000c74: POP 00000c75: JUMP 00000c76: JUMPDEST 00000c77: PUSH1 0x60 00000c79: DUP4 00000c7a: ISZERO 00000c7b: PUSH2 0x0c85 00000c7e: JUMPI 00000c7f: POP 00000c80: DUP2 00000c81: PUSH2 0x0b47 00000c84: JUMP 00000c85: JUMPDEST 00000c86: DUP3 00000c87: MLOAD 00000c88: ISZERO 00000c89: PUSH2 0x0c95 00000c8c: JUMPI 00000c8d: DUP3 00000c8e: MLOAD 00000c8f: DUP1 00000c90: DUP5 00000c91: PUSH1 0x20 00000c93: ADD 00000c94: REVERT 00000c95: JUMPDEST 00000c96: DUP2 00000c97: PUSH1 0x40 00000c99: MLOAD 00000c9a: PUSH3 0x461bcd 00000c9e: PUSH1 0xe5 00000ca0: SHL 00000ca1: DUP2 00000ca2: MSTORE 00000ca3: PUSH1 0x04 00000ca5: ADD 00000ca6: PUSH2 0x0306 00000ca9: SWAP2 00000caa: SWAP1 00000cab: PUSH2 0x0f92 00000cae: JUMP 00000caf: JUMPDEST 00000cb0: DUP1 00000cb1: CALLDATALOAD 00000cb2: PUSH1 0x01 00000cb4: PUSH1 0x01 00000cb6: PUSH1 0xa0 00000cb8: SHL 00000cb9: SUB 00000cba: DUP2 00000cbb: AND 00000cbc: DUP2 00000cbd: EQ 00000cbe: PUSH2 0x0cc6 00000cc1: JUMPI 00000cc2: PUSH1 0x00 00000cc4: DUP1 00000cc5: REVERT 00000cc6: JUMPDEST 00000cc7: SWAP2 00000cc8: SWAP1 00000cc9: POP 00000cca: JUMP 00000ccb: JUMPDEST 00000ccc: DUP1 00000ccd: CALLDATALOAD 00000cce: PUSH4 0xffffffff 00000cd3: DUP2 00000cd4: AND 00000cd5: DUP2 00000cd6: EQ 00000cd7: PUSH2 0x0cc6 00000cda: JUMPI 00000cdb: PUSH1 0x00 00000cdd: DUP1 00000cde: REVERT 00000cdf: JUMPDEST 00000ce0: PUSH1 0x00 00000ce2: PUSH1 0x20 00000ce4: DUP3 00000ce5: DUP5 00000ce6: SUB 00000ce7: SLT 00000ce8: ISZERO 00000ce9: PUSH2 0x0cf0 00000cec: JUMPI 00000ced: DUP1 00000cee: DUP2 00000cef: REVERT 00000cf0: JUMPDEST 00000cf1: PUSH2 0x0b47 00000cf4: DUP3 00000cf5: PUSH2 0x0caf 00000cf8: JUMP 00000cf9: JUMPDEST 00000cfa: PUSH1 0x00 00000cfc: DUP1 00000cfd: PUSH1 0x00 00000cff: DUP1 00000d00: PUSH1 0x80 00000d02: DUP6 00000d03: DUP8 00000d04: SUB 00000d05: SLT 00000d06: ISZERO 00000d07: PUSH2 0x0d0e 00000d0a: JUMPI 00000d0b: DUP3 00000d0c: DUP4 00000d0d: REVERT 00000d0e: JUMPDEST 00000d0f: PUSH2 0x0d17 00000d12: DUP6 00000d13: PUSH2 0x0caf 00000d16: JUMP 00000d17: JUMPDEST 00000d18: SWAP4 00000d19: POP 00000d1a: PUSH1 0x20 00000d1c: DUP6 00000d1d: ADD 00000d1e: CALLDATALOAD 00000d1f: SWAP3 00000d20: POP 00000d21: PUSH2 0x0d2c 00000d24: PUSH1 0x40 00000d26: DUP7 00000d27: ADD 00000d28: PUSH2 0x0caf 00000d2b: JUMP 00000d2c: JUMPDEST 00000d2d: SWAP2 00000d2e: POP 00000d2f: PUSH1 0x60 00000d31: DUP6 00000d32: ADD 00000d33: CALLDATALOAD 00000d34: PUSH8 0xffffffffffffffff 00000d3d: DUP2 00000d3e: GT 00000d3f: ISZERO 00000d40: PUSH2 0x0d47 00000d43: JUMPI 00000d44: DUP2 00000d45: DUP3 00000d46: REVERT 00000d47: JUMPDEST 00000d48: DUP6 00000d49: ADD 00000d4a: PUSH1 0xc0 00000d4c: DUP2 00000d4d: DUP9 00000d4e: SUB 00000d4f: SLT 00000d50: ISZERO 00000d51: PUSH2 0x0d58 00000d54: JUMPI 00000d55: DUP2 00000d56: DUP3 00000d57: REVERT 00000d58: JUMPDEST 00000d59: SWAP4 00000d5a: SWAP7 00000d5b: SWAP3 00000d5c: SWAP6 00000d5d: POP 00000d5e: SWAP1 00000d5f: SWAP4 00000d60: POP 00000d61: POP 00000d62: JUMP 00000d63: JUMPDEST 00000d64: PUSH1 0x00 00000d66: DUP1 00000d67: PUSH1 0x00 00000d69: PUSH1 0x60 00000d6b: DUP5 00000d6c: DUP7 00000d6d: SUB 00000d6e: SLT 00000d6f: ISZERO 00000d70: PUSH2 0x0d77 00000d73: JUMPI 00000d74: DUP3 00000d75: DUP4 00000d76: REVERT 00000d77: JUMPDEST 00000d78: PUSH2 0x0d80 00000d7b: DUP5 00000d7c: PUSH2 0x0caf 00000d7f: JUMP 00000d80: JUMPDEST 00000d81: SWAP6 00000d82: PUSH1 0x20 00000d84: DUP6 00000d85: ADD 00000d86: CALLDATALOAD 00000d87: SWAP6 00000d88: POP 00000d89: PUSH1 0x40 00000d8b: SWAP1 00000d8c: SWAP5 00000d8d: ADD 00000d8e: CALLDATALOAD 00000d8f: SWAP4 00000d90: SWAP3 00000d91: POP 00000d92: POP 00000d93: POP 00000d94: JUMP 00000d95: JUMPDEST 00000d96: PUSH1 0x00 00000d98: PUSH1 0x20 00000d9a: DUP3 00000d9b: DUP5 00000d9c: SUB 00000d9d: SLT 00000d9e: ISZERO 00000d9f: PUSH2 0x0da6 00000da2: JUMPI 00000da3: DUP1 00000da4: DUP2 00000da5: REVERT 00000da6: JUMPDEST 00000da7: DUP2 00000da8: MLOAD 00000da9: DUP1 00000daa: ISZERO 00000dab: ISZERO 00000dac: DUP2 00000dad: EQ 00000dae: PUSH2 0x0b47 00000db1: JUMPI 00000db2: DUP2 00000db3: DUP3 00000db4: REVERT 00000db5: JUMPDEST 00000db6: PUSH1 0x00 00000db8: PUSH1 0x20 00000dba: DUP3 00000dbb: DUP5 00000dbc: SUB 00000dbd: SLT 00000dbe: ISZERO 00000dbf: PUSH2 0x0dc6 00000dc2: JUMPI 00000dc3: DUP1 00000dc4: DUP2 00000dc5: REVERT 00000dc6: JUMPDEST 00000dc7: PUSH2 0x0b47 00000dca: DUP3 00000dcb: PUSH2 0x0ccb 00000dce: JUMP 00000dcf: JUMPDEST 00000dd0: DUP2 00000dd1: DUP4 00000dd2: MSTORE 00000dd3: PUSH1 0x00 00000dd5: PUSH1 0x20 00000dd7: DUP1 00000dd8: DUP6 00000dd9: ADD 00000dda: SWAP5 00000ddb: POP 00000ddc: DUP3 00000ddd: DUP3 00000dde: JUMPDEST 00000ddf: DUP6 00000de0: DUP2 00000de1: LT 00000de2: ISZERO 00000de3: PUSH2 0x0e0a 00000de6: JUMPI 00000de7: PUSH1 0x01 00000de9: PUSH1 0x01 00000deb: PUSH1 0xa0 00000ded: SHL 00000dee: SUB 00000def: PUSH2 0x0df7 00000df2: DUP4 00000df3: PUSH2 0x0caf 00000df6: JUMP 00000df7: JUMPDEST 00000df8: AND 00000df9: DUP8 00000dfa: MSTORE 00000dfb: SWAP6 00000dfc: DUP3 00000dfd: ADD 00000dfe: SWAP6 00000dff: SWAP1 00000e00: DUP3 00000e01: ADD 00000e02: SWAP1 00000e03: PUSH1 0x01 00000e05: ADD 00000e06: PUSH2 0x0dde 00000e09: JUMP 00000e0a: JUMPDEST 00000e0b: POP 00000e0c: SWAP5 00000e0d: SWAP6 00000e0e: SWAP5 00000e0f: POP 00000e10: POP 00000e11: POP 00000e12: POP 00000e13: POP 00000e14: JUMP 00000e15: JUMPDEST 00000e16: DUP2 00000e17: DUP4 00000e18: MSTORE 00000e19: PUSH1 0x00 00000e1b: PUSH1 0x01 00000e1d: PUSH1 0x01 00000e1f: PUSH1 0xfb 00000e21: SHL 00000e22: SUB 00000e23: DUP4 00000e24: GT 00000e25: ISZERO 00000e26: PUSH2 0x0e2d 00000e29: JUMPI 00000e2a: DUP1 00000e2b: DUP2 00000e2c: REVERT 00000e2d: JUMPDEST 00000e2e: DUP3 00000e2f: PUSH1 0x05 00000e31: SHL 00000e32: DUP1 00000e33: DUP4 00000e34: PUSH1 0x20 00000e36: DUP8 00000e37: ADD 00000e38: CALLDATACOPY 00000e39: SWAP4 00000e3a: SWAP1 00000e3b: SWAP4 00000e3c: ADD 00000e3d: PUSH1 0x20 00000e3f: ADD 00000e40: SWAP3 00000e41: DUP4 00000e42: MSTORE 00000e43: POP 00000e44: SWAP1 00000e45: SWAP2 00000e46: SWAP1 00000e47: POP 00000e48: JUMP 00000e49: JUMPDEST 00000e4a: PUSH1 0x00 00000e4c: DUP2 00000e4d: MLOAD 00000e4e: DUP1 00000e4f: DUP5 00000e50: MSTORE 00000e51: PUSH2 0x0e61 00000e54: DUP2 00000e55: PUSH1 0x20 00000e57: DUP7 00000e58: ADD 00000e59: PUSH1 0x20 00000e5b: DUP7 00000e5c: ADD 00000e5d: PUSH2 0x1029 00000e60: JUMP 00000e61: JUMPDEST 00000e62: PUSH1 0x1f 00000e64: ADD 00000e65: PUSH1 0x1f 00000e67: NOT 00000e68: AND 00000e69: SWAP3 00000e6a: SWAP1 00000e6b: SWAP3 00000e6c: ADD 00000e6d: PUSH1 0x20 00000e6f: ADD 00000e70: SWAP3 00000e71: SWAP2 00000e72: POP 00000e73: POP 00000e74: JUMP 00000e75: JUMPDEST 00000e76: PUSH1 0x00 00000e78: DUP3 00000e79: MLOAD 00000e7a: PUSH2 0x0e87 00000e7d: DUP2 00000e7e: DUP5 00000e7f: PUSH1 0x20 00000e81: DUP8 00000e82: ADD 00000e83: PUSH2 0x1029 00000e86: JUMP 00000e87: JUMPDEST 00000e88: SWAP2 00000e89: SWAP1 00000e8a: SWAP2 00000e8b: ADD 00000e8c: SWAP3 00000e8d: SWAP2 00000e8e: POP 00000e8f: POP 00000e90: JUMP 00000e91: JUMPDEST 00000e92: PUSH1 0x40 00000e94: DUP2 00000e95: MSTORE 00000e96: PUSH1 0x00 00000e98: PUSH2 0x0ea4 00000e9b: PUSH1 0x40 00000e9d: DUP4 00000e9e: ADD 00000e9f: DUP6 00000ea0: PUSH2 0x0e49 00000ea3: JUMP 00000ea4: JUMPDEST 00000ea5: PUSH1 0x20 00000ea7: DUP4 00000ea8: DUP3 00000ea9: SUB 00000eaa: DUP2 00000eab: DUP6 00000eac: ADD 00000ead: MSTORE 00000eae: PUSH1 0xc0 00000eb0: DUP3 00000eb1: ADD 00000eb2: DUP6 00000eb3: CALLDATALOAD 00000eb4: DUP4 00000eb5: MSTORE 00000eb6: PUSH4 0xffffffff 00000ebb: PUSH2 0x0ec5 00000ebe: DUP4 00000ebf: DUP9 00000ec0: ADD 00000ec1: PUSH2 0x0ccb 00000ec4: JUMP 00000ec5: JUMPDEST 00000ec6: AND 00000ec7: DUP3 00000ec8: DUP5 00000ec9: ADD 00000eca: MSTORE 00000ecb: PUSH2 0x0ed7 00000ece: PUSH1 0x40 00000ed0: DUP8 00000ed1: ADD 00000ed2: DUP8 00000ed3: PUSH2 0x0fda 00000ed6: JUMP 00000ed7: JUMPDEST 00000ed8: PUSH1 0xc0 00000eda: PUSH1 0x40 00000edc: DUP7 00000edd: ADD 00000ede: MSTORE 00000edf: SWAP2 00000ee0: DUP3 00000ee1: SWAP1 00000ee2: MSTORE 00000ee3: SWAP1 00000ee4: DUP5 00000ee5: SWAP1 00000ee6: PUSH1 0xe0 00000ee8: DUP6 00000ee9: ADD 00000eea: JUMPDEST 00000eeb: DUP2 00000eec: DUP4 00000eed: LT 00000eee: ISZERO 00000eef: PUSH2 0x0f18 00000ef2: JUMPI 00000ef3: DUP4 00000ef4: CALLDATALOAD 00000ef5: PUSH1 0xff 00000ef7: DUP2 00000ef8: AND 00000ef9: DUP1 00000efa: DUP3 00000efb: EQ 00000efc: PUSH2 0x0f03 00000eff: JUMPI 00000f00: DUP9 00000f01: DUP10 00000f02: REVERT 00000f03: JUMPDEST 00000f04: DUP3 00000f05: MSTORE 00000f06: POP 00000f07: SWAP3 00000f08: DUP5 00000f09: ADD 00000f0a: SWAP3 00000f0b: PUSH1 0x01 00000f0d: SWAP3 00000f0e: SWAP1 00000f0f: SWAP3 00000f10: ADD 00000f11: SWAP2 00000f12: DUP5 00000f13: ADD 00000f14: PUSH2 0x0eea 00000f17: JUMP 00000f18: JUMPDEST 00000f19: PUSH2 0x0f25 00000f1c: PUSH1 0x60 00000f1e: DUP11 00000f1f: ADD 00000f20: DUP11 00000f21: PUSH2 0x0fda 00000f24: JUMP 00000f25: JUMPDEST 00000f26: SWAP6 00000f27: POP 00000f28: SWAP4 00000f29: POP 00000f2a: DUP6 00000f2b: DUP2 00000f2c: SUB 00000f2d: PUSH1 0x60 00000f2f: DUP8 00000f30: ADD 00000f31: MSTORE 00000f32: PUSH2 0x0f3c 00000f35: DUP2 00000f36: DUP7 00000f37: DUP7 00000f38: PUSH2 0x0e15 00000f3b: JUMP 00000f3c: JUMPDEST 00000f3d: SWAP5 00000f3e: POP 00000f3f: POP 00000f40: POP 00000f41: POP 00000f42: POP 00000f43: PUSH2 0x0f4f 00000f46: PUSH1 0x80 00000f48: DUP7 00000f49: ADD 00000f4a: DUP7 00000f4b: PUSH2 0x0fda 00000f4e: JUMP 00000f4f: JUMPDEST 00000f50: DUP4 00000f51: DUP4 00000f52: SUB 00000f53: PUSH1 0x80 00000f55: DUP6 00000f56: ADD 00000f57: MSTORE 00000f58: PUSH2 0x0f62 00000f5b: DUP4 00000f5c: DUP3 00000f5d: DUP5 00000f5e: PUSH2 0x0e15 00000f61: JUMP 00000f62: JUMPDEST 00000f63: SWAP3 00000f64: POP 00000f65: POP 00000f66: POP 00000f67: PUSH2 0x0f73 00000f6a: PUSH1 0xa0 00000f6c: DUP7 00000f6d: ADD 00000f6e: DUP7 00000f6f: PUSH2 0x0fda 00000f72: JUMP 00000f73: JUMPDEST 00000f74: DUP4 00000f75: DUP4 00000f76: SUB 00000f77: PUSH1 0xa0 00000f79: DUP6 00000f7a: ADD 00000f7b: MSTORE 00000f7c: PUSH2 0x0f86 00000f7f: DUP4 00000f80: DUP3 00000f81: DUP5 00000f82: PUSH2 0x0dcf 00000f85: JUMP 00000f86: JUMPDEST 00000f87: SWAP9 00000f88: SWAP8 00000f89: POP 00000f8a: POP 00000f8b: POP 00000f8c: POP 00000f8d: POP 00000f8e: POP 00000f8f: POP 00000f90: POP 00000f91: JUMP 00000f92: JUMPDEST 00000f93: PUSH1 0x20 00000f95: DUP2 00000f96: MSTORE 00000f97: PUSH1 0x00 00000f99: PUSH2 0x0b47 00000f9c: PUSH1 0x20 00000f9e: DUP4 00000f9f: ADD 00000fa0: DUP5 00000fa1: PUSH2 0x0e49 00000fa4: JUMP 00000fa5: JUMPDEST 00000fa6: PUSH1 0x20 00000fa8: DUP1 00000fa9: DUP3 00000faa: MSTORE 00000fab: DUP2 00000fac: DUP2 00000fad: ADD 00000fae: MSTORE 00000faf: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000fd0: PUSH1 0x40 00000fd2: DUP3 00000fd3: ADD 00000fd4: MSTORE 00000fd5: PUSH1 0x60 00000fd7: ADD 00000fd8: SWAP1 00000fd9: JUMP 00000fda: JUMPDEST 00000fdb: PUSH1 0x00 00000fdd: DUP1 00000fde: DUP4 00000fdf: CALLDATALOAD 00000fe0: PUSH1 0x1e 00000fe2: NOT 00000fe3: DUP5 00000fe4: CALLDATASIZE 00000fe5: SUB 00000fe6: ADD 00000fe7: DUP2 00000fe8: SLT 00000fe9: PUSH2 0x0ff0 00000fec: JUMPI 00000fed: DUP3 00000fee: DUP4 00000fef: REVERT 00000ff0: JUMPDEST 00000ff1: DUP4 00000ff2: ADD 00000ff3: PUSH1 0x20 00000ff5: DUP2 00000ff6: ADD 00000ff7: SWAP3 00000ff8: POP 00000ff9: CALLDATALOAD 00000ffa: SWAP1 00000ffb: POP 00000ffc: PUSH8 0xffffffffffffffff 00001005: DUP2 00001006: GT 00001007: ISZERO 00001008: PUSH2 0x1010 0000100b: JUMPI 0000100c: PUSH1 0x00 0000100e: DUP1 0000100f: REVERT 00001010: JUMPDEST 00001011: DUP1 00001012: PUSH1 0x05 00001014: SHL 00001015: CALLDATASIZE 00001016: SUB 00001017: DUP4 00001018: SGT 00001019: ISZERO 0000101a: PUSH2 0x1022 0000101d: JUMPI 0000101e: PUSH1 0x00 00001020: DUP1 00001021: REVERT 00001022: JUMPDEST 00001023: SWAP3 00001024: POP 00001025: SWAP3 00001026: SWAP1 00001027: POP 00001028: JUMP 00001029: JUMPDEST 0000102a: PUSH1 0x00 0000102c: JUMPDEST 0000102d: DUP4 0000102e: DUP2 0000102f: LT 00001030: ISZERO 00001031: PUSH2 0x1044 00001034: JUMPI 00001035: DUP2 00001036: DUP2 00001037: ADD 00001038: MLOAD 00001039: DUP4 0000103a: DUP3 0000103b: ADD 0000103c: MSTORE 0000103d: PUSH1 0x20 0000103f: ADD 00001040: PUSH2 0x102c 00001043: JUMP 00001044: JUMPDEST 00001045: DUP4 00001046: DUP2 00001047: GT 00001048: ISZERO 00001049: PUSH2 0x09d8 0000104c: JUMPI 0000104d: POP 0000104e: POP 0000104f: PUSH1 0x00 00001051: SWAP2 00001052: ADD 00001053: MSTORE 00001054: JUMP 00001055: INVALID 00001056: LOG2 00001057: PUSH5 0x6970667358 0000105d: UNKNOWN(0x22) 0000105e: SLT 0000105f: KECCAK256 00001060: LOG3 00001061: UNKNOWN(0xC2) 00001062: PUSH26 0x9ca7e53cbe1227c226f74bf528510c616a926e764995d5aa86c8 0000107d: PUSH6 0x36c264736f6c 00001084: PUSH4 0x43000804 00001089: STOP 0000108a: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | auth | codex | Signature threshold can round down to zero, allowing proofs with no signatures on small validator sets | 90 | no | — |
viewevidence_json{
"evidence": "`acceptanceTreshold` is computed using integer truncation and no minimum, and signatures are only counted when `r[i] != 0`, so when the threshold computes to 0, empty signatures satisfy `witnessCount >= acceptanceTreshold`.",
"locations": [
"contracts/contracts/CENNZnetBridge.sol:75",
"contracts/contracts/CENNZnetBridge.sol:81",
"contracts/contracts/CENNZnetBridge.sol:92",
"contracts/contracts/ERC20Peg.sol:62",
"contracts/contracts/ERC20Peg.sol:64"
],
"recommendation": "Compute the threshold using a ceiling (e.g., `(len * thresholdPercent + 99) / 100`) and enforce a minimum of 1; optionally disallow `thresholdPercent == 0`.",
"exploit_scenario": "1) If the active validator set size is 1 (or `thresholdPercent` is configured so `_validators.length * thresholdPercent / 100 == 0`), build a `CENNZnetEventProof` that uses the known validator address, an unused `eventId`, and `v/r/s` arrays of length 1 with `r[0]=0` to omit the signature. 2) Call `ERC20Peg.withdraw` for any `tokenType` and `amount`, sending the verification fee if required. 3) `verifyMessage` computes `acceptanceTreshold=0`, skips signature checks, marks the `eventId` used, and `ERC20Peg` transfers assets to you. Repeat with fresh `eventId`s to drain balances. Profit: up to the full ETH and ERC20 balances held by `ERC20Peg` (order of magnitude = contract TVL), plus any ETH fees in `CENNZnetBridge` if abusing `setValidators` rewards."
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x31d6de3bad2b6b862200aa417b34d72b7b3c3f5dcd95542442be8982d924c70d
call_targets:
0x76bac85e1e82cd677faa2b3f00c4a2626c4c6e32
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x31d6de3bad2b6b862200aa417b34d72b7b3c3f5dcd95542442be8982d924c70d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x76bac85e1e82cd677faa2b3f00c4a2626c4c6e32"
],
"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": "0xc8c76243",
"selector": "0xc8c76243",
"calldata_variants": [
"0xc8c76243",
"0xc8c762430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe5703512",
"selector": "0xe5703512",
"calldata_variants": [
"0xe5703512",
"0xe57035120000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe78cea92",
"selector": "0xe78cea92",
"calldata_variants": [
"0xe78cea92",
"0xe78cea920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf275c0ce",
"selector": "0xf275c0ce",
"calldata_variants": [
"0xf275c0ce",
"0xf275c0ce0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7e771dc0",
"selector": "0x7e771dc0",
"calldata_variants": [
"0x7e771dc0",
"0x7e771dc00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8324e6d7",
"selector": "0x8324e6d7",
"calldata_variants": [
"0x8324e6d7",
"0x8324e6d70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1785,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1850,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3110,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x31d6de3bad2b6b862200aa417b34d72b7b3c3f5dcd95542442be8982d924c70d
call_targets:
0x76bac85e1e82cd677faa2b3f00c4a2626c4c6e32
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x31d6de3bad2b6b862200aa417b34d72b7b3c3f5dcd95542442be8982d924c70d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x76bac85e1e82cd677faa2b3f00c4a2626c4c6e32"
],
"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": "0xc8c76243",
"selector": "0xc8c76243",
"calldata_variants": [
"0xc8c76243",
"0xc8c762430000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe5703512",
"selector": "0xe5703512",
"calldata_variants": [
"0xe5703512",
"0xe57035120000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe78cea92",
"selector": "0xe78cea92",
"calldata_variants": [
"0xe78cea92",
"0xe78cea920000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf275c0ce",
"selector": "0xf275c0ce",
"calldata_variants": [
"0xf275c0ce",
"0xf275c0ce0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7e771dc0",
"selector": "0x7e771dc0",
"calldata_variants": [
"0x7e771dc0",
"0x7e771dc00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8324e6d7",
"selector": "0x8324e6d7",
"calldata_variants": [
"0x8324e6d7",
"0x8324e6d70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1785,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1850,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3110,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|