019be3d6-84db-708f-a189-cf52464f8961
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 |
|---|---|---|---|---|
| 41128 | artifact.fetch | complete | 1 / 3 | 2 months ago |
| 41129 | proxy.resolve | complete | 1 / 3 | 2 months ago |
| 41130 | tool.cast_disasm | complete | 1 / 3 | 2 months ago |
| 41131 | analysis.bundle | complete | 1 / 3 | 2 months ago |
| 41132 | capability.graph | complete | 1 / 3 | 2 months ago |
| 41133 | detector.run | complete | 1 / 3 | 2 months ago |
| 41134 | validation.fork | complete | 1 / 3 | 2 months ago |
| 41437 | report.consolidate | complete | 1 / 6 | 2 months ago |
| 41438 | tool.slither | complete | 1 / 2 | 2 months ago |
{
"status": "not_proxy"
}
'forge clean' running (wd: /tmp/slither-2i60cq9j) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-2i60cq9j) Reentrancy in Wallet.confirm(bytes32) (contracts/Contract.sol#301-308): External calls: - x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306) State variables written after the call(s): - delete m_txs[_h] (contracts/Contract.sol#307) Wallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies: - Wallet.clearPending() (contracts/Contract.sol#309-312) - Wallet.confirm(bytes32) (contracts/Contract.sol#301-308) - Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296) Reentrancy in Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296): External calls: - ! confirm(_r) && m_txs[_r].to == 0 (contracts/Contract.sol#293-294) - x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306) State variables written after the call(s): - m_txs[_r].to = _to (contracts/Contract.sol#294) Wallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies: - Wallet.clearPending() (contracts/Contract.sol#309-312) - Wallet.confirm(bytes32) (contracts/Contract.sol#301-308) - Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296) - m_txs[_r].value = _value (contracts/Contract.sol#294-295) Wallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies: - Wallet.clearPending() (contracts/Contract.sol#309-312) - Wallet.confirm(bytes32) (contracts/Contract.sol#301-308) - Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296) - m_txs[_r].data = _data (contracts/Contract.sol#295) Wallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies: - Wallet.clearPending() (contracts/Contract.sol#309-312) - Wallet.confirm(bytes32) (contracts/Contract.sol#301-308) - Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities Modifier multiowned.onlyowner() (contracts/Contract.sol#41-43) does not always execute _; or revert Modifier multiowned.onlymanyowners(bytes32) (contracts/Contract.sol#48-51) does not always execute _; or revert Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier Reentrancy in Wallet.confirm(bytes32) (contracts/Contract.sol#301-308): External calls: - x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306) Event emitted after the call(s): - MultiTransact(msg.sender,_h,m_txs[_h].value,m_txs[_h].to,m_txs[_h].data) (contracts/Contract.sol#306-307) Reentrancy in Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296): External calls: - ! confirm(_r) && m_txs[_r].to == 0 (contracts/Contract.sol#293-294) - x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306) Event emitted after the call(s): - ConfirmationNeeded(_r,msg.sender,_value,_to,_data) (contracts/Contract.sol#295-296) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3 Deprecated standard detected onlymanyowners(sha3()(msg.data)) (contracts/Contract.sol#84): - Usage of "sha3()" should be replaced with "keccak256()" Deprecated standard detected onlymanyowners(sha3()(msg.data)) (contracts/Contract.sol#93-94): - Usage of "sha3()" should be replaced with "keccak256()" Deprecated standard detected onlymanyowners(sha3()(msg.data)) (contracts/Contract.sol#107-108): - Usage of "sha3()" should be replaced with "keccak256()" Deprecated standard detected onlymanyowners(sha3()(msg.data)) (contracts/Contract.sol#119-120): - Usage of "sha3()" should be replaced with "keccak256()" Deprecated standard detected _r = sha3()(msg.data,block.number) (contracts/Contract.sol#293): - Usage of "sha3()" should be replaced with "keccak256()" Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#deprecated-standards Version constraint ^0.4.15 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - DirtyBytesArrayToStorage - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - ImplicitConstructorCallvalueCheck - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow - privateCanBeOverridden - SignedArrayStorageCopy - UninitializedFunctionPointerInConstructor_0.4.x - IncorrectEventSignatureInLibraries_0.4.x - ExpExponentCleanup - NestedArrayFunctionCallDecoder - ZeroFunctionSelector. It is used by: - ^0.4.15 (contracts/Contract.sol#12-14) solc-0.4.15 is an outdated solc version. Use a more recent version (at least 0.8.0), if possible. Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity Low level call in Wallet.confirm(bytes32) (contracts/Contract.sol#301-308): - x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306) Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls Contract multiowned (contracts/Contract.sol#14-227) is not in CapWords Parameter multiowned.revoke(bytes32)._operation (contracts/Contract.sol#70) is not in mixedCase Parameter multiowned.changeOwner(address,address)._from (contracts/Contract.sol#83-84) is not in mixedCase Parameter multiowned.changeOwner(address,address)._to (contracts/Contract.sol#84) is not in mixedCase Parameter multiowned.addOwner(address)._owner (contracts/Contract.sol#93) is not in mixedCase Parameter multiowned.removeOwner(address)._owner (contracts/Contract.sol#107) is not in mixedCase Parameter multiowned.changeRequirement(uint256)._newRequired (contracts/Contract.sol#119) is not in mixedCase Parameter multiowned.isOwner(address)._addr (contracts/Contract.sol#132) is not in mixedCase Parameter multiowned.hasConfirmed(bytes32,address)._operation (contracts/Contract.sol#136) is not in mixedCase Parameter multiowned.hasConfirmed(bytes32,address)._owner (contracts/Contract.sol#136) is not in mixedCase Parameter multiowned.confirmAndCheck(bytes32)._operation (contracts/Contract.sol#148) is not in mixedCase Variable multiowned.m_required (contracts/Contract.sol#213-214) is not in mixedCase Variable multiowned.m_numOwners (contracts/Contract.sol#215-216) is not in mixedCase Variable multiowned.m_owners (contracts/Contract.sol#220) is not in mixedCase Constant multiowned.c_maxOwners (contracts/Contract.sol#220) is not in UPPER_CASE_WITH_UNDERSCORES Variable multiowned.m_ownerIndex (contracts/Contract.sol#222) is not in mixedCase Variable multiowned.m_pending (contracts/Contract.sol#223-226) is not in mixedCase Variable multiowned.m_pendingIndex (contracts/Contract.sol#226-227) is not in mixedCase Contract multisig (contracts/Contract.sol#228-251) is not in CapWords Parameter Wallet.execute(address,uint256,bytes)._to (contracts/Contract.sol#292) is not in mixedCase Parameter Wallet.execute(address,uint256,bytes)._value (contracts/Contract.sol#292) is not in mixedCase Parameter Wallet.execute(address,uint256,bytes)._data (contracts/Contract.sol#292) is not in mixedCase Parameter Wallet.confirm(bytes32)._h (contracts/Contract.sol#301) is not in mixedCase Variable Wallet.m_txs (contracts/Contract.sol#314-317) is not in mixedCase Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions . analyzed (3 contracts with 100 detectors), 38 result(s) found
{
"solc": {
"status": "ok",
"use_rc": 0,
"version": "0.4.15",
"strategy": "solc-select",
"solc_path": "/var/www/tripwire/.venv/bin/solc",
"install_rc": 0,
"use_stderr": null,
"use_stdout": "Switched global version to 0.4.15",
"install_stderr": null,
"install_stdout": "Version '0.4.15' is already installed, skipping..."
},
"solc_args": "--base-path /tmp/slither-2i60cq9j --allow-paths /tmp/slither-2i60cq9j,/tmp/slither-2i60cq9j/lib,/tmp/slither-2i60cq9j/src",
"remappings": [],
"source_files": [
"contracts/Contract.sol"
],
"contract_count": 0,
"contract_names": [],
"detector_count": 38,
"workspace_hash": "74f5f9647a3dba3ef3e1f787c5c6047f5c93e435690ec68cea1c6b092f463e85",
"duration_seconds": 0.950169563293457,
"solc_version_requested": "0.4.15"
}
{"no_findings":false,"summary":"One low-severity issue: the wallet ignores the success/failure of low-level calls and deletes the queued transaction regardless, which can silently drop failed executions.","findings":[{"severity":"low","category":"other","title":"Unchecked low-level call result drops failed transaction","exploit_scenario":"If a queued transaction’s target contract reverts (or runs out of gas), `confirm` still emits `MultiTransact` and deletes the transaction. Owners may believe the transfer/execution succeeded even though no external effect occurred, and the failed operation cannot be retried without re-creating it.","recommendation":"Check the return value of the low-level call and only delete the transaction (and emit success) on success. Otherwise keep the tx pending or emit a failure event and return false. Example: `bool ok = m_txs[_h].to.call.value(...)(...); if (!ok) return false;`.","evidence":"`confirm` performs a low-level call, ignores its return value, emits success, and deletes the transaction unconditionally.","locations":["contracts/Contract.sol:308","contracts/Contract.sol:310","contracts/Contract.sol:311","contracts/Contract.sol:312"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-0dxlgf3e
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019be499-90a7-7db3-9514-32811136c273
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Reading audit bundle content**
exec
/bin/bash -lc ls in /tmp/codex-0dxlgf3e succeeded in 5ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-0dxlgf3e succeeded in 19ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Contract.sol
================================================================================
//sol Wallet
// Multi-sig account proxy/wallet.
// @authors:
// Gav Wood <g@ethdev.com>
// inheritable "property" contract that enables methods to be protected by requiring the acquiescence of either a
// single, or, crucially, each of a number of, designated owners.
// usage:
// use modifiers onlyowner (just own owned) or onlymanyowners(hash), whereby the same hash must be provided by
// some number (specified in constructor) of the set of owners (specified in the constructor, modifiable) before the
// interior is executed.
//
// Token/no-daylimit modifications: Dmitry Khovratovich <khovratovich@gmail.com> based on https://github.com/ethereum/dapp-bin/blob/dd5c485359074d49f571693ae064ce78970f3d6d/wallet/wallet.sol
pragma solidity ^0.4.15;
thinking
**Analyzing reentrancy and ownership checks**
The contract lacks revert in onlyowner modifier, causing silent failures but not direct exploits. The external call with call.value occurs before deleting pending transactions, creating potential reentrancy if an owner is a contract that calls back into confirm before state clears. I'll continue assessing if the pending state properly prevents reentrant confirms.
thinking
**Identifying serious reentrancy risk with single-owner multisig**
External call occurs before deleting the transaction, allowing an owner who is also a contract to reenter confirm with the same operation hash and repeatedly execute the transaction if m_required equals 1. This enables multiple withdrawals of the same funds, posing a critical reentrancy vulnerability in single-owner setups.
thinking
**Confirming reentrancy limited to single-owner setups**
Reentrancy doesn’t lead to repeated executions when required confirmations exceed one, since repeated confirms need multiple owners. The unchecked external call return is low risk but can cause lost action attempts. Operator precedence issues are not actual bugs after verifying Solidity’s precedence rules. Duplicate owners and block.number in operation hashes pose misconfiguration or minor quirks rather than direct vulnerabilities.
thinking
**Flagging unchecked call result as low severity**
The external low-level call in confirm ignores its success result and deletes the transaction regardless, which can cause silent failures and stuck transactions; this is a correctness issue worth noting though it doesn't enable direct exploits.
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '180,260p'" in /tmp/codex-0dxlgf3e succeeded in 16ms:
180 if (pending.yetNeeded <= 1) {
181 // enough confirmations: reset and run interior.
182 delete m_pendingIndex[m_pending[_operation].index];
183 delete m_pending[_operation];
184 return true;
185 }
186 else
187 {
188 // not enough: record that this owner in particular confirmed.
189 pending.yetNeeded--;
190 pending.ownersDone |= ownerIndexBit;
191 }
192 }
193 }
194
195 function reorganizeOwners() private {
196 uint free = 1;
197 while (free < m_numOwners)
198 {
199 while (free < m_numOwners && m_owners[free] != 0) free++;
exec
/bin/bash -lc "nl -ba contracts/Contract.sol | sed -n '300,420p'" in /tmp/codex-0dxlgf3e succeeded in 7ms:
300 m_txs[_r].value = _value;
301 m_txs[_r].data = _data;
302 ConfirmationNeeded(_r, msg.sender, _value, _to, _data);
303 }
304 }
305
306 // confirm a transaction through just the hash. we use the previous transactions map, m_txs, in order
307 // to determine the body of the transaction from the hash provided.
308 function confirm(bytes32 _h) onlymanyowners(_h) returns (bool) {
309 if (m_txs[_h].to != 0) {
310 var x= m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data);
311 MultiTransact(msg.sender, _h, m_txs[_h].value, m_txs[_h].to, m_txs[_h].data);
312 delete m_txs[_h];
313 return true;
314 }
315 }
316
317 // INTERNAL METHODS
318
319 function clearPending() internal {
thinking
**Assessing unchecked call return**
The external call forwards all gas enabling potential reentrancy, but due to owner checks and multisig requirements, reentrancy isn't exploitable here. The unchecked return value poses no direct exploit risk but may cause inconsistent off-chain records, so it’s flagged as a low-severity finding per the audit scope.
thinking
**Drafting exploit scenario and recommendation**
The exploit involves a reverted call causing the wallet to emit success events and delete transactions, misleading owners and preventing retries, potentially locking funds until a new transaction is created. The recommendation is to check call return values, revert or keep transactions pending on failure, and emit failure events, with details and suggestions for Solidity 0.4.15 usage.
codex
{"no_findings":false,"summary":"One low-severity issue: the wallet ignores the success/failure of low-level calls and deletes the queued transaction regardless, which can silently drop failed executions.","findings":[{"severity":"low","category":"other","title":"Unchecked low-level call result drops failed transaction","exploit_scenario":"If a queued transaction’s target contract reverts (or runs out of gas), `confirm` still emits `MultiTransact` and deletes the transaction. Owners may believe the transfer/execution succeeded even though no external effect occurred, and the failed operation cannot be retried without re-creating it.","recommendation":"Check the return value of the low-level call and only delete the transaction (and emit success) on success. Otherwise keep the tx pending or emit a failure event and return false. Example: `bool ok = m_txs[_h].to.call.value(...)(...); if (!ok) return false;`.","evidence":"`confirm` performs a low-level call, ignores its return value, emits success, and deletes the transaction unconditionally.","locations":["contracts/Contract.sol:308","contracts/Contract.sol:310","contracts/Contract.sol:311","contracts/Contract.sol:312"]}]}
tokens used
17,070
{
"codex": {
"ran_at": "2026-01-22T07:31:31.295075+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "One low-severity issue: the wallet ignores the success/failure of low-level calls and deletes the queued transaction regardless, which can silently drop failed executions.",
"raw_final": {
"summary": "One low-severity issue: the wallet ignores the success/failure of low-level calls and deletes the queued transaction regardless, which can silently drop failed executions.",
"findings": [
{
"title": "Unchecked low-level call result drops failed transaction",
"category": "other",
"evidence": "`confirm` performs a low-level call, ignores its return value, emits success, and deletes the transaction unconditionally.",
"severity": "low",
"locations": [
"contracts/Contract.sol:308",
"contracts/Contract.sol:310",
"contracts/Contract.sol:311",
"contracts/Contract.sol:312"
],
"recommendation": "Check the return value of the low-level call and only delete the transaction (and emit success) on success. Otherwise keep the tx pending or emit a failure event and return false. Example: `bool ok = m_txs[_h].to.call.value(...)(...); if (!ok) return false;`.",
"exploit_scenario": "If a queued transaction\u2019s target contract reverts (or runs out of gas), `confirm` still emits `MultiTransact` and deletes the transaction. Owners may believe the transfer/execution succeeded even though no external effect occurred, and the failed operation cannot be retried without re-creating it."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00b7 0000000a: JUMPI 0000000b: PUSH4 0xffffffff 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002e: PUSH1 0x00 00000030: CALLDATALOAD 00000031: DIV 00000032: AND 00000033: PUSH4 0x173825d9 00000038: DUP2 00000039: EQ 0000003a: PUSH2 0x0109 0000003d: JUMPI 0000003e: DUP1 0000003f: PUSH4 0x2f54bf6e 00000044: EQ 00000045: PUSH2 0x012a 00000048: JUMPI 00000049: DUP1 0000004a: PUSH4 0x4123cb6b 0000004f: EQ 00000050: PUSH2 0x015d 00000053: JUMPI 00000054: DUP1 00000055: PUSH4 0x7065cb48 0000005a: EQ 0000005b: PUSH2 0x0182 0000005e: JUMPI 0000005f: DUP1 00000060: PUSH4 0x746c9171 00000065: EQ 00000066: PUSH2 0x01a3 00000069: JUMPI 0000006a: DUP1 0000006b: PUSH4 0x797af627 00000070: EQ 00000071: PUSH2 0x01c8 00000074: JUMPI 00000075: DUP1 00000076: PUSH4 0xb61d27f6 0000007b: EQ 0000007c: PUSH2 0x01f2 0000007f: JUMPI 00000080: DUP1 00000081: PUSH4 0xb75c7dc6 00000086: EQ 00000087: PUSH2 0x0233 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0xba51a6df 00000091: EQ 00000092: PUSH2 0x024b 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xc2cf7326 0000009c: EQ 0000009d: PUSH2 0x0263 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xc41a360a 000000a7: EQ 000000a8: PUSH2 0x0299 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xf00d4b5d 000000b2: EQ 000000b3: PUSH2 0x02cb 000000b6: JUMPI 000000b7: JUMPDEST 000000b8: JUMPDEST 000000b9: PUSH1 0x00 000000bb: CALLVALUE 000000bc: GT 000000bd: ISZERO 000000be: PUSH2 0x0106 000000c1: JUMPI 000000c2: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c 000000e3: CALLER 000000e4: CALLVALUE 000000e5: PUSH1 0x40 000000e7: MLOAD 000000e8: PUSH1 0x01 000000ea: PUSH1 0xa0 000000ec: PUSH1 0x02 000000ee: EXP 000000ef: SUB 000000f0: SWAP1 000000f1: SWAP3 000000f2: AND 000000f3: DUP3 000000f4: MSTORE 000000f5: PUSH1 0x20 000000f7: DUP3 000000f8: ADD 000000f9: MSTORE 000000fa: PUSH1 0x40 000000fc: SWAP1 000000fd: DUP2 000000fe: ADD 000000ff: SWAP1 00000100: MLOAD 00000101: DUP1 00000102: SWAP2 00000103: SUB 00000104: SWAP1 00000105: LOG1 00000106: JUMPDEST 00000107: JUMPDEST 00000108: STOP 00000109: JUMPDEST 0000010a: CALLVALUE 0000010b: ISZERO 0000010c: PUSH2 0x0114 0000010f: JUMPI 00000110: PUSH1 0x00 00000112: DUP1 00000113: REVERT 00000114: JUMPDEST 00000115: PUSH2 0x0106 00000118: PUSH1 0x01 0000011a: PUSH1 0xa0 0000011c: PUSH1 0x02 0000011e: EXP 0000011f: SUB 00000120: PUSH1 0x04 00000122: CALLDATALOAD 00000123: AND 00000124: PUSH2 0x02f2 00000127: JUMP 00000128: JUMPDEST 00000129: STOP 0000012a: JUMPDEST 0000012b: CALLVALUE 0000012c: ISZERO 0000012d: PUSH2 0x0135 00000130: JUMPI 00000131: PUSH1 0x00 00000133: DUP1 00000134: REVERT 00000135: JUMPDEST 00000136: PUSH2 0x0149 00000139: PUSH1 0x01 0000013b: PUSH1 0xa0 0000013d: PUSH1 0x02 0000013f: EXP 00000140: SUB 00000141: PUSH1 0x04 00000143: CALLDATALOAD 00000144: AND 00000145: PUSH2 0x03df 00000148: JUMP 00000149: JUMPDEST 0000014a: PUSH1 0x40 0000014c: MLOAD 0000014d: SWAP1 0000014e: ISZERO 0000014f: ISZERO 00000150: DUP2 00000151: MSTORE 00000152: PUSH1 0x20 00000154: ADD 00000155: PUSH1 0x40 00000157: MLOAD 00000158: DUP1 00000159: SWAP2 0000015a: SUB 0000015b: SWAP1 0000015c: RETURN 0000015d: JUMPDEST 0000015e: CALLVALUE 0000015f: ISZERO 00000160: PUSH2 0x0168 00000163: JUMPI 00000164: PUSH1 0x00 00000166: DUP1 00000167: REVERT 00000168: JUMPDEST 00000169: PUSH2 0x0170 0000016c: PUSH2 0x0400 0000016f: JUMP 00000170: JUMPDEST 00000171: PUSH1 0x40 00000173: MLOAD 00000174: SWAP1 00000175: DUP2 00000176: MSTORE 00000177: PUSH1 0x20 00000179: ADD 0000017a: PUSH1 0x40 0000017c: MLOAD 0000017d: DUP1 0000017e: SWAP2 0000017f: SUB 00000180: SWAP1 00000181: RETURN 00000182: JUMPDEST 00000183: CALLVALUE 00000184: ISZERO 00000185: PUSH2 0x018d 00000188: JUMPI 00000189: PUSH1 0x00 0000018b: DUP1 0000018c: REVERT 0000018d: JUMPDEST 0000018e: PUSH2 0x0106 00000191: PUSH1 0x01 00000193: PUSH1 0xa0 00000195: PUSH1 0x02 00000197: EXP 00000198: SUB 00000199: PUSH1 0x04 0000019b: CALLDATALOAD 0000019c: AND 0000019d: PUSH2 0x0406 000001a0: JUMP 000001a1: JUMPDEST 000001a2: STOP 000001a3: JUMPDEST 000001a4: CALLVALUE 000001a5: ISZERO 000001a6: PUSH2 0x01ae 000001a9: JUMPI 000001aa: PUSH1 0x00 000001ac: DUP1 000001ad: REVERT 000001ae: JUMPDEST 000001af: PUSH2 0x0170 000001b2: PUSH2 0x0500 000001b5: JUMP 000001b6: JUMPDEST 000001b7: PUSH1 0x40 000001b9: MLOAD 000001ba: SWAP1 000001bb: DUP2 000001bc: MSTORE 000001bd: PUSH1 0x20 000001bf: ADD 000001c0: PUSH1 0x40 000001c2: MLOAD 000001c3: DUP1 000001c4: SWAP2 000001c5: SUB 000001c6: SWAP1 000001c7: RETURN 000001c8: JUMPDEST 000001c9: CALLVALUE 000001ca: ISZERO 000001cb: PUSH2 0x01d3 000001ce: JUMPI 000001cf: PUSH1 0x00 000001d1: DUP1 000001d2: REVERT 000001d3: JUMPDEST 000001d4: PUSH2 0x0149 000001d7: PUSH1 0x04 000001d9: CALLDATALOAD 000001da: PUSH2 0x0506 000001dd: JUMP 000001de: JUMPDEST 000001df: PUSH1 0x40 000001e1: MLOAD 000001e2: SWAP1 000001e3: ISZERO 000001e4: ISZERO 000001e5: DUP2 000001e6: MSTORE 000001e7: PUSH1 0x20 000001e9: ADD 000001ea: PUSH1 0x40 000001ec: MLOAD 000001ed: DUP1 000001ee: SWAP2 000001ef: SUB 000001f0: SWAP1 000001f1: RETURN 000001f2: JUMPDEST 000001f3: CALLVALUE 000001f4: ISZERO 000001f5: PUSH2 0x01fd 000001f8: JUMPI 000001f9: PUSH1 0x00 000001fb: DUP1 000001fc: REVERT 000001fd: JUMPDEST 000001fe: PUSH2 0x0170 00000201: PUSH1 0x04 00000203: DUP1 00000204: CALLDATALOAD 00000205: PUSH1 0x01 00000207: PUSH1 0xa0 00000209: PUSH1 0x02 0000020b: EXP 0000020c: SUB 0000020d: AND 0000020e: SWAP1 0000020f: PUSH1 0x24 00000211: DUP1 00000212: CALLDATALOAD 00000213: SWAP2 00000214: PUSH1 0x44 00000216: CALLDATALOAD 00000217: SWAP2 00000218: DUP3 00000219: ADD 0000021a: SWAP2 0000021b: ADD 0000021c: CALLDATALOAD 0000021d: PUSH2 0x072c 00000220: JUMP 00000221: JUMPDEST 00000222: PUSH1 0x40 00000224: MLOAD 00000225: SWAP1 00000226: DUP2 00000227: MSTORE 00000228: PUSH1 0x20 0000022a: ADD 0000022b: PUSH1 0x40 0000022d: MLOAD 0000022e: DUP1 0000022f: SWAP2 00000230: SUB 00000231: SWAP1 00000232: RETURN 00000233: JUMPDEST 00000234: CALLVALUE 00000235: ISZERO 00000236: PUSH2 0x023e 00000239: JUMPI 0000023a: PUSH1 0x00 0000023c: DUP1 0000023d: REVERT 0000023e: JUMPDEST 0000023f: PUSH2 0x0106 00000242: PUSH1 0x04 00000244: CALLDATALOAD 00000245: PUSH2 0x0865 00000248: JUMP 00000249: JUMPDEST 0000024a: STOP 0000024b: JUMPDEST 0000024c: CALLVALUE 0000024d: ISZERO 0000024e: PUSH2 0x0256 00000251: JUMPI 00000252: PUSH1 0x00 00000254: DUP1 00000255: REVERT 00000256: JUMPDEST 00000257: PUSH2 0x0106 0000025a: PUSH1 0x04 0000025c: CALLDATALOAD 0000025d: PUSH2 0x0910 00000260: JUMP 00000261: JUMPDEST 00000262: STOP 00000263: JUMPDEST 00000264: CALLVALUE 00000265: ISZERO 00000266: PUSH2 0x026e 00000269: JUMPI 0000026a: PUSH1 0x00 0000026c: DUP1 0000026d: REVERT 0000026e: JUMPDEST 0000026f: PUSH2 0x0149 00000272: PUSH1 0x04 00000274: CALLDATALOAD 00000275: PUSH1 0x01 00000277: PUSH1 0xa0 00000279: PUSH1 0x02 0000027b: EXP 0000027c: SUB 0000027d: PUSH1 0x24 0000027f: CALLDATALOAD 00000280: AND 00000281: PUSH2 0x0992 00000284: JUMP 00000285: JUMPDEST 00000286: PUSH1 0x40 00000288: MLOAD 00000289: SWAP1 0000028a: ISZERO 0000028b: ISZERO 0000028c: DUP2 0000028d: MSTORE 0000028e: PUSH1 0x20 00000290: ADD 00000291: PUSH1 0x40 00000293: MLOAD 00000294: DUP1 00000295: SWAP2 00000296: SUB 00000297: SWAP1 00000298: RETURN 00000299: JUMPDEST 0000029a: CALLVALUE 0000029b: ISZERO 0000029c: PUSH2 0x02a4 0000029f: JUMPI 000002a0: PUSH1 0x00 000002a2: DUP1 000002a3: REVERT 000002a4: JUMPDEST 000002a5: PUSH2 0x02af 000002a8: PUSH1 0x04 000002aa: CALLDATALOAD 000002ab: PUSH2 0x09e7 000002ae: JUMP 000002af: JUMPDEST 000002b0: PUSH1 0x40 000002b2: MLOAD 000002b3: PUSH1 0x01 000002b5: PUSH1 0xa0 000002b7: PUSH1 0x02 000002b9: EXP 000002ba: SUB 000002bb: SWAP1 000002bc: SWAP2 000002bd: AND 000002be: DUP2 000002bf: MSTORE 000002c0: PUSH1 0x20 000002c2: ADD 000002c3: PUSH1 0x40 000002c5: MLOAD 000002c6: DUP1 000002c7: SWAP2 000002c8: SUB 000002c9: SWAP1 000002ca: RETURN 000002cb: JUMPDEST 000002cc: CALLVALUE 000002cd: ISZERO 000002ce: PUSH2 0x02d6 000002d1: JUMPI 000002d2: PUSH1 0x00 000002d4: DUP1 000002d5: REVERT 000002d6: JUMPDEST 000002d7: PUSH2 0x0106 000002da: PUSH1 0x01 000002dc: PUSH1 0xa0 000002de: PUSH1 0x02 000002e0: EXP 000002e1: SUB 000002e2: PUSH1 0x04 000002e4: CALLDATALOAD 000002e5: DUP2 000002e6: AND 000002e7: SWAP1 000002e8: PUSH1 0x24 000002ea: CALLDATALOAD 000002eb: AND 000002ec: PUSH2 0x0a08 000002ef: JUMP 000002f0: JUMPDEST 000002f1: STOP 000002f2: JUMPDEST 000002f3: PUSH1 0x00 000002f5: DUP1 000002f6: CALLDATASIZE 000002f7: PUSH1 0x40 000002f9: MLOAD 000002fa: DUP1 000002fb: DUP4 000002fc: DUP4 000002fd: DUP1 000002fe: DUP3 000002ff: DUP5 00000300: CALLDATACOPY 00000301: DUP3 00000302: ADD 00000303: SWAP2 00000304: POP 00000305: POP 00000306: SWAP3 00000307: POP 00000308: POP 00000309: POP 0000030a: PUSH1 0x40 0000030c: MLOAD 0000030d: DUP1 0000030e: SWAP2 0000030f: SUB 00000310: SWAP1 00000311: KECCAK256 00000312: PUSH2 0x031a 00000315: DUP2 00000316: PUSH2 0x0b0f 00000319: JUMP 0000031a: JUMPDEST 0000031b: ISZERO 0000031c: PUSH2 0x03d8 0000031f: JUMPI 00000320: PUSH1 0x01 00000322: PUSH1 0xa0 00000324: PUSH1 0x02 00000326: EXP 00000327: SUB 00000328: DUP4 00000329: AND 0000032a: PUSH1 0x00 0000032c: SWAP1 0000032d: DUP2 0000032e: MSTORE 0000032f: PUSH2 0x0102 00000332: PUSH1 0x20 00000334: MSTORE 00000335: PUSH1 0x40 00000337: SWAP1 00000338: KECCAK256 00000339: SLOAD 0000033a: SWAP2 0000033b: POP 0000033c: DUP2 0000033d: ISZERO 0000033e: ISZERO 0000033f: PUSH2 0x0347 00000342: JUMPI 00000343: PUSH2 0x03d8 00000346: JUMP 00000347: JUMPDEST 00000348: PUSH1 0x01 0000034a: DUP1 0000034b: SLOAD 0000034c: SUB 0000034d: PUSH1 0x00 0000034f: SLOAD 00000350: GT 00000351: ISZERO 00000352: PUSH2 0x035a 00000355: JUMPI 00000356: PUSH2 0x03d8 00000359: JUMP 0000035a: JUMPDEST 0000035b: PUSH1 0x00 0000035d: PUSH1 0x02 0000035f: DUP4 00000360: PUSH2 0x0100 00000363: DUP2 00000364: LT 00000365: PUSH2 0x036a 00000368: JUMPI 00000369: INVALID 0000036a: JUMPDEST 0000036b: ADD 0000036c: PUSH1 0x00 0000036e: JUMPDEST 0000036f: POP 00000370: SSTORE 00000371: PUSH1 0x01 00000373: PUSH1 0xa0 00000375: PUSH1 0x02 00000377: EXP 00000378: SUB 00000379: DUP4 0000037a: AND 0000037b: PUSH1 0x00 0000037d: SWAP1 0000037e: DUP2 0000037f: MSTORE 00000380: PUSH2 0x0102 00000383: PUSH1 0x20 00000385: MSTORE 00000386: PUSH1 0x40 00000388: DUP2 00000389: KECCAK256 0000038a: SSTORE 0000038b: PUSH2 0x0392 0000038e: PUSH2 0x0c7a 00000391: JUMP 00000392: JUMPDEST 00000393: PUSH2 0x039a 00000396: PUSH2 0x0d08 00000399: JUMP 0000039a: JUMPDEST 0000039b: PUSH32 0x58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da 000003bc: DUP4 000003bd: PUSH1 0x40 000003bf: MLOAD 000003c0: PUSH1 0x01 000003c2: PUSH1 0xa0 000003c4: PUSH1 0x02 000003c6: EXP 000003c7: SUB 000003c8: SWAP1 000003c9: SWAP2 000003ca: AND 000003cb: DUP2 000003cc: MSTORE 000003cd: PUSH1 0x20 000003cf: ADD 000003d0: PUSH1 0x40 000003d2: MLOAD 000003d3: DUP1 000003d4: SWAP2 000003d5: SUB 000003d6: SWAP1 000003d7: LOG1 000003d8: JUMPDEST 000003d9: JUMPDEST 000003da: JUMPDEST 000003db: POP 000003dc: POP 000003dd: POP 000003de: JUMP 000003df: JUMPDEST 000003e0: PUSH1 0x01 000003e2: PUSH1 0xa0 000003e4: PUSH1 0x02 000003e6: EXP 000003e7: SUB 000003e8: DUP2 000003e9: AND 000003ea: PUSH1 0x00 000003ec: SWAP1 000003ed: DUP2 000003ee: MSTORE 000003ef: PUSH2 0x0102 000003f2: PUSH1 0x20 000003f4: MSTORE 000003f5: PUSH1 0x40 000003f7: DUP2 000003f8: KECCAK256 000003f9: SLOAD 000003fa: GT 000003fb: JUMPDEST 000003fc: SWAP2 000003fd: SWAP1 000003fe: POP 000003ff: JUMP 00000400: JUMPDEST 00000401: PUSH1 0x01 00000403: SLOAD 00000404: DUP2 00000405: JUMP 00000406: JUMPDEST 00000407: PUSH1 0x00 00000409: CALLDATASIZE 0000040a: PUSH1 0x40 0000040c: MLOAD 0000040d: DUP1 0000040e: DUP4 0000040f: DUP4 00000410: DUP1 00000411: DUP3 00000412: DUP5 00000413: CALLDATACOPY 00000414: DUP3 00000415: ADD 00000416: SWAP2 00000417: POP 00000418: POP 00000419: SWAP3 0000041a: POP 0000041b: POP 0000041c: POP 0000041d: PUSH1 0x40 0000041f: MLOAD 00000420: DUP1 00000421: SWAP2 00000422: SUB 00000423: SWAP1 00000424: KECCAK256 00000425: PUSH2 0x042d 00000428: DUP2 00000429: PUSH2 0x0b0f 0000042c: JUMP 0000042d: JUMPDEST 0000042e: ISZERO 0000042f: PUSH2 0x04fa 00000432: JUMPI 00000433: PUSH2 0x043b 00000436: DUP3 00000437: PUSH2 0x03df 0000043a: JUMP 0000043b: JUMPDEST 0000043c: ISZERO 0000043d: PUSH2 0x0445 00000440: JUMPI 00000441: PUSH2 0x04fa 00000444: JUMP 00000445: JUMPDEST 00000446: PUSH2 0x044d 00000449: PUSH2 0x0c7a 0000044c: JUMP 0000044d: JUMPDEST 0000044e: PUSH1 0x01 00000450: SLOAD 00000451: PUSH1 0xfa 00000453: SWAP1 00000454: LT 00000455: PUSH2 0x0460 00000458: JUMPI 00000459: PUSH2 0x0460 0000045c: PUSH2 0x0d08 0000045f: JUMP 00000460: JUMPDEST 00000461: JUMPDEST 00000462: PUSH1 0x01 00000464: SLOAD 00000465: PUSH1 0xfa 00000467: SWAP1 00000468: LT 00000469: PUSH2 0x0471 0000046c: JUMPI 0000046d: PUSH2 0x04fa 00000470: JUMP 00000471: JUMPDEST 00000472: PUSH1 0x01 00000474: DUP1 00000475: SLOAD 00000476: DUP2 00000477: ADD 00000478: SWAP1 00000479: DUP2 0000047a: SWAP1 0000047b: SSTORE 0000047c: PUSH1 0x01 0000047e: PUSH1 0xa0 00000480: PUSH1 0x02 00000482: EXP 00000483: SUB 00000484: DUP4 00000485: AND 00000486: SWAP1 00000487: PUSH1 0x02 00000489: SWAP1 0000048a: PUSH2 0x0100 0000048d: DUP2 0000048e: LT 0000048f: PUSH2 0x0494 00000492: JUMPI 00000493: INVALID 00000494: JUMPDEST 00000495: ADD 00000496: PUSH1 0x00 00000498: JUMPDEST 00000499: POP 0000049a: SSTORE 0000049b: PUSH1 0x01 0000049d: SLOAD 0000049e: PUSH1 0x01 000004a0: PUSH1 0xa0 000004a2: PUSH1 0x02 000004a4: EXP 000004a5: SUB 000004a6: DUP4 000004a7: AND 000004a8: PUSH1 0x00 000004aa: SWAP1 000004ab: DUP2 000004ac: MSTORE 000004ad: PUSH2 0x0102 000004b0: PUSH1 0x20 000004b2: MSTORE 000004b3: PUSH1 0x40 000004b5: SWAP1 000004b6: DUP2 000004b7: SWAP1 000004b8: KECCAK256 000004b9: SWAP2 000004ba: SWAP1 000004bb: SWAP2 000004bc: SSTORE 000004bd: PUSH32 0x994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c3 000004de: SWAP1 000004df: DUP4 000004e0: SWAP1 000004e1: MLOAD 000004e2: PUSH1 0x01 000004e4: PUSH1 0xa0 000004e6: PUSH1 0x02 000004e8: EXP 000004e9: SUB 000004ea: SWAP1 000004eb: SWAP2 000004ec: AND 000004ed: DUP2 000004ee: MSTORE 000004ef: PUSH1 0x20 000004f1: ADD 000004f2: PUSH1 0x40 000004f4: MLOAD 000004f5: DUP1 000004f6: SWAP2 000004f7: SUB 000004f8: SWAP1 000004f9: LOG1 000004fa: JUMPDEST 000004fb: JUMPDEST 000004fc: JUMPDEST 000004fd: POP 000004fe: POP 000004ff: JUMP 00000500: JUMPDEST 00000501: PUSH1 0x00 00000503: SLOAD 00000504: DUP2 00000505: JUMP 00000506: JUMPDEST 00000507: PUSH1 0x00 00000509: DUP1 0000050a: DUP3 0000050b: PUSH2 0x0513 0000050e: DUP2 0000050f: PUSH2 0x0b0f 00000512: JUMP 00000513: JUMPDEST 00000514: ISZERO 00000515: PUSH2 0x0722 00000518: JUMPI 00000519: PUSH1 0x00 0000051b: DUP5 0000051c: DUP2 0000051d: MSTORE 0000051e: PUSH2 0x0105 00000521: PUSH1 0x20 00000523: MSTORE 00000524: PUSH1 0x40 00000526: SWAP1 00000527: KECCAK256 00000528: SLOAD 00000529: PUSH1 0x01 0000052b: PUSH1 0xa0 0000052d: PUSH1 0x02 0000052f: EXP 00000530: SUB 00000531: AND 00000532: ISZERO 00000533: PUSH2 0x0722 00000536: JUMPI 00000537: PUSH1 0x00 00000539: DUP5 0000053a: DUP2 0000053b: MSTORE 0000053c: PUSH2 0x0105 0000053f: PUSH1 0x20 00000541: MSTORE 00000542: PUSH1 0x40 00000544: SWAP1 00000545: DUP2 00000546: SWAP1 00000547: KECCAK256 00000548: DUP1 00000549: SLOAD 0000054a: PUSH1 0x01 0000054c: DUP3 0000054d: ADD 0000054e: SLOAD 0000054f: PUSH1 0x01 00000551: PUSH1 0xa0 00000553: PUSH1 0x02 00000555: EXP 00000556: SUB 00000557: SWAP1 00000558: SWAP2 00000559: AND 0000055a: SWAP3 0000055b: SWAP1 0000055c: SWAP2 0000055d: PUSH1 0x02 0000055f: ADD 00000560: SWAP1 00000561: MLOAD 00000562: DUP1 00000563: DUP3 00000564: DUP1 00000565: SLOAD 00000566: PUSH1 0x01 00000568: DUP2 00000569: PUSH1 0x01 0000056b: AND 0000056c: ISZERO 0000056d: PUSH2 0x0100 00000570: MUL 00000571: SUB 00000572: AND 00000573: PUSH1 0x02 00000575: SWAP1 00000576: DIV 00000577: DUP1 00000578: ISZERO 00000579: PUSH2 0x05c3 0000057c: JUMPI 0000057d: DUP1 0000057e: PUSH1 0x1f 00000580: LT 00000581: PUSH2 0x0598 00000584: JUMPI 00000585: PUSH2 0x0100 00000588: DUP1 00000589: DUP4 0000058a: SLOAD 0000058b: DIV 0000058c: MUL 0000058d: DUP4 0000058e: MSTORE 0000058f: SWAP2 00000590: PUSH1 0x20 00000592: ADD 00000593: SWAP2 00000594: PUSH2 0x05c3 00000597: JUMP 00000598: JUMPDEST 00000599: DUP3 0000059a: ADD 0000059b: SWAP2 0000059c: SWAP1 0000059d: PUSH1 0x00 0000059f: MSTORE 000005a0: PUSH1 0x20 000005a2: PUSH1 0x00 000005a4: KECCAK256 000005a5: SWAP1 000005a6: JUMPDEST 000005a7: DUP2 000005a8: SLOAD 000005a9: DUP2 000005aa: MSTORE 000005ab: SWAP1 000005ac: PUSH1 0x01 000005ae: ADD 000005af: SWAP1 000005b0: PUSH1 0x20 000005b2: ADD 000005b3: DUP1 000005b4: DUP4 000005b5: GT 000005b6: PUSH2 0x05a6 000005b9: JUMPI 000005ba: DUP3 000005bb: SWAP1 000005bc: SUB 000005bd: PUSH1 0x1f 000005bf: AND 000005c0: DUP3 000005c1: ADD 000005c2: SWAP2 000005c3: JUMPDEST 000005c4: POP 000005c5: POP 000005c6: SWAP2 000005c7: POP 000005c8: POP 000005c9: PUSH1 0x00 000005cb: PUSH1 0x40 000005cd: MLOAD 000005ce: DUP1 000005cf: DUP4 000005d0: SUB 000005d1: DUP2 000005d2: DUP6 000005d3: DUP8 000005d4: PUSH2 0x8796 000005d7: GAS 000005d8: SUB 000005d9: CALL 000005da: PUSH1 0x00 000005dc: DUP9 000005dd: DUP2 000005de: MSTORE 000005df: PUSH2 0x0105 000005e2: PUSH1 0x20 000005e4: MSTORE 000005e5: PUSH1 0x40 000005e7: SWAP1 000005e8: DUP2 000005e9: SWAP1 000005ea: KECCAK256 000005eb: PUSH1 0x01 000005ed: DUP2 000005ee: ADD 000005ef: SLOAD 000005f0: DUP2 000005f1: SLOAD 000005f2: SWAP4 000005f3: SWAP9 000005f4: POP 000005f5: PUSH32 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a 00000616: SWAP7 00000617: POP 00000618: CALLER 00000619: SWAP6 0000061a: POP 0000061b: DUP11 0000061c: SWAP5 0000061d: POP 0000061e: SWAP3 0000061f: PUSH1 0x01 00000621: PUSH1 0xa0 00000623: PUSH1 0x02 00000625: EXP 00000626: SUB 00000627: AND 00000628: SWAP2 00000629: PUSH1 0x02 0000062b: SWAP1 0000062c: SWAP2 0000062d: ADD 0000062e: SWAP1 0000062f: MLOAD 00000630: PUSH1 0x01 00000632: PUSH1 0xa0 00000634: PUSH1 0x02 00000636: EXP 00000637: SUB 00000638: DUP1 00000639: DUP8 0000063a: AND 0000063b: DUP3 0000063c: MSTORE 0000063d: PUSH1 0x20 0000063f: DUP3 00000640: ADD 00000641: DUP7 00000642: SWAP1 00000643: MSTORE 00000644: PUSH1 0x40 00000646: DUP3 00000647: ADD 00000648: DUP6 00000649: SWAP1 0000064a: MSTORE 0000064b: DUP4 0000064c: AND 0000064d: PUSH1 0x60 0000064f: DUP3 00000650: ADD 00000651: MSTORE 00000652: PUSH1 0xa0 00000654: PUSH1 0x80 00000656: DUP3 00000657: ADD 00000658: DUP2 00000659: DUP2 0000065a: MSTORE 0000065b: DUP4 0000065c: SLOAD 0000065d: PUSH1 0x02 0000065f: PUSH2 0x0100 00000662: PUSH1 0x01 00000664: DUP4 00000665: AND 00000666: ISZERO 00000667: MUL 00000668: PUSH1 0x00 0000066a: NOT 0000066b: ADD 0000066c: SWAP1 0000066d: SWAP2 0000066e: AND 0000066f: DIV 00000670: SWAP2 00000671: DUP4 00000672: ADD 00000673: DUP3 00000674: SWAP1 00000675: MSTORE 00000676: SWAP1 00000677: PUSH1 0xc0 00000679: DUP4 0000067a: ADD 0000067b: SWAP1 0000067c: DUP5 0000067d: SWAP1 0000067e: DUP1 0000067f: ISZERO 00000680: PUSH2 0x06ca 00000683: JUMPI 00000684: DUP1 00000685: PUSH1 0x1f 00000687: LT 00000688: PUSH2 0x069f 0000068b: JUMPI 0000068c: PUSH2 0x0100 0000068f: DUP1 00000690: DUP4 00000691: SLOAD 00000692: DIV 00000693: MUL 00000694: DUP4 00000695: MSTORE 00000696: SWAP2 00000697: PUSH1 0x20 00000699: ADD 0000069a: SWAP2 0000069b: PUSH2 0x06ca 0000069e: JUMP 0000069f: JUMPDEST 000006a0: DUP3 000006a1: ADD 000006a2: SWAP2 000006a3: SWAP1 000006a4: PUSH1 0x00 000006a6: MSTORE 000006a7: PUSH1 0x20 000006a9: PUSH1 0x00 000006ab: KECCAK256 000006ac: SWAP1 000006ad: JUMPDEST 000006ae: DUP2 000006af: SLOAD 000006b0: DUP2 000006b1: MSTORE 000006b2: SWAP1 000006b3: PUSH1 0x01 000006b5: ADD 000006b6: SWAP1 000006b7: PUSH1 0x20 000006b9: ADD 000006ba: DUP1 000006bb: DUP4 000006bc: GT 000006bd: PUSH2 0x06ad 000006c0: JUMPI 000006c1: DUP3 000006c2: SWAP1 000006c3: SUB 000006c4: PUSH1 0x1f 000006c6: AND 000006c7: DUP3 000006c8: ADD 000006c9: SWAP2 000006ca: JUMPDEST 000006cb: POP 000006cc: POP 000006cd: SWAP7 000006ce: POP 000006cf: POP 000006d0: POP 000006d1: POP 000006d2: POP 000006d3: POP 000006d4: POP 000006d5: PUSH1 0x40 000006d7: MLOAD 000006d8: DUP1 000006d9: SWAP2 000006da: SUB 000006db: SWAP1 000006dc: LOG1 000006dd: PUSH1 0x00 000006df: DUP5 000006e0: DUP2 000006e1: MSTORE 000006e2: PUSH2 0x0105 000006e5: PUSH1 0x20 000006e7: MSTORE 000006e8: PUSH1 0x40 000006ea: DUP2 000006eb: KECCAK256 000006ec: DUP1 000006ed: SLOAD 000006ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000703: NOT 00000704: AND 00000705: DUP2 00000706: SSTORE 00000707: PUSH1 0x01 00000709: DUP2 0000070a: ADD 0000070b: DUP3 0000070c: SWAP1 0000070d: SSTORE 0000070e: SWAP1 0000070f: PUSH2 0x071b 00000712: PUSH1 0x02 00000714: DUP4 00000715: ADD 00000716: DUP3 00000717: PUSH2 0x0ed7 0000071a: JUMP 0000071b: JUMPDEST 0000071c: POP 0000071d: POP 0000071e: PUSH1 0x01 00000720: SWAP3 00000721: POP 00000722: JUMPDEST 00000723: JUMPDEST 00000724: JUMPDEST 00000725: JUMPDEST 00000726: POP 00000727: POP 00000728: SWAP2 00000729: SWAP1 0000072a: POP 0000072b: JUMP 0000072c: JUMPDEST 0000072d: PUSH1 0x00 0000072f: PUSH2 0x0737 00000732: CALLER 00000733: PUSH2 0x03df 00000736: JUMP 00000737: JUMPDEST 00000738: ISZERO 00000739: PUSH2 0x085a 0000073c: JUMPI 0000073d: PUSH1 0x00 0000073f: CALLDATASIZE 00000740: NUMBER 00000741: PUSH1 0x40 00000743: MLOAD 00000744: DUP1 00000745: DUP5 00000746: DUP5 00000747: DUP1 00000748: DUP3 00000749: DUP5 0000074a: CALLDATACOPY 0000074b: SWAP1 0000074c: SWAP2 0000074d: ADD 0000074e: SWAP3 0000074f: DUP4 00000750: MSTORE 00000751: POP 00000752: POP 00000753: PUSH1 0x20 00000755: ADD 00000756: SWAP2 00000757: POP 00000758: PUSH1 0x40 0000075a: SWAP1 0000075b: POP 0000075c: MLOAD 0000075d: DUP1 0000075e: SWAP2 0000075f: SUB 00000760: SWAP1 00000761: KECCAK256 00000762: SWAP1 00000763: POP 00000764: PUSH2 0x076c 00000767: DUP2 00000768: PUSH2 0x0506 0000076b: JUMP 0000076c: JUMPDEST 0000076d: ISZERO 0000076e: DUP1 0000076f: ISZERO 00000770: PUSH2 0x078f 00000773: JUMPI 00000774: POP 00000775: PUSH1 0x00 00000777: DUP2 00000778: DUP2 00000779: MSTORE 0000077a: PUSH2 0x0105 0000077d: PUSH1 0x20 0000077f: MSTORE 00000780: PUSH1 0x40 00000782: SWAP1 00000783: KECCAK256 00000784: SLOAD 00000785: PUSH1 0x01 00000787: PUSH1 0xa0 00000789: PUSH1 0x02 0000078b: EXP 0000078c: SUB 0000078d: AND 0000078e: ISZERO 0000078f: JUMPDEST 00000790: ISZERO 00000791: PUSH2 0x085a 00000794: JUMPI 00000795: PUSH1 0x00 00000797: DUP2 00000798: DUP2 00000799: MSTORE 0000079a: PUSH2 0x0105 0000079d: PUSH1 0x20 0000079f: MSTORE 000007a0: PUSH1 0x40 000007a2: SWAP1 000007a3: KECCAK256 000007a4: DUP1 000007a5: SLOAD 000007a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007bb: NOT 000007bc: AND 000007bd: PUSH1 0x01 000007bf: PUSH1 0xa0 000007c1: PUSH1 0x02 000007c3: EXP 000007c4: SUB 000007c5: DUP8 000007c6: AND 000007c7: OR 000007c8: DUP2 000007c9: SSTORE 000007ca: PUSH1 0x01 000007cc: DUP2 000007cd: ADD 000007ce: DUP6 000007cf: SWAP1 000007d0: SSTORE 000007d1: PUSH2 0x07de 000007d4: SWAP1 000007d5: PUSH1 0x02 000007d7: ADD 000007d8: DUP5 000007d9: DUP5 000007da: PUSH2 0x0f1f 000007dd: JUMP 000007de: JUMPDEST 000007df: POP 000007e0: PUSH32 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 00000801: DUP2 00000802: CALLER 00000803: DUP7 00000804: DUP9 00000805: DUP8 00000806: DUP8 00000807: PUSH1 0x40 00000809: MLOAD 0000080a: DUP7 0000080b: DUP2 0000080c: MSTORE 0000080d: PUSH1 0x01 0000080f: PUSH1 0xa0 00000811: PUSH1 0x02 00000813: EXP 00000814: SUB 00000815: DUP1 00000816: DUP8 00000817: AND 00000818: PUSH1 0x20 0000081a: DUP4 0000081b: ADD 0000081c: MSTORE 0000081d: PUSH1 0x40 0000081f: DUP3 00000820: ADD 00000821: DUP7 00000822: SWAP1 00000823: MSTORE 00000824: DUP5 00000825: AND 00000826: PUSH1 0x60 00000828: DUP3 00000829: ADD 0000082a: MSTORE 0000082b: PUSH1 0xa0 0000082d: PUSH1 0x80 0000082f: DUP3 00000830: ADD 00000831: DUP2 00000832: DUP2 00000833: MSTORE 00000834: SWAP1 00000835: DUP3 00000836: ADD 00000837: DUP4 00000838: SWAP1 00000839: MSTORE 0000083a: PUSH1 0xc0 0000083c: DUP3 0000083d: ADD 0000083e: DUP5 0000083f: DUP5 00000840: DUP1 00000841: DUP3 00000842: DUP5 00000843: CALLDATACOPY 00000844: DUP3 00000845: ADD 00000846: SWAP2 00000847: POP 00000848: POP 00000849: SWAP8 0000084a: POP 0000084b: POP 0000084c: POP 0000084d: POP 0000084e: POP 0000084f: POP 00000850: POP 00000851: POP 00000852: PUSH1 0x40 00000854: MLOAD 00000855: DUP1 00000856: SWAP2 00000857: SUB 00000858: SWAP1 00000859: LOG1 0000085a: JUMPDEST 0000085b: JUMPDEST 0000085c: JUMPDEST 0000085d: JUMPDEST 0000085e: SWAP5 0000085f: SWAP4 00000860: POP 00000861: POP 00000862: POP 00000863: POP 00000864: JUMP 00000865: JUMPDEST 00000866: PUSH1 0x01 00000868: PUSH1 0xa0 0000086a: PUSH1 0x02 0000086c: EXP 0000086d: SUB 0000086e: CALLER 0000086f: AND 00000870: PUSH1 0x00 00000872: SWAP1 00000873: DUP2 00000874: MSTORE 00000875: PUSH2 0x0102 00000878: PUSH1 0x20 0000087a: MSTORE 0000087b: PUSH1 0x40 0000087d: DUP2 0000087e: KECCAK256 0000087f: SLOAD 00000880: SWAP1 00000881: DUP1 00000882: DUP3 00000883: ISZERO 00000884: ISZERO 00000885: PUSH2 0x088d 00000888: JUMPI 00000889: PUSH2 0x0909 0000088c: JUMP 0000088d: JUMPDEST 0000088e: POP 0000088f: POP 00000890: PUSH1 0x00 00000892: DUP3 00000893: DUP2 00000894: MSTORE 00000895: PUSH2 0x0103 00000898: PUSH1 0x20 0000089a: MSTORE 0000089b: PUSH1 0x40 0000089d: DUP2 0000089e: KECCAK256 0000089f: PUSH1 0x01 000008a1: DUP2 000008a2: ADD 000008a3: SLOAD 000008a4: PUSH1 0x02 000008a6: DUP5 000008a7: SWAP1 000008a8: EXP 000008a9: SWAP3 000008aa: SWAP1 000008ab: DUP4 000008ac: AND 000008ad: GT 000008ae: ISZERO 000008af: PUSH2 0x0909 000008b2: JUMPI 000008b3: DUP1 000008b4: SLOAD 000008b5: PUSH1 0x01 000008b7: SWAP1 000008b8: DUP2 000008b9: ADD 000008ba: DUP3 000008bb: SSTORE 000008bc: DUP2 000008bd: ADD 000008be: DUP1 000008bf: SLOAD 000008c0: DUP4 000008c1: SWAP1 000008c2: SUB 000008c3: SWAP1 000008c4: SSTORE 000008c5: PUSH32 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b 000008e6: CALLER 000008e7: DUP6 000008e8: PUSH1 0x40 000008ea: MLOAD 000008eb: PUSH1 0x01 000008ed: PUSH1 0xa0 000008ef: PUSH1 0x02 000008f1: EXP 000008f2: SUB 000008f3: SWAP1 000008f4: SWAP3 000008f5: AND 000008f6: DUP3 000008f7: MSTORE 000008f8: PUSH1 0x20 000008fa: DUP3 000008fb: ADD 000008fc: MSTORE 000008fd: PUSH1 0x40 000008ff: SWAP1 00000900: DUP2 00000901: ADD 00000902: SWAP1 00000903: MLOAD 00000904: DUP1 00000905: SWAP2 00000906: SUB 00000907: SWAP1 00000908: LOG1 00000909: JUMPDEST 0000090a: JUMPDEST 0000090b: POP 0000090c: POP 0000090d: POP 0000090e: POP 0000090f: JUMP 00000910: JUMPDEST 00000911: PUSH1 0x00 00000913: CALLDATASIZE 00000914: PUSH1 0x40 00000916: MLOAD 00000917: DUP1 00000918: DUP4 00000919: DUP4 0000091a: DUP1 0000091b: DUP3 0000091c: DUP5 0000091d: CALLDATACOPY 0000091e: DUP3 0000091f: ADD 00000920: SWAP2 00000921: POP 00000922: POP 00000923: SWAP3 00000924: POP 00000925: POP 00000926: POP 00000927: PUSH1 0x40 00000929: MLOAD 0000092a: DUP1 0000092b: SWAP2 0000092c: SUB 0000092d: SWAP1 0000092e: KECCAK256 0000092f: PUSH2 0x0937 00000932: DUP2 00000933: PUSH2 0x0b0f 00000936: JUMP 00000937: JUMPDEST 00000938: ISZERO 00000939: PUSH2 0x04fa 0000093c: JUMPI 0000093d: PUSH1 0x01 0000093f: SLOAD 00000940: DUP3 00000941: GT 00000942: ISZERO 00000943: PUSH2 0x094b 00000946: JUMPI 00000947: PUSH2 0x04fa 0000094a: JUMP 0000094b: JUMPDEST 0000094c: PUSH1 0x00 0000094e: DUP3 0000094f: SWAP1 00000950: SSTORE 00000951: PUSH2 0x0958 00000954: PUSH2 0x0c7a 00000957: JUMP 00000958: JUMPDEST 00000959: PUSH32 0xacbdb084c721332ac59f9b8e392196c9eb0e4932862da8eb9beaf0dad4f550da 0000097a: DUP3 0000097b: PUSH1 0x40 0000097d: MLOAD 0000097e: SWAP1 0000097f: DUP2 00000980: MSTORE 00000981: PUSH1 0x20 00000983: ADD 00000984: PUSH1 0x40 00000986: MLOAD 00000987: DUP1 00000988: SWAP2 00000989: SUB 0000098a: SWAP1 0000098b: LOG1 0000098c: JUMPDEST 0000098d: JUMPDEST 0000098e: JUMPDEST 0000098f: POP 00000990: POP 00000991: JUMP 00000992: JUMPDEST 00000993: PUSH1 0x00 00000995: DUP3 00000996: DUP2 00000997: MSTORE 00000998: PUSH2 0x0103 0000099b: PUSH1 0x20 0000099d: SWAP1 0000099e: DUP2 0000099f: MSTORE 000009a0: PUSH1 0x40 000009a2: DUP1 000009a3: DUP4 000009a4: KECCAK256 000009a5: PUSH1 0x01 000009a7: PUSH1 0xa0 000009a9: PUSH1 0x02 000009ab: EXP 000009ac: SUB 000009ad: DUP6 000009ae: AND 000009af: DUP5 000009b0: MSTORE 000009b1: PUSH2 0x0102 000009b4: SWAP1 000009b5: SWAP3 000009b6: MSTORE 000009b7: DUP3 000009b8: KECCAK256 000009b9: SLOAD 000009ba: DUP3 000009bb: DUP2 000009bc: ISZERO 000009bd: ISZERO 000009be: PUSH2 0x09ca 000009c1: JUMPI 000009c2: PUSH1 0x00 000009c4: SWAP4 000009c5: POP 000009c6: PUSH2 0x09de 000009c9: JUMP 000009ca: JUMPDEST 000009cb: DUP2 000009cc: PUSH1 0x02 000009ce: EXP 000009cf: SWAP1 000009d0: POP 000009d1: DUP1 000009d2: DUP4 000009d3: PUSH1 0x01 000009d5: ADD 000009d6: SLOAD 000009d7: AND 000009d8: PUSH1 0x00 000009da: EQ 000009db: ISZERO 000009dc: SWAP4 000009dd: POP 000009de: JUMPDEST 000009df: POP 000009e0: POP 000009e1: POP 000009e2: SWAP3 000009e3: SWAP2 000009e4: POP 000009e5: POP 000009e6: JUMP 000009e7: JUMPDEST 000009e8: PUSH1 0x00 000009ea: PUSH1 0x02 000009ec: PUSH1 0x01 000009ee: DUP4 000009ef: ADD 000009f0: PUSH2 0x0100 000009f3: DUP2 000009f4: LT 000009f5: PUSH2 0x09fa 000009f8: JUMPI 000009f9: INVALID 000009fa: JUMPDEST 000009fb: ADD 000009fc: PUSH1 0x00 000009fe: JUMPDEST 000009ff: POP 00000a00: SLOAD 00000a01: SWAP1 00000a02: POP 00000a03: JUMPDEST 00000a04: SWAP2 00000a05: SWAP1 00000a06: POP 00000a07: JUMP 00000a08: JUMPDEST 00000a09: PUSH1 0x00 00000a0b: DUP1 00000a0c: CALLDATASIZE 00000a0d: PUSH1 0x40 00000a0f: MLOAD 00000a10: DUP1 00000a11: DUP4 00000a12: DUP4 00000a13: DUP1 00000a14: DUP3 00000a15: DUP5 00000a16: CALLDATACOPY 00000a17: DUP3 00000a18: ADD 00000a19: SWAP2 00000a1a: POP 00000a1b: POP 00000a1c: SWAP3 00000a1d: POP 00000a1e: POP 00000a1f: POP 00000a20: PUSH1 0x40 00000a22: MLOAD 00000a23: DUP1 00000a24: SWAP2 00000a25: SUB 00000a26: SWAP1 00000a27: KECCAK256 00000a28: PUSH2 0x0a30 00000a2b: DUP2 00000a2c: PUSH2 0x0b0f 00000a2f: JUMP 00000a30: JUMPDEST 00000a31: ISZERO 00000a32: PUSH2 0x0909 00000a35: JUMPI 00000a36: PUSH2 0x0a3e 00000a39: DUP4 00000a3a: PUSH2 0x03df 00000a3d: JUMP 00000a3e: JUMPDEST 00000a3f: ISZERO 00000a40: PUSH2 0x0a48 00000a43: JUMPI 00000a44: PUSH2 0x0909 00000a47: JUMP 00000a48: JUMPDEST 00000a49: PUSH1 0x01 00000a4b: PUSH1 0xa0 00000a4d: PUSH1 0x02 00000a4f: EXP 00000a50: SUB 00000a51: DUP5 00000a52: AND 00000a53: PUSH1 0x00 00000a55: SWAP1 00000a56: DUP2 00000a57: MSTORE 00000a58: PUSH2 0x0102 00000a5b: PUSH1 0x20 00000a5d: MSTORE 00000a5e: PUSH1 0x40 00000a60: SWAP1 00000a61: KECCAK256 00000a62: SLOAD 00000a63: SWAP2 00000a64: POP 00000a65: DUP2 00000a66: ISZERO 00000a67: ISZERO 00000a68: PUSH2 0x0a70 00000a6b: JUMPI 00000a6c: PUSH2 0x0909 00000a6f: JUMP 00000a70: JUMPDEST 00000a71: PUSH2 0x0a78 00000a74: PUSH2 0x0c7a 00000a77: JUMP 00000a78: JUMPDEST 00000a79: PUSH1 0x01 00000a7b: PUSH1 0xa0 00000a7d: PUSH1 0x02 00000a7f: EXP 00000a80: SUB 00000a81: DUP4 00000a82: AND 00000a83: PUSH1 0x02 00000a85: DUP4 00000a86: PUSH2 0x0100 00000a89: DUP2 00000a8a: LT 00000a8b: PUSH2 0x0a90 00000a8e: JUMPI 00000a8f: INVALID 00000a90: JUMPDEST 00000a91: ADD 00000a92: PUSH1 0x00 00000a94: JUMPDEST 00000a95: POP 00000a96: SSTORE 00000a97: PUSH1 0x01 00000a99: PUSH1 0xa0 00000a9b: PUSH1 0x02 00000a9d: EXP 00000a9e: SUB 00000a9f: DUP1 00000aa0: DUP6 00000aa1: AND 00000aa2: PUSH1 0x00 00000aa4: SWAP1 00000aa5: DUP2 00000aa6: MSTORE 00000aa7: PUSH2 0x0102 00000aaa: PUSH1 0x20 00000aac: MSTORE 00000aad: PUSH1 0x40 00000aaf: DUP1 00000ab0: DUP3 00000ab1: KECCAK256 00000ab2: DUP3 00000ab3: SWAP1 00000ab4: SSTORE 00000ab5: SWAP2 00000ab6: DUP6 00000ab7: AND 00000ab8: DUP2 00000ab9: MSTORE 00000aba: DUP2 00000abb: SWAP1 00000abc: KECCAK256 00000abd: DUP4 00000abe: SWAP1 00000abf: SSTORE 00000ac0: PUSH32 0xb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c 00000ae1: SWAP1 00000ae2: DUP6 00000ae3: SWAP1 00000ae4: DUP6 00000ae5: SWAP1 00000ae6: MLOAD 00000ae7: PUSH1 0x01 00000ae9: PUSH1 0xa0 00000aeb: PUSH1 0x02 00000aed: EXP 00000aee: SUB 00000aef: SWAP3 00000af0: DUP4 00000af1: AND 00000af2: DUP2 00000af3: MSTORE 00000af4: SWAP2 00000af5: AND 00000af6: PUSH1 0x20 00000af8: DUP3 00000af9: ADD 00000afa: MSTORE 00000afb: PUSH1 0x40 00000afd: SWAP1 00000afe: DUP2 00000aff: ADD 00000b00: SWAP1 00000b01: MLOAD 00000b02: DUP1 00000b03: SWAP2 00000b04: SUB 00000b05: SWAP1 00000b06: LOG1 00000b07: JUMPDEST 00000b08: JUMPDEST 00000b09: JUMPDEST 00000b0a: POP 00000b0b: POP 00000b0c: POP 00000b0d: POP 00000b0e: JUMP 00000b0f: JUMPDEST 00000b10: PUSH1 0x01 00000b12: PUSH1 0xa0 00000b14: PUSH1 0x02 00000b16: EXP 00000b17: SUB 00000b18: CALLER 00000b19: AND 00000b1a: PUSH1 0x00 00000b1c: SWAP1 00000b1d: DUP2 00000b1e: MSTORE 00000b1f: PUSH2 0x0102 00000b22: PUSH1 0x20 00000b24: MSTORE 00000b25: PUSH1 0x40 00000b27: DUP2 00000b28: KECCAK256 00000b29: SLOAD 00000b2a: DUP2 00000b2b: DUP1 00000b2c: DUP3 00000b2d: ISZERO 00000b2e: ISZERO 00000b2f: PUSH2 0x0b37 00000b32: JUMPI 00000b33: PUSH2 0x0c70 00000b36: JUMP 00000b37: JUMPDEST 00000b38: PUSH1 0x00 00000b3a: DUP6 00000b3b: DUP2 00000b3c: MSTORE 00000b3d: PUSH2 0x0103 00000b40: PUSH1 0x20 00000b42: MSTORE 00000b43: PUSH1 0x40 00000b45: SWAP1 00000b46: KECCAK256 00000b47: DUP1 00000b48: SLOAD 00000b49: SWAP1 00000b4a: SWAP3 00000b4b: POP 00000b4c: ISZERO 00000b4d: ISZERO 00000b4e: PUSH2 0x0b9a 00000b51: JUMPI 00000b52: PUSH1 0x00 00000b54: DUP1 00000b55: SLOAD 00000b56: DUP4 00000b57: SSTORE 00000b58: PUSH1 0x01 00000b5a: DUP1 00000b5b: DUP5 00000b5c: ADD 00000b5d: SWAP2 00000b5e: SWAP1 00000b5f: SWAP2 00000b60: SSTORE 00000b61: PUSH2 0x0104 00000b64: DUP1 00000b65: SLOAD 00000b66: SWAP2 00000b67: PUSH2 0x0b72 00000b6a: SWAP2 00000b6b: SWAP1 00000b6c: DUP4 00000b6d: ADD 00000b6e: PUSH2 0x0f9e 00000b71: JUMP 00000b72: JUMPDEST 00000b73: PUSH1 0x02 00000b75: DUP4 00000b76: ADD 00000b77: DUP2 00000b78: SWAP1 00000b79: SSTORE 00000b7a: PUSH2 0x0104 00000b7d: DUP1 00000b7e: SLOAD 00000b7f: DUP8 00000b80: SWAP3 00000b81: SWAP1 00000b82: DUP2 00000b83: LT 00000b84: PUSH2 0x0b89 00000b87: JUMPI 00000b88: INVALID 00000b89: JUMPDEST 00000b8a: SWAP1 00000b8b: PUSH1 0x00 00000b8d: MSTORE 00000b8e: PUSH1 0x20 00000b90: PUSH1 0x00 00000b92: KECCAK256 00000b93: SWAP1 00000b94: ADD 00000b95: PUSH1 0x00 00000b97: JUMPDEST 00000b98: POP 00000b99: SSTORE 00000b9a: JUMPDEST 00000b9b: DUP3 00000b9c: PUSH1 0x02 00000b9e: EXP 00000b9f: SWAP1 00000ba0: POP 00000ba1: DUP1 00000ba2: DUP3 00000ba3: PUSH1 0x01 00000ba5: ADD 00000ba6: SLOAD 00000ba7: AND 00000ba8: PUSH1 0x00 00000baa: EQ 00000bab: ISZERO 00000bac: PUSH2 0x0c70 00000baf: JUMPI 00000bb0: PUSH32 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda 00000bd1: CALLER 00000bd2: DUP7 00000bd3: PUSH1 0x40 00000bd5: MLOAD 00000bd6: PUSH1 0x01 00000bd8: PUSH1 0xa0 00000bda: PUSH1 0x02 00000bdc: EXP 00000bdd: SUB 00000bde: SWAP1 00000bdf: SWAP3 00000be0: AND 00000be1: DUP3 00000be2: MSTORE 00000be3: PUSH1 0x20 00000be5: DUP3 00000be6: ADD 00000be7: MSTORE 00000be8: PUSH1 0x40 00000bea: SWAP1 00000beb: DUP2 00000bec: ADD 00000bed: SWAP1 00000bee: MLOAD 00000bef: DUP1 00000bf0: SWAP2 00000bf1: SUB 00000bf2: SWAP1 00000bf3: LOG1 00000bf4: DUP2 00000bf5: SLOAD 00000bf6: PUSH1 0x01 00000bf8: SWAP1 00000bf9: GT 00000bfa: PUSH2 0x0c5d 00000bfd: JUMPI 00000bfe: PUSH1 0x00 00000c00: DUP6 00000c01: DUP2 00000c02: MSTORE 00000c03: PUSH2 0x0103 00000c06: PUSH1 0x20 00000c08: MSTORE 00000c09: PUSH1 0x40 00000c0b: SWAP1 00000c0c: KECCAK256 00000c0d: PUSH1 0x02 00000c0f: ADD 00000c10: SLOAD 00000c11: PUSH2 0x0104 00000c14: DUP1 00000c15: SLOAD 00000c16: SWAP1 00000c17: SWAP2 00000c18: SWAP1 00000c19: DUP2 00000c1a: LT 00000c1b: PUSH2 0x0c20 00000c1e: JUMPI 00000c1f: INVALID 00000c20: JUMPDEST 00000c21: SWAP1 00000c22: PUSH1 0x00 00000c24: MSTORE 00000c25: PUSH1 0x20 00000c27: PUSH1 0x00 00000c29: KECCAK256 00000c2a: SWAP1 00000c2b: ADD 00000c2c: PUSH1 0x00 00000c2e: JUMPDEST 00000c2f: POP 00000c30: PUSH1 0x00 00000c32: SWAP1 00000c33: DUP2 00000c34: SWAP1 00000c35: SSTORE 00000c36: DUP6 00000c37: DUP2 00000c38: MSTORE 00000c39: PUSH2 0x0103 00000c3c: PUSH1 0x20 00000c3e: MSTORE 00000c3f: PUSH1 0x40 00000c41: DUP2 00000c42: KECCAK256 00000c43: DUP2 00000c44: DUP2 00000c45: SSTORE 00000c46: PUSH1 0x01 00000c48: DUP1 00000c49: DUP3 00000c4a: ADD 00000c4b: DUP4 00000c4c: SWAP1 00000c4d: SSTORE 00000c4e: PUSH1 0x02 00000c50: SWAP1 00000c51: SWAP2 00000c52: ADD 00000c53: SWAP2 00000c54: SWAP1 00000c55: SWAP2 00000c56: SSTORE 00000c57: SWAP4 00000c58: POP 00000c59: PUSH2 0x0c70 00000c5c: JUMP 00000c5d: JUMPDEST 00000c5e: DUP2 00000c5f: SLOAD 00000c60: PUSH1 0x00 00000c62: NOT 00000c63: ADD 00000c64: DUP3 00000c65: SSTORE 00000c66: PUSH1 0x01 00000c68: DUP3 00000c69: ADD 00000c6a: DUP1 00000c6b: SLOAD 00000c6c: DUP3 00000c6d: OR 00000c6e: SWAP1 00000c6f: SSTORE 00000c70: JUMPDEST 00000c71: JUMPDEST 00000c72: JUMPDEST 00000c73: POP 00000c74: POP 00000c75: POP 00000c76: SWAP2 00000c77: SWAP1 00000c78: POP 00000c79: JUMP 00000c7a: JUMPDEST 00000c7b: PUSH2 0x0104 00000c7e: SLOAD 00000c7f: PUSH1 0x00 00000c81: JUMPDEST 00000c82: DUP2 00000c83: DUP2 00000c84: LT 00000c85: ISZERO 00000c86: PUSH2 0x0cfb 00000c89: JUMPI 00000c8a: PUSH2 0x0105 00000c8d: PUSH1 0x00 00000c8f: PUSH2 0x0104 00000c92: DUP4 00000c93: DUP2 00000c94: SLOAD 00000c95: DUP2 00000c96: LT 00000c97: ISZERO 00000c98: ISZERO 00000c99: PUSH2 0x0c9e 00000c9c: JUMPI 00000c9d: INVALID 00000c9e: JUMPDEST 00000c9f: SWAP1 00000ca0: PUSH1 0x00 00000ca2: MSTORE 00000ca3: PUSH1 0x20 00000ca5: PUSH1 0x00 00000ca7: KECCAK256 00000ca8: SWAP1 00000ca9: ADD 00000caa: PUSH1 0x00 00000cac: JUMPDEST 00000cad: POP 00000cae: SLOAD 00000caf: DUP2 00000cb0: MSTORE 00000cb1: PUSH1 0x20 00000cb3: DUP2 00000cb4: ADD 00000cb5: SWAP2 00000cb6: SWAP1 00000cb7: SWAP2 00000cb8: MSTORE 00000cb9: PUSH1 0x40 00000cbb: ADD 00000cbc: PUSH1 0x00 00000cbe: SWAP1 00000cbf: DUP2 00000cc0: KECCAK256 00000cc1: DUP1 00000cc2: SLOAD 00000cc3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cd8: NOT 00000cd9: AND 00000cda: DUP2 00000cdb: SSTORE 00000cdc: PUSH1 0x01 00000cde: DUP2 00000cdf: ADD 00000ce0: DUP3 00000ce1: SWAP1 00000ce2: SSTORE 00000ce3: SWAP1 00000ce4: PUSH2 0x0cf0 00000ce7: PUSH1 0x02 00000ce9: DUP4 00000cea: ADD 00000ceb: DUP3 00000cec: PUSH2 0x0ed7 00000cef: JUMP 00000cf0: JUMPDEST 00000cf1: POP 00000cf2: POP 00000cf3: JUMPDEST 00000cf4: PUSH1 0x01 00000cf6: ADD 00000cf7: PUSH2 0x0c81 00000cfa: JUMP 00000cfb: JUMPDEST 00000cfc: PUSH2 0x04fa 00000cff: PUSH2 0x0e43 00000d02: JUMP 00000d03: JUMPDEST 00000d04: JUMPDEST 00000d05: POP 00000d06: POP 00000d07: JUMP 00000d08: JUMPDEST 00000d09: PUSH1 0x01 00000d0b: JUMPDEST 00000d0c: PUSH1 0x01 00000d0e: SLOAD 00000d0f: DUP2 00000d10: LT 00000d11: ISZERO 00000d12: PUSH2 0x0e3f 00000d15: JUMPI 00000d16: JUMPDEST 00000d17: PUSH1 0x01 00000d19: SLOAD 00000d1a: DUP2 00000d1b: LT 00000d1c: DUP1 00000d1d: ISZERO 00000d1e: PUSH2 0x0d39 00000d21: JUMPI 00000d22: POP 00000d23: PUSH1 0x02 00000d25: DUP2 00000d26: PUSH2 0x0100 00000d29: DUP2 00000d2a: LT 00000d2b: PUSH2 0x0d30 00000d2e: JUMPI 00000d2f: INVALID 00000d30: JUMPDEST 00000d31: ADD 00000d32: PUSH1 0x00 00000d34: JUMPDEST 00000d35: POP 00000d36: SLOAD 00000d37: ISZERO 00000d38: ISZERO 00000d39: JUMPDEST 00000d3a: ISZERO 00000d3b: PUSH2 0x0d46 00000d3e: JUMPI 00000d3f: PUSH1 0x01 00000d41: ADD 00000d42: PUSH2 0x0d16 00000d45: JUMP 00000d46: JUMPDEST 00000d47: JUMPDEST 00000d48: PUSH1 0x01 00000d4a: DUP1 00000d4b: SLOAD 00000d4c: GT 00000d4d: DUP1 00000d4e: ISZERO 00000d4f: PUSH2 0x0d6c 00000d52: JUMPI 00000d53: POP 00000d54: PUSH1 0x01 00000d56: SLOAD 00000d57: PUSH1 0x02 00000d59: SWAP1 00000d5a: PUSH2 0x0100 00000d5d: DUP2 00000d5e: LT 00000d5f: PUSH2 0x0d64 00000d62: JUMPI 00000d63: INVALID 00000d64: JUMPDEST 00000d65: ADD 00000d66: PUSH1 0x00 00000d68: JUMPDEST 00000d69: POP 00000d6a: SLOAD 00000d6b: ISZERO 00000d6c: JUMPDEST 00000d6d: ISZERO 00000d6e: PUSH2 0x0d80 00000d71: JUMPI 00000d72: PUSH1 0x01 00000d74: DUP1 00000d75: SLOAD 00000d76: PUSH1 0x00 00000d78: NOT 00000d79: ADD 00000d7a: SWAP1 00000d7b: SSTORE 00000d7c: PUSH2 0x0d46 00000d7f: JUMP 00000d80: JUMPDEST 00000d81: PUSH1 0x01 00000d83: SLOAD 00000d84: DUP2 00000d85: LT 00000d86: DUP1 00000d87: ISZERO 00000d88: PUSH2 0x0da6 00000d8b: JUMPI 00000d8c: POP 00000d8d: PUSH1 0x01 00000d8f: SLOAD 00000d90: PUSH1 0x02 00000d92: SWAP1 00000d93: PUSH2 0x0100 00000d96: DUP2 00000d97: LT 00000d98: PUSH2 0x0d9d 00000d9b: JUMPI 00000d9c: INVALID 00000d9d: JUMPDEST 00000d9e: ADD 00000d9f: PUSH1 0x00 00000da1: JUMPDEST 00000da2: POP 00000da3: SLOAD 00000da4: ISZERO 00000da5: ISZERO 00000da6: JUMPDEST 00000da7: DUP1 00000da8: ISZERO 00000da9: PUSH2 0x0dc3 00000dac: JUMPI 00000dad: POP 00000dae: PUSH1 0x02 00000db0: DUP2 00000db1: PUSH2 0x0100 00000db4: DUP2 00000db5: LT 00000db6: PUSH2 0x0dbb 00000db9: JUMPI 00000dba: INVALID 00000dbb: JUMPDEST 00000dbc: ADD 00000dbd: PUSH1 0x00 00000dbf: JUMPDEST 00000dc0: POP 00000dc1: SLOAD 00000dc2: ISZERO 00000dc3: JUMPDEST 00000dc4: ISZERO 00000dc5: PUSH2 0x0e3a 00000dc8: JUMPI 00000dc9: PUSH1 0x01 00000dcb: SLOAD 00000dcc: PUSH1 0x02 00000dce: SWAP1 00000dcf: PUSH2 0x0100 00000dd2: DUP2 00000dd3: LT 00000dd4: PUSH2 0x0dd9 00000dd7: JUMPI 00000dd8: INVALID 00000dd9: JUMPDEST 00000dda: ADD 00000ddb: PUSH1 0x00 00000ddd: JUMPDEST 00000dde: POP 00000ddf: SLOAD 00000de0: PUSH1 0x02 00000de2: DUP3 00000de3: PUSH2 0x0100 00000de6: DUP2 00000de7: LT 00000de8: PUSH2 0x0ded 00000deb: JUMPI 00000dec: INVALID 00000ded: JUMPDEST 00000dee: ADD 00000def: PUSH1 0x00 00000df1: JUMPDEST 00000df2: POP 00000df3: SSTORE 00000df4: DUP1 00000df5: PUSH2 0x0102 00000df8: PUSH1 0x00 00000dfa: PUSH1 0x02 00000dfc: DUP4 00000dfd: PUSH2 0x0100 00000e00: DUP2 00000e01: LT 00000e02: PUSH2 0x0e07 00000e05: JUMPI 00000e06: INVALID 00000e07: JUMPDEST 00000e08: ADD 00000e09: PUSH1 0x00 00000e0b: JUMPDEST 00000e0c: POP 00000e0d: SLOAD 00000e0e: DUP2 00000e0f: MSTORE 00000e10: PUSH1 0x20 00000e12: ADD 00000e13: SWAP1 00000e14: DUP2 00000e15: MSTORE 00000e16: PUSH1 0x20 00000e18: ADD 00000e19: PUSH1 0x00 00000e1b: KECCAK256 00000e1c: DUP2 00000e1d: SWAP1 00000e1e: SSTORE 00000e1f: POP 00000e20: PUSH1 0x00 00000e22: PUSH1 0x02 00000e24: PUSH1 0x01 00000e26: SLOAD 00000e27: PUSH2 0x0100 00000e2a: DUP2 00000e2b: LT 00000e2c: ISZERO 00000e2d: ISZERO 00000e2e: PUSH2 0x0e33 00000e31: JUMPI 00000e32: INVALID 00000e33: JUMPDEST 00000e34: ADD 00000e35: PUSH1 0x00 00000e37: JUMPDEST 00000e38: POP 00000e39: SSTORE 00000e3a: JUMPDEST 00000e3b: PUSH2 0x0d0b 00000e3e: JUMP 00000e3f: JUMPDEST 00000e40: JUMPDEST 00000e41: POP 00000e42: JUMP 00000e43: JUMPDEST 00000e44: PUSH2 0x0104 00000e47: SLOAD 00000e48: PUSH1 0x00 00000e4a: JUMPDEST 00000e4b: DUP2 00000e4c: DUP2 00000e4d: LT 00000e4e: ISZERO 00000e4f: PUSH2 0x0ec5 00000e52: JUMPI 00000e53: PUSH2 0x0104 00000e56: DUP1 00000e57: SLOAD 00000e58: DUP3 00000e59: SWAP1 00000e5a: DUP2 00000e5b: LT 00000e5c: PUSH2 0x0e61 00000e5f: JUMPI 00000e60: INVALID 00000e61: JUMPDEST 00000e62: SWAP1 00000e63: PUSH1 0x00 00000e65: MSTORE 00000e66: PUSH1 0x20 00000e68: PUSH1 0x00 00000e6a: KECCAK256 00000e6b: SWAP1 00000e6c: ADD 00000e6d: PUSH1 0x00 00000e6f: JUMPDEST 00000e70: POP 00000e71: SLOAD 00000e72: ISZERO 00000e73: PUSH2 0x0ebc 00000e76: JUMPI 00000e77: PUSH2 0x0103 00000e7a: PUSH1 0x00 00000e7c: PUSH2 0x0104 00000e7f: DUP4 00000e80: DUP2 00000e81: SLOAD 00000e82: DUP2 00000e83: LT 00000e84: ISZERO 00000e85: ISZERO 00000e86: PUSH2 0x0e8b 00000e89: JUMPI 00000e8a: INVALID 00000e8b: JUMPDEST 00000e8c: SWAP1 00000e8d: PUSH1 0x00 00000e8f: MSTORE 00000e90: PUSH1 0x20 00000e92: PUSH1 0x00 00000e94: KECCAK256 00000e95: SWAP1 00000e96: ADD 00000e97: PUSH1 0x00 00000e99: JUMPDEST 00000e9a: POP 00000e9b: SLOAD 00000e9c: DUP2 00000e9d: MSTORE 00000e9e: PUSH1 0x20 00000ea0: DUP2 00000ea1: ADD 00000ea2: SWAP2 00000ea3: SWAP1 00000ea4: SWAP2 00000ea5: MSTORE 00000ea6: PUSH1 0x40 00000ea8: ADD 00000ea9: PUSH1 0x00 00000eab: SWAP1 00000eac: DUP2 00000ead: KECCAK256 00000eae: DUP2 00000eaf: DUP2 00000eb0: SSTORE 00000eb1: PUSH1 0x01 00000eb3: DUP2 00000eb4: ADD 00000eb5: DUP3 00000eb6: SWAP1 00000eb7: SSTORE 00000eb8: PUSH1 0x02 00000eba: ADD 00000ebb: SSTORE 00000ebc: JUMPDEST 00000ebd: JUMPDEST 00000ebe: PUSH1 0x01 00000ec0: ADD 00000ec1: PUSH2 0x0e4a 00000ec4: JUMP 00000ec5: JUMPDEST 00000ec6: PUSH2 0x04fa 00000ec9: PUSH2 0x0104 00000ecc: PUSH1 0x00 00000ece: PUSH2 0x0fc8 00000ed1: JUMP 00000ed2: JUMPDEST 00000ed3: JUMPDEST 00000ed4: POP 00000ed5: POP 00000ed6: JUMP 00000ed7: JUMPDEST 00000ed8: POP 00000ed9: DUP1 00000eda: SLOAD 00000edb: PUSH1 0x01 00000edd: DUP2 00000ede: PUSH1 0x01 00000ee0: AND 00000ee1: ISZERO 00000ee2: PUSH2 0x0100 00000ee5: MUL 00000ee6: SUB 00000ee7: AND 00000ee8: PUSH1 0x02 00000eea: SWAP1 00000eeb: DIV 00000eec: PUSH1 0x00 00000eee: DUP3 00000eef: SSTORE 00000ef0: DUP1 00000ef1: PUSH1 0x1f 00000ef3: LT 00000ef4: PUSH2 0x0efd 00000ef7: JUMPI 00000ef8: POP 00000ef9: PUSH2 0x0e3f 00000efc: JUMP 00000efd: JUMPDEST 00000efe: PUSH1 0x1f 00000f00: ADD 00000f01: PUSH1 0x20 00000f03: SWAP1 00000f04: DIV 00000f05: SWAP1 00000f06: PUSH1 0x00 00000f08: MSTORE 00000f09: PUSH1 0x20 00000f0b: PUSH1 0x00 00000f0d: KECCAK256 00000f0e: SWAP1 00000f0f: DUP2 00000f10: ADD 00000f11: SWAP1 00000f12: PUSH2 0x0e3f 00000f15: SWAP2 00000f16: SWAP1 00000f17: PUSH2 0x0fea 00000f1a: JUMP 00000f1b: JUMPDEST 00000f1c: JUMPDEST 00000f1d: POP 00000f1e: JUMP 00000f1f: JUMPDEST 00000f20: DUP3 00000f21: DUP1 00000f22: SLOAD 00000f23: PUSH1 0x01 00000f25: DUP2 00000f26: PUSH1 0x01 00000f28: AND 00000f29: ISZERO 00000f2a: PUSH2 0x0100 00000f2d: MUL 00000f2e: SUB 00000f2f: AND 00000f30: PUSH1 0x02 00000f32: SWAP1 00000f33: DIV 00000f34: SWAP1 00000f35: PUSH1 0x00 00000f37: MSTORE 00000f38: PUSH1 0x20 00000f3a: PUSH1 0x00 00000f3c: KECCAK256 00000f3d: SWAP1 00000f3e: PUSH1 0x1f 00000f40: ADD 00000f41: PUSH1 0x20 00000f43: SWAP1 00000f44: DIV 00000f45: DUP2 00000f46: ADD 00000f47: SWAP3 00000f48: DUP3 00000f49: PUSH1 0x1f 00000f4b: LT 00000f4c: PUSH2 0x0f60 00000f4f: JUMPI 00000f50: DUP3 00000f51: DUP1 00000f52: ADD 00000f53: PUSH1 0xff 00000f55: NOT 00000f56: DUP3 00000f57: CALLDATALOAD 00000f58: AND 00000f59: OR 00000f5a: DUP6 00000f5b: SSTORE 00000f5c: PUSH2 0x0f8d 00000f5f: JUMP 00000f60: JUMPDEST 00000f61: DUP3 00000f62: DUP1 00000f63: ADD 00000f64: PUSH1 0x01 00000f66: ADD 00000f67: DUP6 00000f68: SSTORE 00000f69: DUP3 00000f6a: ISZERO 00000f6b: PUSH2 0x0f8d 00000f6e: JUMPI 00000f6f: SWAP2 00000f70: DUP3 00000f71: ADD 00000f72: JUMPDEST 00000f73: DUP3 00000f74: DUP2 00000f75: GT 00000f76: ISZERO 00000f77: PUSH2 0x0f8d 00000f7a: JUMPI 00000f7b: DUP3 00000f7c: CALLDATALOAD 00000f7d: DUP3 00000f7e: SSTORE 00000f7f: SWAP2 00000f80: PUSH1 0x20 00000f82: ADD 00000f83: SWAP2 00000f84: SWAP1 00000f85: PUSH1 0x01 00000f87: ADD 00000f88: SWAP1 00000f89: PUSH2 0x0f72 00000f8c: JUMP 00000f8d: JUMPDEST 00000f8e: JUMPDEST 00000f8f: POP 00000f90: PUSH2 0x0f9a 00000f93: SWAP3 00000f94: SWAP2 00000f95: POP 00000f96: PUSH2 0x0fea 00000f99: JUMP 00000f9a: JUMPDEST 00000f9b: POP 00000f9c: SWAP1 00000f9d: JUMP 00000f9e: JUMPDEST 00000f9f: DUP2 00000fa0: SLOAD 00000fa1: DUP2 00000fa2: DUP4 00000fa3: SSTORE 00000fa4: DUP2 00000fa5: DUP2 00000fa6: ISZERO 00000fa7: GT 00000fa8: PUSH2 0x03d8 00000fab: JUMPI 00000fac: PUSH1 0x00 00000fae: DUP4 00000faf: DUP2 00000fb0: MSTORE 00000fb1: PUSH1 0x20 00000fb3: SWAP1 00000fb4: KECCAK256 00000fb5: PUSH2 0x03d8 00000fb8: SWAP2 00000fb9: DUP2 00000fba: ADD 00000fbb: SWAP1 00000fbc: DUP4 00000fbd: ADD 00000fbe: PUSH2 0x0fea 00000fc1: JUMP 00000fc2: JUMPDEST 00000fc3: JUMPDEST 00000fc4: POP 00000fc5: POP 00000fc6: POP 00000fc7: JUMP 00000fc8: JUMPDEST 00000fc9: POP 00000fca: DUP1 00000fcb: SLOAD 00000fcc: PUSH1 0x00 00000fce: DUP3 00000fcf: SSTORE 00000fd0: SWAP1 00000fd1: PUSH1 0x00 00000fd3: MSTORE 00000fd4: PUSH1 0x20 00000fd6: PUSH1 0x00 00000fd8: KECCAK256 00000fd9: SWAP1 00000fda: DUP2 00000fdb: ADD 00000fdc: SWAP1 00000fdd: PUSH2 0x0e3f 00000fe0: SWAP2 00000fe1: SWAP1 00000fe2: PUSH2 0x0fea 00000fe5: JUMP 00000fe6: JUMPDEST 00000fe7: JUMPDEST 00000fe8: POP 00000fe9: JUMP 00000fea: JUMPDEST 00000feb: PUSH2 0x1008 00000fee: SWAP2 00000fef: SWAP1 00000ff0: JUMPDEST 00000ff1: DUP1 00000ff2: DUP3 00000ff3: GT 00000ff4: ISZERO 00000ff5: PUSH2 0x0f9a 00000ff8: JUMPI 00000ff9: PUSH1 0x00 00000ffb: DUP2 00000ffc: SSTORE 00000ffd: PUSH1 0x01 00000fff: ADD 00001000: PUSH2 0x0ff0 00001003: JUMP 00001004: JUMPDEST 00001005: POP 00001006: SWAP1 00001007: JUMP 00001008: JUMPDEST 00001009: SWAP1 0000100a: JUMP 0000100b: JUMPDEST 0000100c: PUSH2 0x1008 0000100f: SWAP2 00001010: SWAP1 00001011: JUMPDEST 00001012: DUP1 00001013: DUP3 00001014: GT 00001015: ISZERO 00001016: PUSH2 0x0f9a 00001019: JUMPI 0000101a: PUSH1 0x00 0000101c: DUP2 0000101d: SSTORE 0000101e: PUSH1 0x01 00001020: ADD 00001021: PUSH2 0x0ff0 00001024: JUMP 00001025: JUMPDEST 00001026: POP 00001027: SWAP1 00001028: JUMP 00001029: JUMPDEST 0000102a: SWAP1 0000102b: JUMP 0000102c: STOP 0000102d: LOG1 0000102e: PUSH6 0x627a7a723058 00001035: KECCAK256 00001036: UNKNOWN(0xDC) 00001037: UNKNOWN(0xB3) 00001038: JUMPI 00001039: CALLVALUE 0000103a: PUSH4 0xd41a0ca3 0000103f: PUSH5 0x634c48e68c 00001045: UNKNOWN(0xAC) 00001046: UNKNOWN(0xD9) 00001047: UNKNOWN(0xFB) 00001048: UNKNOWN(0xCA) 00001049: CALLVALUE 0000104a: UNKNOWN(0xD9) 0000104b: ADD 0000104c: DUP7 0000104d: CALLDATASIZE 0000104e: UNKNOWN(0xAF) 0000104f: JUMPI 00001050: PUSH30
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | reentrancy | slither | Reentrancy in Wallet.confirm(bytes32) (contracts/Contract.sol#301-308): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "confirm",
"type": "function",
"source_mapping": {
"lines": [
301,
302,
303,
304,
305,
306,
307,
308
],
"start": 11239,
"length": 335,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "confirm(bytes32)"
}
},
{
"name": "x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data)",
"type": "node",
"source_mapping": {
"lines": [
304,
305,
306
],
"start": 11349,
"length": 63,
"ending_column": 51,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "confirm",
"type": "function",
"source_mapping": {
"lines": [
301,
302,
303,
304,
305,
306,
307,
308
],
"start": 11239,
"length": 335,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "confirm(bytes32)"
}
}
}
},
{
"name": "delete m_txs[_h]",
"type": "node",
"source_mapping": {
"lines": [
307
],
"start": 11516,
"length": 16,
"ending_column": 64,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 48,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "m_txs",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "confirm",
"type": "function",
"source_mapping": {
"lines": [
301,
302,
303,
304,
305,
306,
307,
308
],
"start": 11239,
"length": 335,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "confirm(bytes32)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "confirm",
"type": "function",
"lines": [
301,
302,
303,
304,
305,
306,
307,
308
]
},
{
"file": "contracts/Contract.sol",
"name": "x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data)",
"type": "node",
"lines": [
304,
305,
306
]
},
{
"file": "contracts/Contract.sol",
"name": "delete m_txs[_h]",
"type": "node",
"lines": [
307
]
}
],
"description": "Reentrancy in Wallet.confirm(bytes32) (contracts/Contract.sol#301-308):\n\tExternal calls:\n\t- x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306)\n\tState variables written after the call(s):\n\t- delete m_txs[_h] (contracts/Contract.sol#307)\n\tWallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies:\n\t- Wallet.clearPending() (contracts/Contract.sol#309-312)\n\t- Wallet.confirm(bytes32) (contracts/Contract.sol#301-308)\n\t- Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296)"
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x4bf04d5dd053076cd7d5bab38fab1eab4e57d8201cba90ef991b4b333cb493a4
call_targets:
0x3792d288d9f0993971f23e4758acb719f285f6ef
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4bf04d5dd053076cd7d5bab38fab1eab4e57d8201cba90ef991b4b333cb493a4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x3792d288d9f0993971f23e4758acb719f285f6ef"
],
"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": "0x173825d9",
"selector": "0x173825d9",
"calldata_variants": [
"0x173825d9",
"0x173825d90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4123cb6b",
"selector": "0x4123cb6b",
"calldata_variants": [
"0x4123cb6b",
"0x4123cb6b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7065cb48",
"selector": "0x7065cb48",
"calldata_variants": [
"0x7065cb48",
"0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x746c9171",
"selector": "0x746c9171",
"calldata_variants": [
"0x746c9171",
"0x746c91710000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x797af627",
"selector": "0x797af627",
"calldata_variants": [
"0x797af627",
"0x797af6270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb61d27f6",
"selector": "0xb61d27f6",
"calldata_variants": [
"0xb61d27f6",
"0xb61d27f60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb75c7dc6",
"selector": "0xb75c7dc6",
"calldata_variants": [
"0xb75c7dc6",
"0xb75c7dc60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1497,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x4bf04d5dd053076cd7d5bab38fab1eab4e57d8201cba90ef991b4b333cb493a4
call_targets:
0x3792d288d9f0993971f23e4758acb719f285f6ef
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4bf04d5dd053076cd7d5bab38fab1eab4e57d8201cba90ef991b4b333cb493a4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x3792d288d9f0993971f23e4758acb719f285f6ef"
],
"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": "0x173825d9",
"selector": "0x173825d9",
"calldata_variants": [
"0x173825d9",
"0x173825d90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x4123cb6b",
"selector": "0x4123cb6b",
"calldata_variants": [
"0x4123cb6b",
"0x4123cb6b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7065cb48",
"selector": "0x7065cb48",
"calldata_variants": [
"0x7065cb48",
"0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x746c9171",
"selector": "0x746c9171",
"calldata_variants": [
"0x746c9171",
"0x746c91710000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x797af627",
"selector": "0x797af627",
"calldata_variants": [
"0x797af627",
"0x797af6270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb61d27f6",
"selector": "0xb61d27f6",
"calldata_variants": [
"0xb61d27f6",
"0xb61d27f60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xb75c7dc6",
"selector": "0xb75c7dc6",
"calldata_variants": [
"0xb75c7dc6",
"0xb75c7dc60000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1497,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|
| high | reentrancy | slither | Reentrancy in Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296): | 85 | no | — |
viewevidence_json{
"impact": "High",
"detector": "reentrancy-eth",
"elements": [
{
"name": "execute",
"type": "function",
"source_mapping": {
"lines": [
292,
293,
294,
295,
296
],
"start": 10631,
"length": 420,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 5,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "execute(address,uint256,bytes)"
}
},
{
"name": "! confirm(_r) && m_txs[_r].to == 0",
"type": "node",
"source_mapping": {
"lines": [
293,
294
],
"start": 10825,
"length": 33,
"ending_column": 31,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 96,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls"
},
"type_specific_fields": {
"parent": {
"name": "execute",
"type": "function",
"source_mapping": {
"lines": [
292,
293,
294,
295,
296
],
"start": 10631,
"length": 420,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 5,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "execute(address,uint256,bytes)"
}
}
}
},
{
"name": "x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data)",
"type": "node",
"source_mapping": {
"lines": [
304,
305,
306
],
"start": 11349,
"length": 63,
"ending_column": 51,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 1,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"underlying_type": "external_calls_sending_eth"
},
"type_specific_fields": {
"parent": {
"name": "confirm",
"type": "function",
"source_mapping": {
"lines": [
301,
302,
303,
304,
305,
306,
307,
308
],
"start": 11239,
"length": 335,
"ending_column": 33,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 8,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "confirm(bytes32)"
}
}
}
},
{
"name": "m_txs[_r].to = _to",
"type": "node",
"source_mapping": {
"lines": [
294
],
"start": 10874,
"length": 18,
"ending_column": 65,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 47,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "m_txs",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "execute",
"type": "function",
"source_mapping": {
"lines": [
292,
293,
294,
295,
296
],
"start": 10631,
"length": 420,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 5,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "execute(address,uint256,bytes)"
}
}
}
},
{
"name": "m_txs[_r].value = _value",
"type": "node",
"source_mapping": {
"lines": [
294,
295
],
"start": 10906,
"length": 24,
"ending_column": 10,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 79,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"additional_fields": {
"variable_name": "m_txs",
"underlying_type": "variables_written"
},
"type_specific_fields": {
"parent": {
"name": "execute",
"type": "function",
"source_mapping": {
"lines": [
292,
293,
294,
295,
296
],
"start": 10631,
"length": 420,
"ending_column": 28,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 5,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
},
"type_specific_fields": {
"parent": {
"name": "Wallet",
"type": "contract",
"source_mapping": {
"lines": [
256,
257,
258,
259,
260,
261,
262,
263,
264,
265,
266,
267,
268,
269,
270,
271,
272,
273,
274,
275,
276,
277,
278,
279,
280,
281,
282,
283,
284,
285,
286,
287,
288,
289,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
300,
301,
302,
303,
304,
305,
306,
307,
308,
309,
310,
311,
312,
313,
314,
315,
316,
317,
318
],
"start": 9582,
"length": 2340,
"ending_column": 2,
"is_dependency": false,
"filename_short": "contracts/Contract.sol",
"starting_column": 6,
"filename_absolute": "/tmp/slither-2i60cq9j/contracts/Contract.sol",
"filename_relative": "contracts/Contract.sol"
}
},
"signature": "execute(address,uint256,bytes)"
}
}
}
}
],
"locations": [
{
"file": "contracts/Contract.sol",
"name": "execute",
"type": "function",
"lines": [
292,
293,
294,
295,
296
]
},
{
"file": "contracts/Contract.sol",
"name": "! confirm(_r) && m_txs[_r].to == 0",
"type": "node",
"lines": [
293,
294
]
},
{
"file": "contracts/Contract.sol",
"name": "x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data)",
"type": "node",
"lines": [
304,
305,
306
]
},
{
"file": "contracts/Contract.sol",
"name": "m_txs[_r].to = _to",
"type": "node",
"lines": [
294
]
},
{
"file": "contracts/Contract.sol",
"name": "m_txs[_r].value = _value",
"type": "node",
"lines": [
294,
295
]
},
{
"file": "contracts/Contract.sol",
"name": "m_txs[_r].data = _data",
"type": "node",
"lines": [
295
]
}
],
"description": "Reentrancy in Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296):\n\tExternal calls:\n\t- ! confirm(_r) && m_txs[_r].to == 0 (contracts/Contract.sol#293-294)\n\t\t- x = m_txs[_h].to.call.value(m_txs[_h].value)(m_txs[_h].data) (contracts/Contract.sol#304-306)\n\tState variables written after the call(s):\n\t- m_txs[_r].to = _to (contracts/Contract.sol#294)\n\tWallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies:\n\t- Wallet.clearPending() (contracts/Contract.sol#309-312)\n\t- Wallet.confirm(bytes32) (contracts/Contract.sol#301-308)\n\t- Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296)\n\t- m_txs[_r].value = _value (contracts/Contract.sol#294-295)\n\tWallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies:\n\t- Wallet.clearPending() (contracts/Contract.sol#309-312)\n\t- Wallet.confirm(bytes32) (contracts/Contract.sol#301-308)\n\t- Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296)\n\t- m_txs[_r].data = _data (contracts/Contract.sol#295)\n\tWallet.m_txs (contracts/Contract.sol#314-317) can be used in cross function reentrancies:\n\t- Wallet.clearPending() (contracts/Contract.sol#309-312)\n\t- Wallet.confirm(bytes32) (contracts/Contract.sol#301-308)\n\t- Wallet.execute(address,uint256,bytes) (contracts/Contract.sol#292-296)"
}
|
| low | other | codex | Unchecked low-level call result drops failed transaction | 65 | no | — |
viewevidence_json{
"evidence": "`confirm` performs a low-level call, ignores its return value, emits success, and deletes the transaction unconditionally.",
"locations": [
"contracts/Contract.sol:308",
"contracts/Contract.sol:310",
"contracts/Contract.sol:311",
"contracts/Contract.sol:312"
],
"recommendation": "Check the return value of the low-level call and only delete the transaction (and emit success) on success. Otherwise keep the tx pending or emit a failure event and return false. Example: `bool ok = m_txs[_h].to.call.value(...)(...); if (!ok) return false;`.",
"exploit_scenario": "If a queued transaction\u2019s target contract reverts (or runs out of gas), `confirm` still emits `MultiTransact` and deletes the transaction. Owners may believe the transfer/execution succeeded even though no external effect occurred, and the failed operation cannot be retried without re-creating it."
}
|