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

Analysis Run

57ace033-9a1d-4d2f-b70e-f28fa74799da

failed
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 5:40 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30343 report.consolidate complete 1 / 1 3 months ago
74242 artifact.fetch failed 1 / 3 1 week ago
74243 tool.cast_disasm complete 1 / 3 1 week ago
74244 analysis.bundle complete 1 / 3 1 week ago
74245 capability.graph complete 1 / 3 1 week ago
74246 detector.run complete 1 / 3 1 week ago
74247 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes
Verified Source: yes

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
3
No findings?
no
Summary
Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.
View stderr
[codex:1033435] OpenAI Codex v0.77.0 (research preview)
[codex:1033435] --------
[codex:1033435] workdir: /tmp/codex-multi-_yfoll9b
[codex:1033435] model: gpt-5.2-codex
[codex:1033435] provider: openai
[codex:1033435] approval: never
[codex:1033435] sandbox: read-only
[codex:1033435] reasoning effort: xhigh
[codex:1033435] reasoning summaries: auto
[codex:1033435] session id: 019b6604-fd79-7f61-98b2-8f66be5f0b18
[codex:1033435] --------
[codex:1033435] user
[codex:1033435] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1033435] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1033435] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1033435] 
[codex:1033435] Scope rules:
[codex:1033435] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1033435] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1033435] 
[codex:1033435] Output MUST be valid JSON matching the provided schema.
[codex:1033435] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1033435] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1033435] 
[codex:1033435] Output constraints (IMPORTANT):
[codex:1033435] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1033435] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1033435] mcp startup: no servers
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Preparing to read AUDIT_BUNDLE file**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc ls in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] AUDIT_BUNDLE.txt
[codex:1033435] codex-output-schema.json
[codex:1033435] contracts
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reading AUDIT_BUNDLE.txt**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1033435] 
[codex:1033435] ================================================================================
[codex:1033435] FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManaged.sol)
[codex:1033435] 
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435] 
[codex:1033435] interface IAccessManaged {
[codex:1033435]     /**
[codex:1033435]      * @dev Authority that manages this contract was updated.
[codex:1033435]      */
[codex:1033435]     event AuthorityUpdated(address authority);
[codex:1033435] 
[codex:1033435]     error AccessManagedUnauthorized(address caller);
[codex:1033435]     error AccessManagedRequiredDelay(address caller, uint32 delay);
[codex:1033435]     error AccessManagedInvalidAuthority(address authority);
[codex:1033435] 
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Planning full AUDIT_BUNDLE read**
[codex:1033435] 
[codex:1033435] I’m investigating whether the AUDIT_BUNDLE fully includes only relevant first-party code or more third-party like OpenZeppelin, noting the output truncated at 64951 tokens. Since the file is 7640 lines long and system cuts messages, I plan to read it in chunks with sed or ripgrep to find all file boundaries and ensure I don't miss any critical first-party snippets. This way, I can confirm what the bundle truly contains before moving on.
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg "''^FILE:" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 4:FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] 40:FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManager.sol
[codex:1033435] 436:FILE: contracts/@openzeppelin/contracts/interfaces/IERC4626.sol
[codex:1033435] 670:FILE: contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol
[codex:1033435] 694:FILE: contracts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol
[codex:1033435] 859:FILE: contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol
[codex:1033435] 903:FILE: contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol
[codex:1033435] 1100:FILE: contracts/@openzeppelin/contracts/proxy/Proxy.sol
[codex:1033435] 1173:FILE: contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol
[codex:1033435] 1193:FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1033435] 1276:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
[codex:1033435] 1306:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
[codex:1033435] 1400:FILE: contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1033435] 1522:FILE: contracts/@openzeppelin/contracts/token/ERC721/IERC721.sol
[codex:1033435] 1661:FILE: contracts/@openzeppelin/contracts/utils/Address.sol
[codex:1033435] 1824:FILE: contracts/@openzeppelin/contracts/utils/StorageSlot.sol
[codex:1033435] 1963:FILE: contracts/@openzeppelin/contracts/utils/introspection/IERC165.sol
[codex:1033435] 1992:FILE: contracts/@openzeppelin/contracts/utils/math/Math.sol
[codex:1033435] 2411:FILE: contracts/@openzeppelin/contracts/utils/math/SafeCast.sol
[codex:1033435] 3568:FILE: contracts/@openzeppelin/contracts/utils/types/Time.sol
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Planning full AUDIT_BUNDLE review**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '1,2000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1033435] 
[codex:1033435] ================================================================================
[codex:1033435] FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManaged.sol)
[codex:1033435] 
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435] 
[codex:1033435] interface IAccessManaged {
[codex:1033435]     /**
[codex:1033435]      * @dev Authority that manages this contract was updated.
[codex:1033435]      */
[codex:1033435]     event AuthorityUpdated(address authority);
[codex:1033435] 
[codex:1033435]     error AccessManagedUnauthorized(address caller);
[codex:1033435]     error AccessManagedRequiredDelay(address caller, uint32 delay);
[codex:1033435]     error AccessManagedInvalidAuthority(address authority);
[codex:1033435] 
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Requesting additional file chunks**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '2001,4000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 7ms:
[codex:1033435]  */
[codex:1033435] library Math {
[codex:1033435]     /**
[codex:1033435]      * @dev Muldiv operation overflow.
[codex:1033435]      */
[codex:1033435]     error MathOverflowedMulDiv();
[codex:1033435] 
[codex:1033435]     enum Rounding {
[codex:1033435]         Floor, // Toward negative infinity
[codex:1033435]         Ceil, // Toward positive infinity
[codex:1033435]         Trunc, // Toward zero
[codex:1033435]         Expand // Away from zero
[codex:1033435]     }
[codex:1033435] 
[codex:1033435]     /**
[codex:1033435]      * @dev Returns the addition of two unsigned integers, with an overflow flag.
[codex:1033435]      */
[codex:1033435]     function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
[codex:1033435]         unchecked {
[codex:1033435]             uint256 c = a + b;
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Needing more content to proceed**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '4001,6000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 
[codex:1033435]     /// @inheritdoc IAccessManager
[codex:1033435]     function isTargetClosed(address target) public view virtual returns (bool) {
[codex:1033435]         AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435]         return $._targets[target].closed;
[codex:1033435]     }
[codex:1033435] 
[codex:1033435]     /// @inheritdoc IAccessManager
[codex:1033435]     function getTargetFunctionRole(address target, bytes4 selector) public view virtual returns (uint64) {
[codex:1033435]         AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435]         return $._targets[target].allowedRoles[selector];
[codex:1033435]     }
[codex:1033435] 
[codex:1033435]     /// @inheritdoc IAccessManager
[codex:1033435]     function getTargetAdminDelay(address target) public view virtual returns (uint32) {
[codex:1033435]         AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435]         return $._targets[target].adminDelay.get();
[codex:1033435]     }
[codex:1033435] 
[codex:1033435]     /// @inheritdoc IAccessManager
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Requesting final contract chunk**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6001,7640p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]     /// @param id The unique identifier for the position.
[codex:1033435]     /// @param trader The address of the trader who opened the position.
[codex:1033435]     /// @param currency The address of the currency to be paid for the position.
[codex:1033435]     /// @param collateralCurrency The address of the currency to be received for the position.
[codex:1033435]     /// @param lastFundingTimestamp The timestamp of the last funding payment.
[codex:1033435]     /// @param downPayment The initial down payment amount required to open the position (is in `currency` for long, `collateralCurrency` for short positions)
[codex:1033435]     /// @param principal The total principal amount to be borrowed for the position (is in `currency`)
[codex:1033435]     /// @param collateralAmount The total collateral amount to be received for the position (is in `collateralCurrency`)
[codex:1033435]     /// @param feesToBePaid The total fees to be paid for the position (is in `currency`)
[codex:1033435]     struct Position {
[codex:1033435]         uint256 id;
[codex:1033435]         address trader;
[codex:1033435]         address currency;
[codex:1033435]         address collateralCurrency;
[codex:1033435]         uint256 lastFundingTimestamp;
[codex:1033435]         uint256 downPayment;
[codex:1033435]         uint256 principal;
[codex:1033435]         uint256 collateralAmount;
[codex:1033435]         uint256 feesToBePaid;
[codex:1033435]     }
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Preparing to extract contract files**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '5842,6238p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/IWasabiPerps.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1033435] import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
[codex:1033435] import "./vaults/IWasabiVault.sol";
[codex:1033435] 
[codex:1033435] interface IWasabiPerps {
[codex:1033435] 
[codex:1033435]     error LiquidationThresholdNotReached(); // 0xc4d82e43
[codex:1033435]     error InvalidSignature(); // 0x8baa579f
[codex:1033435]     error PositionAlreadyTaken(); // 0xe168e4db
[codex:1033435]     error SwapFunctionNeeded(); // 0xac8da8e3
[codex:1033435]     error OrderExpired(); // 0xc56873ba
[codex:1033435]     error InvalidOrder(); // 0xaf610693
[codex:1033435]     error PriceTargetNotReached(); // 0x5d5ce003
[codex:1033435]     error InvalidCurrency(); // 0xf5993428
[codex:1033435]     error InvalidTargetCurrency(); // 0x0415b9ce
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing Perp interfaces and utilities**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6239,6344p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/PerpUtils.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1033435] import "./weth/IWETH.sol";
[codex:1033435] import {IWasabiPerps} from "./IWasabiPerps.sol";
[codex:1033435] 
[codex:1033435] library PerpUtils {
[codex:1033435]     using Address for address;
[codex:1033435]     using SafeERC20 for IERC20;
[codex:1033435] 
[codex:1033435]     /// @dev Pays ETH to a given address
[codex:1033435]     /// @param _amount The amount to pay
[codex:1033435]     /// @param _target The address to pay to
[codex:1033435]     function payETH(uint256 _amount, address _target) internal {
[codex:1033435]         if (_amount > 0) {
[codex:1033435]             (bool sent, ) = payable(_target).call{value: _amount}("");
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Investigating PerpUtils external calls**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6345,6397p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/IAddressProvider.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "../vaults/IWasabiVault.sol";
[codex:1033435] import "../router/IWasabiRouter.sol";
[codex:1033435] import "../util/IPartnerFeeManager.sol";
[codex:1033435] 
[codex:1033435] interface IAddressProvider {
[codex:1033435]     error InvalidAddress();
[codex:1033435]     error InvalidLiquidationFee();
[codex:1033435] 
[codex:1033435]     /// @dev Returns the Wasabi router
[codex:1033435]     function wasabiRouter() external view returns (IWasabiRouter);
[codex:1033435] 
[codex:1033435]     /// @dev Returns the fee receiver address
[codex:1033435]     function feeReceiver() external view returns (address);
[codex:1033435] 
[codex:1033435]     /// @dev Returns the WETH address
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing IAddressProvider and IDebtController interfaces**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6398,6491p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/admin/IDebtController.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] interface IDebtController {
[codex:1033435]     error InvalidValue();
[codex:1033435]     error IdenticalAddresses();
[codex:1033435]     error ZeroAddress();
[codex:1033435]     error PrincipalTooHigh(); // 0xd7cdb444
[codex:1033435] 
[codex:1033435]     event MaxLeverageChanged(address tokenA, address tokenB, uint256 maxLeverage);
[codex:1033435] 
[codex:1033435]     event LiquidationThresholdChanged(address tokenA, address tokenB, uint256 liquidationThresholdBps);
[codex:1033435] 
[codex:1033435]     /// @dev Returns the maximum apy
[codex:1033435]     /// @notice The maximum apy is a percentage, e.g. 300% APY = 300
[codex:1033435]     function maxApy() external view returns (uint256);
[codex:1033435] 
[codex:1033435]     /// @dev Returns the liquidation fee bps
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing IPerpManager segment**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6492,6540p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/IPerpManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] interface IPerpManager {
[codex:1033435]     error AlreadyMigrated();
[codex:1033435]     error InvalidLength();
[codex:1033435] 
[codex:1033435]     event AuthorizedSignerChanged(
[codex:1033435]         address indexed trader,
[codex:1033435]         address indexed signer,
[codex:1033435]         bool isAuthorized
[codex:1033435]     );
[codex:1033435] 
[codex:1033435]     /// @dev check if account is admin and revert if not
[codex:1033435]     function isAdmin(address account) external view;
[codex:1033435] 
[codex:1033435]     /// @dev check if account has the given role and revert if not
[codex:1033435]     /// @param roleId role id
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing PerpManager contract**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6541,6888p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/PerpManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
[codex:1033435] 
[codex:1033435] import "./IPerpManager.sol";
[codex:1033435] import "./Roles.sol";
[codex:1033435] import "./IAddressProvider.sol";
[codex:1033435] import "./IDebtController.sol";
[codex:1033435] import "../vaults/IWasabiVault.sol";
[codex:1033435] import "../router/IWasabiRouter.sol";
[codex:1033435] 
[codex:1033435] contract PerpManager is UUPSUpgradeable, AccessManagerUpgradeable, IPerpManager, IAddressProvider, IDebtController {
[codex:1033435]     uint256 public constant LEVERAGE_DENOMINATOR = 100;
[codex:1033435]     uint256 public constant APY_DENOMINATOR = 100;
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Checking AccessManager for vulnerabilities**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6889,6901p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/admin/Roles.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] library Roles {
[codex:1033435]     uint64 public constant LIQUIDATOR_ROLE = 100;
[codex:1033435]     uint64 public constant ORDER_SIGNER_ROLE = 101;
[codex:1033435]     uint64 public constant ORDER_EXECUTOR_ROLE = 102;
[codex:1033435]     uint64 public constant VAULT_ADMIN_ROLE = 103;
[codex:1033435] }
[codex:1033435] 
[codex:1033435] ================================================================================
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Checking IWasabiRouter implementation**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6902,7031p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/router/IWasabiRouter.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "../IWasabiPerps.sol";
[codex:1033435] import "../weth/IWETH.sol";
[codex:1033435] 
[codex:1033435] interface IWasabiRouter {
[codex:1033435] 
[codex:1033435]     event PositionOpenedWithOrder(address _trader, bytes32 _orderHash);
[codex:1033435] 
[codex:1033435]     error InvalidTrader(); // 0xfb7595a2
[codex:1033435]     error InvalidSignature(); // 0x8baa579f
[codex:1033435]     error InvalidPool(); // 0x2083cd40
[codex:1033435]     error InvalidETHReceived(); // 0x3daee882
[codex:1033435]     error InvalidFeeBips(); // 0x82c96382
[codex:1033435]     error FeeReceiverNotSet(); // 0x0b37568b
[codex:1033435]     error OrderAlreadyUsed(); // 0x88b39043
[codex:1033435] 
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing IStrategy interface**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7032,7071p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/strategy/IStrategy.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] interface IStrategy {
[codex:1033435]     error OnlyVault();
[codex:1033435] 
[codex:1033435]     /// @dev The vault that the strategy is attached to
[codex:1033435]     function vault() external view returns (address);
[codex:1033435] 
[codex:1033435]     /// @dev The asset that the strategy deposits and withdraws
[codex:1033435]     function asset() external view returns (address);
[codex:1033435] 
[codex:1033435]     /// @dev The collateral asset that the strategy holds
[codex:1033435]     function collateralAsset() external view returns (address);
[codex:1033435] 
[codex:1033435]     /// @dev Deposits the asset into the strategy
[codex:1033435]     /// @notice The vault should transfer the asset to the strategy before calling this function
[codex:1033435]     /// @param amount The amount of asset to deposit
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing IPartnerFeeManager section**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7072,7124p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/util/IPartnerFeeManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] interface IPartnerFeeManager {
[codex:1033435]     error AddressNotPartner();
[codex:1033435]     error CallerNotPool();
[codex:1033435]     error InvalidFeeShareBips();
[codex:1033435] 
[codex:1033435]     event FeesAccrued(address indexed partner, address indexed feeToken, uint256 amount);
[codex:1033435]     event FeesClaimed(address indexed partner, address indexed feeToken, uint256 amount);
[codex:1033435] 
[codex:1033435]     /// @dev Returns true if the given address is a partner
[codex:1033435]     /// @param partner the address to check 
[codex:1033435]     /// @return true if the given address is a partner, false otherwise
[codex:1033435]     function isPartner(address partner) external view returns (bool);
[codex:1033435] 
[codex:1033435]     /// @dev Returns the accrued fees for the given partner and fee token
[codex:1033435]     /// @param partner the partner to get accrued fees for
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing IWasabiVault code section**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7125,7237p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/vaults/IWasabiVault.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435] 
[codex:1033435] import "@openzeppelin/contracts/interfaces/IERC4626.sol";
[codex:1033435] 
[codex:1033435] interface IWasabiVault is IERC4626  {
[codex:1033435]     error AlreadyMigrated(); // 0xca1c3cbc
[codex:1033435]     error PrincipalTooHigh(); // 0xd7cdb444
[codex:1033435]     error InsufficientAvailablePrincipal(); // 0x836ee0c2
[codex:1033435]     error InsufficientPrincipalRepaid(); // 0xb0f8fc9b
[codex:1033435]     error CannotClaimNonYieldBearingAsset(address _asset); // 0x4cfaa278
[codex:1033435]     error EthTransferFailed(); // 0x6d963f88
[codex:1033435]     error CannotDepositEth(); // 0x2e15428f
[codex:1033435]     error CallerNotPool(); // 0xe9211597
[codex:1033435]     error InvalidEthAmount(); // 0x0772327b
[codex:1033435]     error InvalidAmount(); // 0x2c5211c6
[codex:1033435]     error NoDustToClean(); // 0x37e34f38
[codex:1033435]     error AmountExceedsDebt(); // 0x64ddcf37
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Analyzing upgrade and access control patterns**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '4831,4987p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)
[codex:1033435] 
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435] 
[codex:1033435] import {IERC1822Proxiable} from "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";
[codex:1033435] import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
[codex:1033435] import {Initializable} from "./Initializable.sol";
[codex:1033435] 
[codex:1033435] /**
[codex:1033435]  * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
[codex:1033435]  * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
[codex:1033435]  *
[codex:1033435]  * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
[codex:1033435]  * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
[codex:1033435]  * `UUPSUpgradeable` with a custom implementation of upgrades.
[codex:1033435]  *
[codex:1033435]  * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
[codex:1033435] 
[codex:1033435] 
[codex:1033435] 
[codex:1033435] 
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Analyzing vault asset accounting and access controls**
[codex:1033435] thinking
[codex:1033435] **Examining role delay bypass and fee minting nuances**
[codex:1033435] 
[codex:1033435] There's a governance gap where PerpManager’s admin actions bypass configured role delays, allowing immediate execution even if delays are set. I’m also looking at inconsistent timing in minting fee shares around interest updates, which may cause fee recipients to get slightly more or less than intended—an accounting mismatch that could affect share dilution but isn’t straightforwardly exploitable. Let's keep these complexities in mind as I keep analyzing!
[codex:1033435] thinking
[codex:1033435] **Identifying access control gaps and reentrancy concerns**
[codex:1033435] 
[codex:1033435] I’m digging into several design choices that could lead to bypassing execution delays in AccessManager roles, potential reentrancy risks when interacting with external strategies, and nuanced admin control issues—like how cleaning “dust” assets or upgrading contracts might behave unexpectedly due to role checks or external calls. These areas seem to hinge on trust assumptions and could cause subtle issues if misused.
[codex:1033435] thinking
[codex:1033435] **Evaluating strategy loss accounting and upgrade authorization**
[codex:1033435] 
[codex:1033435] I’m exploring how strategy withdrawals don’t adjust totalAssetValue for losses, risking overstated share prices and potential insolvency; plus, the vault upgrade flow may fail if the manager contract itself lacks admin role, blocking upgrades despite admin calls. These gaps highlight subtle design and access control interactions affecting fund accuracy and upgradeability.
[codex:1033435] thinking
[codex:1033435] **Examining role implications in vault upgrade and admin calls**
[codex:1033435] 
[codex:1033435] I’m analyzing how granting the PerpManager contract admin role affects vault upgrades and access checks, noting that this setup lets PerpManager-originated calls pass onlyAdmin checks without enforcing delays, which aligns with the earlier delay bypass concern and impacts vault function authorization.
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg -n "recordRepayment|_handleInterestFee" contracts/contracts/vaults/WasabiVault.sol' in /tmp/codex-multi-_yfoll9b succeeded in 8ms:
[codex:1033435] 184:    function recordRepayment(uint256 _totalRepaid, uint256 _principal, bool _isLiquidation) external onlyPool {
[codex:1033435] 193:            _handleInterestFee(interestPaid);
[codex:1033435] 346:        _handleInterestFee(interestReceived);
[codex:1033435] 351:    function _handleInterestFee(uint256 _interestAmount) internal {
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Locating recordRepayment function lines**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '170,220p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]    170	
[codex:1033435]    171	        return shares;
[codex:1033435]    172	    }
[codex:1033435]    173	
[codex:1033435]    174	    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435]    175	    /*                        POOL FUNCTIONS                      */
[codex:1033435]    176	    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
[codex:1033435]    177	
[codex:1033435]    178	    /// @inheritdoc IWasabiVault
[codex:1033435]    179	    function borrow(uint256 _amount) external onlyPool {
[codex:1033435]    180	        _borrow(msg.sender, _amount);
[codex:1033435]    181	    }
[codex:1033435]    182	
[codex:1033435]    183	    /// @inheritdoc IWasabiVault
[codex:1033435]    184	    function recordRepayment(uint256 _totalRepaid, uint256 _principal, bool _isLiquidation) external onlyPool {
[codex:1033435]    185	        if (_totalRepaid < _principal) {
[codex:1033435]    186	            // Only liquidations can cause bad debt
[codex:1033435]    187	            if (!_isLiquidation) revert InsufficientPrincipalRepaid();
[codex:1033435]    188	            uint256 loss = _principal - _totalRepaid;
[codex:1033435]    189	            totalAssetValue -= loss;
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Seeking line numbers for specific functions**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '320,380p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]    320	            totalAssetValue = 0;
[codex:1033435]    321	        }
[codex:1033435]    322	
[codex:1033435]    323	        IERC20(asset()).safeTransfer(receiver, assets);
[codex:1033435]    324	
[codex:1033435]    325	        emit Withdraw(caller, receiver, owner, assets, shares);
[codex:1033435]    326	    }
[codex:1033435]    327	
[codex:1033435]    328	    function _borrow(address _receiver, uint256 _amount) internal {
[codex:1033435]    329	        IERC20 assetToken = IERC20(asset());
[codex:1033435]    330	        if (assetToken.balanceOf(address(this)) < _amount) {
[codex:1033435]    331	            revert InsufficientAvailablePrincipal();
[codex:1033435]    332	        }
[codex:1033435]    333	        assetToken.safeTransfer(_receiver, _amount);
[codex:1033435]    334	    }
[codex:1033435]    335	
[codex:1033435]    336	    function _strategyClaim(address _strategy) internal {
[codex:1033435]    337	        // Get the interest earned since the last observed amount
[codex:1033435]    338	        uint256 interestReceived = IStrategy(_strategy).getNewInterest(strategyDebt[_strategy]);
[codex:1033435]    339	        if (interestReceived == 0) return;
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Searching for access control locations**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "rg -n \"isAdmin\\(|checkRole\\(\" contracts/contracts/admin/PerpManager.sol" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 56:        isAdmin(msg.sender);
[codex:1033435] 61:        checkRole(Roles.VAULT_ADMIN_ROLE, msg.sender);
[codex:1033435] 148:    function isAdmin(address account) public view {
[codex:1033435] 149:        checkRole(ADMIN_ROLE, account);
[codex:1033435] 153:    function checkRole(uint64 roleId, address account) public view {
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Reviewing checkRole usage**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/admin/PerpManager.sol | sed -n '130,170p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]    130	        uint256 _maxApy
[codex:1033435]    131	    ) external onlyAdmin {
[codex:1033435]    132	        if (wethAddress != address(0)) revert AlreadyMigrated();
[codex:1033435]    133	        wasabiRouter = _wasabiRouter;
[codex:1033435]    134	        feeReceiver = _feeReceiver;
[codex:1033435]    135	        wethAddress = _wethAddress;
[codex:1033435]    136	        liquidationFeeReceiver = _liquidationFeeReceiver;
[codex:1033435]    137	        stakingAccountFactory = _stakingAccountFactory;
[codex:1033435]    138	        partnerFeeManager = _partnerFeeManager;
[codex:1033435]    139	        maxApy = _maxApy;
[codex:1033435]    140	        liquidationFeeBps = 500; // 5%
[codex:1033435]    141	    }
[codex:1033435]    142	
[codex:1033435]    143	    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435]    144	    /*                     IPerpManager Views                     */
[codex:1033435]    145	    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
[codex:1033435]    146	
[codex:1033435]    147	    /// @inheritdoc IPerpManager
[codex:1033435]    148	    function isAdmin(address account) public view {
[codex:1033435]    149	        checkRole(ADMIN_ROLE, account);
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Searching for access control modifiers**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg -n "modifier onlyAdmin|modifier onlyRole" contracts/contracts/vaults/WasabiVault.sol' in /tmp/codex-multi-_yfoll9b succeeded in 7ms:
[codex:1033435] 104:    modifier onlyAdmin() {
[codex:1033435] 110:    modifier onlyRole(uint64 roleId) {
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '96,120p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]     96	        if (msg.sender != address(shortPool)) {
[codex:1033435]     97	            // Nested checks save a little gas compared to using &&
[codex:1033435]     98	            if (msg.sender != address(longPool)) revert CallerNotPool();
[codex:1033435]     99	        }
[codex:1033435]    100	        _;
[codex:1033435]    101	    }
[codex:1033435]    102	
[codex:1033435]    103	    /// @dev Checks if the caller is an admin
[codex:1033435]    104	    modifier onlyAdmin() {
[codex:1033435]    105	        _getManager().isAdmin(msg.sender);
[codex:1033435]    106	        _;
[codex:1033435]    107	    }
[codex:1033435]    108	
[codex:1033435]    109	    /// @dev Checks if the caller has the correct role
[codex:1033435]    110	    modifier onlyRole(uint64 roleId) {
[codex:1033435]    111	        _getManager().checkRole(roleId, msg.sender);
[codex:1033435]    112	        _;
[codex:1033435]    113	    }
[codex:1033435]    114	
[codex:1033435]    115	    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Analyzing potential vulnerabilities in PerpManager and WasabiVault**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '214,250p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]    214	    }
[codex:1033435]    215	
[codex:1033435]    216	    /// @inheritdoc IWasabiVault
[codex:1033435]    217	    function strategyWithdraw(address _strategy, uint256 _withdrawAmount) external onlyAdmin {
[codex:1033435]    218	        // Claim any interest earned on deposits first
[codex:1033435]    219	        _strategyClaim(_strategy);
[codex:1033435]    220	        // Check the withdraw amount - 0 is used to withdraw all deposits
[codex:1033435]    221	        if (_withdrawAmount == 0) {
[codex:1033435]    222	            _withdrawAmount = strategyDebt[_strategy];
[codex:1033435]    223	        }
[codex:1033435]    224	        if (_withdrawAmount > strategyDebt[_strategy]) {
[codex:1033435]    225	            revert AmountExceedsDebt();
[codex:1033435]    226	        }
[codex:1033435]    227	        // Withdraw the assets from the strategy contract
[codex:1033435]    228	        (address collateral, uint256 collateralSold) = IStrategy(_strategy).withdraw(_withdrawAmount);
[codex:1033435]    229	        // Update the strategy debt
[codex:1033435]    230	        strategyDebt[_strategy] -= _withdrawAmount;
[codex:1033435]    231	        // Emit the event
[codex:1033435]    232	        emit StrategyWithdraw(_strategy, collateral, _withdrawAmount, collateralSold);
[codex:1033435]    233	    }
[codex:1033435] 
[codex:1033435] thinking
[codex:1033435] **Preparing detailed audit findings**
[codex:1033435] codex
[codex:1033435] {"no_findings":false,"summary":"Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.","findings":[{"severity":"medium","category":"access_control","title":"AccessManager execution delays are bypassed for PerpManager/Vault privileged actions","exploit_scenario":"If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window.","recommendation":"Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.","evidence":"`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.","locations":["contracts/contracts/admin/PerpManager.sol:148","contracts/contracts/admin/PerpManager.sol:153","contracts/contracts/vaults/WasabiVault.sol:104","contracts/contracts/vaults/WasabiVault.sol:110"]},{"severity":"low","category":"math","title":"Interest fee shares are minted before interest is added, inflating fees","exploit_scenario":"When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets.","recommendation":"Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).","evidence":"`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.","locations":["contracts/contracts/vaults/WasabiVault.sol:184","contracts/contracts/vaults/WasabiVault.sol:193","contracts/contracts/vaults/WasabiVault.sol:351"]},{"severity":"medium","category":"other","title":"Strategy withdrawals do not reconcile actual assets returned, overstating total assets","exploit_scenario":"If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts.","recommendation":"Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.","evidence":"`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.","locations":["contracts/contracts/vaults/WasabiVault.sol:217","contracts/contracts/vaults/WasabiVault.sol:228","contracts/contracts/vaults/WasabiVault.sol:230"]}]}
[codex:1033435] tokens used
[codex:1033435] 104,390
[codex:1033435] {"no_findings":false,"summary":"Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.","findings":[{"severity":"medium","category":"access_control","title":"AccessManager execution delays are bypassed for PerpManager/Vault privileged actions","exploit_scenario":"If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window.","recommendation":"Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.","evidence":"`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.","locations":["contracts/contracts/admin/PerpManager.sol:148","contracts/contracts/admin/PerpManager.sol:153","contracts/contracts/vaults/WasabiVault.sol:104","contracts/contracts/vaults/WasabiVault.sol:110"]},{"severity":"low","category":"math","title":"Interest fee shares are minted before interest is added, inflating fees","exploit_scenario":"When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets.","recommendation":"Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).","evidence":"`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.","locations":["contracts/contracts/vaults/WasabiVault.sol:184","contracts/contracts/vaults/WasabiVault.sol:193","contracts/contracts/vaults/WasabiVault.sol:351"]},{"severity":"medium","category":"other","title":"Strategy withdrawals do not reconcile actual assets returned, overstating total assets","exploit_scenario":"If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts.","recommendation":"Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.","evidence":"`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.","locations":["contracts/contracts/vaults/WasabiVault.sol:217","contracts/contracts/vaults/WasabiVault.sol:228","contracts/contracts/vaults/WasabiVault.sol:230"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T17:40:59.074185+00:00",
        "returncode": 0
    },
    "summary": "Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.",
    "raw_final": {
        "summary": "Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.",
        "findings": [
            {
                "title": "AccessManager execution delays are bypassed for PerpManager/Vault privileged actions",
                "category": "access_control",
                "evidence": "`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/admin/PerpManager.sol:148",
                    "contracts/contracts/admin/PerpManager.sol:153",
                    "contracts/contracts/vaults/WasabiVault.sol:104",
                    "contracts/contracts/vaults/WasabiVault.sol:110"
                ],
                "recommendation": "Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.",
                "exploit_scenario": "If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window."
            },
            {
                "title": "Interest fee shares are minted before interest is added, inflating fees",
                "category": "math",
                "evidence": "`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/vaults/WasabiVault.sol:184",
                    "contracts/contracts/vaults/WasabiVault.sol:193",
                    "contracts/contracts/vaults/WasabiVault.sol:351"
                ],
                "recommendation": "Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).",
                "exploit_scenario": "When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets."
            },
            {
                "title": "Strategy withdrawals do not reconcile actual assets returned, overstating total assets",
                "category": "other",
                "evidence": "`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/vaults/WasabiVault.sol:217",
                    "contracts/contracts/vaults/WasabiVault.sol:228",
                    "contracts/contracts/vaults/WasabiVault.sol:230"
                ],
                "recommendation": "Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.",
                "exploit_scenario": "If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
3
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
21
EXT*/BALANCE
12
Total opcodes
8616
Flags
delegatecall_present heavy_ext_balance_usage call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x02ff
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x8f90ae5a
00000019: GT
0000001a: PUSH2 0x0190
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xba087652
00000024: GT
00000025: PUSH2 0x00dc
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xd905777e
0000002f: GT
00000030: PUSH2 0x0095
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xef8b30f7
0000003a: GT
0000003b: PUSH2 0x006f
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xef8b30f7
00000045: EQ
00000046: PUSH2 0x0806
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf14faf6f
00000050: EQ
00000051: PUSH2 0x08c6
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xf2fde38b
0000005b: EQ
0000005c: PUSH2 0x08e6
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0xf4b70990
00000066: EQ
00000067: PUSH2 0x0906
0000006a: JUMPI
0000006b: PUSH1 0x00
0000006d: DUP1
0000006e: REVERT
0000006f: JUMPDEST
00000070: DUP1
00000071: PUSH4 0xd905777e
00000076: EQ
00000077: PUSH2 0x0866
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0xdd62ed3e
00000081: EQ
00000082: PUSH2 0x0886
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xe42d19dc
0000008c: EQ
0000008d: PUSH2 0x08a6
00000090: JUMPI
00000091: PUSH1 0x00
00000093: DUP1
00000094: REVERT
00000095: JUMPDEST
00000096: DUP1
00000097: PUSH4 0xba087652
0000009c: EQ
0000009d: PUSH2 0x07a4
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0xc5ebeaec
000000a7: EQ
000000a8: PUSH2 0x07c4
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0xc63d75b6
000000b2: EQ
000000b3: PUSH2 0x07e4
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0xc6e6f592
000000bd: EQ
000000be: PUSH2 0x0806
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0xce96cb77
000000c8: EQ
000000c9: PUSH2 0x0826
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0xd03d421c
000000d3: EQ
000000d4: PUSH2 0x0846
000000d7: JUMPI
000000d8: PUSH1 0x00
000000da: DUP1
000000db: REVERT
000000dc: JUMPDEST
000000dd: DUP1
000000de: PUSH4 0xa9059cbb
000000e3: GT
000000e4: PUSH2 0x0149
000000e7: JUMPI
000000e8: DUP1
000000e9: PUSH4 0xad9d4ba3
000000ee: GT
000000ef: PUSH2 0x0123
000000f2: JUMPI
000000f3: DUP1
000000f4: PUSH4 0xad9d4ba3
000000f9: EQ
000000fa: PUSH2 0x0731
000000fd: JUMPI
000000fe: DUP1
000000ff: PUSH4 0xb3d7f6b9
00000104: EQ
00000105: PUSH2 0x0744
00000108: JUMPI
00000109: DUP1
0000010a: PUSH4 0xb460af94
0000010f: EQ
00000110: PUSH2 0x0764
00000113: JUMPI
00000114: DUP1
00000115: PUSH4 0xb8fae763
0000011a: EQ
0000011b: PUSH2 0x0784
0000011e: JUMPI
0000011f: PUSH1 0x00
00000121: DUP1
00000122: REVERT
00000123: JUMPDEST
00000124: DUP1
00000125: PUSH4 0xa9059cbb
0000012a: EQ
0000012b: PUSH2 0x06c0
0000012e: JUMPI
0000012f: DUP1
00000130: PUSH4 0xa9e97500
00000135: EQ
00000136: PUSH2 0x06e0
00000139: JUMPI
0000013a: DUP1
0000013b: PUSH4 0xad3cb1cc
00000140: EQ
00000141: PUSH2 0x0700
00000144: JUMPI
00000145: PUSH1 0x00
00000147: DUP1
00000148: REVERT
00000149: JUMPDEST
0000014a: DUP1
0000014b: PUSH4 0x8f90ae5a
00000150: EQ
00000151: PUSH2 0x0615
00000154: JUMPI
00000155: DUP1
00000156: PUSH4 0x9317c200
0000015b: EQ
0000015c: PUSH2 0x062b
0000015f: JUMPI
00000160: DUP1
00000161: PUSH4 0x94bf804d
00000166: EQ
00000167: PUSH2 0x064b
0000016a: JUMPI
0000016b: DUP1
0000016c: PUSH4 0x95d89b41
00000171: EQ
00000172: PUSH2 0x066b
00000175: JUMPI
00000176: DUP1
00000177: PUSH4 0x9b845cdd
0000017c: EQ
0000017d: PUSH2 0x0680
00000180: JUMPI
00000181: DUP1
00000182: PUSH4 0x9c307ca2
00000187: EQ
00000188: PUSH2 0x06a0
0000018b: JUMPI
0000018c: PUSH1 0x00
0000018e: DUP1
0000018f: REVERT
00000190: JUMPDEST
00000191: DUP1
00000192: PUSH4 0x4cdad506
00000197: GT
00000198: PUSH2 0x024f
0000019b: JUMPI
0000019c: DUP1
0000019d: PUSH4 0x6e553f65
000001a2: GT
000001a3: PUSH2 0x0208
000001a6: JUMPI
000001a7: DUP1
000001a8: PUSH4 0x715018a6
000001ad: GT
000001ae: PUSH2 0x01e2
000001b1: JUMPI
000001b2: DUP1
000001b3: PUSH4 0x715018a6
000001b8: EQ
000001b9: PUSH2 0x059e
000001bc: JUMPI
000001bd: DUP1
000001be: PUSH4 0x80d57855
000001c3: EQ
000001c4: PUSH2 0x05b3
000001c7: JUMPI
000001c8: DUP1
000001c9: PUSH4 0x86651203
000001ce: EQ
000001cf: PUSH2 0x05e0
000001d2: JUMPI
000001d3: DUP1
000001d4: PUSH4 0x8da5cb5b
000001d9: EQ
000001da: PUSH2 0x0600
000001dd: JUMPI
000001de: PUSH1 0x00
000001e0: DUP1
000001e1: REVERT
000001e2: JUMPDEST
000001e3: DUP1
000001e4: PUSH4 0x6e553f65
000001e9: EQ
000001ea: PUSH2 0x053e
000001ed: JUMPI
000001ee: DUP1
000001ef: PUSH4 0x6f799ed8
000001f4: EQ
000001f5: PUSH2 0x055e
000001f8: JUMPI
000001f9: DUP1
000001fa: PUSH4 0x70a08231
000001ff: EQ
00000200: PUSH2 0x057e
00000203: JUMPI
00000204: PUSH1 0x00
00000206: DUP1
00000207: REVERT
00000208: JUMPDEST
00000209: DUP1
0000020a: PUSH4 0x4cdad506
0000020f: EQ
00000210: PUSH2 0x0363
00000213: JUMPI
00000214: DUP1
00000215: PUSH4 0x4d9b3509
0000021a: EQ
0000021b: PUSH2 0x04c1
0000021e: JUMPI
0000021f: DUP1
00000220: PUSH4 0x4f1ef286
00000225: EQ
00000226: PUSH2 0x04d6
00000229: JUMPI
0000022a: DUP1
0000022b: PUSH4 0x52d1902d
00000230: EQ
00000231: PUSH2 0x04e9
00000234: JUMPI
00000235: DUP1
00000236: PUSH4 0x5a294bc3
0000023b: EQ
0000023c: PUSH2 0x04fe
0000023f: JUMPI
00000240: DUP1
00000241: PUSH4 0x6d8638d4
00000246: EQ
00000247: PUSH2 0x051e
0000024a: JUMPI
0000024b: PUSH1 0x00
0000024d: DUP1
0000024e: REVERT
0000024f: JUMPDEST
00000250: DUP1
00000251: PUSH4 0x18160ddd
00000256: GT
00000257: PUSH2 0x02bc
0000025a: JUMPI
0000025b: DUP1
0000025c: PUSH4 0x313ce567
00000261: GT
00000262: PUSH2 0x0296
00000265: JUMPI
00000266: DUP1
00000267: PUSH4 0x313ce567
0000026c: EQ
0000026d: PUSH2 0x0437
00000270: JUMPI
00000271: DUP1
00000272: PUSH4 0x38d52e0f
00000277: EQ
00000278: PUSH2 0x045e
0000027b: JUMPI
0000027c: DUP1
0000027d: PUSH4 0x397f1133
00000282: EQ
00000283: PUSH2 0x048b
00000286: JUMPI
00000287: DUP1
00000288: PUSH4 0x402d267d
0000028d: EQ
0000028e: PUSH2 0x04a1
00000291: JUMPI
00000292: PUSH1 0x00
00000294: DUP1
00000295: REVERT
00000296: JUMPDEST
00000297: DUP1
00000298: PUSH4 0x18160ddd
0000029d: EQ
0000029e: PUSH2 0x03d3
000002a1: JUMPI
000002a2: DUP1
000002a3: PUSH4 0x23b872dd
000002a8: EQ
000002a9: PUSH2 0x03f5
000002ac: JUMPI
000002ad: DUP1
000002ae: PUSH4 0x2a67ed7b
000002b3: EQ
000002b4: PUSH2 0x0415
000002b7: JUMPI
000002b8: PUSH1 0x00
000002ba: DUP1
000002bb: REVERT
000002bc: JUMPDEST
000002bd: DUP1
000002be: PUSH4 0x01a598da
000002c3: EQ
000002c4: PUSH2 0x0304
000002c7: JUMPI
000002c8: DUP1
000002c9: PUSH4 0x01e1d114
000002ce: EQ
000002cf: PUSH2 0x032c
000002d2: JUMPI
000002d3: DUP1
000002d4: PUSH4 0x06fdde03
000002d9: EQ
000002da: PUSH2 0x0341
000002dd: JUMPI
000002de: DUP1
000002df: PUSH4 0x07a2d13a
000002e4: EQ
000002e5: PUSH2 0x0363
000002e8: JUMPI
000002e9: DUP1
000002ea: PUSH4 0x095ea7b3
000002ef: EQ
000002f0: PUSH2 0x0383
000002f3: JUMPI
000002f4: DUP1
000002f5: PUSH4 0x0a28a477
000002fa: EQ
000002fb: PUSH2 0x03b3
000002fe: JUMPI
000002ff: JUMPDEST
00000300: PUSH1 0x00
00000302: DUP1
00000303: REVERT
00000304: JUMPDEST
00000305: CALLVALUE
00000306: DUP1
00000307: ISZERO
00000308: PUSH2 0x0310
0000030b: JUMPI
0000030c: PUSH1 0x00
0000030e: DUP1
0000030f: REVERT
00000310: JUMPDEST
00000311: POP
00000312: PUSH2 0x0319
00000315: PUSH2 0x0926
00000318: JUMP
00000319: JUMPDEST
0000031a: PUSH1 0x40
0000031c: MLOAD
0000031d: SWAP1
0000031e: DUP2
0000031f: MSTORE
00000320: PUSH1 0x20
00000322: ADD
00000323: JUMPDEST
00000324: PUSH1 0x40
00000326: MLOAD
00000327: DUP1
00000328: SWAP2
00000329: SUB
0000032a: SWAP1
0000032b: RETURN
0000032c: JUMPDEST
0000032d: CALLVALUE
0000032e: DUP1
0000032f: ISZERO
00000330: PUSH2 0x0338
00000333: JUMPI
00000334: PUSH1 0x00
00000336: DUP1
00000337: REVERT
00000338: JUMPDEST
00000339: POP
0000033a: PUSH1 0x01
0000033c: SLOAD
0000033d: PUSH2 0x0319
00000340: JUMP
00000341: JUMPDEST
00000342: CALLVALUE
00000343: DUP1
00000344: ISZERO
00000345: PUSH2 0x034d
00000348: JUMPI
00000349: PUSH1 0x00
0000034b: DUP1
0000034c: REVERT
0000034d: JUMPDEST
0000034e: POP
0000034f: PUSH2 0x0356
00000352: PUSH2 0x0935
00000355: JUMP
00000356: JUMPDEST
00000357: PUSH1 0x40
00000359: MLOAD
0000035a: PUSH2 0x0323
0000035d: SWAP2
0000035e: SWAP1
0000035f: PUSH2 0x2d18
00000362: JUMP
00000363: JUMPDEST
00000364: CALLVALUE
00000365: DUP1
00000366: ISZERO
00000367: PUSH2 0x036f
0000036a: JUMPI
0000036b: PUSH1 0x00
0000036d: DUP1
0000036e: REVERT
0000036f: JUMPDEST
00000370: POP
00000371: PUSH2 0x0319
00000374: PUSH2 0x037e
00000377: CALLDATASIZE
00000378: PUSH1 0x04
0000037a: PUSH2 0x2d4b
0000037d: JUMP
0000037e: JUMPDEST
0000037f: PUSH2 0x09f8
00000382: JUMP
00000383: JUMPDEST
00000384: CALLVALUE
00000385: DUP1
00000386: ISZERO
00000387: PUSH2 0x038f
0000038a: JUMPI
0000038b: PUSH1 0x00
0000038d: DUP1
0000038e: REVERT
0000038f: JUMPDEST
00000390: POP
00000391: PUSH2 0x03a3
00000394: PUSH2 0x039e
00000397: CALLDATASIZE
00000398: PUSH1 0x04
0000039a: PUSH2 0x2d79
0000039d: JUMP
0000039e: JUMPDEST
0000039f: PUSH2 0x0a0b
000003a2: JUMP
000003a3: JUMPDEST
000003a4: PUSH1 0x40
000003a6: MLOAD
000003a7: SWAP1
000003a8: ISZERO
000003a9: ISZERO
000003aa: DUP2
000003ab: MSTORE
000003ac: PUSH1 0x20
000003ae: ADD
000003af: PUSH2 0x0323
000003b2: JUMP
000003b3: JUMPDEST
000003b4: CALLVALUE
000003b5: DUP1
000003b6: ISZERO
000003b7: PUSH2 0x03bf
000003ba: JUMPI
000003bb: PUSH1 0x00
000003bd: DUP1
000003be: REVERT
000003bf: JUMPDEST
000003c0: POP
000003c1: PUSH2 0x0319
000003c4: PUSH2 0x03ce
000003c7: CALLDATASIZE
000003c8: PUSH1 0x04
000003ca: PUSH2 0x2d4b
000003cd: JUMP
000003ce: JUMPDEST
000003cf: PUSH2 0x0a23
000003d2: JUMP
000003d3: JUMPDEST
000003d4: CALLVALUE
000003d5: DUP1
000003d6: ISZERO
000003d7: PUSH2 0x03df
000003da: JUMPI
000003db: PUSH1 0x00
000003dd: DUP1
000003de: REVERT
000003df: JUMPDEST
000003e0: POP
000003e1: PUSH1 0x00
000003e3: DUP1
000003e4: MLOAD
000003e5: PUSH1 0x20
000003e7: PUSH2 0x34c8
000003ea: DUP4
000003eb: CODECOPY
000003ec: DUP2
000003ed: MLOAD
000003ee: SWAP2
000003ef: MSTORE
000003f0: SLOAD
000003f1: PUSH2 0x0319
000003f4: JUMP
000003f5: JUMPDEST
000003f6: CALLVALUE
000003f7: DUP1
000003f8: ISZERO
000003f9: PUSH2 0x0401
000003fc: JUMPI
000003fd: PUSH1 0x00
000003ff: DUP1
00000400: REVERT
00000401: JUMPDEST
00000402: POP
00000403: PUSH2 0x03a3
00000406: PUSH2 0x0410
00000409: CALLDATASIZE
0000040a: PUSH1 0x04
0000040c: PUSH2 0x2da5
0000040f: JUMP
00000410: JUMPDEST
00000411: PUSH2 0x0a30
00000414: JUMP
00000415: JUMPDEST
00000416: CALLVALUE
00000417: DUP1
00000418: ISZERO
00000419: PUSH2 0x0421
0000041c: JUMPI
0000041d: PUSH1 0x00
0000041f: DUP1
00000420: REVERT
00000421: JUMPDEST
00000422: POP
00000423: PUSH2 0x0435
00000426: PUSH2 0x0430
00000429: CALLDATASIZE
0000042a: PUSH1 0x04
0000042c: PUSH2 0x2e96
0000042f: JUMP
00000430: JUMPDEST
00000431: PUSH2 0x0a56
00000434: JUMP
00000435: JUMPDEST
00000436: STOP
00000437: JUMPDEST
00000438: CALLVALUE
00000439: DUP1
0000043a: ISZERO
0000043b: PUSH2 0x0443
0000043e: JUMPI
0000043f: PUSH1 0x00
00000441: DUP1
00000442: REVERT
00000443: JUMPDEST
00000444: POP
00000445: PUSH2 0x044c
00000448: PUSH2 0x0ac6
0000044b: JUMP
0000044c: JUMPDEST
0000044d: PUSH1 0x40
0000044f: MLOAD
00000450: PUSH1 0xff
00000452: SWAP1
00000453: SWAP2
00000454: AND
00000455: DUP2
00000456: MSTORE
00000457: PUSH1 0x20
00000459: ADD
0000045a: PUSH2 0x0323
0000045d: JUMP
0000045e: JUMPDEST
0000045f: CALLVALUE
00000460: DUP1
00000461: ISZERO
00000462: PUSH2 0x046a
00000465: JUMPI
00000466: PUSH1 0x00
00000468: DUP1
00000469: REVERT
0000046a: JUMPDEST
0000046b: POP
0000046c: PUSH2 0x0473
0000046f: PUSH2 0x0b0a
00000472: JUMP
00000473: JUMPDEST
00000474: PUSH1 0x40
00000476: MLOAD
00000477: PUSH1 0x01
00000479: PUSH1 0x01
0000047b: PUSH1 0xa0
0000047d: SHL
0000047e: SUB
0000047f: SWAP1
00000480: SWAP2
00000481: AND
00000482: DUP2
00000483: MSTORE
00000484: PUSH1 0x20
00000486: ADD
00000487: PUSH2 0x0323
0000048a: JUMP
0000048b: JUMPDEST
0000048c: CALLVALUE
0000048d: DUP1
0000048e: ISZERO
0000048f: PUSH2 0x0497
00000492: JUMPI
00000493: PUSH1 0x00
00000495: DUP1
00000496: REVERT
00000497: JUMPDEST
00000498: POP
00000499: PUSH2 0x0319
0000049c: PUSH1 0x06
0000049e: SLOAD
0000049f: DUP2
000004a0: JUMP
000004a1: JUMPDEST
000004a2: CALLVALUE
000004a3: DUP1
000004a4: ISZERO
000004a5: PUSH2 0x04ad
000004a8: JUMPI
000004a9: PUSH1 0x00
000004ab: DUP1
000004ac: REVERT
000004ad: JUMPDEST
000004ae: POP
000004af: PUSH2 0x0319
000004b2: PUSH2 0x04bc
000004b5: CALLDATASIZE
000004b6: PUSH1 0x04
000004b8: PUSH2 0x2f48
000004bb: JUMP
000004bc: JUMPDEST
000004bd: PUSH2 0x0b3f
000004c0: JUMP
000004c1: JUMPDEST
000004c2: CALLVALUE
000004c3: DUP1
000004c4: ISZERO
000004c5: PUSH2 0x04cd
000004c8: JUMPI
000004c9: PUSH1 0x00
000004cb: DUP1
000004cc: REVERT
000004cd: JUMPDEST
000004ce: POP
000004cf: PUSH2 0x0435
000004d2: PUSH2 0x0b7e
000004d5: JUMP
000004d6: JUMPDEST
000004d7: PUSH2 0x0435
000004da: PUSH2 0x04e4
000004dd: CALLDATASIZE
000004de: PUSH1 0x04
000004e0: PUSH2 0x2f65
000004e3: JUMP
000004e4: JUMPDEST
000004e5: PUSH2 0x0c55
000004e8: JUMP
000004e9: JUMPDEST
000004ea: CALLVALUE
000004eb: DUP1
000004ec: ISZERO
000004ed: PUSH2 0x04f5
000004f0: JUMPI
000004f1: PUSH1 0x00
000004f3: DUP1
000004f4: REVERT
000004f5: JUMPDEST
000004f6: POP
000004f7: PUSH2 0x0319
000004fa: PUSH2 0x0c70
000004fd: JUMP
000004fe: JUMPDEST
000004ff: CALLVALUE
00000500: DUP1
00000501: ISZERO
00000502: PUSH2 0x050a
00000505: JUMPI
00000506: PUSH1 0x00
00000508: DUP1
00000509: REVERT
0000050a: JUMPDEST
0000050b: POP
0000050c: PUSH2 0x0435
0000050f: PUSH2 0x0519
00000512: CALLDATASIZE
00000513: PUSH1 0x04
00000515: PUSH2 0x2d79
00000518: JUMP
00000519: JUMPDEST
0000051a: PUSH2 0x0c8d
0000051d: JUMP
0000051e: JUMPDEST
0000051f: CALLVALUE
00000520: DUP1
00000521: ISZERO
00000522: PUSH2 0x052a
00000525: JUMPI
00000526: PUSH1 0x00
00000528: DUP1
00000529: REVERT
0000052a: JUMPDEST
0000052b: POP
0000052c: PUSH2 0x0435
0000052f: PUSH2 0x0539
00000532: CALLDATASIZE
00000533: PUSH1 0x04
00000535: PUSH2 0x2d4b
00000538: JUMP
00000539: JUMPDEST
0000053a: PUSH2 0x0e4d
0000053d: JUMP
0000053e: JUMPDEST
0000053f: CALLVALUE
00000540: DUP1
00000541: ISZERO
00000542: PUSH2 0x054a
00000545: JUMPI
00000546: PUSH1 0x00
00000548: DUP1
00000549: REVERT
0000054a: JUMPDEST
0000054b: POP
0000054c: PUSH2 0x0319
0000054f: PUSH2 0x0559
00000552: CALLDATASIZE
00000553: PUSH1 0x04
00000555: PUSH2 0x2fc9
00000558: JUMP
00000559: JUMPDEST
0000055a: PUSH2 0x0f14
0000055d: JUMP
0000055e: JUMPDEST
0000055f: CALLVALUE
00000560: DUP1
00000561: ISZERO
00000562: PUSH2 0x056a
00000565: JUMPI
00000566: PUSH1 0x00
00000568: DUP1
00000569: REVERT
0000056a: JUMPDEST
0000056b: POP
0000056c: PUSH2 0x0435
0000056f: PUSH2 0x0579
00000572: CALLDATASIZE
00000573: PUSH1 0x04
00000575: PUSH2 0x2d79
00000578: JUMP
00000579: JUMPDEST
0000057a: PUSH2 0x0f73
0000057d: JUMP
0000057e: JUMPDEST
0000057f: CALLVALUE
00000580: DUP1
00000581: ISZERO
00000582: PUSH2 0x058a
00000585: JUMPI
00000586: PUSH1 0x00
00000588: DUP1
00000589: REVERT
0000058a: JUMPDEST
0000058b: POP
0000058c: PUSH2 0x0319
0000058f: PUSH2 0x0599
00000592: CALLDATASIZE
00000593: PUSH1 0x04
00000595: PUSH2 0x2f48
00000598: JUMP
00000599: JUMPDEST
0000059a: PUSH2 0x10d7
0000059d: JUMP
0000059e: JUMPDEST
0000059f: CALLVALUE
000005a0: DUP1
000005a1: ISZERO
000005a2: PUSH2 0x05aa
000005a5: JUMPI
000005a6: PUSH1 0x00
000005a8: DUP1
000005a9: REVERT
000005aa: JUMPDEST
000005ab: POP
000005ac: PUSH2 0x0435
000005af: PUSH2 0x10ff
000005b2: JUMP
000005b3: JUMPDEST
000005b4: CALLVALUE
000005b5: DUP1
000005b6: ISZERO
000005b7: PUSH2 0x05bf
000005ba: JUMPI
000005bb: PUSH1 0x00
000005bd: DUP1
000005be: REVERT
000005bf: JUMPDEST
000005c0: POP
000005c1: PUSH2 0x0319
000005c4: PUSH2 0x05ce
000005c7: CALLDATASIZE
000005c8: PUSH1 0x04
000005ca: PUSH2 0x2f48
000005cd: JUMP
000005ce: JUMPDEST
000005cf: PUSH1 0x05
000005d1: PUSH1 0x20
000005d3: MSTORE
000005d4: PUSH1 0x00
000005d6: SWAP1
000005d7: DUP2
000005d8: MSTORE
000005d9: PUSH1 0x40
000005db: SWAP1
000005dc: KECCAK256
000005dd: SLOAD
000005de: DUP2
000005df: JUMP
000005e0: JUMPDEST
000005e1: CALLVALUE
000005e2: DUP1
000005e3: ISZERO
000005e4: PUSH2 0x05ec
000005e7: JUMPI
000005e8: PUSH1 0x00
000005ea: DUP1
000005eb: REVERT
000005ec: JUMPDEST
000005ed: POP
000005ee: PUSH2 0x0435
000005f1: PUSH2 0x05fb
000005f4: CALLDATASIZE
000005f5: PUSH1 0x04
000005f7: PUSH2 0x2d4b
000005fa: JUMP
000005fb: JUMPDEST
000005fc: PUSH2 0x1113
000005ff: JUMP
00000600: JUMPDEST
00000601: CALLVALUE
00000602: DUP1
00000603: ISZERO
00000604: PUSH2 0x060c
00000607: JUMPI
00000608: PUSH1 0x00
0000060a: DUP1
0000060b: REVERT
0000060c: JUMPDEST
0000060d: POP
0000060e: PUSH2 0x0473
00000611: PUSH2 0x11d6
00000614: JUMP
00000615: JUMPDEST
00000616: CALLVALUE
00000617: DUP1
00000618: ISZERO
00000619: PUSH2 0x0621
0000061c: JUMPI
0000061d: PUSH1 0x00
0000061f: DUP1
00000620: REVERT
00000621: JUMPDEST
00000622: POP
00000623: PUSH2 0x0319
00000626: PUSH1 0x01
00000628: SLOAD
00000629: DUP2
0000062a: JUMP
0000062b: JUMPDEST
0000062c: CALLVALUE
0000062d: DUP1
0000062e: ISZERO
0000062f: PUSH2 0x0637
00000632: JUMPI
00000633: PUSH1 0x00
00000635: DUP1
00000636: REVERT
00000637: JUMPDEST
00000638: POP
00000639: PUSH2 0x0435
0000063c: PUSH2 0x0646
0000063f: CALLDATASIZE
00000640: PUSH1 0x04
00000642: PUSH2 0x2e96
00000645: JUMP
00000646: JUMPDEST
00000647: PUSH2 0x11ff
0000064a: JUMP
0000064b: JUMPDEST
0000064c: CALLVALUE
0000064d: DUP1
0000064e: ISZERO
0000064f: PUSH2 0x0657
00000652: JUMPI
00000653: PUSH1 0x00
00000655: DUP1
00000656: REVERT
00000657: JUMPDEST
00000658: POP
00000659: PUSH2 0x0319
0000065c: PUSH2 0x0666
0000065f: CALLDATASIZE
00000660: PUSH1 0x04
00000662: PUSH2 0x2fc9
00000665: JUMP
00000666: JUMPDEST
00000667: PUSH2 0x1319
0000066a: JUMP
0000066b: JUMPDEST
0000066c: CALLVALUE
0000066d: DUP1
0000066e: ISZERO
0000066f: PUSH2 0x0677
00000672: JUMPI
00000673: PUSH1 0x00
00000675: DUP1
00000676: REVERT
00000677: JUMPDEST
00000678: POP
00000679: PUSH2 0x0356
0000067c: PUSH2 0x1337
0000067f: JUMP
00000680: JUMPDEST
00000681: CALLVALUE
00000682: DUP1
00000683: ISZERO
00000684: PUSH2 0x068c
00000687: JUMPI
00000688: PUSH1 0x00
0000068a: DUP1
0000068b: REVERT
0000068c: JUMPDEST
0000068d: POP
0000068e: PUSH2 0x0473
00000691: PUSH2 0x069b
00000694: CALLDATASIZE
00000695: PUSH1 0x04
00000697: PUSH2 0x3007
0000069a: JUMP
0000069b: JUMPDEST
0000069c: PUSH2 0x1376
0000069f: JUMP
000006a0: JUMPDEST
000006a1: CALLVALUE
000006a2: DUP1
000006a3: ISZERO
000006a4: PUSH2 0x06ac
000006a7: JUMPI
000006a8: PUSH1 0x00
000006aa: DUP1
000006ab: REVERT
000006ac: JUMPDEST
000006ad: POP
000006ae: PUSH1 0x03
000006b0: SLOAD
000006b1: PUSH2 0x0473
000006b4: SWAP1
000006b5: PUSH1 0x01
000006b7: PUSH1 0x01
000006b9: PUSH1 0xa0
000006bb: SHL
000006bc: SUB
000006bd: AND
000006be: DUP2
000006bf: JUMP
000006c0: JUMPDEST
000006c1: CALLVALUE
000006c2: DUP1
000006c3: ISZERO
000006c4: PUSH2 0x06cc
000006c7: JUMPI
000006c8: PUSH1 0x00
000006ca: DUP1
000006cb: REVERT
000006cc: JUMPDEST
000006cd: POP
000006ce: PUSH2 0x03a3
000006d1: PUSH2 0x06db
000006d4: CALLDATASIZE
000006d5: PUSH1 0x04
000006d7: PUSH2 0x2d79
000006da: JUMP
000006db: JUMPDEST
000006dc: PUSH2 0x139f
000006df: JUMP
000006e0: JUMPDEST
000006e1: CALLVALUE
000006e2: DUP1
000006e3: ISZERO
000006e4: PUSH2 0x06ec
000006e7: JUMPI
000006e8: PUSH1 0x00
000006ea: DUP1
000006eb: REVERT
000006ec: JUMPDEST
000006ed: POP
000006ee: PUSH2 0x0435
000006f1: PUSH2 0x06fb
000006f4: CALLDATASIZE
000006f5: PUSH1 0x04
000006f7: PUSH2 0x2f48
000006fa: JUMP
000006fb: JUMPDEST
000006fc: PUSH2 0x13ad
000006ff: JUMP
00000700: JUMPDEST
00000701: CALLVALUE
00000702: DUP1
00000703: ISZERO
00000704: PUSH2 0x070c
00000707: JUMPI
00000708: PUSH1 0x00
0000070a: DUP1
0000070b: REVERT
0000070c: JUMPDEST
0000070d: POP
0000070e: PUSH2 0x0356
00000711: PUSH1 0x40
00000713: MLOAD
00000714: DUP1
00000715: PUSH1 0x40
00000717: ADD
00000718: PUSH1 0x40
0000071a: MSTORE
0000071b: DUP1
0000071c: PUSH1 0x05
0000071e: DUP2
0000071f: MSTORE
00000720: PUSH1 0x20
00000722: ADD
00000723: PUSH5 0x0352e302e3
00000729: PUSH1 0xdc
0000072b: SHL
0000072c: DUP2
0000072d: MSTORE
0000072e: POP
0000072f: DUP2
00000730: JUMP
00000731: JUMPDEST
00000732: PUSH2 0x0319
00000735: PUSH2 0x073f
00000738: CALLDATASIZE
00000739: PUSH1 0x04
0000073b: PUSH2 0x2f48
0000073e: JUMP
0000073f: JUMPDEST
00000740: PUSH2 0x1417
00000743: JUMP
00000744: JUMPDEST
00000745: CALLVALUE
00000746: DUP1
00000747: ISZERO
00000748: PUSH2 0x0750
0000074b: JUMPI
0000074c: PUSH1 0x00
0000074e: DUP1
0000074f: REVERT
00000750: JUMPDEST
00000751: POP
00000752: PUSH2 0x0319
00000755: PUSH2 0x075f
00000758: CALLDATASIZE
00000759: PUSH1 0x04
0000075b: PUSH2 0x2d4b
0000075e: JUMP
0000075f: JUMPDEST
00000760: PUSH2 0x15a6
00000763: JUMP
00000764: JUMPDEST
00000765: CALLVALUE
00000766: DUP1
00000767: ISZERO
00000768: PUSH2 0x0770
0000076b: JUMPI
0000076c: PUSH1 0x00
0000076e: DUP1
0000076f: REVERT
00000770: JUMPDEST
00000771: POP
00000772: PUSH2 0x0319
00000775: PUSH2 0x077f
00000778: CALLDATASIZE
00000779: PUSH1 0x04
0000077b: PUSH2 0x3024
0000077e: JUMP
0000077f: JUMPDEST
00000780: PUSH2 0x15b3
00000783: JUMP
00000784: JUMPDEST
00000785: CALLVALUE
00000786: DUP1
00000787: ISZERO
00000788: PUSH2 0x0790
0000078b: JUMPI
0000078c: PUSH1 0x00
0000078e: DUP1
0000078f: REVERT
00000790: JUMPDEST
00000791: POP
00000792: PUSH1 0x04
00000794: SLOAD
00000795: PUSH2 0x0473
00000798: SWAP1
00000799: PUSH1 0x01
0000079b: PUSH1 0x01
0000079d: PUSH1 0xa0
0000079f: SHL
000007a0: SUB
000007a1: AND
000007a2: DUP2
000007a3: JUMP
000007a4: JUMPDEST
000007a5: CALLVALUE
000007a6: DUP1
000007a7: ISZERO
000007a8: PUSH2 0x07b0
000007ab: JUMPI
000007ac: PUSH1 0x00
000007ae: DUP1
000007af: REVERT
000007b0: JUMPDEST
000007b1: POP
000007b2: PUSH2 0x0319
000007b5: PUSH2 0x07bf
000007b8: CALLDATASIZE
000007b9: PUSH1 0x04
000007bb: PUSH2 0x3024
000007be: JUMP
000007bf: JUMPDEST
000007c0: PUSH2 0x160b
000007c3: JUMP
000007c4: JUMPDEST
000007c5: CALLVALUE
000007c6: DUP1
000007c7: ISZERO
000007c8: PUSH2 0x07d0
000007cb: JUMPI
000007cc: PUSH1 0x00
000007ce: DUP1
000007cf: REVERT
000007d0: JUMPDEST
000007d1: POP
000007d2: PUSH2 0x0435
000007d5: PUSH2 0x07df
000007d8: CALLDATASIZE
000007d9: PUSH1 0x04
000007db: PUSH2 0x2d4b
000007de: JUMP
000007df: JUMPDEST
000007e0: PUSH2 0x165a
000007e3: JUMP
000007e4: JUMPDEST
000007e5: CALLVALUE
000007e6: DUP1
000007e7: ISZERO
000007e8: PUSH2 0x07f0
000007eb: JUMPI
000007ec: PUSH1 0x00
000007ee: DUP1
000007ef: REVERT
000007f0: JUMPDEST
000007f1: POP
000007f2: PUSH2 0x0319
000007f5: PUSH2 0x07ff
000007f8: CALLDATASIZE
000007f9: PUSH1 0x04
000007fb: PUSH2 0x2f48
000007fe: JUMP
000007ff: JUMPDEST
00000800: POP
00000801: PUSH1 0x00
00000803: NOT
00000804: SWAP1
00000805: JUMP
00000806: JUMPDEST
00000807: CALLVALUE
00000808: DUP1
00000809: ISZERO
0000080a: PUSH2 0x0812
0000080d: JUMPI
0000080e: PUSH1 0x00
00000810: DUP1
00000811: REVERT
00000812: JUMPDEST
00000813: POP
00000814: PUSH2 0x0319
00000817: PUSH2 0x0821
0000081a: CALLDATASIZE
0000081b: PUSH1 0x04
0000081d: PUSH2 0x2d4b
00000820: JUMP
00000821: JUMPDEST
00000822: PUSH2 0x16a1
00000825: JUMP
00000826: JUMPDEST
00000827: CALLVALUE
00000828: DUP1
00000829: ISZERO
0000082a: PUSH2 0x0832
0000082d: JUMPI
0000082e: PUSH1 0x00
00000830: DUP1
00000831: REVERT
00000832: JUMPDEST
00000833: POP
00000834: PUSH2 0x0319
00000837: PUSH2 0x0841
0000083a: CALLDATASIZE
0000083b: PUSH1 0x04
0000083d: PUSH2 0x2f48
00000840: JUMP
00000841: JUMPDEST
00000842: PUSH2 0x16ae
00000845: JUMP
00000846: JUMPDEST
00000847: CALLVALUE
00000848: DUP1
00000849: ISZERO
0000084a: PUSH2 0x0852
0000084d: JUMPI
0000084e: PUSH1 0x00
00000850: DUP1
00000851: REVERT
00000852: JUMPDEST
00000853: POP
00000854: PUSH2 0x0435
00000857: PUSH2 0x0861
0000085a: CALLDATASIZE
0000085b: PUSH1 0x04
0000085d: PUSH2 0x3066
00000860: JUMP
00000861: JUMPDEST
00000862: PUSH2 0x16c3
00000865: JUMP
00000866: JUMPDEST
00000867: CALLVALUE
00000868: DUP1
00000869: ISZERO
0000086a: PUSH2 0x0872
0000086d: JUMPI
0000086e: PUSH1 0x00
00000870: DUP1
00000871: REVERT
00000872: JUMPDEST
00000873: POP
00000874: PUSH2 0x0319
00000877: PUSH2 0x0881
0000087a: CALLDATASIZE
0000087b: PUSH1 0x04
0000087d: PUSH2 0x2f48
00000880: JUMP
00000881: JUMPDEST
00000882: PUSH2 0x1787
00000885: JUMP
00000886: JUMPDEST
00000887: CALLVALUE
00000888: DUP1
00000889: ISZERO
0000088a: PUSH2 0x0892
0000088d: JUMPI
0000088e: PUSH1 0x00
00000890: DUP1
00000891: REVERT
00000892: JUMPDEST
00000893: POP
00000894: PUSH2 0x0319
00000897: PUSH2 0x08a1
0000089a: CALLDATASIZE
0000089b: PUSH1 0x04
0000089d: PUSH2 0x3094
000008a0: JUMP
000008a1: JUMPDEST
000008a2: PUSH2 0x1792
000008a5: JUMP
000008a6: JUMPDEST
000008a7: CALLVALUE
000008a8: DUP1
000008a9: ISZERO
000008aa: PUSH2 0x08b2
000008ad: JUMPI
000008ae: PUSH1 0x00
000008b0: DUP1
000008b1: REVERT
000008b2: JUMPDEST
000008b3: POP
000008b4: PUSH1 0x00
000008b6: SLOAD
000008b7: PUSH2 0x0473
000008ba: SWAP1
000008bb: PUSH1 0x01
000008bd: PUSH1 0x01
000008bf: PUSH1 0xa0
000008c1: SHL
000008c2: SUB
000008c3: AND
000008c4: DUP2
000008c5: JUMP
000008c6: JUMPDEST
000008c7: CALLVALUE
000008c8: DUP1
000008c9: ISZERO
000008ca: PUSH2 0x08d2
000008cd: JUMPI
000008ce: PUSH1 0x00
000008d0: DUP1
000008d1: REVERT
000008d2: JUMPDEST
000008d3: POP
000008d4: PUSH2 0x0435
000008d7: PUSH2 0x08e1
000008da: CALLDATASIZE
000008db: PUSH1 0x04
000008dd: PUSH2 0x2d4b
000008e0: JUMP
000008e1: JUMPDEST
000008e2: PUSH2 0x17dc
000008e5: JUMP
000008e6: JUMPDEST
000008e7: CALLVALUE
000008e8: DUP1
000008e9: ISZERO
000008ea: PUSH2 0x08f2
000008ed: JUMPI
000008ee: PUSH1 0x00
000008f0: DUP1
000008f1: REVERT
000008f2: JUMPDEST
000008f3: POP
000008f4: PUSH2 0x0435
000008f7: PUSH2 0x0901
000008fa: CALLDATASIZE
000008fb: PUSH1 0x04
000008fd: PUSH2 0x2f48
00000900: JUMP
00000901: JUMPDEST
00000902: PUSH2 0x18e2
00000905: JUMP
00000906: JUMPDEST
00000907: CALLVALUE
00000908: DUP1
00000909: ISZERO
0000090a: PUSH2 0x0912
0000090d: JUMPI
0000090e: PUSH1 0x00
00000910: DUP1
00000911: REVERT
00000912: JUMPDEST
00000913: POP
00000914: PUSH1 0x02
00000916: SLOAD
00000917: PUSH2 0x0473
0000091a: SWAP1
0000091b: PUSH1 0x01
0000091d: PUSH1 0x01
0000091f: PUSH1 0xa0
00000921: SHL
00000922: SUB
00000923: AND
00000924: DUP2
00000925: JUMP
00000926: JUMPDEST
00000927: PUSH1 0x00
00000929: PUSH2 0x0930
0000092c: PUSH2 0x191d
0000092f: JUMP
00000930: JUMPDEST
00000931: SWAP1
00000932: POP
00000933: SWAP1
00000934: JUMP
00000935: JUMPDEST
00000936: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03
00000957: DUP1
00000958: SLOAD
00000959: PUSH1 0x60
0000095b: SWAP2
0000095c: PUSH1 0x00
0000095e: DUP1
0000095f: MLOAD
00000960: PUSH1 0x20
00000962: PUSH2 0x34a8
00000965: DUP4
00000966: CODECOPY
00000967: DUP2
00000968: MLOAD
00000969: SWAP2
0000096a: MSTORE
0000096b: SWAP2
0000096c: PUSH2 0x0974
0000096f: SWAP1
00000970: PUSH2 0x30c2
00000973: JUMP
00000974: JUMPDEST
00000975: DUP1
00000976: PUSH1 0x1f
00000978: ADD
00000979: PUSH1 0x20
0000097b: DUP1
0000097c: SWAP2
0000097d: DIV
0000097e: MUL
0000097f: PUSH1 0x20
00000981: ADD
00000982: PUSH1 0x40
00000984: MLOAD
00000985: SWAP1
00000986: DUP2
00000987: ADD
00000988: PUSH1 0x40
0000098a: MSTORE
0000098b: DUP1
0000098c: SWAP3
0000098d: SWAP2
0000098e: SWAP1
0000098f: DUP2
00000990: DUP2
00000991: MSTORE
00000992: PUSH1 0x20
00000994: ADD
00000995: DUP3
00000996: DUP1
00000997: SLOAD
00000998: PUSH2 0x09a0
0000099b: SWAP1
0000099c: PUSH2 0x30c2
0000099f: JUMP
000009a0: JUMPDEST
000009a1: DUP1
000009a2: ISZERO
000009a3: PUSH2 0x09ed
000009a6: JUMPI
000009a7: DUP1
000009a8: PUSH1 0x1f
000009aa: LT
000009ab: PUSH2 0x09c2
000009ae: JUMPI
000009af: PUSH2 0x0100
000009b2: DUP1
000009b3: DUP4
000009b4: SLOAD
000009b5: DIV
000009b6: MUL
000009b7: DUP4
000009b8: MSTORE
000009b9: SWAP2
000009ba: PUSH1 0x20
000009bc: ADD
000009bd: SWAP2
000009be: PUSH2 0x09ed
000009c1: JUMP
000009c2: JUMPDEST
000009c3: DUP3
000009c4: ADD
000009c5: SWAP2
000009c6: SWAP1
000009c7: PUSH1 0x00
000009c9: MSTORE
000009ca: PUSH1 0x20
000009cc: PUSH1 0x00
000009ce: KECCAK256
000009cf: SWAP1
000009d0: JUMPDEST
000009d1: DUP2
000009d2: SLOAD
000009d3: DUP2
000009d4: MSTORE
000009d5: SWAP1
000009d6: PUSH1 0x01
000009d8: ADD
000009d9: SWAP1
000009da: PUSH1 0x20
000009dc: ADD
000009dd: DUP1
000009de: DUP4
000009df: GT
000009e0: PUSH2 0x09d0
000009e3: JUMPI
000009e4: DUP3
000009e5: SWAP1
000009e6: SUB
000009e7: PUSH1 0x1f
000009e9: AND
000009ea: DUP3
000009eb: ADD
000009ec: SWAP2
000009ed: JUMPDEST
000009ee: POP
000009ef: POP
000009f0: POP
000009f1: POP
000009f2: POP
000009f3: SWAP2
000009f4: POP
000009f5: POP
000009f6: SWAP1
000009f7: JUMP
000009f8: JUMPDEST
000009f9: PUSH1 0x00
000009fb: PUSH2 0x0a05
000009fe: DUP3
000009ff: PUSH1 0x00
00000a01: PUSH2 0x1957
00000a04: JUMP
00000a05: JUMPDEST
00000a06: SWAP3
00000a07: SWAP2
00000a08: POP
00000a09: POP
00000a0a: JUMP
00000a0b: JUMPDEST
00000a0c: PUSH1 0x00
00000a0e: CALLER
00000a0f: PUSH2 0x0a19
00000a12: DUP2
00000a13: DUP6
00000a14: DUP6
00000a15: PUSH2 0x199f
00000a18: JUMP
00000a19: JUMPDEST
00000a1a: POP
00000a1b: PUSH1 0x01
00000a1d: SWAP4
00000a1e: SWAP3
00000a1f: POP
00000a20: POP
00000a21: POP
00000a22: JUMP
00000a23: JUMPDEST
00000a24: PUSH1 0x00
00000a26: PUSH2 0x0a05
00000a29: DUP3
00000a2a: PUSH1 0x01
00000a2c: PUSH2 0x19ac
00000a2f: JUMP
00000a30: JUMPDEST
00000a31: PUSH1 0x00
00000a33: CALLER
00000a34: PUSH2 0x0a3e
00000a37: DUP6
00000a38: DUP3
00000a39: DUP6
00000a3a: PUSH2 0x19e4
00000a3d: JUMP
00000a3e: JUMPDEST
00000a3f: PUSH2 0x0a49
00000a42: DUP6
00000a43: DUP6
00000a44: DUP6
00000a45: PUSH2 0x1a37
00000a48: JUMP
00000a49: JUMPDEST
00000a4a: PUSH1 0x01
00000a4c: SWAP2
00000a4d: POP
00000a4e: POP
00000a4f: JUMPDEST
00000a50: SWAP4
00000a51: SWAP3
00000a52: POP
00000a53: POP
00000a54: POP
00000a55: JUMP
00000a56: JUMPDEST
00000a57: PUSH2 0x0a5e
00000a5a: PUSH2 0x1a96
00000a5d: JUMP
00000a5e: JUMPDEST
00000a5f: PUSH2 0x0a68
00000a62: DUP3
00000a63: DUP3
00000a64: PUSH2 0x1adf
00000a67: JUMP
00000a68: JUMPDEST
00000a69: PUSH2 0x0a71
00000a6c: DUP5
00000a6d: PUSH2 0x1af1
00000a70: JUMP
00000a71: JUMPDEST
00000a72: PUSH2 0x0a7a
00000a75: DUP4
00000a76: PUSH2 0x1b02
00000a79: JUMP
00000a7a: JUMPDEST
00000a7b: PUSH2 0x0a82
00000a7e: PUSH2 0x1b13
00000a81: JUMP
00000a82: JUMPDEST
00000a83: PUSH2 0x0a8a
00000a86: PUSH2 0x1b23
00000a89: JUMP
00000a8a: JUMPDEST
00000a8b: POP
00000a8c: POP
00000a8d: PUSH1 0x03
00000a8f: DUP1
00000a90: SLOAD
00000a91: PUSH1 0x01
00000a93: PUSH1 0x01
00000a95: PUSH1 0xa0
00000a97: SHL
00000a98: SUB
00000a99: SWAP6
00000a9a: DUP7
00000a9b: AND
00000a9c: PUSH1 0x01
00000a9e: PUSH1 0x01
00000aa0: PUSH1 0xa0
00000aa2: SHL
00000aa3: SUB
00000aa4: NOT
00000aa5: SWAP2
00000aa6: DUP3
00000aa7: AND
00000aa8: OR
00000aa9: SWAP1
00000aaa: SWAP2
00000aab: SSTORE
00000aac: PUSH1 0x04
00000aae: DUP1
00000aaf: SLOAD
00000ab0: SWAP5
00000ab1: SWAP1
00000ab2: SWAP6
00000ab3: AND
00000ab4: SWAP4
00000ab5: AND
00000ab6: SWAP3
00000ab7: SWAP1
00000ab8: SWAP3
00000ab9: OR
00000aba: SWAP1
00000abb: SWAP3
00000abc: SSTORE
00000abd: POP
00000abe: POP
00000abf: PUSH2 0x03e8
00000ac2: PUSH1 0x06
00000ac4: SSTORE
00000ac5: JUMP
00000ac6: JUMPDEST
00000ac7: PUSH1 0x00
00000ac9: DUP1
00000aca: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00
00000aeb: SWAP1
00000aec: POP
00000aed: PUSH1 0x00
00000aef: DUP2
00000af0: SLOAD
00000af1: PUSH2 0x0b04
00000af4: SWAP2
00000af5: SWAP1
00000af6: PUSH1 0x01
00000af8: PUSH1 0xa0
00000afa: SHL
00000afb: SWAP1
00000afc: DIV
00000afd: PUSH1 0xff
00000aff: AND
00000b00: PUSH2 0x3112
00000b03: JUMP
00000b04: JUMPDEST
00000b05: SWAP2
00000b06: POP
00000b07: POP
00000b08: SWAP1
00000b09: JUMP
00000b0a: JUMPDEST
00000b0b: PUSH1 0x00
00000b0d: DUP1
00000b0e: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00
00000b2f: JUMPDEST
00000b30: SLOAD
00000b31: PUSH1 0x01
00000b33: PUSH1 0x01
00000b35: PUSH1 0xa0
00000b37: SHL
00000b38: SUB
00000b39: AND
00000b3a: SWAP3
00000b3b: SWAP2
00000b3c: POP
00000b3d: POP
00000b3e: JUMP
00000b3f: JUMPDEST
00000b40: PUSH1 0x00
00000b42: DUP1
00000b43: PUSH2 0x0b4a
00000b46: PUSH2 0x191d
00000b49: JUMP
00000b4a: JUMPDEST
00000b4b: SWAP1
00000b4c: POP
00000b4d: PUSH1 0x00
00000b4f: NOT
00000b50: DUP2
00000b51: SUB
00000b52: PUSH2 0x0b5f
00000b55: JUMPI
00000b56: POP
00000b57: PUSH1 0x00
00000b59: NOT
00000b5a: SWAP3
00000b5b: SWAP2
00000b5c: POP
00000b5d: POP
00000b5e: JUMP
00000b5f: JUMPDEST
00000b60: DUP1
00000b61: PUSH1 0x01
00000b63: SLOAD
00000b64: LT
00000b65: PUSH2 0x0b71
00000b68: JUMPI
00000b69: POP
00000b6a: PUSH1 0x00
00000b6c: SWAP3
00000b6d: SWAP2
00000b6e: POP
00000b6f: POP
00000b70: JUMP
00000b71: JUMPDEST
00000b72: PUSH1 0x01
00000b74: SLOAD
00000b75: PUSH2 0x0a4f
00000b78: SWAP1
00000b79: DUP3
00000b7a: PUSH2 0x312b
00000b7d: JUMP
00000b7e: JUMPDEST
00000b7f: PUSH1 0x67
00000b81: PUSH2 0x0b88
00000b84: PUSH2 0x1b2b
00000b87: JUMP
00000b88: JUMPDEST
00000b89: PUSH1 0x01
00000b8b: PUSH1 0x01
00000b8d: PUSH1 0xa0
00000b8f: SHL
00000b90: SUB
00000b91: AND
00000b92: PUSH4 0xc614384c
00000b97: DUP3
00000b98: CALLER
00000b99: PUSH1 0x40
00000b9b: MLOAD
00000b9c: DUP4
00000b9d: PUSH4 0xffffffff
00000ba2: AND
00000ba3: PUSH1 0xe0
00000ba5: SHL
00000ba6: DUP2
00000ba7: MSTORE
00000ba8: PUSH1 0x04
00000baa: ADD
00000bab: PUSH2 0x0bb5
00000bae: SWAP3
00000baf: SWAP2
00000bb0: SWAP1
00000bb1: PUSH2 0x313e
00000bb4: JUMP
00000bb5: JUMPDEST
00000bb6: PUSH1 0x00
00000bb8: PUSH1 0x40
00000bba: MLOAD
00000bbb: DUP1
00000bbc: DUP4
00000bbd: SUB
00000bbe: DUP2
00000bbf: DUP7
00000bc0: DUP1
00000bc1: EXTCODESIZE
00000bc2: ISZERO
00000bc3: DUP1
00000bc4: ISZERO
00000bc5: PUSH2 0x0bcd
00000bc8: JUMPI
00000bc9: PUSH1 0x00
00000bcb: DUP1
00000bcc: REVERT
00000bcd: JUMPDEST
00000bce: POP
00000bcf: GAS
00000bd0: STATICCALL
00000bd1: ISZERO
00000bd2: DUP1
00000bd3: ISZERO
00000bd4: PUSH2 0x0be1
00000bd7: JUMPI
00000bd8: RETURNDATASIZE
00000bd9: PUSH1 0x00
00000bdb: DUP1
00000bdc: RETURNDATACOPY
00000bdd: RETURNDATASIZE
00000bde: PUSH1 0x00
00000be0: REVERT
00000be1: JUMPDEST
00000be2: POP
00000be3: POP
00000be4: POP
00000be5: POP
00000be6: PUSH2 0x0bfb
00000be9: PUSH1 0x00
00000beb: DUP1
00000bec: MLOAD
00000bed: PUSH1 0x20
00000bef: PUSH2 0x34c8
00000bf2: DUP4
00000bf3: CODECOPY
00000bf4: DUP2
00000bf5: MLOAD
00000bf6: SWAP2
00000bf7: MSTORE
00000bf8: SLOAD
00000bf9: SWAP1
00000bfa: JUMP
00000bfb: JUMPDEST
00000bfc: ISZERO
00000bfd: DUP1
00000bfe: ISZERO
00000bff: PUSH2 0x0c0a
00000c02: JUMPI
00000c03: POP
00000c04: PUSH1 0x00
00000c06: PUSH1 0x01
00000c08: SLOAD
00000c09: GT
00000c0a: JUMPDEST
00000c0b: ISZERO
00000c0c: PUSH2 0x0c39
00000c0f: JUMPI
00000c10: PUSH1 0x01
00000c12: DUP1
00000c13: SLOAD
00000c14: PUSH1 0x00
00000c16: SWAP1
00000c17: SWAP2
00000c18: SSTORE
00000c19: PUSH2 0x0c35
00000c1c: CALLER
00000c1d: DUP3
00000c1e: PUSH2 0x0c25
00000c21: PUSH2 0x0b0a
00000c24: JUMP
00000c25: JUMPDEST
00000c26: PUSH1 0x01
00000c28: PUSH1 0x01
00000c2a: PUSH1 0xa0
00000c2c: SHL
00000c2d: SUB
00000c2e: AND
00000c2f: SWAP2
00000c30: SWAP1
00000c31: PUSH2 0x1b35
00000c34: JUMP
00000c35: JUMPDEST
00000c36: POP
00000c37: POP
00000c38: JUMP
00000c39: JUMPDEST
00000c3a: PUSH1 0x40
00000c3c: MLOAD
00000c3d: PUSH4 0x06fc69e7
00000c42: PUSH1 0xe3
00000c44: SHL
00000c45: DUP2
00000c46: MSTORE
00000c47: PUSH1 0x04
00000c49: ADD
00000c4a: PUSH1 0x40
00000c4c: MLOAD
00000c4d: DUP1
00000c4e: SWAP2
00000c4f: SUB
00000c50: SWAP1
00000c51: REVERT
00000c52: JUMPDEST
00000c53: POP
00000c54: JUMP
00000c55: JUMPDEST
00000c56: PUSH2 0x0c5d
00000c59: PUSH2 0x1b94
00000c5c: JUMP
00000c5d: JUMPDEST
00000c5e: PUSH2 0x0c66
00000c61: DUP3
00000c62: PUSH2 0x1c39
00000c65: JUMP
00000c66: JUMPDEST
00000c67: PUSH2 0x0c35
00000c6a: DUP3
00000c6b: DUP3
00000c6c: PUSH2 0x1c9d
00000c6f: JUMP
00000c70: JUMPDEST
00000c71: PUSH1 0x00
00000c73: PUSH2 0x0c7a
00000c76: PUSH2 0x1d5a
00000c79: JUMP
00000c7a: JUMPDEST
00000c7b: POP
00000c7c: PUSH1 0x00
00000c7e: DUP1
00000c7f: MLOAD
00000c80: PUSH1 0x20
00000c82: PUSH2 0x34e8
00000c85: DUP4
00000c86: CODECOPY
00000c87: DUP2
00000c88: MLOAD
00000c89: SWAP2
00000c8a: MSTORE
00000c8b: SWAP1
00000c8c: JUMP
00000c8d: JUMPDEST
00000c8e: PUSH2 0x0c95
00000c91: PUSH2 0x1b2b
00000c94: JUMP
00000c95: JUMPDEST
00000c96: PUSH1 0x40
00000c98: MLOAD
00000c99: PUSH4 0x0935e01b
00000c9e: PUSH1 0xe2
00000ca0: SHL
00000ca1: DUP2
00000ca2: MSTORE
00000ca3: CALLER
00000ca4: PUSH1 0x04
00000ca6: DUP3
00000ca7: ADD
00000ca8: MSTORE
00000ca9: PUSH1 0x01
00000cab: PUSH1 0x01
00000cad: PUSH1 0xa0
00000caf: SHL
00000cb0: SUB
00000cb1: SWAP2
00000cb2: SWAP1
00000cb3: SWAP2
00000cb4: AND
00000cb5: SWAP1
00000cb6: PUSH4 0x24d7806c
00000cbb: SWAP1
00000cbc: PUSH1 0x24
00000cbe: ADD
00000cbf: PUSH1 0x00
00000cc1: PUSH1 0x40
00000cc3: MLOAD
00000cc4: DUP1
00000cc5: DUP4
00000cc6: SUB
00000cc7: DUP2
00000cc8: DUP7
00000cc9: DUP1
00000cca: EXTCODESIZE
00000ccb: ISZERO
00000ccc: DUP1
00000ccd: ISZERO
00000cce: PUSH2 0x0cd6
00000cd1: JUMPI
00000cd2: PUSH1 0x00
00000cd4: DUP1
00000cd5: REVERT
00000cd6: JUMPDEST
00000cd7: POP
00000cd8: GAS
00000cd9: STATICCALL
00000cda: ISZERO
00000cdb: DUP1
00000cdc: ISZERO
00000cdd: PUSH2 0x0cea
00000ce0: JUMPI
00000ce1: RETURNDATASIZE
00000ce2: PUSH1 0x00
00000ce4: DUP1
00000ce5: RETURNDATACOPY
00000ce6: RETURNDATASIZE
00000ce7: PUSH1 0x00
00000ce9: REVERT
00000cea: JUMPDEST
00000ceb: POP
00000cec: POP
00000ced: POP
00000cee: POP
00000cef: PUSH2 0x0cf7
00000cf2: DUP3
00000cf3: PUSH2 0x1da3
00000cf6: JUMP
00000cf7: JUMPDEST
00000cf8: DUP1
00000cf9: PUSH1 0x00
00000cfb: SUB
00000cfc: PUSH2 0x0d1a
00000cff: JUMPI
00000d00: POP
00000d01: PUSH1 0x01
00000d03: PUSH1 0x01
00000d05: PUSH1 0xa0
00000d07: SHL
00000d08: SUB
00000d09: DUP2
00000d0a: AND
00000d0b: PUSH1 0x00
00000d0d: SWAP1
00000d0e: DUP2
00000d0f: MSTORE
00000d10: PUSH1 0x05
00000d12: PUSH1 0x20
00000d14: MSTORE
00000d15: PUSH1 0x40
00000d17: SWAP1
00000d18: KECCAK256
00000d19: SLOAD
00000d1a: JUMPDEST
00000d1b: PUSH1 0x01
00000d1d: PUSH1 0x01
00000d1f: PUSH1 0xa0
00000d21: SHL
00000d22: SUB
00000d23: DUP3
00000d24: AND
00000d25: PUSH1 0x00
00000d27: SWAP1
00000d28: DUP2
00000d29: MSTORE
00000d2a: PUSH1 0x05
00000d2c: PUSH1 0x20
00000d2e: MSTORE
00000d2f: PUSH1 0x40
00000d31: SWAP1
00000d32: KECCAK256
00000d33: SLOAD
00000d34: DUP2
00000d35: GT
00000d36: ISZERO
00000d37: PUSH2 0x0d53
00000d3a: JUMPI
00000d3b: PUSH1 0x40
00000d3d: MLOAD
00000d3e: PUSH4 0x64ddcf37
00000d43: PUSH1 0xe0
00000d45: SHL
00000d46: DUP2
00000d47: MSTORE
00000d48: PUSH1 0x04
00000d4a: ADD
00000d4b: PUSH1 0x40
00000d4d: MLOAD
00000d4e: DUP1
00000d4f: SWAP2
00000d50: SUB
00000d51: SWAP1
00000d52: REVERT
00000d53: JUMPDEST
00000d54: PUSH1 0x40
00000d56: MLOAD
00000d57: PUSH4 0x2e1a7d4d
00000d5c: PUSH1 0xe0
00000d5e: SHL
00000d5f: DUP2
00000d60: MSTORE
00000d61: PUSH1 0x04
00000d63: DUP2
00000d64: ADD
00000d65: DUP3
00000d66: SWAP1
00000d67: MSTORE
00000d68: PUSH1 0x00
00000d6a: SWAP1
00000d6b: DUP2
00000d6c: SWAP1
00000d6d: PUSH1 0x01
00000d6f: PUSH1 0x01
00000d71: PUSH1 0xa0
00000d73: SHL
00000d74: SUB
00000d75: DUP6
00000d76: AND
00000d77: SWAP1
00000d78: PUSH4 0x2e1a7d4d
00000d7d: SWAP1
00000d7e: PUSH1 0x24
00000d80: ADD
00000d81: PUSH1 0x40
00000d83: DUP1
00000d84: MLOAD
00000d85: DUP1
00000d86: DUP4
00000d87: SUB
00000d88: DUP2
00000d89: PUSH1 0x00
00000d8b: DUP8
00000d8c: GAS
00000d8d: CALL
00000d8e: ISZERO
00000d8f: DUP1
00000d90: ISZERO
00000d91: PUSH2 0x0d9e
00000d94: JUMPI
00000d95: RETURNDATASIZE
00000d96: PUSH1 0x00
00000d98: DUP1
00000d99: RETURNDATACOPY
00000d9a: RETURNDATASIZE
00000d9b: PUSH1 0x00
00000d9d: REVERT
00000d9e: JUMPDEST
00000d9f: POP
00000da0: POP
00000da1: POP
00000da2: POP
00000da3: PUSH1 0x40
00000da5: MLOAD
00000da6: RETURNDATASIZE
00000da7: PUSH1 0x1f
00000da9: NOT
00000daa: PUSH1 0x1f
00000dac: DUP3
00000dad: ADD
00000dae: AND
00000daf: DUP3
00000db0: ADD
00000db1: DUP1
00000db2: PUSH1 0x40
00000db4: MSTORE
00000db5: POP
00000db6: DUP2
00000db7: ADD
00000db8: SWAP1
00000db9: PUSH2 0x0dc2
00000dbc: SWAP2
00000dbd: SWAP1
00000dbe: PUSH2 0x3161
00000dc1: JUMP
00000dc2: JUMPDEST
00000dc3: PUSH1 0x01
00000dc5: PUSH1 0x01
00000dc7: PUSH1 0xa0
00000dc9: SHL
00000dca: SUB
00000dcb: DUP7
00000dcc: AND
00000dcd: PUSH1 0x00
00000dcf: SWAP1
00000dd0: DUP2
00000dd1: MSTORE
00000dd2: PUSH1 0x05
00000dd4: PUSH1 0x20
00000dd6: MSTORE
00000dd7: PUSH1 0x40
00000dd9: DUP2
00000dda: KECCAK256
00000ddb: DUP1
00000ddc: SLOAD
00000ddd: SWAP4
00000dde: SWAP6
00000ddf: POP
00000de0: SWAP2
00000de1: SWAP4
00000de2: POP
00000de3: DUP6
00000de4: SWAP3
00000de5: PUSH2 0x0def
00000de8: SWAP1
00000de9: DUP5
00000dea: SWAP1
00000deb: PUSH2 0x312b
00000dee: JUMP
00000def: JUMPDEST
00000df0: SWAP1
00000df1: SWAP2
00000df2: SSTORE
00000df3: POP
00000df4: POP
00000df5: PUSH1 0x40
00000df7: DUP1
00000df8: MLOAD
00000df9: PUSH1 0x01
00000dfb: PUSH1 0x01
00000dfd: PUSH1 0xa0
00000dff: SHL
00000e00: SUB
00000e01: DUP1
00000e02: DUP8
00000e03: AND
00000e04: DUP3
00000e05: MSTORE
00000e06: DUP5
00000e07: AND
00000e08: PUSH1 0x20
00000e0a: DUP3
00000e0b: ADD
00000e0c: MSTORE
00000e0d: SWAP1
00000e0e: DUP2
00000e0f: ADD
00000e10: DUP5
00000e11: SWAP1
00000e12: MSTORE
00000e13: PUSH1 0x60
00000e15: DUP2
00000e16: ADD
00000e17: DUP3
00000e18: SWAP1
00000e19: MSTORE
00000e1a: PUSH32 0xac2d5a3a47c15d35354a9e217defda494d018314f05170b7bfabb20d7807e5af
00000e3b: SWAP1
00000e3c: PUSH1 0x80
00000e3e: ADD
00000e3f: JUMPDEST
00000e40: PUSH1 0x40
00000e42: MLOAD
00000e43: DUP1
00000e44: SWAP2
00000e45: SUB
00000e46: SWAP1
00000e47: LOG1
00000e48: POP
00000e49: POP
00000e4a: POP
00000e4b: POP
00000e4c: JUMP
00000e4d: JUMPDEST
00000e4e: PUSH1 0x67
00000e50: PUSH2 0x0e57
00000e53: PUSH2 0x1b2b
00000e56: JUMP
00000e57: JUMPDEST
00000e58: PUSH1 0x01
00000e5a: PUSH1 0x01
00000e5c: PUSH1 0xa0
00000e5e: SHL
00000e5f: SUB
00000e60: AND
00000e61: PUSH4 0xc614384c
00000e66: DUP3
00000e67: CALLER
00000e68: PUSH1 0x40
00000e6a: MLOAD
00000e6b: DUP4
00000e6c: PUSH4 0xffffffff
00000e71: AND
00000e72: PUSH1 0xe0
00000e74: SHL
00000e75: DUP2
00000e76: MSTORE
00000e77: PUSH1 0x04
00000e79: ADD
00000e7a: PUSH2 0x0e84
00000e7d: SWAP3
00000e7e: SWAP2
00000e7f: SWAP1
00000e80: PUSH2 0x313e
00000e83: JUMP
00000e84: JUMPDEST
00000e85: PUSH1 0x00
00000e87: PUSH1 0x40
00000e89: MLOAD
00000e8a: DUP1
00000e8b: DUP4
00000e8c: SUB
00000e8d: DUP2
00000e8e: DUP7
00000e8f: DUP1
00000e90: EXTCODESIZE
00000e91: ISZERO
00000e92: DUP1
00000e93: ISZERO
00000e94: PUSH2 0x0e9c
00000e97: JUMPI
00000e98: PUSH1 0x00
00000e9a: DUP1
00000e9b: REVERT
00000e9c: JUMPDEST
00000e9d: POP
00000e9e: GAS
00000e9f: STATICCALL
00000ea0: ISZERO
00000ea1: DUP1
00000ea2: ISZERO
00000ea3: PUSH2 0x0eb0
00000ea6: JUMPI
00000ea7: RETURNDATASIZE
00000ea8: PUSH1 0x00
00000eaa: DUP1
00000eab: RETURNDATACOPY
00000eac: RETURNDATASIZE
00000ead: PUSH1 0x00
00000eaf: REVERT
00000eb0: JUMPDEST
00000eb1: POP
00000eb2: POP
00000eb3: POP
00000eb4: POP
00000eb5: PUSH2 0x07d0
00000eb8: DUP3
00000eb9: GT
00000eba: ISZERO
00000ebb: PUSH2 0x0ed7
00000ebe: JUMPI
00000ebf: PUSH1 0x40
00000ec1: MLOAD
00000ec2: PUSH4 0x8e395cd1
00000ec7: PUSH1 0xe0
00000ec9: SHL
00000eca: DUP2
00000ecb: MSTORE
00000ecc: PUSH1 0x04
00000ece: ADD
00000ecf: PUSH1 0x40
00000ed1: MLOAD
00000ed2: DUP1
00000ed3: SWAP2
00000ed4: SUB
00000ed5: SWAP1
00000ed6: REVERT
00000ed7: JUMPDEST
00000ed8: PUSH1 0x06
00000eda: DUP3
00000edb: SWAP1
00000edc: SSTORE
00000edd: PUSH1 0x40
00000edf: MLOAD
00000ee0: DUP3
00000ee1: DUP2
00000ee2: MSTORE
00000ee3: PUSH32 0x78db22ec39a3a152ce52bed69825ba8367f13dfa30f56079a0e0314d6cb2a1e7
00000f04: SWAP1
00000f05: PUSH1 0x20
00000f07: ADD
00000f08: JUMPDEST
00000f09: PUSH1 0x40
00000f0b: MLOAD
00000f0c: DUP1
00000f0d: SWAP2
00000f0e: SUB
00000f0f: SWAP1
00000f10: LOG1
00000f11: POP
00000f12: POP
00000f13: JUMP
00000f14: JUMPDEST
00000f15: PUSH1 0x00
00000f17: DUP1
00000f18: PUSH2 0x0f20
00000f1b: DUP4
00000f1c: PUSH2 0x0b3f
00000f1f: JUMP
00000f20: JUMPDEST
00000f21: SWAP1
00000f22: POP
00000f23: DUP1
00000f24: DUP5
00000f25: GT
00000f26: ISZERO
00000f27: PUSH2 0x0f52
00000f2a: JUMPI
00000f2b: DUP3
00000f2c: DUP5
00000f2d: DUP3
00000f2e: PUSH1 0x40
00000f30: MLOAD
00000f31: PUSH4 0x3c8097d9
00000f36: PUSH1 0xe1
00000f38: SHL
00000f39: DUP2
00000f3a: MSTORE
00000f3b: PUSH1 0x04
00000f3d: ADD
00000f3e: PUSH2 0x0f49
00000f41: SWAP4
00000f42: SWAP3
00000f43: SWAP2
00000f44: SWAP1
00000f45: PUSH2 0x318f
00000f48: JUMP
00000f49: JUMPDEST
00000f4a: PUSH1 0x40
00000f4c: MLOAD
00000f4d: DUP1
00000f4e: SWAP2
00000f4f: SUB
00000f50: SWAP1
00000f51: REVERT
00000f52: JUMPDEST
00000f53: PUSH1 0x00
00000f55: PUSH2 0x0f5d
00000f58: DUP6
00000f59: PUSH2 0x16a1
00000f5c: JUMP
00000f5d: JUMPDEST
00000f5e: SWAP1
00000f5f: POP
00000f60: PUSH2 0x0f6b
00000f63: CALLER
00000f64: DUP6
00000f65: DUP8
00000f66: DUP5
00000f67: PUSH2 0x1f35
00000f6a: JUMP
00000f6b: JUMPDEST
00000f6c: SWAP5
00000f6d: SWAP4
00000f6e: POP
00000f6f: POP
00000f70: POP
00000f71: POP
00000f72: JUMP
00000f73: JUMPDEST
00000f74: PUSH2 0x0f7b
00000f77: PUSH2 0x1b2b
00000f7a: JUMP
00000f7b: JUMPDEST
00000f7c: PUSH1 0x40
00000f7e: MLOAD
00000f7f: PUSH4 0x0935e01b
00000f84: PUSH1 0xe2
00000f86: SHL
00000f87: DUP2
00000f88: MSTORE
00000f89: CALLER
00000f8a: PUSH1 0x04
00000f8c: DUP3
00000f8d: ADD
00000f8e: MSTORE
00000f8f: PUSH1 0x01
00000f91: PUSH1 0x01
00000f93: PUSH1 0xa0
00000f95: SHL
00000f96: SUB
00000f97: SWAP2
00000f98: SWAP1
00000f99: SWAP2
00000f9a: AND
00000f9b: SWAP1
00000f9c: PUSH4 0x24d7806c
00000fa1: SWAP1
00000fa2: PUSH1 0x24
00000fa4: ADD
00000fa5: PUSH1 0x00
00000fa7: PUSH1 0x40
00000fa9: MLOAD
00000faa: DUP1
00000fab: DUP4
00000fac: SUB
00000fad: DUP2
00000fae: DUP7
00000faf: DUP1
00000fb0: EXTCODESIZE
00000fb1: ISZERO
00000fb2: DUP1
00000fb3: ISZERO
00000fb4: PUSH2 0x0fbc
00000fb7: JUMPI
00000fb8: PUSH1 0x00
00000fba: DUP1
00000fbb: REVERT
00000fbc: JUMPDEST
00000fbd: POP
00000fbe: GAS
00000fbf: STATICCALL
00000fc0: ISZERO
00000fc1: DUP1
00000fc2: ISZERO
00000fc3: PUSH2 0x0fd0
00000fc6: JUMPI
00000fc7: RETURNDATASIZE
00000fc8: PUSH1 0x00
00000fca: DUP1
00000fcb: RETURNDATACOPY
00000fcc: RETURNDATASIZE
00000fcd: PUSH1 0x00
00000fcf: REVERT
00000fd0: JUMPDEST
00000fd1: POP
00000fd2: POP
00000fd3: POP
00000fd4: POP
00000fd5: PUSH2 0x0fdd
00000fd8: DUP3
00000fd9: PUSH2 0x1da3
00000fdc: JUMP
00000fdd: JUMPDEST
00000fde: PUSH2 0x0fe7
00000fe1: DUP3
00000fe2: DUP3
00000fe3: PUSH2 0x1ff5
00000fe6: JUMP
00000fe7: JUMPDEST
00000fe8: PUSH1 0x01
00000fea: PUSH1 0x01
00000fec: PUSH1 0xa0
00000fee: SHL
00000fef: SUB
00000ff0: DUP3
00000ff1: AND
00000ff2: PUSH1 0x00
00000ff4: SWAP1
00000ff5: DUP2
00000ff6: MSTORE
00000ff7: PUSH1 0x05
00000ff9: PUSH1 0x20
00000ffb: MSTORE
00000ffc: PUSH1 0x40
00000ffe: DUP2
00000fff: KECCAK256
00001000: DUP1
00001001: SLOAD
00001002: DUP4
00001003: SWAP3
00001004: SWAP1
00001005: PUSH2 0x100f
00001008: SWAP1
00001009: DUP5
0000100a: SWAP1
0000100b: PUSH2 0x31b0
0000100e: JUMP
0000100f: JUMPDEST
00001010: SWAP1
00001011: SWAP2
00001012: SSTORE
00001013: POP
00001014: POP
00001015: PUSH1 0x40
00001017: MLOAD
00001018: PUSH4 0xb6b55f25
0000101d: PUSH1 0xe0
0000101f: SHL
00001020: DUP2
00001021: MSTORE
00001022: PUSH1 0x04
00001024: DUP2
00001025: ADD
00001026: DUP3
00001027: SWAP1
00001028: MSTORE
00001029: PUSH1 0x00
0000102b: SWAP1
0000102c: DUP2
0000102d: SWAP1
0000102e: PUSH1 0x01
00001030: PUSH1 0x01
00001032: PUSH1 0xa0
00001034: SHL
00001035: SUB
00001036: DUP6
00001037: AND
00001038: SWAP1
00001039: PUSH4 0xb6b55f25
0000103e: SWAP1
0000103f: PUSH1 0x24
00001041: ADD
00001042: PUSH1 0x40
00001044: DUP1
00001045: MLOAD
00001046: DUP1
00001047: DUP4
00001048: SUB
00001049: DUP2
0000104a: PUSH1 0x00
0000104c: DUP8
0000104d: GAS
0000104e: CALL
0000104f: ISZERO
00001050: DUP1
00001051: ISZERO
00001052: PUSH2 0x105f
00001055: JUMPI
00001056: RETURNDATASIZE
00001057: PUSH1 0x00
00001059: DUP1
0000105a: RETURNDATACOPY
0000105b: RETURNDATASIZE
0000105c: PUSH1 0x00
0000105e: REVERT
0000105f: JUMPDEST
00001060: POP
00001061: POP
00001062: POP
00001063: POP
00001064: PUSH1 0x40
00001066: MLOAD
00001067: RETURNDATASIZE
00001068: PUSH1 0x1f
0000106a: NOT
0000106b: PUSH1 0x1f
0000106d: DUP3
0000106e: ADD
0000106f: AND
00001070: DUP3
00001071: ADD
00001072: DUP1
00001073: PUSH1 0x40
00001075: MSTORE
00001076: POP
00001077: DUP2
00001078: ADD
00001079: SWAP1
0000107a: PUSH2 0x1083
0000107d: SWAP2
0000107e: SWAP1
0000107f: PUSH2 0x3161
00001082: JUMP
00001083: JUMPDEST
00001084: PUSH1 0x40
00001086: DUP1
00001087: MLOAD
00001088: PUSH1 0x01
0000108a: PUSH1 0x01
0000108c: PUSH1 0xa0
0000108e: SHL
0000108f: SUB
00001090: DUP1
00001091: DUP10
00001092: AND
00001093: DUP3
00001094: MSTORE
00001095: DUP5
00001096: AND
00001097: PUSH1 0x20
00001099: DUP3
0000109a: ADD
0000109b: MSTORE
0000109c: SWAP1
0000109d: DUP2
0000109e: ADD
0000109f: DUP7
000010a0: SWAP1
000010a1: MSTORE
000010a2: PUSH1 0x60
000010a4: DUP2
000010a5: ADD
000010a6: DUP3
000010a7: SWAP1
000010a8: MSTORE
000010a9: SWAP2
000010aa: SWAP4
000010ab: POP
000010ac: SWAP2
000010ad: POP
000010ae: PUSH32 0x1d2b1045a76b2c3ec32fb992dd65aa3ade30353ea512435cfee8259544b06a98
000010cf: SWAP1
000010d0: PUSH1 0x80
000010d2: ADD
000010d3: PUSH2 0x0e3f
000010d6: JUMP
000010d7: JUMPDEST
000010d8: PUSH1 0x01
000010da: PUSH1 0x01
000010dc: PUSH1 0xa0
000010de: SHL
000010df: SUB
000010e0: AND
000010e1: PUSH1 0x00
000010e3: SWAP1
000010e4: DUP2
000010e5: MSTORE
000010e6: PUSH1 0x00
000010e8: DUP1
000010e9: MLOAD
000010ea: PUSH1 0x20
000010ec: PUSH2 0x34a8
000010ef: DUP4
000010f0: CODECOPY
000010f1: DUP2
000010f2: MLOAD
000010f3: SWAP2
000010f4: MSTORE
000010f5: PUSH1 0x20
000010f7: MSTORE
000010f8: PUSH1 0x40
000010fa: SWAP1
000010fb: KECCAK256
000010fc: SLOAD
000010fd: SWAP1
000010fe: JUMP
000010ff: JUMPDEST
00001100: PUSH2 0x1107
00001103: PUSH2 0x209f
00001106: JUMP
00001107: JUMPDEST
00001108: PUSH2 0x1111
0000110b: PUSH1 0x00
0000110d: PUSH2 0x20d1
00001110: JUMP
00001111: JUMPDEST
00001112: JUMP
00001113: JUMPDEST
00001114: PUSH1 0x67
00001116: PUSH2 0x111d
00001119: PUSH2 0x1b2b
0000111c: JUMP
0000111d: JUMPDEST
0000111e: PUSH1 0x01
00001120: PUSH1 0x01
00001122: PUSH1 0xa0
00001124: SHL
00001125: SUB
00001126: AND
00001127: PUSH4 0xc614384c
0000112c: DUP3
0000112d: CALLER
0000112e: PUSH1 0x40
00001130: MLOAD
00001131: DUP4
00001132: PUSH4 0xffffffff
00001137: AND
00001138: PUSH1 0xe0
0000113a: SHL
0000113b: DUP2
0000113c: MSTORE
0000113d: PUSH1 0x04
0000113f: ADD
00001140: PUSH2 0x114a
00001143: SWAP3
00001144: SWAP2
00001145: SWAP1
00001146: PUSH2 0x313e
00001149: JUMP
0000114a: JUMPDEST
0000114b: PUSH1 0x00
0000114d: PUSH1 0x40
0000114f: MLOAD
00001150: DUP1
00001151: DUP4
00001152: SUB
00001153: DUP2
00001154: DUP7
00001155: DUP1
00001156: EXTCODESIZE
00001157: ISZERO
00001158: DUP1
00001159: ISZERO
0000115a: PUSH2 0x1162
0000115d: JUMPI
0000115e: PUSH1 0x00
00001160: DUP1
00001161: REVERT
00001162: JUMPDEST
00001163: POP
00001164: GAS
00001165: STATICCALL
00001166: ISZERO
00001167: DUP1
00001168: ISZERO
00001169: PUSH2 0x1176
0000116c: JUMPI
0000116d: RETURNDATASIZE
0000116e: PUSH1 0x00
00001170: DUP1
00001171: RETURNDATACOPY
00001172: RETURNDATASIZE
00001173: PUSH1 0x00
00001175: REVERT
00001176: JUMPDEST
00001177: POP
00001178: POP
00001179: POP
0000117a: POP
0000117b: DUP2
0000117c: PUSH2 0x11a5
0000117f: PUSH32 0x5f64ef5afc66734d661a0e9d6aa10a8d47dcf2c1c681696cce952f8ef9115384
000011a0: PUSH1 0x00
000011a2: SHL
000011a3: SWAP1
000011a4: JUMP
000011a5: JUMPDEST
000011a6: SSTORE
000011a7: PUSH1 0x40
000011a9: MLOAD
000011aa: DUP3
000011ab: DUP2
000011ac: MSTORE
000011ad: PUSH32 0x333b26cca69716ad4680ddb07663f5bfb4f06045671f336af9a83690a3ae00f9
000011ce: SWAP1
000011cf: PUSH1 0x20
000011d1: ADD
000011d2: PUSH2 0x0f08
000011d5: JUMP
000011d6: JUMPDEST
000011d7: PUSH1 0x00
000011d9: DUP1
000011da: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300
000011fb: PUSH2 0x0b2f
000011fe: JUMP
000011ff: JUMPDEST
00001200: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
00001221: DUP1
00001222: SLOAD
00001223: PUSH1 0x01
00001225: PUSH1 0x40
00001227: SHL
00001228: DUP2
00001229: DIV
0000122a: PUSH1 0xff
0000122c: AND
0000122d: ISZERO
0000122e: SWAP1
0000122f: PUSH8 0xffffffffffffffff
00001238: AND
00001239: PUSH1 0x00
0000123b: DUP2
0000123c: ISZERO
0000123d: DUP1
0000123e: ISZERO
0000123f: PUSH2 0x1245
00001242: JUMPI
00001243: POP
00001244: DUP3
00001245: JUMPDEST
00001246: SWAP1
00001247: POP
00001248: PUSH1 0x00
0000124a: DUP3
0000124b: PUSH8 0xffffffffffffffff
00001254: AND
00001255: PUSH1 0x01
00001257: EQ
00001258: DUP1
00001259: ISZERO
0000125a: PUSH2 0x1262
0000125d: JUMPI
0000125e: POP
0000125f: ADDRESS
00001260: EXTCODESIZE
00001261: ISZERO
00001262: JUMPDEST
00001263: SWAP1
00001264: POP
00001265: DUP2
00001266: ISZERO
00001267: DUP1
00001268: ISZERO
00001269: PUSH2 0x1270
0000126c: JUMPI
0000126d: POP
0000126e: DUP1
0000126f: ISZERO
00001270: JUMPDEST
00001271: ISZERO
00001272: PUSH2 0x128e
00001275: JUMPI
00001276: PUSH1 0x40
00001278: MLOAD
00001279: PUSH4 0xf92ee8a9
0000127e: PUSH1 0xe0
00001280: SHL
00001281: DUP2
00001282: MSTORE
00001283: PUSH1 0x04
00001285: ADD
00001286: PUSH1 0x40
00001288: MLOAD
00001289: DUP1
0000128a: SWAP2
0000128b: SUB
0000128c: SWAP1
0000128d: REVERT
0000128e: JUMPDEST
0000128f: DUP5
00001290: SLOAD
00001291: PUSH8 0xffffffffffffffff
0000129a: NOT
0000129b: AND
0000129c: PUSH1 0x01
0000129e: OR
0000129f: DUP6
000012a0: SSTORE
000012a1: DUP4
000012a2: ISZERO
000012a3: PUSH2 0x12b8
000012a6: JUMPI
000012a7: DUP5
000012a8: SLOAD
000012a9: PUSH1 0xff
000012ab: PUSH1 0x40
000012ad: SHL
000012ae: NOT
000012af: AND
000012b0: PUSH1 0x01
000012b2: PUSH1 0x40
000012b4: SHL
000012b5: OR
000012b6: DUP6
000012b7: SSTORE
000012b8: JUMPDEST
000012b9: PUSH2 0x12c6
000012bc: DUP12
000012bd: DUP12
000012be: DUP12
000012bf: DUP12
000012c0: DUP12
000012c1: DUP12
000012c2: PUSH2 0x0a56
000012c5: JUMP
000012c6: JUMPDEST
000012c7: DUP4
000012c8: ISZERO
000012c9: PUSH2 0x130c
000012cc: JUMPI
000012cd: DUP5
000012ce: SLOAD
000012cf: PUSH1 0xff
000012d1: PUSH1 0x40
000012d3: SHL
000012d4: NOT
000012d5: AND
000012d6: DUP6
000012d7: SSTORE
000012d8: PUSH1 0x40
000012da: MLOAD
000012db: PUSH1 0x01
000012dd: DUP2
000012de: MSTORE
000012df: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2
00001300: SWAP1
00001301: PUSH1 0x20
00001303: ADD
00001304: PUSH1 0x40
00001306: MLOAD
00001307: DUP1
00001308: SWAP2
00001309: SUB
0000130a: SWAP1
0000130b: LOG1
0000130c: JUMPDEST
0000130d: POP
0000130e: POP
0000130f: POP
00001310: POP
00001311: POP
00001312: POP
00001313: POP
00001314: POP
00001315: POP
00001316: POP
00001317: POP
00001318: JUMP
00001319: JUMPDEST
0000131a: PUSH1 0x00
0000131c: PUSH1 0x00
0000131e: NOT
0000131f: PUSH1 0x00
00001321: PUSH2 0x1329
00001324: DUP6
00001325: PUSH2 0x15a6
00001328: JUMP
00001329: JUMPDEST
0000132a: SWAP1
0000132b: POP
0000132c: PUSH2 0x0f6b
0000132f: CALLER
00001330: DUP6
00001331: DUP4
00001332: DUP9
00001333: PUSH2 0x1f35
00001336: JUMP
00001337: JUMPDEST
00001338: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04
00001359: DUP1
0000135a: SLOAD
0000135b: PUSH1 0x60
0000135d: SWAP2
0000135e: PUSH1 0x00
00001360: DUP1
00001361: MLOAD
00001362: PUSH1 0x20
00001364: PUSH2 0x34a8
00001367: DUP4
00001368: CODECOPY
00001369: DUP2
0000136a: MLOAD
0000136b: SWAP2
0000136c: MSTORE
0000136d: SWAP2
0000136e: PUSH2 0x0974
00001371: SWAP1
00001372: PUSH2 0x30c2
00001375: JUMP
00001376: JUMPDEST
00001377: PUSH1 0x00
00001379: DUP2
0000137a: PUSH2 0x138e
0000137d: JUMPI
0000137e: PUSH1 0x04
00001380: SLOAD
00001381: PUSH1 0x01
00001383: PUSH1 0x01
00001385: PUSH1 0xa0
00001387: SHL
00001388: SUB
00001389: AND
0000138a: PUSH2 0x0a05
0000138d: JUMP
0000138e: JUMPDEST
0000138f: POP
00001390: POP
00001391: PUSH1 0x03
00001393: SLOAD
00001394: PUSH1 0x01
00001396: PUSH1 0x01
00001398: PUSH1 0xa0
0000139a: SHL
0000139b: SUB
0000139c: AND
0000139d: SWAP1
0000139e: JUMP
0000139f: JUMPDEST
000013a0: PUSH1 0x00
000013a2: CALLER
000013a3: PUSH2 0x0a19
000013a6: DUP2
000013a7: DUP6
000013a8: DUP6
000013a9: PUSH2 0x1a37
000013ac: JUMP
000013ad: JUMPDEST
000013ae: PUSH2 0x13b5
000013b1: PUSH2 0x1b2b
000013b4: JUMP
000013b5: JUMPDEST
000013b6: PUSH1 0x40
000013b8: MLOAD
000013b9: PUSH4 0x0935e01b
000013be: PUSH1 0xe2
000013c0: SHL
000013c1: DUP2
000013c2: MSTORE
000013c3: CALLER
000013c4: PUSH1 0x04
000013c6: DUP3
000013c7: ADD
000013c8: MSTORE
000013c9: PUSH1 0x01
000013cb: PUSH1 0x01
000013cd: PUSH1 0xa0
000013cf: SHL
000013d0: SUB
000013d1: SWAP2
000013d2: SWAP1
000013d3: SWAP2
000013d4: AND
000013d5: SWAP1
000013d6: PUSH4 0x24d7806c
000013db: SWAP1
000013dc: PUSH1 0x24
000013de: ADD
000013df: PUSH1 0x00
000013e1: PUSH1 0x40
000013e3: MLOAD
000013e4: DUP1
000013e5: DUP4
000013e6: SUB
000013e7: DUP2
000013e8: DUP7
000013e9: DUP1
000013ea: EXTCODESIZE
000013eb: ISZERO
000013ec: DUP1
000013ed: ISZERO
000013ee: PUSH2 0x13f6
000013f1: JUMPI
000013f2: PUSH1 0x00
000013f4: DUP1
000013f5: REVERT
000013f6: JUMPDEST
000013f7: POP
000013f8: GAS
000013f9: STATICCALL
000013fa: ISZERO
000013fb: DUP1
000013fc: ISZERO
000013fd: PUSH2 0x140a
00001400: JUMPI
00001401: RETURNDATASIZE
00001402: PUSH1 0x00
00001404: DUP1
00001405: RETURNDATACOPY
00001406: RETURNDATASIZE
00001407: PUSH1 0x00
00001409: REVERT
0000140a: JUMPDEST
0000140b: POP
0000140c: POP
0000140d: POP
0000140e: POP
0000140f: PUSH2 0x0c52
00001412: DUP2
00001413: PUSH2 0x1da3
00001416: JUMP
00001417: JUMPDEST
00001418: PUSH1 0x00
0000141a: PUSH2 0x1421
0000141d: PUSH2 0x2142
00001420: JUMP
00001421: JUMPDEST
00001422: PUSH1 0x00
00001424: PUSH2 0x142b
00001427: PUSH2 0x217a
0000142a: JUMP
0000142b: JUMPDEST
0000142c: SWAP1
0000142d: POP
0000142e: DUP1
0000142f: PUSH1 0x01
00001431: PUSH1 0x01
00001433: PUSH1 0xa0
00001435: SHL
00001436: SUB
00001437: AND
00001438: PUSH2 0x143f
0000143b: PUSH2 0x0b0a
0000143e: JUMP
0000143f: JUMPDEST
00001440: PUSH1 0x01
00001442: PUSH1 0x01
00001444: PUSH1 0xa0
00001446: SHL
00001447: SUB
00001448: AND
00001449: EQ
0000144a: PUSH2 0x1466
0000144d: JUMPI
0000144e: PUSH1 0x40
00001450: MLOAD
00001451: PUSH4 0x2e15428f
00001456: PUSH1 0xe0
00001458: SHL
00001459: DUP2
0000145a: MSTORE
0000145b: PUSH1 0x04
0000145d: ADD
0000145e: PUSH1 0x40
00001460: MLOAD
00001461: DUP1
00001462: SWAP2
00001463: SUB
00001464: SWAP1
00001465: REVERT
00001466: JUMPDEST
00001467: CALLVALUE
00001468: PUSH1 0x00
0000146a: DUP2
0000146b: SWAP1
0000146c: SUB
0000146d: PUSH2 0x1489
00001470: JUMPI
00001471: PUSH1 0x40
00001473: MLOAD
00001474: PUSH4 0x0772327b
00001479: PUSH1 0xe0
0000147b: SHL
0000147c: DUP2
0000147d: MSTORE
0000147e: PUSH1 0x04
00001480: ADD
00001481: PUSH1 0x40
00001483: MLOAD
00001484: DUP1
00001485: SWAP2
00001486: SUB
00001487: SWAP1
00001488: REVERT
00001489: JUMPDEST
0000148a: PUSH1 0x00
0000148c: PUSH2 0x1494
0000148f: DUP6
00001490: PUSH2 0x0b3f
00001493: JUMP
00001494: JUMPDEST
00001495: SWAP1
00001496: POP
00001497: DUP1
00001498: DUP3
00001499: GT
0000149a: ISZERO
0000149b: PUSH2 0x14bd
0000149e: JUMPI
0000149f: DUP5
000014a0: DUP3
000014a1: DUP3
000014a2: PUSH1 0x40
000014a4: MLOAD
000014a5: PUSH4 0x3c8097d9
000014aa: PUSH1 0xe1
000014ac: SHL
000014ad: DUP2
000014ae: MSTORE
000014af: PUSH1 0x04
000014b1: ADD
000014b2: PUSH2 0x0f49
000014b5: SWAP4
000014b6: SWAP3
000014b7: SWAP2
000014b8: SWAP1
000014b9: PUSH2 0x318f
000014bc: JUMP
000014bd: JUMPDEST
000014be: PUSH1 0x00
000014c0: PUSH2 0x14c8
000014c3: DUP4
000014c4: PUSH2 0x16a1
000014c7: JUMP
000014c8: JUMPDEST
000014c9: SWAP1
000014ca: POP
000014cb: DUP4
000014cc: PUSH1 0x01
000014ce: PUSH1 0x01
000014d0: PUSH1 0xa0
000014d2: SHL
000014d3: SUB
000014d4: AND
000014d5: PUSH4 0xd0e30db0
000014da: DUP5
000014db: PUSH1 0x40
000014dd: MLOAD
000014de: DUP3
000014df: PUSH4 0xffffffff
000014e4: AND
000014e5: PUSH1 0xe0
000014e7: SHL
000014e8: DUP2
000014e9: MSTORE
000014ea: PUSH1 0x04
000014ec: ADD
000014ed: PUSH1 0x00
000014ef: PUSH1 0x40
000014f1: MLOAD
000014f2: DUP1
000014f3: DUP4
000014f4: SUB
000014f5: DUP2
000014f6: DUP6
000014f7: DUP9
000014f8: DUP1
000014f9: EXTCODESIZE
000014fa: ISZERO
000014fb: DUP1
000014fc: ISZERO
000014fd: PUSH2 0x1505
00001500: JUMPI
00001501: PUSH1 0x00
00001503: DUP1
00001504: REVERT
00001505: JUMPDEST
00001506: POP
00001507: GAS
00001508: CALL
00001509: ISZERO
0000150a: DUP1
0000150b: ISZERO
0000150c: PUSH2 0x1519
0000150f: JUMPI
00001510: RETURNDATASIZE
00001511: PUSH1 0x00
00001513: DUP1
00001514: RETURNDATACOPY
00001515: RETURNDATASIZE
00001516: PUSH1 0x00
00001518: REVERT
00001519: JUMPDEST
0000151a: POP
0000151b: POP
0000151c: POP
0000151d: POP
0000151e: POP
0000151f: PUSH2 0x1528
00001522: DUP7
00001523: DUP3
00001524: PUSH2 0x21e5
00001527: JUMP
00001528: JUMPDEST
00001529: DUP3
0000152a: PUSH1 0x01
0000152c: PUSH1 0x00
0000152e: DUP3
0000152f: DUP3
00001530: SLOAD
00001531: PUSH2 0x153a
00001534: SWAP2
00001535: SWAP1
00001536: PUSH2 0x31b0
00001539: JUMP
0000153a: JUMPDEST
0000153b: SWAP1
0000153c: SWAP2
0000153d: SSTORE
0000153e: POP
0000153f: POP
00001540: PUSH1 0x40
00001542: DUP1
00001543: MLOAD
00001544: DUP5
00001545: DUP2
00001546: MSTORE
00001547: PUSH1 0x20
00001549: DUP2
0000154a: ADD
0000154b: DUP4
0000154c: SWAP1
0000154d: MSTORE
0000154e: PUSH1 0x01
00001550: PUSH1 0x01
00001552: PUSH1 0xa0
00001554: SHL
00001555: SUB
00001556: DUP9
00001557: AND
00001558: SWAP2
00001559: CALLER
0000155a: SWAP2
0000155b: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
0000157c: SWAP2
0000157d: ADD
0000157e: PUSH1 0x40
00001580: MLOAD
00001581: DUP1
00001582: SWAP2
00001583: SUB
00001584: SWAP1
00001585: LOG3
00001586: SWAP4
00001587: POP
00001588: POP
00001589: POP
0000158a: POP
0000158b: PUSH2 0x15a1
0000158e: PUSH1 0x01
00001590: PUSH1 0x00
00001592: DUP1
00001593: MLOAD
00001594: PUSH1 0x20
00001596: PUSH2 0x3508
00001599: DUP4
0000159a: CODECOPY
0000159b: DUP2
0000159c: MLOAD
0000159d: SWAP2
0000159e: MSTORE
0000159f: SSTORE
000015a0: JUMP
000015a1: JUMPDEST
000015a2: SWAP2
000015a3: SWAP1
000015a4: POP
000015a5: JUMP
000015a6: JUMPDEST
000015a7: PUSH1 0x00
000015a9: PUSH2 0x0a05
000015ac: DUP3
000015ad: PUSH1 0x01
000015af: PUSH2 0x1957
000015b2: JUMP
000015b3: JUMPDEST
000015b4: PUSH1 0x00
000015b6: DUP1
000015b7: PUSH2 0x15bf
000015ba: DUP4
000015bb: PUSH2 0x16ae
000015be: JUMP
000015bf: JUMPDEST
000015c0: SWAP1
000015c1: POP
000015c2: DUP1
000015c3: DUP6
000015c4: GT
000015c5: ISZERO
000015c6: PUSH2 0x15e8
000015c9: JUMPI
000015ca: DUP3
000015cb: DUP6
000015cc: DUP3
000015cd: PUSH1 0x40
000015cf: MLOAD
000015d0: PUSH4 0x3fa733bb
000015d5: PUSH1 0xe2
000015d7: SHL
000015d8: DUP2
000015d9: MSTORE
000015da: PUSH1 0x04
000015dc: ADD
000015dd: PUSH2 0x0f49
000015e0: SWAP4
000015e1: SWAP3
000015e2: SWAP2
000015e3: SWAP1
000015e4: PUSH2 0x318f
000015e7: JUMP
000015e8: JUMPDEST
000015e9: PUSH1 0x00
000015eb: PUSH2 0x15f3
000015ee: DUP7
000015ef: PUSH2 0x0a23
000015f2: JUMP
000015f3: JUMPDEST
000015f4: SWAP1
000015f5: POP
000015f6: PUSH2 0x1602
000015f9: CALLER
000015fa: DUP7
000015fb: DUP7
000015fc: DUP10
000015fd: DUP6
000015fe: PUSH2 0x222f
00001601: JUMP
00001602: JUMPDEST
00001603: SWAP6
00001604: SWAP5
00001605: POP
00001606: POP
00001607: POP
00001608: POP
00001609: POP
0000160a: JUMP
0000160b: JUMPDEST
0000160c: PUSH1 0x00
0000160e: DUP1
0000160f: PUSH2 0x1617
00001612: DUP4
00001613: PUSH2 0x1787
00001616: JUMP
00001617: JUMPDEST
00001618: SWAP1
00001619: POP
0000161a: DUP1
0000161b: DUP6
0000161c: GT
0000161d: ISZERO
0000161e: PUSH2 0x1640
00001621: JUMPI
00001622: DUP3
00001623: DUP6
00001624: DUP3
00001625: PUSH1 0x40
00001627: MLOAD
00001628: PUSH4 0x2e52afbb
0000162d: PUSH1 0xe2
0000162f: SHL
00001630: DUP2
00001631: MSTORE
00001632: PUSH1 0x04
00001634: ADD
00001635: PUSH2 0x0f49
00001638: SWAP4
00001639: SWAP3
0000163a: SWAP2
0000163b: SWAP1
0000163c: PUSH2 0x318f
0000163f: JUMP
00001640: JUMPDEST
00001641: PUSH1 0x00
00001643: PUSH2 0x164b
00001646: DUP7
00001647: PUSH2 0x09f8
0000164a: JUMP
0000164b: JUMPDEST
0000164c: SWAP1
0000164d: POP
0000164e: PUSH2 0x1602
00001651: CALLER
00001652: DUP7
00001653: DUP7
00001654: DUP5
00001655: DUP11
00001656: PUSH2 0x222f
00001659: JUMP
0000165a: JUMPDEST
0000165b: PUSH1 0x04
0000165d: SLOAD
0000165e: PUSH1 0x01
00001660: PUSH1 0x01
00001662: PUSH1 0xa0
00001664: SHL
00001665: SUB
00001666: AND
00001667: CALLER
00001668: EQ
00001669: PUSH2 0x1697
0000166c: JUMPI
0000166d: PUSH1 0x03
0000166f: SLOAD
00001670: PUSH1 0x01
00001672: PUSH1 0x01
00001674: PUSH1 0xa0
00001676: SHL
00001677: SUB
00001678: AND
00001679: CALLER
0000167a: EQ
0000167b: PUSH2 0x1697
0000167e: JUMPI
0000167f: PUSH1 0x40
00001681: MLOAD
00001682: PUSH4 0xe9211597
00001687: PUSH1 0xe0
00001689: SHL
0000168a: DUP2
0000168b: MSTORE
0000168c: PUSH1 0x04
0000168e: ADD
0000168f: PUSH1 0x40
00001691: MLOAD
00001692: DUP1
00001693: SWAP2
00001694: SUB
00001695: SWAP1
00001696: REVERT
00001697: JUMPDEST
00001698: PUSH2 0x0c52
0000169b: CALLER
0000169c: DUP3
0000169d: PUSH2 0x1ff5
000016a0: JUMP
000016a1: JUMPDEST
000016a2: PUSH1 0x00
000016a4: PUSH2 0x0a05
000016a7: DUP3
000016a8: PUSH1 0x00
000016aa: PUSH2 0x19ac
000016ad: JUMP
000016ae: JUMPDEST
000016af: PUSH1 0x00
000016b1: PUSH2 0x0a05
000016b4: PUSH2 0x16bc
000016b7: DUP4
000016b8: PUSH2 0x10d7
000016bb: JUMP
000016bc: JUMPDEST
000016bd: PUSH1 0x00
000016bf: PUSH2 0x1957
000016c2: JUMP
000016c3: JUMPDEST
000016c4: PUSH1 0x04
000016c6: SLOAD
000016c7: PUSH1 0x01
000016c9: PUSH1 0x01
000016cb: PUSH1 0xa0
000016cd: SHL
000016ce: SUB
000016cf: AND
000016d0: CALLER
000016d1: EQ
000016d2: PUSH2 0x1700
000016d5: JUMPI
000016d6: PUSH1 0x03
000016d8: SLOAD
000016d9: PUSH1 0x01
000016db: PUSH1 0x01
000016dd: PUSH1 0xa0
000016df: SHL
000016e0: SUB
000016e1: AND
000016e2: CALLER
000016e3: EQ
000016e4: PUSH2 0x1700
000016e7: JUMPI
000016e8: PUSH1 0x40
000016ea: MLOAD
000016eb: PUSH4 0xe9211597
000016f0: PUSH1 0xe0
000016f2: SHL
000016f3: DUP2
000016f4: MSTORE
000016f5: PUSH1 0x04
000016f7: ADD
000016f8: PUSH1 0x40
000016fa: MLOAD
000016fb: DUP1
000016fc: SWAP2
000016fd: SUB
000016fe: SWAP1
000016ff: REVERT
00001700: JUMPDEST
00001701: DUP2
00001702: DUP4
00001703: LT
00001704: ISZERO
00001705: PUSH2 0x1752
00001708: JUMPI
00001709: DUP1
0000170a: PUSH2 0x1726
0000170d: JUMPI
0000170e: PUSH1 0x40
00001710: MLOAD
00001711: PUSH4 0xb0f8fc9b
00001716: PUSH1 0xe0
00001718: SHL
00001719: DUP2
0000171a: MSTORE
0000171b: PUSH1 0x04
0000171d: ADD
0000171e: PUSH1 0x40
00001720: MLOAD
00001721: DUP1
00001722: SWAP2
00001723: SUB
00001724: SWAP1
00001725: REVERT
00001726: JUMPDEST
00001727: PUSH1 0x00
00001729: PUSH2 0x1732
0000172c: DUP5
0000172d: DUP5
0000172e: PUSH2 0x312b
00001731: JUMP
00001732: JUMPDEST
00001733: SWAP1
00001734: POP
00001735: DUP1
00001736: PUSH1 0x01
00001738: PUSH1 0x00
0000173a: DUP3
0000173b: DUP3
0000173c: SLOAD
0000173d: PUSH2 0x1746
00001740: SWAP2
00001741: SWAP1
00001742: PUSH2 0x312b
00001745: JUMP
00001746: JUMPDEST
00001747: SWAP1
00001748: SWAP2
00001749: SSTORE
0000174a: POP
0000174b: PUSH2 0x1782
0000174e: SWAP2
0000174f: POP
00001750: POP
00001751: JUMP
00001752: JUMPDEST
00001753: PUSH1 0x00
00001755: PUSH2 0x175e
00001758: DUP4
00001759: DUP6
0000175a: PUSH2 0x312b
0000175d: JUMP
0000175e: JUMPDEST
0000175f: SWAP1
00001760: POP
00001761: PUSH2 0x1769
00001764: DUP2
00001765: PUSH2 0x2375
00001768: JUMP
00001769: JUMPDEST
0000176a: DUP1
0000176b: PUSH1 0x01
0000176d: PUSH1 0x00
0000176f: DUP3
00001770: DUP3
00001771: SLOAD
00001772: PUSH2 0x177b
00001775: SWAP2
00001776: SWAP1
00001777: PUSH2 0x31b0
0000177a: JUMP
0000177b: JUMPDEST
0000177c: SWAP1
0000177d: SWAP2
0000177e: SSTORE
0000177f: POP
00001780: POP
00001781: POP
00001782: JUMPDEST
00001783: POP
00001784: POP
00001785: POP
00001786: JUMP
00001787: JUMPDEST
00001788: PUSH1 0x00
0000178a: PUSH2 0x0a05
0000178d: DUP3
0000178e: PUSH2 0x10d7
00001791: JUMP
00001792: JUMPDEST
00001793: PUSH1 0x01
00001795: PUSH1 0x01
00001797: PUSH1 0xa0
00001799: SHL
0000179a: SUB
0000179b: SWAP2
0000179c: DUP3
0000179d: AND
0000179e: PUSH1 0x00
000017a0: SWAP1
000017a1: DUP2
000017a2: MSTORE
000017a3: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01
000017c4: PUSH1 0x20
000017c6: SWAP1
000017c7: DUP2
000017c8: MSTORE
000017c9: PUSH1 0x40
000017cb: DUP1
000017cc: DUP4
000017cd: KECCAK256
000017ce: SWAP4
000017cf: SWAP1
000017d0: SWAP5
000017d1: AND
000017d2: DUP3
000017d3: MSTORE
000017d4: SWAP2
000017d5: SWAP1
000017d6: SWAP2
000017d7: MSTORE
000017d8: KECCAK256
000017d9: SLOAD
000017da: SWAP1
000017db: JUMP
000017dc: JUMPDEST
000017dd: PUSH1 0x67
000017df: PUSH2 0x17e6
000017e2: PUSH2 0x1b2b
000017e5: JUMP
000017e6: JUMPDEST
000017e7: PUSH1 0x01
000017e9: PUSH1 0x01
000017eb: PUSH1 0xa0
000017ed: SHL
000017ee: SUB
000017ef: AND
000017f0: PUSH4 0xc614384c
000017f5: DUP3
000017f6: CALLER
000017f7: PUSH1 0x40
000017f9: MLOAD
000017fa: DUP4
000017fb: PUSH4 0xffffffff
00001800: AND
00001801: PUSH1 0xe0
00001803: SHL
00001804: DUP2
00001805: MSTORE
00001806: PUSH1 0x04
00001808: ADD
00001809: PUSH2 0x1813
0000180c: SWAP3
0000180d: SWAP2
0000180e: SWAP1
0000180f: PUSH2 0x313e
00001812: JUMP
00001813: JUMPDEST
00001814: PUSH1 0x00
00001816: PUSH1 0x40
00001818: MLOAD
00001819: DUP1
0000181a: DUP4
0000181b: SUB
0000181c: DUP2
0000181d: DUP7
0000181e: DUP1
0000181f: EXTCODESIZE
00001820: ISZERO
00001821: DUP1
00001822: ISZERO
00001823: PUSH2 0x182b
00001826: JUMPI
00001827: PUSH1 0x00
00001829: DUP1
0000182a: REVERT
0000182b: JUMPDEST
0000182c: POP
0000182d: GAS
0000182e: STATICCALL
0000182f: ISZERO
00001830: DUP1
00001831: ISZERO
00001832: PUSH2 0x183f
00001835: JUMPI
00001836: RETURNDATASIZE
00001837: PUSH1 0x00
00001839: DUP1
0000183a: RETURNDATACOPY
0000183b: RETURNDATASIZE
0000183c: PUSH1 0x00
0000183e: REVERT
0000183f: JUMPDEST
00001840: POP
00001841: POP
00001842: POP
00001843: POP
00001844: DUP2
00001845: PUSH1 0x00
00001847: SUB
00001848: PUSH2 0x1864
0000184b: JUMPI
0000184c: PUSH1 0x40
0000184e: MLOAD
0000184f: PUSH4 0x162908e3
00001854: PUSH1 0xe1
00001856: SHL
00001857: DUP2
00001858: MSTORE
00001859: PUSH1 0x04
0000185b: ADD
0000185c: PUSH1 0x40
0000185e: MLOAD
0000185f: DUP1
00001860: SWAP2
00001861: SUB
00001862: SWAP1
00001863: REVERT
00001864: JUMPDEST
00001865: PUSH2 0x1883
00001868: CALLER
00001869: ADDRESS
0000186a: DUP5
0000186b: PUSH2 0x1872
0000186e: PUSH2 0x0b0a
00001871: JUMP
00001872: JUMPDEST
00001873: PUSH1 0x01
00001875: PUSH1 0x01
00001877: PUSH1 0xa0
00001879: SHL
0000187a: SUB
0000187b: AND
0000187c: SWAP3
0000187d: SWAP2
0000187e: SWAP1
0000187f: PUSH2 0x2418
00001882: JUMP
00001883: JUMPDEST
00001884: DUP2
00001885: PUSH1 0x01
00001887: PUSH1 0x00
00001889: DUP3
0000188a: DUP3
0000188b: SLOAD
0000188c: PUSH2 0x1895
0000188f: SWAP2
00001890: SWAP1
00001891: PUSH2 0x31b0
00001894: JUMP
00001895: JUMPDEST
00001896: SWAP1
00001897: SWAP2
00001898: SSTORE
00001899: POP
0000189a: PUSH32 0x8f721bf293f3e50bca3ef8987b9d6d300867879e600625884397974fa5d1a927
000018bb: SWAP1
000018bc: POP
000018bd: PUSH2 0x18c4
000018c0: PUSH2 0x0b0a
000018c3: JUMP
000018c4: JUMPDEST
000018c5: PUSH1 0x40
000018c7: DUP1
000018c8: MLOAD
000018c9: PUSH1 0x01
000018cb: PUSH1 0x01
000018cd: PUSH1 0xa0
000018cf: SHL
000018d0: SUB
000018d1: SWAP1
000018d2: SWAP3
000018d3: AND
000018d4: DUP3
000018d5: MSTORE
000018d6: PUSH1 0x20
000018d8: DUP3
000018d9: ADD
000018da: DUP6
000018db: SWAP1
000018dc: MSTORE
000018dd: ADD
000018de: PUSH2 0x0f08
000018e1: JUMP
000018e2: JUMPDEST
000018e3: PUSH2 0x18ea
000018e6: PUSH2 0x209f
000018e9: JUMP
000018ea: JUMPDEST
000018eb: PUSH1 0x01
000018ed: PUSH1 0x01
000018ef: PUSH1 0xa0
000018f1: SHL
000018f2: SUB
000018f3: DUP2
000018f4: AND
000018f5: PUSH2 0x1914
000018f8: JUMPI
000018f9: PUSH1 0x40
000018fb: MLOAD
000018fc: PUSH4 0x1e4fbdf7
00001901: PUSH1 0xe0
00001903: SHL
00001904: DUP2
00001905: MSTORE
00001906: PUSH1 0x00
00001908: PUSH1 0x04
0000190a: DUP3
0000190b: ADD
0000190c: MSTORE
0000190d: PUSH1 0x24
0000190f: ADD
00001910: PUSH2 0x0f49
00001913: JUMP
00001914: JUMPDEST
00001915: PUSH2 0x0c52
00001918: DUP2
00001919: PUSH2 0x20d1
0000191c: JUMP
0000191d: JUMPDEST
0000191e: PUSH32 0x5f64ef5afc66734d661a0e9d6aa10a8d47dcf2c1c681696cce952f8ef9115384
0000193f: SLOAD
00001940: PUSH1 0x00
00001942: SWAP1
00001943: DUP1
00001944: ISZERO
00001945: PUSH2 0x194e
00001948: JUMPI
00001949: DUP1
0000194a: PUSH2 0x0b04
0000194d: JUMP
0000194e: JUMPDEST
0000194f: PUSH1 0x00
00001951: NOT
00001952: SWAP2
00001953: POP
00001954: POP
00001955: SWAP1
00001956: JUMP
00001957: JUMPDEST
00001958: PUSH1 0x00
0000195a: PUSH2 0x0a4f
0000195d: PUSH2 0x1965
00001960: PUSH1 0x01
00001962: SLOAD
00001963: SWAP1
00001964: JUMP
00001965: JUMPDEST
00001966: PUSH2 0x1970
00001969: SWAP1
0000196a: PUSH1 0x01
0000196c: PUSH2 0x31b0
0000196f: JUMP
00001970: JUMPDEST
00001971: PUSH2 0x197c
00001974: PUSH1 0x00
00001976: PUSH1 0x0a
00001978: PUSH2 0x32aa
0000197b: JUMP
0000197c: JUMPDEST
0000197d: PUSH1 0x00
0000197f: DUP1
00001980: MLOAD
00001981: PUSH1 0x20
00001983: PUSH2 0x34c8
00001986: DUP4
00001987: CODECOPY
00001988: DUP2
00001989: MLOAD
0000198a: SWAP2
0000198b: MSTORE
0000198c: SLOAD
0000198d: PUSH2 0x1996
00001990: SWAP2
00001991: SWAP1
00001992: PUSH2 0x31b0
00001995: JUMP
00001996: JUMPDEST
00001997: DUP6
00001998: SWAP2
00001999: SWAP1
0000199a: DUP6
0000199b: PUSH2 0x2451
0000199e: JUMP
0000199f: JUMPDEST
000019a0: PUSH2 0x1782
000019a3: DUP4
000019a4: DUP4
000019a5: DUP4
000019a6: PUSH1 0x01
000019a8: PUSH2 0x24a0
000019ab: JUMP
000019ac: JUMPDEST
000019ad: PUSH1 0x00
000019af: PUSH2 0x0a4f
000019b2: PUSH2 0x19bc
000019b5: DUP3
000019b6: PUSH1 0x0a
000019b8: PUSH2 0x32aa
000019bb: JUMP
000019bc: JUMPDEST
000019bd: PUSH1 0x00
000019bf: DUP1
000019c0: MLOAD
000019c1: PUSH1 0x20
000019c3: PUSH2 0x34c8
000019c6: DUP4
000019c7: CODECOPY
000019c8: DUP2
000019c9: MLOAD
000019ca: SWAP2
000019cb: MSTORE
000019cc: SLOAD
000019cd: PUSH2 0x19d6
000019d0: SWAP2
000019d1: SWAP1
000019d2: PUSH2 0x31b0
000019d5: JUMP
000019d6: JUMPDEST
000019d7: PUSH1 0x01
000019d9: SLOAD
000019da: PUSH2 0x1996
000019dd: SWAP1
000019de: PUSH1 0x01
000019e0: PUSH2 0x31b0
000019e3: JUMP
000019e4: JUMPDEST
000019e5: PUSH1 0x00
000019e7: PUSH2 0x19f0
000019ea: DUP5
000019eb: DUP5
000019ec: PUSH2 0x1792
000019ef: JUMP
000019f0: JUMPDEST
000019f1: SWAP1
000019f2: POP
000019f3: PUSH1 0x00
000019f5: NOT
000019f6: DUP2
000019f7: EQ
000019f8: PUSH2 0x1a31
000019fb: JUMPI
000019fc: DUP2
000019fd: DUP2
000019fe: LT
000019ff: ISZERO
00001a00: PUSH2 0x1a22
00001a03: JUMPI
00001a04: DUP3
00001a05: DUP2
00001a06: DUP4
00001a07: PUSH1 0x40
00001a09: MLOAD
00001a0a: PUSH4 0x7dc7a0d9
00001a0f: PUSH1 0xe1
00001a11: SHL
00001a12: DUP2
00001a13: MSTORE
00001a14: PUSH1 0x04
00001a16: ADD
00001a17: PUSH2 0x0f49
00001a1a: SWAP4
00001a1b: SWAP3
00001a1c: SWAP2
00001a1d: SWAP1
00001a1e: PUSH2 0x318f
00001a21: JUMP
00001a22: JUMPDEST
00001a23: PUSH2 0x1a31
00001a26: DUP5
00001a27: DUP5
00001a28: DUP5
00001a29: DUP5
00001a2a: SUB
00001a2b: PUSH1 0x00
00001a2d: PUSH2 0x24a0
00001a30: JUMP
00001a31: JUMPDEST
00001a32: POP
00001a33: POP
00001a34: POP
00001a35: POP
00001a36: JUMP
00001a37: JUMPDEST
00001a38: PUSH1 0x01
00001a3a: PUSH1 0x01
00001a3c: PUSH1 0xa0
00001a3e: SHL
00001a3f: SUB
00001a40: DUP4
00001a41: AND
00001a42: PUSH2 0x1a61
00001a45: JUMPI
00001a46: PUSH1 0x40
00001a48: MLOAD
00001a49: PUSH4 0x4b637e8f
00001a4e: PUSH1 0xe1
00001a50: SHL
00001a51: DUP2
00001a52: MSTORE
00001a53: PUSH1 0x00
00001a55: PUSH1 0x04
00001a57: DUP3
00001a58: ADD
00001a59: MSTORE
00001a5a: PUSH1 0x24
00001a5c: ADD
00001a5d: PUSH2 0x0f49
00001a60: JUMP
00001a61: JUMPDEST
00001a62: PUSH1 0x01
00001a64: PUSH1 0x01
00001a66: PUSH1 0xa0
00001a68: SHL
00001a69: SUB
00001a6a: DUP3
00001a6b: AND
00001a6c: PUSH2 0x1a8b
00001a6f: JUMPI
00001a70: PUSH1 0x40
00001a72: MLOAD
00001a73: PUSH4 0xec442f05
00001a78: PUSH1 0xe0
00001a7a: SHL
00001a7b: DUP2
00001a7c: MSTORE
00001a7d: PUSH1 0x00
00001a7f: PUSH1 0x04
00001a81: DUP3
00001a82: ADD
00001a83: MSTORE
00001a84: PUSH1 0x24
00001a86: ADD
00001a87: PUSH2 0x0f49
00001a8a: JUMP
00001a8b: JUMPDEST
00001a8c: PUSH2 0x1782
00001a8f: DUP4
00001a90: DUP4
00001a91: DUP4
00001a92: PUSH2 0x2587
00001a95: JUMP
00001a96: JUMPDEST
00001a97: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
00001ab8: SLOAD
00001ab9: PUSH1 0x01
00001abb: PUSH1 0x40
00001abd: SHL
00001abe: SWAP1
00001abf: DIV
00001ac0: PUSH1 0xff
00001ac2: AND
00001ac3: PUSH2 0x1111
00001ac6: JUMPI
00001ac7: PUSH1 0x40
00001ac9: MLOAD
00001aca: PUSH4 0x1afcd79f
00001acf: PUSH1 0xe3
00001ad1: SHL
00001ad2: DUP2
00001ad3: MSTORE
00001ad4: PUSH1 0x04
00001ad6: ADD
00001ad7: PUSH1 0x40
00001ad9: MLOAD
00001ada: DUP1
00001adb: SWAP2
00001adc: SUB
00001add: SWAP1
00001ade: REVERT
00001adf: JUMPDEST
00001ae0: PUSH2 0x1ae7
00001ae3: PUSH2 0x1a96
00001ae6: JUMP
00001ae7: JUMPDEST
00001ae8: PUSH2 0x0c35
00001aeb: DUP3
00001aec: DUP3
00001aed: PUSH2 0x26b2
00001af0: JUMP
00001af1: JUMPDEST
00001af2: PUSH2 0x1af9
00001af5: PUSH2 0x1a96
00001af8: JUMP
00001af9: JUMPDEST
00001afa: PUSH2 0x0c52
00001afd: DUP2
00001afe: PUSH2 0x2703
00001b01: JUMP
00001b02: JUMPDEST
00001b03: PUSH2 0x1b0a
00001b06: PUSH2 0x1a96
00001b09: JUMP
00001b0a: JUMPDEST
00001b0b: PUSH2 0x0c52
00001b0e: DUP2
00001b0f: PUSH2 0x270b
00001b12: JUMP
00001b13: JUMPDEST
00001b14: PUSH2 0x1b1b
00001b17: PUSH2 0x1a96
00001b1a: JUMP
00001b1b: JUMPDEST
00001b1c: PUSH2 0x1111
00001b1f: PUSH2 0x278f
00001b22: JUMP
00001b23: JUMPDEST
00001b24: PUSH2 0x1111
00001b27: PUSH2 0x1a96
00001b2a: JUMP
00001b2b: JUMPDEST
00001b2c: PUSH1 0x00
00001b2e: PUSH2 0x0930
00001b31: PUSH2 0x11d6
00001b34: JUMP
00001b35: JUMPDEST
00001b36: PUSH1 0x40
00001b38: MLOAD
00001b39: PUSH1 0x01
00001b3b: PUSH1 0x01
00001b3d: PUSH1 0xa0
00001b3f: SHL
00001b40: SUB
00001b41: DUP4
00001b42: DUP2
00001b43: AND
00001b44: PUSH1 0x24
00001b46: DUP4
00001b47: ADD
00001b48: MSTORE
00001b49: PUSH1 0x44
00001b4b: DUP3
00001b4c: ADD
00001b4d: DUP4
00001b4e: SWAP1
00001b4f: MSTORE
00001b50: PUSH2 0x1782
00001b53: SWAP2
00001b54: DUP6
00001b55: SWAP2
00001b56: DUP3
00001b57: AND
00001b58: SWAP1
00001b59: PUSH4 0xa9059cbb
00001b5e: SWAP1
00001b5f: PUSH1 0x64
00001b61: ADD
00001b62: JUMPDEST
00001b63: PUSH1 0x40
00001b65: MLOAD
00001b66: PUSH1 0x20
00001b68: DUP2
00001b69: DUP4
00001b6a: SUB
00001b6b: SUB
00001b6c: DUP2
00001b6d: MSTORE
00001b6e: SWAP1
00001b6f: PUSH1 0x40
00001b71: MSTORE
00001b72: SWAP2
00001b73: POP
00001b74: PUSH1 0xe0
00001b76: SHL
00001b77: PUSH1 0x20
00001b79: DUP3
00001b7a: ADD
00001b7b: DUP1
00001b7c: MLOAD
00001b7d: PUSH1 0x01
00001b7f: PUSH1 0x01
00001b81: PUSH1 0xe0
00001b83: SHL
00001b84: SUB
00001b85: DUP4
00001b86: DUP2
00001b87: DUP4
00001b88: AND
00001b89: OR
00001b8a: DUP4
00001b8b: MSTORE
00001b8c: POP
00001b8d: POP
00001b8e: POP
00001b8f: POP
00001b90: PUSH2 0x2797
00001b93: JUMP
00001b94: JUMPDEST
00001b95: ADDRESS
00001b96: PUSH1 0x01
00001b98: PUSH1 0x01
00001b9a: PUSH1 0xa0
00001b9c: SHL
00001b9d: SUB
00001b9e: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a
00001bbf: AND
00001bc0: EQ
00001bc1: DUP1
00001bc2: PUSH2 0x1c1b
00001bc5: JUMPI
00001bc6: POP
00001bc7: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a
00001be8: PUSH1 0x01
00001bea: PUSH1 0x01
00001bec: PUSH1 0xa0
00001bee: SHL
00001bef: SUB
00001bf0: AND
00001bf1: PUSH2 0x1c0f
00001bf4: PUSH1 0x00
00001bf6: DUP1
00001bf7: MLOAD
00001bf8: PUSH1 0x20
00001bfa: PUSH2 0x34e8
00001bfd: DUP4
00001bfe: CODECOPY
00001bff: DUP2
00001c00: MLOAD
00001c01: SWAP2
00001c02: MSTORE
00001c03: SLOAD
00001c04: PUSH1 0x01
00001c06: PUSH1 0x01
00001c08: PUSH1 0xa0
00001c0a: SHL
00001c0b: SUB
00001c0c: AND
00001c0d: SWAP1
00001c0e: JUMP
00001c0f: JUMPDEST
00001c10: PUSH1 0x01
00001c12: PUSH1 0x01
00001c14: PUSH1 0xa0
00001c16: SHL
00001c17: SUB
00001c18: AND
00001c19: EQ
00001c1a: ISZERO
00001c1b: JUMPDEST
00001c1c: ISZERO
00001c1d: PUSH2 0x1111
00001c20: JUMPI
00001c21: PUSH1 0x40
00001c23: MLOAD
00001c24: PUSH4 0x703e46dd
00001c29: PUSH1 0xe1
00001c2b: SHL
00001c2c: DUP2
00001c2d: MSTORE
00001c2e: PUSH1 0x04
00001c30: ADD
00001c31: PUSH1 0x40
00001c33: MLOAD
00001c34: DUP1
00001c35: SWAP2
00001c36: SUB
00001c37: SWAP1
00001c38: REVERT
00001c39: JUMPDEST
00001c3a: PUSH2 0x1c41
00001c3d: PUSH2 0x1b2b
00001c40: JUMP
00001c41: JUMPDEST
00001c42: PUSH1 0x40
00001c44: MLOAD
00001c45: PUSH4 0x0935e01b
00001c4a: PUSH1 0xe2
00001c4c: SHL
00001c4d: DUP2
00001c4e: MSTORE
00001c4f: CALLER
00001c50: PUSH1 0x04
00001c52: DUP3
00001c53: ADD
00001c54: MSTORE
00001c55: PUSH1 0x01
00001c57: PUSH1 0x01
00001c59: PUSH1 0xa0
00001c5b: SHL
00001c5c: SUB
00001c5d: SWAP2
00001c5e: SWAP1
00001c5f: SWAP2
00001c60: AND
00001c61: SWAP1
00001c62: PUSH4 0x24d7806c
00001c67: SWAP1
00001c68: PUSH1 0x24
00001c6a: ADD
00001c6b: PUSH1 0x00
00001c6d: PUSH1 0x40
00001c6f: MLOAD
00001c70: DUP1
00001c71: DUP4
00001c72: SUB
00001c73: DUP2
00001c74: DUP7
00001c75: DUP1
00001c76: EXTCODESIZE
00001c77: ISZERO
00001c78: DUP1
00001c79: ISZERO
00001c7a: PUSH2 0x1c82
00001c7d: JUMPI
00001c7e: PUSH1 0x00
00001c80: DUP1
00001c81: REVERT
00001c82: JUMPDEST
00001c83: POP
00001c84: GAS
00001c85: STATICCALL
00001c86: ISZERO
00001c87: DUP1
00001c88: ISZERO
00001c89: PUSH2 0x1c96
00001c8c: JUMPI
00001c8d: RETURNDATASIZE
00001c8e: PUSH1 0x00
00001c90: DUP1
00001c91: RETURNDATACOPY
00001c92: RETURNDATASIZE
00001c93: PUSH1 0x00
00001c95: REVERT
00001c96: JUMPDEST
00001c97: POP
00001c98: POP
00001c99: POP
00001c9a: POP
00001c9b: POP
00001c9c: JUMP
00001c9d: JUMPDEST
00001c9e: DUP2
00001c9f: PUSH1 0x01
00001ca1: PUSH1 0x01
00001ca3: PUSH1 0xa0
00001ca5: SHL
00001ca6: SUB
00001ca7: AND
00001ca8: PUSH4 0x52d1902d
00001cad: PUSH1 0x40
00001caf: MLOAD
00001cb0: DUP2
00001cb1: PUSH4 0xffffffff
00001cb6: AND
00001cb7: PUSH1 0xe0
00001cb9: SHL
00001cba: DUP2
00001cbb: MSTORE
00001cbc: PUSH1 0x04
00001cbe: ADD
00001cbf: PUSH1 0x20
00001cc1: PUSH1 0x40
00001cc3: MLOAD
00001cc4: DUP1
00001cc5: DUP4
00001cc6: SUB
00001cc7: DUP2
00001cc8: DUP7
00001cc9: GAS
00001cca: STATICCALL
00001ccb: SWAP3
00001ccc: POP
00001ccd: POP
00001cce: POP
00001ccf: DUP1
00001cd0: ISZERO
00001cd1: PUSH2 0x1cf7
00001cd4: JUMPI
00001cd5: POP
00001cd6: PUSH1 0x40
00001cd8: DUP1
00001cd9: MLOAD
00001cda: PUSH1 0x1f
00001cdc: RETURNDATASIZE
00001cdd: SWAP1
00001cde: DUP2
00001cdf: ADD
00001ce0: PUSH1 0x1f
00001ce2: NOT
00001ce3: AND
00001ce4: DUP3
00001ce5: ADD
00001ce6: SWAP1
00001ce7: SWAP3
00001ce8: MSTORE
00001ce9: PUSH2 0x1cf4
00001cec: SWAP2
00001ced: DUP2
00001cee: ADD
00001cef: SWAP1
00001cf0: PUSH2 0x32b9
00001cf3: JUMP
00001cf4: JUMPDEST
00001cf5: PUSH1 0x01
00001cf7: JUMPDEST
00001cf8: PUSH2 0x1d1f
00001cfb: JUMPI
00001cfc: PUSH1 0x40
00001cfe: MLOAD
00001cff: PUSH4 0x4c9c8ce3
00001d04: PUSH1 0xe0
00001d06: SHL
00001d07: DUP2
00001d08: MSTORE
00001d09: PUSH1 0x01
00001d0b: PUSH1 0x01
00001d0d: PUSH1 0xa0
00001d0f: SHL
00001d10: SUB
00001d11: DUP4
00001d12: AND
00001d13: PUSH1 0x04
00001d15: DUP3
00001d16: ADD
00001d17: MSTORE
00001d18: PUSH1 0x24
00001d1a: ADD
00001d1b: PUSH2 0x0f49
00001d1e: JUMP
00001d1f: JUMPDEST
00001d20: PUSH1 0x00
00001d22: DUP1
00001d23: MLOAD
00001d24: PUSH1 0x20
00001d26: PUSH2 0x34e8
00001d29: DUP4
00001d2a: CODECOPY
00001d2b: DUP2
00001d2c: MLOAD
00001d2d: SWAP2
00001d2e: MSTORE
00001d2f: DUP2
00001d30: EQ
00001d31: PUSH2 0x1d50
00001d34: JUMPI
00001d35: PUSH1 0x40
00001d37: MLOAD
00001d38: PUSH4 0x2a875269
00001d3d: PUSH1 0xe2
00001d3f: SHL
00001d40: DUP2
00001d41: MSTORE
00001d42: PUSH1 0x04
00001d44: DUP2
00001d45: ADD
00001d46: DUP3
00001d47: SWAP1
00001d48: MSTORE
00001d49: PUSH1 0x24
00001d4b: ADD
00001d4c: PUSH2 0x0f49
00001d4f: JUMP
00001d50: JUMPDEST
00001d51: PUSH2 0x1782
00001d54: DUP4
00001d55: DUP4
00001d56: PUSH2 0x27fa
00001d59: JUMP
00001d5a: JUMPDEST
00001d5b: ADDRESS
00001d5c: PUSH1 0x01
00001d5e: PUSH1 0x01
00001d60: PUSH1 0xa0
00001d62: SHL
00001d63: SUB
00001d64: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a
00001d85: AND
00001d86: EQ
00001d87: PUSH2 0x1111
00001d8a: JUMPI
00001d8b: PUSH1 0x40
00001d8d: MLOAD
00001d8e: PUSH4 0x703e46dd
00001d93: PUSH1 0xe1
00001d95: SHL
00001d96: DUP2
00001d97: MSTORE
00001d98: PUSH1 0x04
00001d9a: ADD
00001d9b: PUSH1 0x40
00001d9d: MLOAD
00001d9e: DUP1
00001d9f: SWAP2
00001da0: SUB
00001da1: SWAP1
00001da2: REVERT
00001da3: JUMPDEST
00001da4: PUSH1 0x01
00001da6: PUSH1 0x01
00001da8: PUSH1 0xa0
00001daa: SHL
00001dab: SUB
00001dac: DUP2
00001dad: AND
00001dae: PUSH1 0x00
00001db0: DUP2
00001db1: DUP2
00001db2: MSTORE
00001db3: PUSH1 0x05
00001db5: PUSH1 0x20
00001db7: MSTORE
00001db8: PUSH1 0x40
00001dba: DUP1
00001dbb: DUP3
00001dbc: KECCAK256
00001dbd: SLOAD
00001dbe: SWAP1
00001dbf: MLOAD
00001dc0: PUSH3 0x60260f
00001dc4: PUSH1 0xe2
00001dc6: SHL
00001dc7: DUP2
00001dc8: MSTORE
00001dc9: SWAP2
00001dca: SWAP3
00001dcb: SWAP2
00001dcc: PUSH4 0x0180983c
00001dd1: SWAP2
00001dd2: PUSH2 0x1de1
00001dd5: SWAP2
00001dd6: PUSH1 0x04
00001dd8: ADD
00001dd9: SWAP1
00001dda: DUP2
00001ddb: MSTORE
00001ddc: PUSH1 0x20
00001dde: ADD
00001ddf: SWAP1
00001de0: JUMP
00001de1: JUMPDEST
00001de2: PUSH1 0x20
00001de4: PUSH1 0x40
00001de6: MLOAD
00001de7: DUP1
00001de8: DUP4
00001de9: SUB
00001dea: DUP2
00001deb: DUP7
00001dec: GAS
00001ded: STATICCALL
00001dee: ISZERO
00001def: DUP1
00001df0: ISZERO
00001df1: PUSH2 0x1dfe
00001df4: JUMPI
00001df5: RETURNDATASIZE
00001df6: PUSH1 0x00
00001df8: DUP1
00001df9: RETURNDATACOPY
00001dfa: RETURNDATASIZE
00001dfb: PUSH1 0x00
00001dfd: REVERT
00001dfe: JUMPDEST
00001dff: POP
00001e00: POP
00001e01: POP
00001e02: POP
00001e03: PUSH1 0x40
00001e05: MLOAD
00001e06: RETURNDATASIZE
00001e07: PUSH1 0x1f
00001e09: NOT
00001e0a: PUSH1 0x1f
00001e0c: DUP3
00001e0d: ADD
00001e0e: AND
00001e0f: DUP3
00001e10: ADD
00001e11: DUP1
00001e12: PUSH1 0x40
00001e14: MSTORE
00001e15: POP
00001e16: DUP2
00001e17: ADD
00001e18: SWAP1
00001e19: PUSH2 0x1e22
00001e1c: SWAP2
00001e1d: SWAP1
00001e1e: PUSH2 0x32b9
00001e21: JUMP
00001e22: JUMPDEST
00001e23: SWAP1
00001e24: POP
00001e25: DUP1
00001e26: PUSH1 0x00
00001e28: SUB
00001e29: PUSH2 0x1e30
00001e2c: JUMPI
00001e2d: POP
00001e2e: POP
00001e2f: JUMP
00001e30: JUMPDEST
00001e31: PUSH1 0x00
00001e33: DUP3
00001e34: PUSH1 0x01
00001e36: PUSH1 0x01
00001e38: PUSH1 0xa0
00001e3a: SHL
00001e3b: SUB
00001e3c: AND
00001e3d: PUSH4 0xaabaecd6
00001e42: PUSH1 0x40
00001e44: MLOAD
00001e45: DUP2
00001e46: PUSH4 0xffffffff
00001e4b: AND
00001e4c: PUSH1 0xe0
00001e4e: SHL
00001e4f: DUP2
00001e50: MSTORE
00001e51: PUSH1 0x04
00001e53: ADD
00001e54: PUSH1 0x20
00001e56: PUSH1 0x40
00001e58: MLOAD
00001e59: DUP1
00001e5a: DUP4
00001e5b: SUB
00001e5c: DUP2
00001e5d: DUP7
00001e5e: GAS
00001e5f: STATICCALL
00001e60: ISZERO
00001e61: DUP1
00001e62: ISZERO
00001e63: PUSH2 0x1e70
00001e66: JUMPI
00001e67: RETURNDATASIZE
00001e68: PUSH1 0x00
00001e6a: DUP1
00001e6b: RETURNDATACOPY
00001e6c: RETURNDATASIZE
00001e6d: PUSH1 0x00
00001e6f: REVERT
00001e70: JUMPDEST
00001e71: POP
00001e72: POP
00001e73: POP
00001e74: POP
00001e75: PUSH1 0x40
00001e77: MLOAD
00001e78: RETURNDATASIZE
00001e79: PUSH1 0x1f
00001e7b: NOT
00001e7c: PUSH1 0x1f
00001e7e: DUP3
00001e7f: ADD
00001e80: AND
00001e81: DUP3
00001e82: ADD
00001e83: DUP1
00001e84: PUSH1 0x40
00001e86: MSTORE
00001e87: POP
00001e88: DUP2
00001e89: ADD
00001e8a: SWAP1
00001e8b: PUSH2 0x1e94
00001e8e: SWAP2
00001e8f: SWAP1
00001e90: PUSH2 0x32d2
00001e93: JUMP
00001e94: JUMPDEST
00001e95: SWAP1
00001e96: POP
00001e97: DUP2
00001e98: PUSH1 0x01
00001e9a: PUSH1 0x00
00001e9c: DUP3
00001e9d: DUP3
00001e9e: SLOAD
00001e9f: PUSH2 0x1ea8
00001ea2: SWAP2
00001ea3: SWAP1
00001ea4: PUSH2 0x31b0
00001ea7: JUMP
00001ea8: JUMPDEST
00001ea9: SWAP1
00001eaa: SWAP2
00001eab: SSTORE
00001eac: POP
00001ead: POP
00001eae: PUSH1 0x01
00001eb0: PUSH1 0x01
00001eb2: PUSH1 0xa0
00001eb4: SHL
00001eb5: SUB
00001eb6: DUP4
00001eb7: AND
00001eb8: PUSH1 0x00
00001eba: SWAP1
00001ebb: DUP2
00001ebc: MSTORE
00001ebd: PUSH1 0x05
00001ebf: PUSH1 0x20
00001ec1: MSTORE
00001ec2: PUSH1 0x40
00001ec4: DUP2
00001ec5: KECCAK256
00001ec6: DUP1
00001ec7: SLOAD
00001ec8: DUP5
00001ec9: SWAP3
00001eca: SWAP1
00001ecb: PUSH2 0x1ed5
00001ece: SWAP1
00001ecf: DUP5
00001ed0: SWAP1
00001ed1: PUSH2 0x31b0
00001ed4: JUMP
00001ed5: JUMPDEST
00001ed6: SWAP1
00001ed7: SWAP2
00001ed8: SSTORE
00001ed9: POP
00001eda: PUSH2 0x1ee4
00001edd: SWAP1
00001ede: POP
00001edf: DUP3
00001ee0: PUSH2 0x2375
00001ee3: JUMP
00001ee4: JUMPDEST
00001ee5: PUSH1 0x40
00001ee7: DUP1
00001ee8: MLOAD
00001ee9: PUSH1 0x01
00001eeb: PUSH1 0x01
00001eed: PUSH1 0xa0
00001eef: SHL
00001ef0: SUB
00001ef1: DUP1
00001ef2: DUP7
00001ef3: AND
00001ef4: DUP3
00001ef5: MSTORE
00001ef6: DUP4
00001ef7: AND
00001ef8: PUSH1 0x20
00001efa: DUP3
00001efb: ADD
00001efc: MSTORE
00001efd: SWAP1
00001efe: DUP2
00001eff: ADD
00001f00: DUP4
00001f01: SWAP1
00001f02: MSTORE
00001f03: PUSH32 0xd674ffbdd2e1f5f45aac44c22799c2d22817c55bf17da1cf57ca32adf7200c21
00001f24: SWAP1
00001f25: PUSH1 0x60
00001f27: ADD
00001f28: JUMPDEST
00001f29: PUSH1 0x40
00001f2b: MLOAD
00001f2c: DUP1
00001f2d: SWAP2
00001f2e: SUB
00001f2f: SWAP1
00001f30: LOG1
00001f31: POP
00001f32: POP
00001f33: POP
00001f34: JUMP
00001f35: JUMPDEST
00001f36: PUSH2 0x1f3d
00001f39: PUSH2 0x2142
00001f3c: JUMP
00001f3d: JUMPDEST
00001f3e: DUP2
00001f3f: ISZERO
00001f40: DUP1
00001f41: PUSH2 0x1f48
00001f44: JUMPI
00001f45: POP
00001f46: DUP1
00001f47: ISZERO
00001f48: JUMPDEST
00001f49: ISZERO
00001f4a: PUSH2 0x1f66
00001f4d: JUMPI
00001f4e: PUSH1 0x40
00001f50: MLOAD
00001f51: PUSH4 0x162908e3
00001f56: PUSH1 0xe1
00001f58: SHL
00001f59: DUP2
00001f5a: MSTORE
00001f5b: PUSH1 0x04
00001f5d: ADD
00001f5e: PUSH1 0x40
00001f60: MLOAD
00001f61: DUP1
00001f62: SWAP2
00001f63: SUB
00001f64: SWAP1
00001f65: REVERT
00001f66: JUMPDEST
00001f67: PUSH2 0x1f74
00001f6a: DUP5
00001f6b: ADDRESS
00001f6c: DUP5
00001f6d: PUSH2 0x1872
00001f70: PUSH2 0x0b0a
00001f73: JUMP
00001f74: JUMPDEST
00001f75: PUSH2 0x1f7e
00001f78: DUP4
00001f79: DUP3
00001f7a: PUSH2 0x21e5
00001f7d: JUMP
00001f7e: JUMPDEST
00001f7f: DUP2
00001f80: PUSH1 0x01
00001f82: PUSH1 0x00
00001f84: DUP3
00001f85: DUP3
00001f86: SLOAD
00001f87: PUSH2 0x1f90
00001f8a: SWAP2
00001f8b: SWAP1
00001f8c: PUSH2 0x31b0
00001f8f: JUMP
00001f90: JUMPDEST
00001f91: SWAP1
00001f92: SWAP2
00001f93: SSTORE
00001f94: POP
00001f95: POP
00001f96: PUSH1 0x40
00001f98: DUP1
00001f99: MLOAD
00001f9a: DUP4
00001f9b: DUP2
00001f9c: MSTORE
00001f9d: PUSH1 0x20
00001f9f: DUP2
00001fa0: ADD
00001fa1: DUP4
00001fa2: SWAP1
00001fa3: MSTORE
00001fa4: PUSH1 0x01
00001fa6: PUSH1 0x01
00001fa8: PUSH1 0xa0
00001faa: SHL
00001fab: SUB
00001fac: DUP1
00001fad: DUP7
00001fae: AND
00001faf: SWAP3
00001fb0: SWAP1
00001fb1: DUP8
00001fb2: AND
00001fb3: SWAP2
00001fb4: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
00001fd5: SWAP2
00001fd6: ADD
00001fd7: PUSH1 0x40
00001fd9: MLOAD
00001fda: DUP1
00001fdb: SWAP2
00001fdc: SUB
00001fdd: SWAP1
00001fde: LOG3
00001fdf: PUSH2 0x1a31
00001fe2: PUSH1 0x01
00001fe4: PUSH1 0x00
00001fe6: DUP1
00001fe7: MLOAD
00001fe8: PUSH1 0x20
00001fea: PUSH2 0x3508
00001fed: DUP4
00001fee: CODECOPY
00001fef: DUP2
00001ff0: MLOAD
00001ff1: SWAP2
00001ff2: MSTORE
00001ff3: SSTORE
00001ff4: JUMP
00001ff5: JUMPDEST
00001ff6: PUSH1 0x00
00001ff8: PUSH2 0x1fff
00001ffb: PUSH2 0x0b0a
00001ffe: JUMP
00001fff: JUMPDEST
00002000: PUSH1 0x40
00002002: MLOAD
00002003: PUSH4 0x70a08231
00002008: PUSH1 0xe0
0000200a: SHL
0000200b: DUP2
0000200c: MSTORE
0000200d: ADDRESS
0000200e: PUSH1 0x04
00002010: DUP3
00002011: ADD
00002012: MSTORE
00002013: SWAP1
00002014: SWAP2
00002015: POP
00002016: DUP3
00002017: SWAP1
00002018: PUSH1 0x01
0000201a: PUSH1 0x01
0000201c: PUSH1 0xa0
0000201e: SHL
0000201f: SUB
00002020: DUP4
00002021: AND
00002022: SWAP1
00002023: PUSH4 0x70a08231
00002028: SWAP1
00002029: PUSH1 0x24
0000202b: ADD
0000202c: PUSH1 0x20
0000202e: PUSH1 0x40
00002030: MLOAD
00002031: DUP1
00002032: DUP4
00002033: SUB
00002034: DUP2
00002035: DUP7
00002036: GAS
00002037: STATICCALL
00002038: ISZERO
00002039: DUP1
0000203a: ISZERO
0000203b: PUSH2 0x2048
0000203e: JUMPI
0000203f: RETURNDATASIZE
00002040: PUSH1 0x00
00002042: DUP1
00002043: RETURNDATACOPY
00002044: RETURNDATASIZE
00002045: PUSH1 0x00
00002047: REVERT
00002048: JUMPDEST
00002049: POP
0000204a: POP
0000204b: POP
0000204c: POP
0000204d: PUSH1 0x40
0000204f: MLOAD
00002050: RETURNDATASIZE
00002051: PUSH1 0x1f
00002053: NOT
00002054: PUSH1 0x1f
00002056: DUP3
00002057: ADD
00002058: AND
00002059: DUP3
0000205a: ADD
0000205b: DUP1
0000205c: PUSH1 0x40
0000205e: MSTORE
0000205f: POP
00002060: DUP2
00002061: ADD
00002062: SWAP1
00002063: PUSH2 0x206c
00002066: SWAP2
00002067: SWAP1
00002068: PUSH2 0x32b9
0000206b: JUMP
0000206c: JUMPDEST
0000206d: LT
0000206e: ISZERO
0000206f: PUSH2 0x208b
00002072: JUMPI
00002073: PUSH1 0x40
00002075: MLOAD
00002076: PUSH4 0x41b77061
0000207b: PUSH1 0xe1
0000207d: SHL
0000207e: DUP2
0000207f: MSTORE
00002080: PUSH1 0x04
00002082: ADD
00002083: PUSH1 0x40
00002085: MLOAD
00002086: DUP1
00002087: SWAP2
00002088: SUB
00002089: SWAP1
0000208a: REVERT
0000208b: JUMPDEST
0000208c: PUSH2 0x1782
0000208f: PUSH1 0x01
00002091: PUSH1 0x01
00002093: PUSH1 0xa0
00002095: SHL
00002096: SUB
00002097: DUP3
00002098: AND
00002099: DUP5
0000209a: DUP5
0000209b: PUSH2 0x1b35
0000209e: JUMP
0000209f: JUMPDEST
000020a0: CALLER
000020a1: PUSH2 0x20a8
000020a4: PUSH2 0x11d6
000020a7: JUMP
000020a8: JUMPDEST
000020a9: PUSH1 0x01
000020ab: PUSH1 0x01
000020ad: PUSH1 0xa0
000020af: SHL
000020b0: SUB
000020b1: AND
000020b2: EQ
000020b3: PUSH2 0x1111
000020b6: JUMPI
000020b7: PUSH1 0x40
000020b9: MLOAD
000020ba: PUSH4 0x118cdaa7
000020bf: PUSH1 0xe0
000020c1: SHL
000020c2: DUP2
000020c3: MSTORE
000020c4: CALLER
000020c5: PUSH1 0x04
000020c7: DUP3
000020c8: ADD
000020c9: MSTORE
000020ca: PUSH1 0x24
000020cc: ADD
000020cd: PUSH2 0x0f49
000020d0: JUMP
000020d1: JUMPDEST
000020d2: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300
000020f3: DUP1
000020f4: SLOAD
000020f5: PUSH1 0x01
000020f7: PUSH1 0x01
000020f9: PUSH1 0xa0
000020fb: SHL
000020fc: SUB
000020fd: NOT
000020fe: DUP2
000020ff: AND
00002100: PUSH1 0x01
00002102: PUSH1 0x01
00002104: PUSH1 0xa0
00002106: SHL
00002107: SUB
00002108: DUP5
00002109: DUP2
0000210a: AND
0000210b: SWAP2
0000210c: DUP3
0000210d: OR
0000210e: DUP5
0000210f: SSTORE
00002110: PUSH1 0x40
00002112: MLOAD
00002113: SWAP3
00002114: AND
00002115: SWAP2
00002116: DUP3
00002117: SWAP1
00002118: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00002139: SWAP1
0000213a: PUSH1 0x00
0000213c: SWAP1
0000213d: LOG3
0000213e: POP
0000213f: POP
00002140: POP
00002141: JUMP
00002142: JUMPDEST
00002143: PUSH1 0x00
00002145: DUP1
00002146: MLOAD
00002147: PUSH1 0x20
00002149: PUSH2 0x3508
0000214c: DUP4
0000214d: CODECOPY
0000214e: DUP2
0000214f: MLOAD
00002150: SWAP2
00002151: MSTORE
00002152: DUP1
00002153: SLOAD
00002154: PUSH1 0x01
00002156: NOT
00002157: ADD
00002158: PUSH2 0x2174
0000215b: JUMPI
0000215c: PUSH1 0x40
0000215e: MLOAD
0000215f: PUSH4 0x3ee5aeb5
00002164: PUSH1 0xe0
00002166: SHL
00002167: DUP2
00002168: MSTORE
00002169: PUSH1 0x04
0000216b: ADD
0000216c: PUSH1 0x40
0000216e: MLOAD
0000216f: DUP1
00002170: SWAP2
00002171: SUB
00002172: SWAP1
00002173: REVERT
00002174: JUMPDEST
00002175: PUSH1 0x02
00002177: SWAP1
00002178: SSTORE
00002179: JUMP
0000217a: JUMPDEST
0000217b: PUSH1 0x00
0000217d: PUSH2 0x2184
00002180: PUSH2 0x1b2b
00002183: JUMP
00002184: JUMPDEST
00002185: PUSH1 0x01
00002187: PUSH1 0x01
00002189: PUSH1 0xa0
0000218b: SHL
0000218c: SUB
0000218d: AND
0000218e: PUSH4 0x4f0e0ef3
00002193: PUSH1 0x40
00002195: MLOAD
00002196: DUP2
00002197: PUSH4 0xffffffff
0000219c: AND
0000219d: PUSH1 0xe0
0000219f: SHL
000021a0: DUP2
000021a1: MSTORE
000021a2: PUSH1 0x04
000021a4: ADD
000021a5: PUSH1 0x20
000021a7: PUSH1 0x40
000021a9: MLOAD
000021aa: DUP1
000021ab: DUP4
000021ac: SUB
000021ad: DUP2
000021ae: DUP7
000021af: GAS
000021b0: STATICCALL
000021b1: ISZERO
000021b2: DUP1
000021b3: ISZERO
000021b4: PUSH2 0x21c1
000021b7: JUMPI
000021b8: RETURNDATASIZE
000021b9: PUSH1 0x00
000021bb: DUP1
000021bc: RETURNDATACOPY
000021bd: RETURNDATASIZE
000021be: PUSH1 0x00
000021c0: REVERT
000021c1: JUMPDEST
000021c2: POP
000021c3: POP
000021c4: POP
000021c5: POP
000021c6: PUSH1 0x40
000021c8: MLOAD
000021c9: RETURNDATASIZE
000021ca: PUSH1 0x1f
000021cc: NOT
000021cd: PUSH1 0x1f
000021cf: DUP3
000021d0: ADD
000021d1: AND
000021d2: DUP3
000021d3: ADD
000021d4: DUP1
000021d5: PUSH1 0x40
000021d7: MSTORE
000021d8: POP
000021d9: DUP2
000021da: ADD
000021db: SWAP1
000021dc: PUSH2 0x0930
000021df: SWAP2
000021e0: SWAP1
000021e1: PUSH2 0x32d2
000021e4: JUMP
000021e5: JUMPDEST
000021e6: PUSH1 0x01
000021e8: PUSH1 0x01
000021ea: PUSH1 0xa0
000021ec: SHL
000021ed: SUB
000021ee: DUP3
000021ef: AND
000021f0: PUSH2 0x220f
000021f3: JUMPI
000021f4: PUSH1 0x40
000021f6: MLOAD
000021f7: PUSH4 0xec442f05
000021fc: PUSH1 0xe0
000021fe: SHL
000021ff: DUP2
00002200: MSTORE
00002201: PUSH1 0x00
00002203: PUSH1 0x04
00002205: DUP3
00002206: ADD
00002207: MSTORE
00002208: PUSH1 0x24
0000220a: ADD
0000220b: PUSH2 0x0f49
0000220e: JUMP
0000220f: JUMPDEST
00002210: PUSH2 0x0c35
00002213: PUSH1 0x00
00002215: DUP4
00002216: DUP4
00002217: PUSH2 0x2587
0000221a: JUMP
0000221b: JUMPDEST
0000221c: PUSH1 0x01
0000221e: PUSH1 0x00
00002220: DUP1
00002221: MLOAD
00002222: PUSH1 0x20
00002224: PUSH2 0x3508
00002227: DUP4
00002228: CODECOPY
00002229: DUP2
0000222a: MLOAD
0000222b: SWAP2
0000222c: MSTORE
0000222d: SSTORE
0000222e: JUMP
0000222f: JUMPDEST
00002230: PUSH2 0x2237
00002233: PUSH2 0x2142
00002236: JUMP
00002237: JUMPDEST
00002238: DUP2
00002239: ISZERO
0000223a: DUP1
0000223b: PUSH2 0x2242
0000223e: JUMPI
0000223f: POP
00002240: DUP1
00002241: ISZERO
00002242: JUMPDEST
00002243: ISZERO
00002244: PUSH2 0x2260
00002247: JUMPI
00002248: PUSH1 0x40
0000224a: MLOAD
0000224b: PUSH4 0x162908e3
00002250: PUSH1 0xe1
00002252: SHL
00002253: DUP2
00002254: MSTORE
00002255: PUSH1 0x04
00002257: ADD
00002258: PUSH1 0x40
0000225a: MLOAD
0000225b: DUP1
0000225c: SWAP2
0000225d: SUB
0000225e: SWAP1
0000225f: REVERT
00002260: JUMPDEST
00002261: DUP3
00002262: PUSH1 0x01
00002264: PUSH1 0x01
00002266: PUSH1 0xa0
00002268: SHL
00002269: SUB
0000226a: AND
0000226b: DUP6
0000226c: PUSH1 0x01
0000226e: PUSH1 0x01
00002270: PUSH1 0xa0
00002272: SHL
00002273: SUB
00002274: AND
00002275: EQ
00002276: PUSH2 0x22a4
00002279: JUMPI
0000227a: PUSH2 0x2281
0000227d: PUSH2 0x2850
00002280: JUMP
00002281: JUMPDEST
00002282: PUSH1 0x01
00002284: PUSH1 0x01
00002286: PUSH1 0xa0
00002288: SHL
00002289: SUB
0000228a: AND
0000228b: DUP6
0000228c: PUSH1 0x01
0000228e: PUSH1 0x01
00002290: PUSH1 0xa0
00002292: SHL
00002293: SUB
00002294: AND
00002295: EQ
00002296: PUSH2 0x22a4
00002299: JUMPI
0000229a: PUSH2 0x22a4
0000229d: DUP4
0000229e: DUP7
0000229f: DUP4
000022a0: PUSH2 0x19e4
000022a3: JUMP
000022a4: JUMPDEST
000022a5: PUSH2 0x22ae
000022a8: DUP4
000022a9: DUP3
000022aa: PUSH2 0x2897
000022ad: JUMP
000022ae: JUMPDEST
000022af: DUP2
000022b0: PUSH1 0x01
000022b2: PUSH1 0x00
000022b4: DUP3
000022b5: DUP3
000022b6: SLOAD
000022b7: PUSH2 0x22c0
000022ba: SWAP2
000022bb: SWAP1
000022bc: PUSH2 0x312b
000022bf: JUMP
000022c0: JUMPDEST
000022c1: SWAP1
000022c2: SWAP2
000022c3: SSTORE
000022c4: POP
000022c5: POP
000022c6: PUSH1 0x00
000022c8: DUP1
000022c9: MLOAD
000022ca: PUSH1 0x20
000022cc: PUSH2 0x34c8
000022cf: DUP4
000022d0: CODECOPY
000022d1: DUP2
000022d2: MLOAD
000022d3: SWAP2
000022d4: MSTORE
000022d5: SLOAD
000022d6: PUSH1 0x00
000022d8: SUB
000022d9: PUSH2 0x22f1
000022dc: JUMPI
000022dd: PUSH1 0x01
000022df: SLOAD
000022e0: PUSH2 0x22e9
000022e3: SWAP1
000022e4: DUP4
000022e5: PUSH2 0x31b0
000022e8: JUMP
000022e9: JUMPDEST
000022ea: PUSH1 0x00
000022ec: PUSH1 0x01
000022ee: SSTORE
000022ef: SWAP2
000022f0: POP
000022f1: JUMPDEST
000022f2: PUSH2 0x22fe
000022f5: DUP5
000022f6: DUP4
000022f7: PUSH2 0x0c25
000022fa: PUSH2 0x0b0a
000022fd: JUMP
000022fe: JUMPDEST
000022ff: DUP3
00002300: PUSH1 0x01
00002302: PUSH1 0x01
00002304: PUSH1 0xa0
00002306: SHL
00002307: SUB
00002308: AND
00002309: DUP5
0000230a: PUSH1 0x01
0000230c: PUSH1 0x01
0000230e: PUSH1 0xa0
00002310: SHL
00002311: SUB
00002312: AND
00002313: DUP7
00002314: PUSH1 0x01
00002316: PUSH1 0x01
00002318: PUSH1 0xa0
0000231a: SHL
0000231b: SUB
0000231c: AND
0000231d: PUSH32 0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db
0000233e: DUP6
0000233f: DUP6
00002340: PUSH1 0x40
00002342: MLOAD
00002343: PUSH2 0x2356
00002346: SWAP3
00002347: SWAP2
00002348: SWAP1
00002349: SWAP2
0000234a: DUP3
0000234b: MSTORE
0000234c: PUSH1 0x20
0000234e: DUP3
0000234f: ADD
00002350: MSTORE
00002351: PUSH1 0x40
00002353: ADD
00002354: SWAP1
00002355: JUMP
00002356: JUMPDEST
00002357: PUSH1 0x40
00002359: MLOAD
0000235a: DUP1
0000235b: SWAP2
0000235c: SUB
0000235d: SWAP1
0000235e: LOG4
0000235f: PUSH2 0x1c96
00002362: PUSH1 0x01
00002364: PUSH1 0x00
00002366: DUP1
00002367: MLOAD
00002368: PUSH1 0x20
0000236a: PUSH2 0x3508
0000236d: DUP4
0000236e: CODECOPY
0000236f: DUP2
00002370: MLOAD
00002371: SWAP2
00002372: MSTORE
00002373: SSTORE
00002374: JUMP
00002375: JUMPDEST
00002376: PUSH1 0x06
00002378: SLOAD
00002379: ISZERO
0000237a: DUP1
0000237b: ISZERO
0000237c: SWAP1
0000237d: PUSH2 0x2385
00002380: JUMPI
00002381: POP
00002382: DUP1
00002383: ISZERO
00002384: ISZERO
00002385: JUMPDEST
00002386: ISZERO
00002387: PUSH2 0x0c52
0000238a: JUMPI
0000238b: PUSH1 0x00
0000238d: PUSH2 0x2394
00002390: PUSH2 0x28cd
00002393: JUMP
00002394: JUMPDEST
00002395: SWAP1
00002396: POP
00002397: PUSH1 0x00
00002399: PUSH2 0x23bd
0000239c: PUSH2 0x2710
0000239f: PUSH1 0x06
000023a1: SLOAD
000023a2: DUP6
000023a3: PUSH2 0x23ac
000023a6: SWAP2
000023a7: SWAP1
000023a8: PUSH2 0x32ef
000023ab: JUMP
000023ac: JUMPDEST
000023ad: PUSH2 0x23b6
000023b0: SWAP2
000023b1: SWAP1
000023b2: PUSH2 0x331c
000023b5: JUMP
000023b6: JUMPDEST
000023b7: PUSH1 0x00
000023b9: PUSH2 0x19ac
000023bc: JUMP
000023bd: JUMPDEST
000023be: SWAP1
000023bf: POP
000023c0: DUP1
000023c1: ISZERO
000023c2: PUSH2 0x23cf
000023c5: JUMPI
000023c6: PUSH2 0x23cf
000023c9: DUP3
000023ca: DUP3
000023cb: PUSH2 0x21e5
000023ce: JUMP
000023cf: JUMPDEST
000023d0: PUSH1 0x40
000023d2: DUP1
000023d3: MLOAD
000023d4: DUP5
000023d5: DUP2
000023d6: MSTORE
000023d7: PUSH1 0x20
000023d9: DUP2
000023da: ADD
000023db: DUP4
000023dc: SWAP1
000023dd: MSTORE
000023de: PUSH1 0x01
000023e0: PUSH1 0x01
000023e2: PUSH1 0xa0
000023e4: SHL
000023e5: SUB
000023e6: DUP5
000023e7: AND
000023e8: SWAP2
000023e9: DUP2
000023ea: ADD
000023eb: SWAP2
000023ec: SWAP1
000023ed: SWAP2
000023ee: MSTORE
000023ef: PUSH32 0x7aac1d760c1303ffd477b8f4cbb620643af0e91b529c76a409d27c385d1dac7a
00002410: SWAP1
00002411: PUSH1 0x60
00002413: ADD
00002414: PUSH2 0x1f28
00002417: JUMP
00002418: JUMPDEST
00002419: PUSH1 0x40
0000241b: MLOAD
0000241c: PUSH1 0x01
0000241e: PUSH1 0x01
00002420: PUSH1 0xa0
00002422: SHL
00002423: SUB
00002424: DUP5
00002425: DUP2
00002426: AND
00002427: PUSH1 0x24
00002429: DUP4
0000242a: ADD
0000242b: MSTORE
0000242c: DUP4
0000242d: DUP2
0000242e: AND
0000242f: PUSH1 0x44
00002431: DUP4
00002432: ADD
00002433: MSTORE
00002434: PUSH1 0x64
00002436: DUP3
00002437: ADD
00002438: DUP4
00002439: SWAP1
0000243a: MSTORE
0000243b: PUSH2 0x1a31
0000243e: SWAP2
0000243f: DUP7
00002440: SWAP2
00002441: DUP3
00002442: AND
00002443: SWAP1
00002444: PUSH4 0x23b872dd
00002449: SWAP1
0000244a: PUSH1 0x84
0000244c: ADD
0000244d: PUSH2 0x1b62
00002450: JUMP
00002451: JUMPDEST
00002452: PUSH1 0x00
00002454: DUP1
00002455: PUSH2 0x245f
00002458: DUP7
00002459: DUP7
0000245a: DUP7
0000245b: PUSH2 0x2914
0000245e: JUMP
0000245f: JUMPDEST
00002460: SWAP1
00002461: POP
00002462: PUSH2 0x246a
00002465: DUP4
00002466: PUSH2 0x29d8
00002469: JUMP
0000246a: JUMPDEST
0000246b: DUP1
0000246c: ISZERO
0000246d: PUSH2 0x2486
00002470: JUMPI
00002471: POP
00002472: PUSH1 0x00
00002474: DUP5
00002475: DUP1
00002476: PUSH2 0x2481
00002479: JUMPI
0000247a: PUSH2 0x2481
0000247d: PUSH2 0x3306
00002480: JUMP
00002481: JUMPDEST
00002482: DUP7
00002483: DUP9
00002484: MULMOD
00002485: GT
00002486: JUMPDEST
00002487: ISZERO
00002488: PUSH2 0x1602
0000248b: JUMPI
0000248c: PUSH2 0x2496
0000248f: PUSH1 0x01
00002491: DUP3
00002492: PUSH2 0x31b0
00002495: JUMP
00002496: JUMPDEST
00002497: SWAP7
00002498: SWAP6
00002499: POP
0000249a: POP
0000249b: POP
0000249c: POP
0000249d: POP
0000249e: POP
0000249f: JUMP
000024a0: JUMPDEST
000024a1: PUSH1 0x00
000024a3: DUP1
000024a4: MLOAD
000024a5: PUSH1 0x20
000024a7: PUSH2 0x34a8
000024aa: DUP4
000024ab: CODECOPY
000024ac: DUP2
000024ad: MLOAD
000024ae: SWAP2
000024af: MSTORE
000024b0: PUSH1 0x01
000024b2: PUSH1 0x01
000024b4: PUSH1 0xa0
000024b6: SHL
000024b7: SUB
000024b8: DUP6
000024b9: AND
000024ba: PUSH2 0x24d9
000024bd: JUMPI
000024be: PUSH1 0x40
000024c0: MLOAD
000024c1: PUSH4 0xe602df05
000024c6: PUSH1 0xe0
000024c8: SHL
000024c9: DUP2
000024ca: MSTORE
000024cb: PUSH1 0x00
000024cd: PUSH1 0x04
000024cf: DUP3
000024d0: ADD
000024d1: MSTORE
000024d2: PUSH1 0x24
000024d4: ADD
000024d5: PUSH2 0x0f49
000024d8: JUMP
000024d9: JUMPDEST
000024da: PUSH1 0x01
000024dc: PUSH1 0x01
000024de: PUSH1 0xa0
000024e0: SHL
000024e1: SUB
000024e2: DUP5
000024e3: AND
000024e4: PUSH2 0x2503
000024e7: JUMPI
000024e8: PUSH1 0x40
000024ea: MLOAD
000024eb: PUSH4 0x4a1406b1
000024f0: PUSH1 0xe1
000024f2: SHL
000024f3: DUP2
000024f4: MSTORE
000024f5: PUSH1 0x00
000024f7: PUSH1 0x04
000024f9: DUP3
000024fa: ADD
000024fb: MSTORE
000024fc: PUSH1 0x24
000024fe: ADD
000024ff: PUSH2 0x0f49
00002502: JUMP
00002503: JUMPDEST
00002504: PUSH1 0x01
00002506: PUSH1 0x01
00002508: PUSH1 0xa0
0000250a: SHL
0000250b: SUB
0000250c: DUP1
0000250d: DUP7
0000250e: AND
0000250f: PUSH1 0x00
00002511: SWAP1
00002512: DUP2
00002513: MSTORE
00002514: PUSH1 0x01
00002516: DUP4
00002517: ADD
00002518: PUSH1 0x20
0000251a: SWAP1
0000251b: DUP2
0000251c: MSTORE
0000251d: PUSH1 0x40
0000251f: DUP1
00002520: DUP4
00002521: KECCAK256
00002522: SWAP4
00002523: DUP9
00002524: AND
00002525: DUP4
00002526: MSTORE
00002527: SWAP3
00002528: SWAP1
00002529: MSTORE
0000252a: KECCAK256
0000252b: DUP4
0000252c: SWAP1
0000252d: SSTORE
0000252e: DUP2
0000252f: ISZERO
00002530: PUSH2 0x1c96
00002533: JUMPI
00002534: DUP4
00002535: PUSH1 0x01
00002537: PUSH1 0x01
00002539: PUSH1 0xa0
0000253b: SHL
0000253c: SUB
0000253d: AND
0000253e: DUP6
0000253f: PUSH1 0x01
00002541: PUSH1 0x01
00002543: PUSH1 0xa0
00002545: SHL
00002546: SUB
00002547: AND
00002548: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925
00002569: DUP6
0000256a: PUSH1 0x40
0000256c: MLOAD
0000256d: PUSH2 0x2578
00002570: SWAP2
00002571: DUP2
00002572: MSTORE
00002573: PUSH1 0x20
00002575: ADD
00002576: SWAP1
00002577: JUMP
00002578: JUMPDEST
00002579: PUSH1 0x40
0000257b: MLOAD
0000257c: DUP1
0000257d: SWAP2
0000257e: SUB
0000257f: SWAP1
00002580: LOG3
00002581: POP
00002582: POP
00002583: POP
00002584: POP
00002585: POP
00002586: JUMP
00002587: JUMPDEST
00002588: PUSH1 0x00
0000258a: DUP1
0000258b: MLOAD
0000258c: PUSH1 0x20
0000258e: PUSH2 0x34a8
00002591: DUP4
00002592: CODECOPY
00002593: DUP2
00002594: MLOAD
00002595: SWAP2
00002596: MSTORE
00002597: PUSH1 0x01
00002599: PUSH1 0x01
0000259b: PUSH1 0xa0
0000259d: SHL
0000259e: SUB
0000259f: DUP5
000025a0: AND
000025a1: PUSH2 0x25c3
000025a4: JUMPI
000025a5: DUP2
000025a6: DUP2
000025a7: PUSH1 0x02
000025a9: ADD
000025aa: PUSH1 0x00
000025ac: DUP3
000025ad: DUP3
000025ae: SLOAD
000025af: PUSH2 0x25b8
000025b2: SWAP2
000025b3: SWAP1
000025b4: PUSH2 0x31b0
000025b7: JUMP
000025b8: JUMPDEST
000025b9: SWAP1
000025ba: SWAP2
000025bb: SSTORE
000025bc: POP
000025bd: PUSH2 0x2622
000025c0: SWAP1
000025c1: POP
000025c2: JUMP
000025c3: JUMPDEST
000025c4: PUSH1 0x01
000025c6: PUSH1 0x01
000025c8: PUSH1 0xa0
000025ca: SHL
000025cb: SUB
000025cc: DUP5
000025cd: AND
000025ce: PUSH1 0x00
000025d0: SWAP1
000025d1: DUP2
000025d2: MSTORE
000025d3: PUSH1 0x20
000025d5: DUP3
000025d6: SWAP1
000025d7: MSTORE
000025d8: PUSH1 0x40
000025da: SWAP1
000025db: KECCAK256
000025dc: SLOAD
000025dd: DUP3
000025de: DUP2
000025df: LT
000025e0: ISZERO
000025e1: PUSH2 0x2603
000025e4: JUMPI
000025e5: DUP5
000025e6: DUP2
000025e7: DUP5
000025e8: PUSH1 0x40
000025ea: MLOAD
000025eb: PUSH4 0x391434e3
000025f0: PUSH1 0xe2
000025f2: SHL
000025f3: DUP2
000025f4: MSTORE
000025f5: PUSH1 0x04
000025f7: ADD
000025f8: PUSH2 0x0f49
000025fb: SWAP4
000025fc: SWAP3
000025fd: SWAP2
000025fe: SWAP1
000025ff: PUSH2 0x318f
00002602: JUMP
00002603: JUMPDEST
00002604: PUSH1 0x01
00002606: PUSH1 0x01
00002608: PUSH1 0xa0
0000260a: SHL
0000260b: SUB
0000260c: DUP6
0000260d: AND
0000260e: PUSH1 0x00
00002610: SWAP1
00002611: DUP2
00002612: MSTORE
00002613: PUSH1 0x20
00002615: DUP4
00002616: SWAP1
00002617: MSTORE
00002618: PUSH1 0x40
0000261a: SWAP1
0000261b: KECCAK256
0000261c: SWAP1
0000261d: DUP4
0000261e: SWAP1
0000261f: SUB
00002620: SWAP1
00002621: SSTORE
00002622: JUMPDEST
00002623: PUSH1 0x01
00002625: PUSH1 0x01
00002627: PUSH1 0xa0
00002629: SHL
0000262a: SUB
0000262b: DUP4
0000262c: AND
0000262d: PUSH2 0x2640
00002630: JUMPI
00002631: PUSH1 0x02
00002633: DUP2
00002634: ADD
00002635: DUP1
00002636: SLOAD
00002637: DUP4
00002638: SWAP1
00002639: SUB
0000263a: SWAP1
0000263b: SSTORE
0000263c: PUSH2 0x265f
0000263f: JUMP
00002640: JUMPDEST
00002641: PUSH1 0x01
00002643: PUSH1 0x01
00002645: PUSH1 0xa0
00002647: SHL
00002648: SUB
00002649: DUP4
0000264a: AND
0000264b: PUSH1 0x00
0000264d: SWAP1
0000264e: DUP2
0000264f: MSTORE
00002650: PUSH1 0x20
00002652: DUP3
00002653: SWAP1
00002654: MSTORE
00002655: PUSH1 0x40
00002657: SWAP1
00002658: KECCAK256
00002659: DUP1
0000265a: SLOAD
0000265b: DUP4
0000265c: ADD
0000265d: SWAP1
0000265e: SSTORE
0000265f: JUMPDEST
00002660: DUP3
00002661: PUSH1 0x01
00002663: PUSH1 0x01
00002665: PUSH1 0xa0
00002667: SHL
00002668: SUB
00002669: AND
0000266a: DUP5
0000266b: PUSH1 0x01
0000266d: PUSH1 0x01
0000266f: PUSH1 0xa0
00002671: SHL
00002672: SUB
00002673: AND
00002674: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
00002695: DUP5
00002696: PUSH1 0x40
00002698: MLOAD
00002699: PUSH2 0x26a4
0000269c: SWAP2
0000269d: DUP2
0000269e: MSTORE
0000269f: PUSH1 0x20
000026a1: ADD
000026a2: SWAP1
000026a3: JUMP
000026a4: JUMPDEST
000026a5: PUSH1 0x40
000026a7: MLOAD
000026a8: DUP1
000026a9: SWAP2
000026aa: SUB
000026ab: SWAP1
000026ac: LOG3
000026ad: POP
000026ae: POP
000026af: POP
000026b0: POP
000026b1: JUMP
000026b2: JUMPDEST
000026b3: PUSH2 0x26ba
000026b6: PUSH2 0x1a96
000026b9: JUMP
000026ba: JUMPDEST
000026bb: PUSH1 0x00
000026bd: DUP1
000026be: MLOAD
000026bf: PUSH1 0x20
000026c1: PUSH2 0x34a8
000026c4: DUP4
000026c5: CODECOPY
000026c6: DUP2
000026c7: MLOAD
000026c8: SWAP2
000026c9: MSTORE
000026ca: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03
000026eb: PUSH2 0x26f4
000026ee: DUP5
000026ef: DUP3
000026f0: PUSH2 0x3377
000026f3: JUMP
000026f4: JUMPDEST
000026f5: POP
000026f6: PUSH1 0x04
000026f8: DUP2
000026f9: ADD
000026fa: PUSH2 0x1a31
000026fd: DUP4
000026fe: DUP3
000026ff: PUSH2 0x3377
00002702: JUMP
00002703: JUMPDEST
00002704: PUSH2 0x18ea
00002707: PUSH2 0x1a96
0000270a: JUMP
0000270b: JUMPDEST
0000270c: PUSH2 0x2713
0000270f: PUSH2 0x1a96
00002712: JUMP
00002713: JUMPDEST
00002714: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00
00002735: PUSH1 0x00
00002737: DUP1
00002738: PUSH2 0x2740
0000273b: DUP5
0000273c: PUSH2 0x2a05
0000273f: JUMP
00002740: JUMPDEST
00002741: SWAP2
00002742: POP
00002743: SWAP2
00002744: POP
00002745: DUP2
00002746: PUSH2 0x2750
00002749: JUMPI
0000274a: PUSH1 0x12
0000274c: PUSH2 0x2752
0000274f: JUMP
00002750: JUMPDEST
00002751: DUP1
00002752: JUMPDEST
00002753: DUP4
00002754: SLOAD
00002755: PUSH1 0x01
00002757: PUSH1 0x01
00002759: PUSH1 0xa8
0000275b: SHL
0000275c: SUB
0000275d: NOT
0000275e: AND
0000275f: PUSH1 0x01
00002761: PUSH1 0xa0
00002763: SHL
00002764: PUSH1 0xff
00002766: SWAP3
00002767: SWAP1
00002768: SWAP3
00002769: AND
0000276a: SWAP2
0000276b: SWAP1
0000276c: SWAP2
0000276d: MUL
0000276e: PUSH1 0x01
00002770: PUSH1 0x01
00002772: PUSH1 0xa0
00002774: SHL
00002775: SUB
00002776: NOT
00002777: AND
00002778: OR
00002779: PUSH1 0x01
0000277b: PUSH1 0x01
0000277d: PUSH1 0xa0
0000277f: SHL
00002780: SUB
00002781: SWAP5
00002782: SWAP1
00002783: SWAP5
00002784: AND
00002785: SWAP4
00002786: SWAP1
00002787: SWAP4
00002788: OR
00002789: SWAP1
0000278a: SWAP2
0000278b: SSTORE
0000278c: POP
0000278d: POP
0000278e: JUMP
0000278f: JUMPDEST
00002790: PUSH2 0x221b
00002793: PUSH2 0x1a96
00002796: JUMP
00002797: JUMPDEST
00002798: PUSH1 0x00
0000279a: PUSH2 0x27ac
0000279d: PUSH1 0x01
0000279f: PUSH1 0x01
000027a1: PUSH1 0xa0
000027a3: SHL
000027a4: SUB
000027a5: DUP5
000027a6: AND
000027a7: DUP4
000027a8: PUSH2 0x2ae1
000027ab: JUMP
000027ac: JUMPDEST
000027ad: SWAP1
000027ae: POP
000027af: DUP1
000027b0: MLOAD
000027b1: PUSH1 0x00
000027b3: EQ
000027b4: ISZERO
000027b5: DUP1
000027b6: ISZERO
000027b7: PUSH2 0x27d1
000027ba: JUMPI
000027bb: POP
000027bc: DUP1
000027bd: DUP1
000027be: PUSH1 0x20
000027c0: ADD
000027c1: SWAP1
000027c2: MLOAD
000027c3: DUP2
000027c4: ADD
000027c5: SWAP1
000027c6: PUSH2 0x27cf
000027c9: SWAP2
000027ca: SWAP1
000027cb: PUSH2 0x3436
000027ce: JUMP
000027cf: JUMPDEST
000027d0: ISZERO
000027d1: JUMPDEST
000027d2: ISZERO
000027d3: PUSH2 0x1782
000027d6: JUMPI
000027d7: PUSH1 0x40
000027d9: MLOAD
000027da: PUSH4 0x5274afe7
000027df: PUSH1 0xe0
000027e1: SHL
000027e2: DUP2
000027e3: MSTORE
000027e4: PUSH1 0x01
000027e6: PUSH1 0x01
000027e8: PUSH1 0xa0
000027ea: SHL
000027eb: SUB
000027ec: DUP5
000027ed: AND
000027ee: PUSH1 0x04
000027f0: DUP3
000027f1: ADD
000027f2: MSTORE
000027f3: PUSH1 0x24
000027f5: ADD
000027f6: PUSH2 0x0f49
000027f9: JUMP
000027fa: JUMPDEST
000027fb: PUSH2 0x2803
000027fe: DUP3
000027ff: PUSH2 0x2aef
00002802: JUMP
00002803: JUMPDEST
00002804: PUSH1 0x40
00002806: MLOAD
00002807: PUSH1 0x01
00002809: PUSH1 0x01
0000280b: PUSH1 0xa0
0000280d: SHL
0000280e: SUB
0000280f: DUP4
00002810: AND
00002811: SWAP1
00002812: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
00002833: SWAP1
00002834: PUSH1 0x00
00002836: SWAP1
00002837: LOG2
00002838: DUP1
00002839: MLOAD
0000283a: ISZERO
0000283b: PUSH2 0x2848
0000283e: JUMPI
0000283f: PUSH2 0x1782
00002842: DUP3
00002843: DUP3
00002844: PUSH2 0x2b54
00002847: JUMP
00002848: JUMPDEST
00002849: PUSH2 0x0c35
0000284c: PUSH2 0x2bc1
0000284f: JUMP
00002850: JUMPDEST
00002851: PUSH1 0x00
00002853: PUSH2 0x285a
00002856: PUSH2 0x1b2b
00002859: JUMP
0000285a: JUMPDEST
0000285b: PUSH1 0x01
0000285d: PUSH1 0x01
0000285f: PUSH1 0xa0
00002861: SHL
00002862: SUB
00002863: AND
00002864: PUSH4 0xea81ec6f
00002869: PUSH1 0x40
0000286b: MLOAD
0000286c: DUP2
0000286d: PUSH4 0xffffffff
00002872: AND
00002873: PUSH1 0xe0
00002875: SHL
00002876: DUP2
00002877: MSTORE
00002878: PUSH1 0x04
0000287a: ADD
0000287b: PUSH1 0x20
0000287d: PUSH1 0x40
0000287f: MLOAD
00002880: DUP1
00002881: DUP4
00002882: SUB
00002883: DUP2
00002884: DUP7
00002885: GAS
00002886: STATICCALL
00002887: ISZERO
00002888: DUP1
00002889: ISZERO
0000288a: PUSH2 0x21c1
0000288d: JUMPI
0000288e: RETURNDATASIZE
0000288f: PUSH1 0x00
00002891: DUP1
00002892: RETURNDATACOPY
00002893: RETURNDATASIZE
00002894: PUSH1 0x00
00002896: REVERT
00002897: JUMPDEST
00002898: PUSH1 0x01
0000289a: PUSH1 0x01
0000289c: PUSH1 0xa0
0000289e: SHL
0000289f: SUB
000028a0: DUP3
000028a1: AND
000028a2: PUSH2 0x28c1
000028a5: JUMPI
000028a6: PUSH1 0x40
000028a8: MLOAD
000028a9: PUSH4 0x4b637e8f
000028ae: PUSH1 0xe1
000028b0: SHL
000028b1: DUP2
000028b2: MSTORE
000028b3: PUSH1 0x00
000028b5: PUSH1 0x04
000028b7: DUP3
000028b8: ADD
000028b9: MSTORE
000028ba: PUSH1 0x24
000028bc: ADD
000028bd: PUSH2 0x0f49
000028c0: JUMP
000028c1: JUMPDEST
000028c2: PUSH2 0x0c35
000028c5: DUP3
000028c6: PUSH1 0x00
000028c8: DUP4
000028c9: PUSH2 0x2587
000028cc: JUMP
000028cd: JUMPDEST
000028ce: PUSH1 0x00
000028d0: PUSH2 0x28d7
000028d3: PUSH2 0x1b2b
000028d6: JUMP
000028d7: JUMPDEST
000028d8: PUSH1 0x01
000028da: PUSH1 0x01
000028dc: PUSH1 0xa0
000028de: SHL
000028df: SUB
000028e0: AND
000028e1: PUSH4 0xb3f00674
000028e6: PUSH1 0x40
000028e8: MLOAD
000028e9: DUP2
000028ea: PUSH4 0xffffffff
000028ef: AND
000028f0: PUSH1 0xe0
000028f2: SHL
000028f3: DUP2
000028f4: MSTORE
000028f5: PUSH1 0x04
000028f7: ADD
000028f8: PUSH1 0x20
000028fa: PUSH1 0x40
000028fc: MLOAD
000028fd: DUP1
000028fe: DUP4
000028ff: SUB
00002900: DUP2
00002901: DUP7
00002902: GAS
00002903: STATICCALL
00002904: ISZERO
00002905: DUP1
00002906: ISZERO
00002907: PUSH2 0x21c1
0000290a: JUMPI
0000290b: RETURNDATASIZE
0000290c: PUSH1 0x00
0000290e: DUP1
0000290f: RETURNDATACOPY
00002910: RETURNDATASIZE
00002911: PUSH1 0x00
00002913: REVERT
00002914: JUMPDEST
00002915: PUSH1 0x00
00002917: DUP4
00002918: DUP4
00002919: MUL
0000291a: DUP2
0000291b: PUSH1 0x00
0000291d: NOT
0000291e: DUP6
0000291f: DUP8
00002920: MULMOD
00002921: DUP3
00002922: DUP2
00002923: LT
00002924: DUP4
00002925: DUP3
00002926: SUB
00002927: SUB
00002928: SWAP2
00002929: POP
0000292a: POP
0000292b: DUP1
0000292c: PUSH1 0x00
0000292e: SUB
0000292f: PUSH2 0x294b
00002932: JUMPI
00002933: DUP4
00002934: DUP3
00002935: DUP2
00002936: PUSH2 0x2941
00002939: JUMPI
0000293a: PUSH2 0x2941
0000293d: PUSH2 0x3306
00002940: JUMP
00002941: JUMPDEST
00002942: DIV
00002943: SWAP3
00002944: POP
00002945: POP
00002946: POP
00002947: PUSH2 0x0a4f
0000294a: JUMP
0000294b: JUMPDEST
0000294c: DUP1
0000294d: DUP5
0000294e: GT
0000294f: PUSH2 0x296b
00002952: JUMPI
00002953: PUSH1 0x40
00002955: MLOAD
00002956: PUSH4 0x227bc153
0000295b: PUSH1 0xe0
0000295d: SHL
0000295e: DUP2
0000295f: MSTORE
00002960: PUSH1 0x04
00002962: ADD
00002963: PUSH1 0x40
00002965: MLOAD
00002966: DUP1
00002967: SWAP2
00002968: SUB
00002969: SWAP1
0000296a: REVERT
0000296b: JUMPDEST
0000296c: PUSH1 0x00
0000296e: DUP5
0000296f: DUP7
00002970: DUP9
00002971: MULMOD
00002972: PUSH1 0x00
00002974: DUP7
00002975: DUP2
00002976: SUB
00002977: DUP8
00002978: AND
00002979: SWAP7
0000297a: DUP8
0000297b: SWAP1
0000297c: DIV
0000297d: SWAP7
0000297e: PUSH1 0x02
00002980: PUSH1 0x03
00002982: DUP10
00002983: MUL
00002984: DUP2
00002985: XOR
00002986: DUP1
00002987: DUP11
00002988: MUL
00002989: DUP3
0000298a: SUB
0000298b: MUL
0000298c: DUP1
0000298d: DUP11
0000298e: MUL
0000298f: DUP3
00002990: SUB
00002991: MUL
00002992: DUP1
00002993: DUP11
00002994: MUL
00002995: DUP3
00002996: SUB
00002997: MUL
00002998: DUP1
00002999: DUP11
0000299a: MUL
0000299b: DUP3
0000299c: SUB
0000299d: MUL
0000299e: DUP1
0000299f: DUP11
000029a0: MUL
000029a1: DUP3
000029a2: SUB
000029a3: MUL
000029a4: DUP1
000029a5: DUP11
000029a6: MUL
000029a7: SWAP1
000029a8: SWAP2
000029a9: SUB
000029aa: MUL
000029ab: SWAP2
000029ac: DUP2
000029ad: SWAP1
000029ae: SUB
000029af: DUP2
000029b0: SWAP1
000029b1: DIV
000029b2: PUSH1 0x01
000029b4: ADD
000029b5: DUP7
000029b6: DUP5
000029b7: GT
000029b8: SWAP1
000029b9: SWAP6
000029ba: SUB
000029bb: SWAP5
000029bc: SWAP1
000029bd: SWAP5
000029be: MUL
000029bf: SWAP2
000029c0: SWAP1
000029c1: SWAP5
000029c2: SUB
000029c3: SWAP3
000029c4: SWAP1
000029c5: SWAP3
000029c6: DIV
000029c7: SWAP2
000029c8: SWAP1
000029c9: SWAP2
000029ca: OR
000029cb: SWAP2
000029cc: SWAP1
000029cd: SWAP2
000029ce: MUL
000029cf: SWAP2
000029d0: POP
000029d1: POP
000029d2: SWAP4
000029d3: SWAP3
000029d4: POP
000029d5: POP
000029d6: POP
000029d7: JUMP
000029d8: JUMPDEST
000029d9: PUSH1 0x00
000029db: PUSH1 0x02
000029dd: DUP3
000029de: PUSH1 0x03
000029e0: DUP2
000029e1: GT
000029e2: ISZERO
000029e3: PUSH2 0x29ee
000029e6: JUMPI
000029e7: PUSH2 0x29ee
000029ea: PUSH2 0x3453
000029ed: JUMP
000029ee: JUMPDEST
000029ef: PUSH2 0x29f8
000029f2: SWAP2
000029f3: SWAP1
000029f4: PUSH2 0x3469
000029f7: JUMP
000029f8: JUMPDEST
000029f9: PUSH1 0xff
000029fb: AND
000029fc: PUSH1 0x01
000029fe: EQ
000029ff: SWAP1
00002a00: POP
00002a01: SWAP2
00002a02: SWAP1
00002a03: POP
00002a04: JUMP
00002a05: JUMPDEST
00002a06: PUSH1 0x40
00002a08: DUP1
00002a09: MLOAD
00002a0a: PUSH1 0x04
00002a0c: DUP2
00002a0d: MSTORE
00002a0e: PUSH1 0x24
00002a10: DUP2
00002a11: ADD
00002a12: DUP3
00002a13: MSTORE
00002a14: PUSH1 0x20
00002a16: DUP2
00002a17: ADD
00002a18: DUP1
00002a19: MLOAD
00002a1a: PUSH1 0x01
00002a1c: PUSH1 0x01
00002a1e: PUSH1 0xe0
00002a20: SHL
00002a21: SUB
00002a22: AND
00002a23: PUSH4 0x313ce567
00002a28: PUSH1 0xe0
00002a2a: SHL
00002a2b: OR
00002a2c: SWAP1
00002a2d: MSTORE
00002a2e: SWAP1
00002a2f: MLOAD
00002a30: PUSH1 0x00
00002a32: SWAP2
00002a33: DUP3
00002a34: SWAP2
00002a35: DUP3
00002a36: SWAP2
00002a37: DUP3
00002a38: SWAP2
00002a39: PUSH1 0x01
00002a3b: PUSH1 0x01
00002a3d: PUSH1 0xa0
00002a3f: SHL
00002a40: SUB
00002a41: DUP8
00002a42: AND
00002a43: SWAP2
00002a44: PUSH2 0x2a4c
00002a47: SWAP2
00002a48: PUSH2 0x348b
00002a4b: JUMP
00002a4c: JUMPDEST
00002a4d: PUSH1 0x00
00002a4f: PUSH1 0x40
00002a51: MLOAD
00002a52: DUP1
00002a53: DUP4
00002a54: SUB
00002a55: DUP2
00002a56: DUP6
00002a57: GAS
00002a58: STATICCALL
00002a59: SWAP2
00002a5a: POP
00002a5b: POP
00002a5c: RETURNDATASIZE
00002a5d: DUP1
00002a5e: PUSH1 0x00
00002a60: DUP2
00002a61: EQ
00002a62: PUSH2 0x2a87
00002a65: JUMPI
00002a66: PUSH1 0x40
00002a68: MLOAD
00002a69: SWAP2
00002a6a: POP
00002a6b: PUSH1 0x1f
00002a6d: NOT
00002a6e: PUSH1 0x3f
00002a70: RETURNDATASIZE
00002a71: ADD
00002a72: AND
00002a73: DUP3
00002a74: ADD
00002a75: PUSH1 0x40
00002a77: MSTORE
00002a78: RETURNDATASIZE
00002a79: DUP3
00002a7a: MSTORE
00002a7b: RETURNDATASIZE
00002a7c: PUSH1 0x00
00002a7e: PUSH1 0x20
00002a80: DUP5
00002a81: ADD
00002a82: RETURNDATACOPY
00002a83: PUSH2 0x2a8c
00002a86: JUMP
00002a87: JUMPDEST
00002a88: PUSH1 0x60
00002a8a: SWAP2
00002a8b: POP
00002a8c: JUMPDEST
00002a8d: POP
00002a8e: SWAP2
00002a8f: POP
00002a90: SWAP2
00002a91: POP
00002a92: DUP2
00002a93: DUP1
00002a94: ISZERO
00002a95: PUSH2 0x2aa0
00002a98: JUMPI
00002a99: POP
00002a9a: PUSH1 0x20
00002a9c: DUP2
00002a9d: MLOAD
00002a9e: LT
00002a9f: ISZERO
00002aa0: JUMPDEST
00002aa1: ISZERO
00002aa2: PUSH2 0x2ad4
00002aa5: JUMPI
00002aa6: PUSH1 0x00
00002aa8: DUP2
00002aa9: DUP1
00002aaa: PUSH1 0x20
00002aac: ADD
00002aad: SWAP1
00002aae: MLOAD
00002aaf: DUP2
00002ab0: ADD
00002ab1: SWAP1
00002ab2: PUSH2 0x2abb
00002ab5: SWAP2
00002ab6: SWAP1
00002ab7: PUSH2 0x32b9
00002aba: JUMP
00002abb: JUMPDEST
00002abc: SWAP1
00002abd: POP
00002abe: PUSH1 0xff
00002ac0: DUP2
00002ac1: GT
00002ac2: PUSH2 0x2ad2
00002ac5: JUMPI
00002ac6: PUSH1 0x01
00002ac8: SWAP7
00002ac9: SWAP1
00002aca: SWAP6
00002acb: POP
00002acc: SWAP4
00002acd: POP
00002ace: POP
00002acf: POP
00002ad0: POP
00002ad1: JUMP
00002ad2: JUMPDEST
00002ad3: POP
00002ad4: JUMPDEST
00002ad5: POP
00002ad6: PUSH1 0x00
00002ad8: SWAP5
00002ad9: DUP6
00002ada: SWAP5
00002adb: POP
00002adc: SWAP3
00002add: POP
00002ade: POP
00002adf: POP
00002ae0: JUMP
00002ae1: JUMPDEST
00002ae2: PUSH1 0x60
00002ae4: PUSH2 0x0a4f
00002ae7: DUP4
00002ae8: DUP4
00002ae9: PUSH1 0x00
00002aeb: PUSH2 0x2be0
00002aee: JUMP
00002aef: JUMPDEST
00002af0: DUP1
00002af1: PUSH1 0x01
00002af3: PUSH1 0x01
00002af5: PUSH1 0xa0
00002af7: SHL
00002af8: SUB
00002af9: AND
00002afa: EXTCODESIZE
00002afb: PUSH1 0x00
00002afd: SUB
00002afe: PUSH2 0x2b25
00002b01: JUMPI
00002b02: PUSH1 0x40
00002b04: MLOAD
00002b05: PUSH4 0x4c9c8ce3
00002b0a: PUSH1 0xe0
00002b0c: SHL
00002b0d: DUP2
00002b0e: MSTORE
00002b0f: PUSH1 0x01
00002b11: PUSH1 0x01
00002b13: PUSH1 0xa0
00002b15: SHL
00002b16: SUB
00002b17: DUP3
00002b18: AND
00002b19: PUSH1 0x04
00002b1b: DUP3
00002b1c: ADD
00002b1d: MSTORE
00002b1e: PUSH1 0x24
00002b20: ADD
00002b21: PUSH2 0x0f49
00002b24: JUMP
00002b25: JUMPDEST
00002b26: PUSH1 0x00
00002b28: DUP1
00002b29: MLOAD
00002b2a: PUSH1 0x20
00002b2c: PUSH2 0x34e8
00002b2f: DUP4
00002b30: CODECOPY
00002b31: DUP2
00002b32: MLOAD
00002b33: SWAP2
00002b34: MSTORE
00002b35: DUP1
00002b36: SLOAD
00002b37: PUSH1 0x01
00002b39: PUSH1 0x01
00002b3b: PUSH1 0xa0
00002b3d: SHL
00002b3e: SUB
00002b3f: NOT
00002b40: AND
00002b41: PUSH1 0x01
00002b43: PUSH1 0x01
00002b45: PUSH1 0xa0
00002b47: SHL
00002b48: SUB
00002b49: SWAP3
00002b4a: SWAP1
00002b4b: SWAP3
00002b4c: AND
00002b4d: SWAP2
00002b4e: SWAP1
00002b4f: SWAP2
00002b50: OR
00002b51: SWAP1
00002b52: SSTORE
00002b53: JUMP
00002b54: JUMPDEST
00002b55: PUSH1 0x60
00002b57: PUSH1 0x00
00002b59: DUP1
00002b5a: DUP5
00002b5b: PUSH1 0x01
00002b5d: PUSH1 0x01
00002b5f: PUSH1 0xa0
00002b61: SHL
00002b62: SUB
00002b63: AND
00002b64: DUP5
00002b65: PUSH1 0x40
00002b67: MLOAD
00002b68: PUSH2 0x2b71
00002b6b: SWAP2
00002b6c: SWAP1
00002b6d: PUSH2 0x348b
00002b70: JUMP
00002b71: JUMPDEST
00002b72: PUSH1 0x00
00002b74: PUSH1 0x40
00002b76: MLOAD
00002b77: DUP1
00002b78: DUP4
00002b79: SUB
00002b7a: DUP2
00002b7b: DUP6
00002b7c: GAS
00002b7d: DELEGATECALL
00002b7e: SWAP2
00002b7f: POP
00002b80: POP
00002b81: RETURNDATASIZE
00002b82: DUP1
00002b83: PUSH1 0x00
00002b85: DUP2
00002b86: EQ
00002b87: PUSH2 0x2bac
00002b8a: JUMPI
00002b8b: PUSH1 0x40
00002b8d: MLOAD
00002b8e: SWAP2
00002b8f: POP
00002b90: PUSH1 0x1f
00002b92: NOT
00002b93: PUSH1 0x3f
00002b95: RETURNDATASIZE
00002b96: ADD
00002b97: AND
00002b98: DUP3
00002b99: ADD
00002b9a: PUSH1 0x40
00002b9c: MSTORE
00002b9d: RETURNDATASIZE
00002b9e: DUP3
00002b9f: MSTORE
00002ba0: RETURNDATASIZE
00002ba1: PUSH1 0x00
00002ba3: PUSH1 0x20
00002ba5: DUP5
00002ba6: ADD
00002ba7: RETURNDATACOPY
00002ba8: PUSH2 0x2bb1
00002bab: JUMP
00002bac: JUMPDEST
00002bad: PUSH1 0x60
00002baf: SWAP2
00002bb0: POP
00002bb1: JUMPDEST
00002bb2: POP
00002bb3: SWAP2
00002bb4: POP
00002bb5: SWAP2
00002bb6: POP
00002bb7: PUSH2 0x1602
00002bba: DUP6
00002bbb: DUP4
00002bbc: DUP4
00002bbd: PUSH2 0x2c6f
00002bc0: JUMP
00002bc1: JUMPDEST
00002bc2: CALLVALUE
00002bc3: ISZERO
00002bc4: PUSH2 0x1111
00002bc7: JUMPI
00002bc8: PUSH1 0x40
00002bca: MLOAD
00002bcb: PUSH4 0xb398979f
00002bd0: PUSH1 0xe0
00002bd2: SHL
00002bd3: DUP2
00002bd4: MSTORE
00002bd5: PUSH1 0x04
00002bd7: ADD
00002bd8: PUSH1 0x40
00002bda: MLOAD
00002bdb: DUP1
00002bdc: SWAP2
00002bdd: SUB
00002bde: SWAP1
00002bdf: REVERT
00002be0: JUMPDEST
00002be1: PUSH1 0x60
00002be3: DUP2
00002be4: SELFBALANCE
00002be5: LT
00002be6: ISZERO
00002be7: PUSH2 0x2c05
00002bea: JUMPI
00002beb: PUSH1 0x40
00002bed: MLOAD
00002bee: PUSH4 0xcd786059
00002bf3: PUSH1 0xe0
00002bf5: SHL
00002bf6: DUP2
00002bf7: MSTORE
00002bf8: ADDRESS
00002bf9: PUSH1 0x04
00002bfb: DUP3
00002bfc: ADD
00002bfd: MSTORE
00002bfe: PUSH1 0x24
00002c00: ADD
00002c01: PUSH2 0x0f49
00002c04: JUMP
00002c05: JUMPDEST
00002c06: PUSH1 0x00
00002c08: DUP1
00002c09: DUP6
00002c0a: PUSH1 0x01
00002c0c: PUSH1 0x01
00002c0e: PUSH1 0xa0
00002c10: SHL
00002c11: SUB
00002c12: AND
00002c13: DUP5
00002c14: DUP7
00002c15: PUSH1 0x40
00002c17: MLOAD
00002c18: PUSH2 0x2c21
00002c1b: SWAP2
00002c1c: SWAP1
00002c1d: PUSH2 0x348b
00002c20: JUMP
00002c21: JUMPDEST
00002c22: PUSH1 0x00
00002c24: PUSH1 0x40
00002c26: MLOAD
00002c27: DUP1
00002c28: DUP4
00002c29: SUB
00002c2a: DUP2
00002c2b: DUP6
00002c2c: DUP8
00002c2d: GAS
00002c2e: CALL
00002c2f: SWAP3
00002c30: POP
00002c31: POP
00002c32: POP
00002c33: RETURNDATASIZE
00002c34: DUP1
00002c35: PUSH1 0x00
00002c37: DUP2
00002c38: EQ
00002c39: PUSH2 0x2c5e
00002c3c: JUMPI
00002c3d: PUSH1 0x40
00002c3f: MLOAD
00002c40: SWAP2
00002c41: POP
00002c42: PUSH1 0x1f
00002c44: NOT
00002c45: PUSH1 0x3f
00002c47: RETURNDATASIZE
00002c48: ADD
00002c49: AND
00002c4a: DUP3
00002c4b: ADD
00002c4c: PUSH1 0x40
00002c4e: MSTORE
00002c4f: RETURNDATASIZE
00002c50: DUP3
00002c51: MSTORE
00002c52: RETURNDATASIZE
00002c53: PUSH1 0x00
00002c55: PUSH1 0x20
00002c57: DUP5
00002c58: ADD
00002c59: RETURNDATACOPY
00002c5a: PUSH2 0x2c63
00002c5d: JUMP
00002c5e: JUMPDEST
00002c5f: PUSH1 0x60
00002c61: SWAP2
00002c62: POP
00002c63: JUMPDEST
00002c64: POP
00002c65: SWAP2
00002c66: POP
00002c67: SWAP2
00002c68: POP
00002c69: PUSH2 0x2496
00002c6c: DUP7
00002c6d: DUP4
00002c6e: DUP4
00002c6f: JUMPDEST
00002c70: PUSH1 0x60
00002c72: DUP3
00002c73: PUSH2 0x2c84
00002c76: JUMPI
00002c77: PUSH2 0x2c7f
00002c7a: DUP3
00002c7b: PUSH2 0x2ccb
00002c7e: JUMP
00002c7f: JUMPDEST
00002c80: PUSH2 0x0a4f
00002c83: JUMP
00002c84: JUMPDEST
00002c85: DUP2
00002c86: MLOAD
00002c87: ISZERO
00002c88: DUP1
00002c89: ISZERO
00002c8a: PUSH2 0x2c9b
00002c8d: JUMPI
00002c8e: POP
00002c8f: PUSH1 0x01
00002c91: PUSH1 0x01
00002c93: PUSH1 0xa0
00002c95: SHL
00002c96: SUB
00002c97: DUP5
00002c98: AND
00002c99: EXTCODESIZE
00002c9a: ISZERO
00002c9b: JUMPDEST
00002c9c: ISZERO
00002c9d: PUSH2 0x2cc4
00002ca0: JUMPI
00002ca1: PUSH1 0x40
00002ca3: MLOAD
00002ca4: PUSH4 0x9996b315
00002ca9: PUSH1 0xe0
00002cab: SHL
00002cac: DUP2
00002cad: MSTORE
00002cae: PUSH1 0x01
00002cb0: PUSH1 0x01
00002cb2: PUSH1 0xa0
00002cb4: SHL
00002cb5: SUB
00002cb6: DUP6
00002cb7: AND
00002cb8: PUSH1 0x04
00002cba: DUP3
00002cbb: ADD
00002cbc: MSTORE
00002cbd: PUSH1 0x24
00002cbf: ADD
00002cc0: PUSH2 0x0f49
00002cc3: JUMP
00002cc4: JUMPDEST
00002cc5: POP
00002cc6: DUP1
00002cc7: PUSH2 0x0a4f
00002cca: JUMP
00002ccb: JUMPDEST
00002ccc: DUP1
00002ccd: MLOAD
00002cce: ISZERO
00002ccf: PUSH2 0x2cdb
00002cd2: JUMPI
00002cd3: DUP1
00002cd4: MLOAD
00002cd5: DUP1
00002cd6: DUP3
00002cd7: PUSH1 0x20
00002cd9: ADD
00002cda: REVERT
00002cdb: JUMPDEST
00002cdc: PUSH1 0x40
00002cde: MLOAD
00002cdf: PUSH4 0x0a12f521
00002ce4: PUSH1 0xe1
00002ce6: SHL
00002ce7: DUP2
00002ce8: MSTORE
00002ce9: PUSH1 0x04
00002ceb: ADD
00002cec: PUSH1 0x40
00002cee: MLOAD
00002cef: DUP1
00002cf0: SWAP2
00002cf1: SUB
00002cf2: SWAP1
00002cf3: REVERT
00002cf4: JUMPDEST
00002cf5: PUSH1 0x00
00002cf7: JUMPDEST
00002cf8: DUP4
00002cf9: DUP2
00002cfa: LT
00002cfb: ISZERO
00002cfc: PUSH2 0x2d0f
00002cff: JUMPI
00002d00: DUP2
00002d01: DUP2
00002d02: ADD
00002d03: MLOAD
00002d04: DUP4
00002d05: DUP3
00002d06: ADD
00002d07: MSTORE
00002d08: PUSH1 0x20
00002d0a: ADD
00002d0b: PUSH2 0x2cf7
00002d0e: JUMP
00002d0f: JUMPDEST
00002d10: POP
00002d11: POP
00002d12: PUSH1 0x00
00002d14: SWAP2
00002d15: ADD
00002d16: MSTORE
00002d17: JUMP
00002d18: JUMPDEST
00002d19: PUSH1 0x20
00002d1b: DUP2
00002d1c: MSTORE
00002d1d: PUSH1 0x00
00002d1f: DUP3
00002d20: MLOAD
00002d21: DUP1
00002d22: PUSH1 0x20
00002d24: DUP5
00002d25: ADD
00002d26: MSTORE
00002d27: PUSH2 0x2d37
00002d2a: DUP2
00002d2b: PUSH1 0x40
00002d2d: DUP6
00002d2e: ADD
00002d2f: PUSH1 0x20
00002d31: DUP8
00002d32: ADD
00002d33: PUSH2 0x2cf4
00002d36: JUMP
00002d37: JUMPDEST
00002d38: PUSH1 0x1f
00002d3a: ADD
00002d3b: PUSH1 0x1f
00002d3d: NOT
00002d3e: AND
00002d3f: SWAP2
00002d40: SWAP1
00002d41: SWAP2
00002d42: ADD
00002d43: PUSH1 0x40
00002d45: ADD
00002d46: SWAP3
00002d47: SWAP2
00002d48: POP
00002d49: POP
00002d4a: JUMP
00002d4b: JUMPDEST
00002d4c: PUSH1 0x00
00002d4e: PUSH1 0x20
00002d50: DUP3
00002d51: DUP5
00002d52: SUB
00002d53: SLT
00002d54: ISZERO
00002d55: PUSH2 0x2d5d
00002d58: JUMPI
00002d59: PUSH1 0x00
00002d5b: DUP1
00002d5c: REVERT
00002d5d: JUMPDEST
00002d5e: POP
00002d5f: CALLDATALOAD
00002d60: SWAP2
00002d61: SWAP1
00002d62: POP
00002d63: JUMP
00002d64: JUMPDEST
00002d65: PUSH1 0x01
00002d67: PUSH1 0x01
00002d69: PUSH1 0xa0
00002d6b: SHL
00002d6c: SUB
00002d6d: DUP2
00002d6e: AND
00002d6f: DUP2
00002d70: EQ
00002d71: PUSH2 0x0c52
00002d74: JUMPI
00002d75: PUSH1 0x00
00002d77: DUP1
00002d78: REVERT
00002d79: JUMPDEST
00002d7a: PUSH1 0x00
00002d7c: DUP1
00002d7d: PUSH1 0x40
00002d7f: DUP4
00002d80: DUP6
00002d81: SUB
00002d82: SLT
00002d83: ISZERO
00002d84: PUSH2 0x2d8c
00002d87: JUMPI
00002d88: PUSH1 0x00
00002d8a: DUP1
00002d8b: REVERT
00002d8c: JUMPDEST
00002d8d: DUP3
00002d8e: CALLDATALOAD
00002d8f: PUSH2 0x2d97
00002d92: DUP2
00002d93: PUSH2 0x2d64
00002d96: JUMP
00002d97: JUMPDEST
00002d98: SWAP5
00002d99: PUSH1 0x20
00002d9b: SWAP4
00002d9c: SWAP1
00002d9d: SWAP4
00002d9e: ADD
00002d9f: CALLDATALOAD
00002da0: SWAP4
00002da1: POP
00002da2: POP
00002da3: POP
00002da4: JUMP
00002da5: JUMPDEST
00002da6: PUSH1 0x00
00002da8: DUP1
00002da9: PUSH1 0x00
00002dab: PUSH1 0x60
00002dad: DUP5
00002dae: DUP7
00002daf: SUB
00002db0: SLT
00002db1: ISZERO
00002db2: PUSH2 0x2dba
00002db5: JUMPI
00002db6: PUSH1 0x00
00002db8: DUP1
00002db9: REVERT
00002dba: JUMPDEST
00002dbb: DUP4
00002dbc: CALLDATALOAD
00002dbd: PUSH2 0x2dc5
00002dc0: DUP2
00002dc1: PUSH2 0x2d64
00002dc4: JUMP
00002dc5: JUMPDEST
00002dc6: SWAP3
00002dc7: POP
00002dc8: PUSH1 0x20
00002dca: DUP5
00002dcb: ADD
00002dcc: CALLDATALOAD
00002dcd: PUSH2 0x2dd5
00002dd0: DUP2
00002dd1: PUSH2 0x2d64
00002dd4: JUMP
00002dd5: JUMPDEST
00002dd6: SWAP3
00002dd7: SWAP6
00002dd8: SWAP3
00002dd9: SWAP5
00002dda: POP
00002ddb: POP
00002ddc: POP
00002ddd: PUSH1 0x40
00002ddf: SWAP2
00002de0: SWAP1
00002de1: SWAP2
00002de2: ADD
00002de3: CALLDATALOAD
00002de4: SWAP1
00002de5: JUMP
00002de6: JUMPDEST
00002de7: PUSH4 0x4e487b71
00002dec: PUSH1 0xe0
00002dee: SHL
00002def: PUSH1 0x00
00002df1: MSTORE
00002df2: PUSH1 0x41
00002df4: PUSH1 0x04
00002df6: MSTORE
00002df7: PUSH1 0x24
00002df9: PUSH1 0x00
00002dfb: REVERT
00002dfc: JUMPDEST
00002dfd: PUSH1 0x00
00002dff: DUP1
00002e00: PUSH8 0xffffffffffffffff
00002e09: DUP5
00002e0a: GT
00002e0b: ISZERO
00002e0c: PUSH2 0x2e17
00002e0f: JUMPI
00002e10: PUSH2 0x2e17
00002e13: PUSH2 0x2de6
00002e16: JUMP
00002e17: JUMPDEST
00002e18: POP
00002e19: PUSH1 0x40
00002e1b: MLOAD
00002e1c: PUSH1 0x1f
00002e1e: NOT
00002e1f: PUSH1 0x1f
00002e21: DUP6
00002e22: ADD
00002e23: DUP2
00002e24: AND
00002e25: PUSH1 0x3f
00002e27: ADD
00002e28: AND
00002e29: DUP2
00002e2a: ADD
00002e2b: DUP2
00002e2c: DUP2
00002e2d: LT
00002e2e: PUSH8 0xffffffffffffffff
00002e37: DUP3
00002e38: GT
00002e39: OR
00002e3a: ISZERO
00002e3b: PUSH2 0x2e46
00002e3e: JUMPI
00002e3f: PUSH2 0x2e46
00002e42: PUSH2 0x2de6
00002e45: JUMP
00002e46: JUMPDEST
00002e47: PUSH1 0x40
00002e49: MSTORE
00002e4a: DUP4
00002e4b: DUP2
00002e4c: MSTORE
00002e4d: SWAP1
00002e4e: POP
00002e4f: DUP1
00002e50: DUP3
00002e51: DUP5
00002e52: ADD
00002e53: DUP6
00002e54: LT
00002e55: ISZERO
00002e56: PUSH2 0x2e5e
00002e59: JUMPI
00002e5a: PUSH1 0x00
00002e5c: DUP1
00002e5d: REVERT
00002e5e: JUMPDEST
00002e5f: DUP4
00002e60: DUP4
00002e61: PUSH1 0x20
00002e63: DUP4
00002e64: ADD
00002e65: CALLDATACOPY
00002e66: PUSH1 0x00
00002e68: PUSH1 0x20
00002e6a: DUP6
00002e6b: DUP4
00002e6c: ADD
00002e6d: ADD
00002e6e: MSTORE
00002e6f: POP
00002e70: SWAP4
00002e71: SWAP3
00002e72: POP
00002e73: POP
00002e74: POP
00002e75: JUMP
00002e76: JUMPDEST
00002e77: PUSH1 0x00
00002e79: DUP3
00002e7a: PUSH1 0x1f
00002e7c: DUP4
00002e7d: ADD
00002e7e: SLT
00002e7f: PUSH2 0x2e87
00002e82: JUMPI
00002e83: PUSH1 0x00
00002e85: DUP1
00002e86: REVERT
00002e87: JUMPDEST
00002e88: PUSH2 0x0a4f
00002e8b: DUP4
00002e8c: DUP4
00002e8d: CALLDATALOAD
00002e8e: PUSH1 0x20
00002e90: DUP6
00002e91: ADD
00002e92: PUSH2 0x2dfc
00002e95: JUMP
00002e96: JUMPDEST
00002e97: PUSH1 0x00
00002e99: DUP1
00002e9a: PUSH1 0x00
00002e9c: DUP1
00002e9d: PUSH1 0x00
00002e9f: DUP1
00002ea0: PUSH1 0xc0
00002ea2: DUP8
00002ea3: DUP10
00002ea4: SUB
00002ea5: SLT
00002ea6: ISZERO
00002ea7: PUSH2 0x2eaf
00002eaa: JUMPI
00002eab: PUSH1 0x00
00002ead: DUP1
00002eae: REVERT
00002eaf: JUMPDEST
00002eb0: DUP7
00002eb1: CALLDATALOAD
00002eb2: PUSH2 0x2eba
00002eb5: DUP2
00002eb6: PUSH2 0x2d64
00002eb9: JUMP
00002eba: JUMPDEST
00002ebb: SWAP6
00002ebc: POP
00002ebd: PUSH1 0x20
00002ebf: DUP8
00002ec0: ADD
00002ec1: CALLDATALOAD
00002ec2: PUSH2 0x2eca
00002ec5: DUP2
00002ec6: PUSH2 0x2d64
00002ec9: JUMP
00002eca: JUMPDEST
00002ecb: SWAP5
00002ecc: POP
00002ecd: PUSH1 0x40
00002ecf: DUP8
00002ed0: ADD
00002ed1: CALLDATALOAD
00002ed2: PUSH2 0x2eda
00002ed5: DUP2
00002ed6: PUSH2 0x2d64
00002ed9: JUMP
00002eda: JUMPDEST
00002edb: SWAP4
00002edc: POP
00002edd: PUSH1 0x60
00002edf: DUP8
00002ee0: ADD
00002ee1: CALLDATALOAD
00002ee2: PUSH2 0x2eea
00002ee5: DUP2
00002ee6: PUSH2 0x2d64
00002ee9: JUMP
00002eea: JUMPDEST
00002eeb: SWAP3
00002eec: POP
00002eed: PUSH1 0x80
00002eef: DUP8
00002ef0: ADD
00002ef1: CALLDATALOAD
00002ef2: PUSH8 0xffffffffffffffff
00002efb: DUP2
00002efc: GT
00002efd: ISZERO
00002efe: PUSH2 0x2f06
00002f01: JUMPI
00002f02: PUSH1 0x00
00002f04: DUP1
00002f05: REVERT
00002f06: JUMPDEST
00002f07: PUSH2 0x2f12
00002f0a: DUP10
00002f0b: DUP3
00002f0c: DUP11
00002f0d: ADD
00002f0e: PUSH2 0x2e76
00002f11: JUMP
00002f12: JUMPDEST
00002f13: SWAP3
00002f14: POP
00002f15: POP
00002f16: PUSH1 0xa0
00002f18: DUP8
00002f19: ADD
00002f1a: CALLDATALOAD
00002f1b: PUSH8 0xffffffffffffffff
00002f24: DUP2
00002f25: GT
00002f26: ISZERO
00002f27: PUSH2 0x2f2f
00002f2a: JUMPI
00002f2b: PUSH1 0x00
00002f2d: DUP1
00002f2e: REVERT
00002f2f: JUMPDEST
00002f30: PUSH2 0x2f3b
00002f33: DUP10
00002f34: DUP3
00002f35: DUP11
00002f36: ADD
00002f37: PUSH2 0x2e76
00002f3a: JUMP
00002f3b: JUMPDEST
00002f3c: SWAP2
00002f3d: POP
00002f3e: POP
00002f3f: SWAP3
00002f40: SWAP6
00002f41: POP
00002f42: SWAP3
00002f43: SWAP6
00002f44: POP
00002f45: SWAP3
00002f46: SWAP6
00002f47: JUMP
00002f48: JUMPDEST
00002f49: PUSH1 0x00
00002f4b: PUSH1 0x20
00002f4d: DUP3
00002f4e: DUP5
00002f4f: SUB
00002f50: SLT
00002f51: ISZERO
00002f52: PUSH2 0x2f5a
00002f55: JUMPI
00002f56: PUSH1 0x00
00002f58: DUP1
00002f59: REVERT
00002f5a: JUMPDEST
00002f5b: DUP2
00002f5c: CALLDATALOAD
00002f5d: PUSH2 0x0a4f
00002f60: DUP2
00002f61: PUSH2 0x2d64
00002f64: JUMP
00002f65: JUMPDEST
00002f66: PUSH1 0x00
00002f68: DUP1
00002f69: PUSH1 0x40
00002f6b: DUP4
00002f6c: DUP6
00002f6d: SUB
00002f6e: SLT
00002f6f: ISZERO
00002f70: PUSH2 0x2f78
00002f73: JUMPI
00002f74: PUSH1 0x00
00002f76: DUP1
00002f77: REVERT
00002f78: JUMPDEST
00002f79: DUP3
00002f7a: CALLDATALOAD
00002f7b: PUSH2 0x2f83
00002f7e: DUP2
00002f7f: PUSH2 0x2d64
00002f82: JUMP
00002f83: JUMPDEST
00002f84: SWAP2
00002f85: POP
00002f86: PUSH1 0x20
00002f88: DUP4
00002f89: ADD
00002f8a: CALLDATALOAD
00002f8b: PUSH8 0xffffffffffffffff
00002f94: DUP2
00002f95: GT
00002f96: ISZERO
00002f97: PUSH2 0x2f9f
00002f9a: JUMPI
00002f9b: PUSH1 0x00
00002f9d: DUP1
00002f9e: REVERT
00002f9f: JUMPDEST
00002fa0: DUP4
00002fa1: ADD
00002fa2: PUSH1 0x1f
00002fa4: DUP2
00002fa5: ADD
00002fa6: DUP6
00002fa7: SGT
00002fa8: PUSH2 0x2fb0
00002fab: JUMPI
00002fac: PUSH1 0x00
00002fae: DUP1
00002faf: REVERT
00002fb0: JUMPDEST
00002fb1: PUSH2 0x2fbf
00002fb4: DUP6
00002fb5: DUP3
00002fb6: CALLDATALOAD
00002fb7: PUSH1 0x20
00002fb9: DUP5
00002fba: ADD
00002fbb: PUSH2 0x2dfc
00002fbe: JUMP
00002fbf: JUMPDEST
00002fc0: SWAP2
00002fc1: POP
00002fc2: POP
00002fc3: SWAP3
00002fc4: POP
00002fc5: SWAP3
00002fc6: SWAP1
00002fc7: POP
00002fc8: JUMP
00002fc9: JUMPDEST
00002fca: PUSH1 0x00
00002fcc: DUP1
00002fcd: PUSH1 0x40
00002fcf: DUP4
00002fd0: DUP6
00002fd1: SUB
00002fd2: SLT
00002fd3: ISZERO
00002fd4: PUSH2 0x2fdc
00002fd7: JUMPI
00002fd8: PUSH1 0x00
00002fda: DUP1
00002fdb: REVERT
00002fdc: JUMPDEST
00002fdd: DUP3
00002fde: CALLDATALOAD
00002fdf: SWAP2
00002fe0: POP
00002fe1: PUSH1 0x20
00002fe3: DUP4
00002fe4: ADD
00002fe5: CALLDATALOAD
00002fe6: PUSH2 0x2fee
00002fe9: DUP2
00002fea: PUSH2 0x2d64
00002fed: JUMP
00002fee: JUMPDEST
00002fef: DUP1
00002ff0: SWAP2
00002ff1: POP
00002ff2: POP
00002ff3: SWAP3
00002ff4: POP
00002ff5: SWAP3
00002ff6: SWAP1
00002ff7: POP
00002ff8: JUMP
00002ff9: JUMPDEST
00002ffa: DUP1
00002ffb: ISZERO
00002ffc: ISZERO
00002ffd: DUP2
00002ffe: EQ
00002fff: PUSH2 0x0c52
00003002: JUMPI
00003003: PUSH1 0x00
00003005: DUP1
00003006: REVERT
00003007: JUMPDEST
00003008: PUSH1 0x00
0000300a: PUSH1 0x20
0000300c: DUP3
0000300d: DUP5
0000300e: SUB
0000300f: SLT
00003010: ISZERO
00003011: PUSH2 0x3019
00003014: JUMPI
00003015: PUSH1 0x00
00003017: DUP1
00003018: REVERT
00003019: JUMPDEST
0000301a: DUP2
0000301b: CALLDATALOAD
0000301c: PUSH2 0x0a4f
0000301f: DUP2
00003020: PUSH2 0x2ff9
00003023: JUMP
00003024: JUMPDEST
00003025: PUSH1 0x00
00003027: DUP1
00003028: PUSH1 0x00
0000302a: PUSH1 0x60
0000302c: DUP5
0000302d: DUP7
0000302e: SUB
0000302f: SLT
00003030: ISZERO
00003031: PUSH2 0x3039
00003034: JUMPI
00003035: PUSH1 0x00
00003037: DUP1
00003038: REVERT
00003039: JUMPDEST
0000303a: DUP4
0000303b: CALLDATALOAD
0000303c: SWAP3
0000303d: POP
0000303e: PUSH1 0x20
00003040: DUP5
00003041: ADD
00003042: CALLDATALOAD
00003043: PUSH2 0x304b
00003046: DUP2
00003047: PUSH2 0x2d64
0000304a: JUMP
0000304b: JUMPDEST
0000304c: SWAP2
0000304d: POP
0000304e: PUSH1 0x40
00003050: DUP5
00003051: ADD
00003052: CALLDATALOAD
00003053: PUSH2 0x305b
00003056: DUP2
00003057: PUSH2 0x2d64
0000305a: JUMP
0000305b: JUMPDEST
0000305c: DUP1
0000305d: SWAP2
0000305e: POP
0000305f: POP
00003060: SWAP3
00003061: POP
00003062: SWAP3
00003063: POP
00003064: SWAP3
00003065: JUMP
00003066: JUMPDEST
00003067: PUSH1 0x00
00003069: DUP1
0000306a: PUSH1 0x00
0000306c: PUSH1 0x60
0000306e: DUP5
0000306f: DUP7
00003070: SUB
00003071: SLT
00003072: ISZERO
00003073: PUSH2 0x307b
00003076: JUMPI
00003077: PUSH1 0x00
00003079: DUP1
0000307a: REVERT
0000307b: JUMPDEST
0000307c: DUP4
0000307d: CALLDATALOAD
0000307e: SWAP3
0000307f: POP
00003080: PUSH1 0x20
00003082: DUP5
00003083: ADD
00003084: CALLDATALOAD
00003085: SWAP2
00003086: POP
00003087: PUSH1 0x40
00003089: DUP5
0000308a: ADD
0000308b: CALLDATALOAD
0000308c: PUSH2 0x305b
0000308f: DUP2
00003090: PUSH2 0x2ff9
00003093: JUMP
00003094: JUMPDEST
00003095: PUSH1 0x00
00003097: DUP1
00003098: PUSH1 0x40
0000309a: DUP4
0000309b: DUP6
0000309c: SUB
0000309d: SLT
0000309e: ISZERO
0000309f: PUSH2 0x30a7
000030a2: JUMPI
000030a3: PUSH1 0x00
000030a5: DUP1
000030a6: REVERT
000030a7: JUMPDEST
000030a8: DUP3
000030a9: CALLDATALOAD
000030aa: PUSH2 0x30b2
000030ad: DUP2
000030ae: PUSH2 0x2d64
000030b1: JUMP
000030b2: JUMPDEST
000030b3: SWAP2
000030b4: POP
000030b5: PUSH1 0x20
000030b7: DUP4
000030b8: ADD
000030b9: CALLDATALOAD
000030ba: PUSH2 0x2fee
000030bd: DUP2
000030be: PUSH2 0x2d64
000030c1: JUMP
000030c2: JUMPDEST
000030c3: PUSH1 0x01
000030c5: DUP2
000030c6: DUP2
000030c7: SHR
000030c8: SWAP1
000030c9: DUP3
000030ca: AND
000030cb: DUP1
000030cc: PUSH2 0x30d6
000030cf: JUMPI
000030d0: PUSH1 0x7f
000030d2: DUP3
000030d3: AND
000030d4: SWAP2
000030d5: POP
000030d6: JUMPDEST
000030d7: PUSH1 0x20
000030d9: DUP3
000030da: LT
000030db: DUP2
000030dc: SUB
000030dd: PUSH2 0x30f6
000030e0: JUMPI
000030e1: PUSH4 0x4e487b71
000030e6: PUSH1 0xe0
000030e8: SHL
000030e9: PUSH1 0x00
000030eb: MSTORE
000030ec: PUSH1 0x22
000030ee: PUSH1 0x04
000030f0: MSTORE
000030f1: PUSH1 0x24
000030f3: PUSH1 0x00
000030f5: REVERT
000030f6: JUMPDEST
000030f7: POP
000030f8: SWAP2
000030f9: SWAP1
000030fa: POP
000030fb: JUMP
000030fc: JUMPDEST
000030fd: PUSH4 0x4e487b71
00003102: PUSH1 0xe0
00003104: SHL
00003105: PUSH1 0x00
00003107: MSTORE
00003108: PUSH1 0x11
0000310a: PUSH1 0x04
0000310c: MSTORE
0000310d: PUSH1 0x24
0000310f: PUSH1 0x00
00003111: REVERT
00003112: JUMPDEST
00003113: PUSH1 0xff
00003115: DUP2
00003116: DUP2
00003117: AND
00003118: DUP4
00003119: DUP3
0000311a: AND
0000311b: ADD
0000311c: SWAP1
0000311d: DUP2
0000311e: GT
0000311f: ISZERO
00003120: PUSH2 0x0a05
00003123: JUMPI
00003124: PUSH2 0x0a05
00003127: PUSH2 0x30fc
0000312a: JUMP
0000312b: JUMPDEST
0000312c: DUP2
0000312d: DUP2
0000312e: SUB
0000312f: DUP2
00003130: DUP2
00003131: GT
00003132: ISZERO
00003133: PUSH2 0x0a05
00003136: JUMPI
00003137: PUSH2 0x0a05
0000313a: PUSH2 0x30fc
0000313d: JUMP
0000313e: JUMPDEST
0000313f: PUSH8 0xffffffffffffffff
00003148: SWAP3
00003149: SWAP1
0000314a: SWAP3
0000314b: AND
0000314c: DUP3
0000314d: MSTORE
0000314e: PUSH1 0x01
00003150: PUSH1 0x01
00003152: PUSH1 0xa0
00003154: SHL
00003155: SUB
00003156: AND
00003157: PUSH1 0x20
00003159: DUP3
0000315a: ADD
0000315b: MSTORE
0000315c: PUSH1 0x40
0000315e: ADD
0000315f: SWAP1
00003160: JUMP
00003161: JUMPDEST
00003162: PUSH1 0x00
00003164: DUP1
00003165: PUSH1 0x40
00003167: DUP4
00003168: DUP6
00003169: SUB
0000316a: SLT
0000316b: ISZERO
0000316c: PUSH2 0x3174
0000316f: JUMPI
00003170: PUSH1 0x00
00003172: DUP1
00003173: REVERT
00003174: JUMPDEST
00003175: DUP3
00003176: MLOAD
00003177: PUSH2 0x317f
0000317a: DUP2
0000317b: PUSH2 0x2d64
0000317e: JUMP
0000317f: JUMPDEST
00003180: PUSH1 0x20
00003182: SWAP4
00003183: SWAP1
00003184: SWAP4
00003185: ADD
00003186: MLOAD
00003187: SWAP3
00003188: SWAP5
00003189: SWAP3
0000318a: SWAP4
0000318b: POP
0000318c: POP
0000318d: POP
0000318e: JUMP
0000318f: JUMPDEST
00003190: PUSH1 0x01
00003192: PUSH1 0x01
00003194: PUSH1 0xa0
00003196: SHL
00003197: SUB
00003198: SWAP4
00003199: SWAP1
0000319a: SWAP4
0000319b: AND
0000319c: DUP4
0000319d: MSTORE
0000319e: PUSH1 0x20
000031a0: DUP4
000031a1: ADD
000031a2: SWAP2
000031a3: SWAP1
000031a4: SWAP2
000031a5: MSTORE
000031a6: PUSH1 0x40
000031a8: DUP3
000031a9: ADD
000031aa: MSTORE
000031ab: PUSH1 0x60
000031ad: ADD
000031ae: SWAP1
000031af: JUMP
000031b0: JUMPDEST
000031b1: DUP1
000031b2: DUP3
000031b3: ADD
000031b4: DUP1
000031b5: DUP3
000031b6: GT
000031b7: ISZERO
000031b8: PUSH2 0x0a05
000031bb: JUMPI
000031bc: PUSH2 0x0a05
000031bf: PUSH2 0x30fc
000031c2: JUMP
000031c3: JUMPDEST
000031c4: PUSH1 0x01
000031c6: DUP2
000031c7: JUMPDEST
000031c8: PUSH1 0x01
000031ca: DUP5
000031cb: GT
000031cc: ISZERO
000031cd: PUSH2 0x31fe
000031d0: JUMPI
000031d1: DUP1
000031d2: DUP6
000031d3: DIV
000031d4: DUP2
000031d5: GT
000031d6: ISZERO
000031d7: PUSH2 0x31e2
000031da: JUMPI
000031db: PUSH2 0x31e2
000031de: PUSH2 0x30fc
000031e1: JUMP
000031e2: JUMPDEST
000031e3: PUSH1 0x01
000031e5: DUP5
000031e6: AND
000031e7: ISZERO
000031e8: PUSH2 0x31f0
000031eb: JUMPI
000031ec: SWAP1
000031ed: DUP2
000031ee: MUL
000031ef: SWAP1
000031f0: JUMPDEST
000031f1: PUSH1 0x01
000031f3: SWAP4
000031f4: SWAP1
000031f5: SWAP4
000031f6: SHR
000031f7: SWAP3
000031f8: DUP1
000031f9: MUL
000031fa: PUSH2 0x31c7
000031fd: JUMP
000031fe: JUMPDEST
000031ff: SWAP4
00003200: POP
00003201: SWAP4
00003202: SWAP2
00003203: POP
00003204: POP
00003205: JUMP
00003206: JUMPDEST
00003207: PUSH1 0x00
00003209: DUP3
0000320a: PUSH2 0x3215
0000320d: JUMPI
0000320e: POP
0000320f: PUSH1 0x01
00003211: PUSH2 0x0a05
00003214: JUMP
00003215: JUMPDEST
00003216: DUP2
00003217: PUSH2 0x3222
0000321a: JUMPI
0000321b: POP
0000321c: PUSH1 0x00
0000321e: PUSH2 0x0a05
00003221: JUMP
00003222: JUMPDEST
00003223: DUP2
00003224: PUSH1 0x01
00003226: DUP2
00003227: EQ
00003228: PUSH2 0x3238
0000322b: JUMPI
0000322c: PUSH1 0x02
0000322e: DUP2
0000322f: EQ
00003230: PUSH2 0x3242
00003233: JUMPI
00003234: PUSH2 0x325e
00003237: JUMP
00003238: JUMPDEST
00003239: PUSH1 0x01
0000323b: SWAP2
0000323c: POP
0000323d: POP
0000323e: PUSH2 0x0a05
00003241: JUMP
00003242: JUMPDEST
00003243: PUSH1 0xff
00003245: DUP5
00003246: GT
00003247: ISZERO
00003248: PUSH2 0x3253
0000324b: JUMPI
0000324c: PUSH2 0x3253
0000324f: PUSH2 0x30fc
00003252: JUMP
00003253: JUMPDEST
00003254: POP
00003255: POP
00003256: PUSH1 0x01
00003258: DUP3
00003259: SHL
0000325a: PUSH2 0x0a05
0000325d: JUMP
0000325e: JUMPDEST
0000325f: POP
00003260: PUSH1 0x20
00003262: DUP4
00003263: LT
00003264: PUSH2 0x0133
00003267: DUP4
00003268: LT
00003269: AND
0000326a: PUSH1 0x4e
0000326c: DUP5
0000326d: LT
0000326e: PUSH1 0x0b
00003270: DUP5
00003271: LT
00003272: AND
00003273: OR
00003274: ISZERO
00003275: PUSH2 0x3281
00003278: JUMPI
00003279: POP
0000327a: DUP2
0000327b: DUP2
0000327c: EXP
0000327d: PUSH2 0x0a05
00003280: JUMP
00003281: JUMPDEST
00003282: PUSH2 0x328e
00003285: PUSH1 0x00
00003287: NOT
00003288: DUP5
00003289: DUP5
0000328a: PUSH2 0x31c3
0000328d: JUMP
0000328e: JUMPDEST
0000328f: DUP1
00003290: PUSH1 0x00
00003292: NOT
00003293: DIV
00003294: DUP3
00003295: GT
00003296: ISZERO
00003297: PUSH2 0x32a2
0000329a: JUMPI
0000329b: PUSH2 0x32a2
0000329e: PUSH2 0x30fc
000032a1: JUMP
000032a2: JUMPDEST
000032a3: MUL
000032a4: SWAP4
000032a5: SWAP3
000032a6: POP
000032a7: POP
000032a8: POP
000032a9: JUMP
000032aa: JUMPDEST
000032ab: PUSH1 0x00
000032ad: PUSH2 0x0a4f
000032b0: PUSH1 0xff
000032b2: DUP5
000032b3: AND
000032b4: DUP4
000032b5: PUSH2 0x3206
000032b8: JUMP
000032b9: JUMPDEST
000032ba: PUSH1 0x00
000032bc: PUSH1 0x20
000032be: DUP3
000032bf: DUP5
000032c0: SUB
000032c1: SLT
000032c2: ISZERO
000032c3: PUSH2 0x32cb
000032c6: JUMPI
000032c7: PUSH1 0x00
000032c9: DUP1
000032ca: REVERT
000032cb: JUMPDEST
000032cc: POP
000032cd: MLOAD
000032ce: SWAP2
000032cf: SWAP1
000032d0: POP
000032d1: JUMP
000032d2: JUMPDEST
000032d3: PUSH1 0x00
000032d5: PUSH1 0x20
000032d7: DUP3
000032d8: DUP5
000032d9: SUB
000032da: SLT
000032db: ISZERO
000032dc: PUSH2 0x32e4
000032df: JUMPI
000032e0: PUSH1 0x00
000032e2: DUP1
000032e3: REVERT
000032e4: JUMPDEST
000032e5: DUP2
000032e6: MLOAD
000032e7: PUSH2 0x0a4f
000032ea: DUP2
000032eb: PUSH2 0x2d64
000032ee: JUMP
000032ef: JUMPDEST
000032f0: DUP1
000032f1: DUP3
000032f2: MUL
000032f3: DUP2
000032f4: ISZERO
000032f5: DUP3
000032f6: DUP3
000032f7: DIV
000032f8: DUP5
000032f9: EQ
000032fa: OR
000032fb: PUSH2 0x0a05
000032fe: JUMPI
000032ff: PUSH2 0x0a05
00003302: PUSH2 0x30fc
00003305: JUMP
00003306: JUMPDEST
00003307: PUSH4 0x4e487b71
0000330c: PUSH1 0xe0
0000330e: SHL
0000330f: PUSH1 0x00
00003311: MSTORE
00003312: PUSH1 0x12
00003314: PUSH1 0x04
00003316: MSTORE
00003317: PUSH1 0x24
00003319: PUSH1 0x00
0000331b: REVERT
0000331c: JUMPDEST
0000331d: PUSH1 0x00
0000331f: DUP3
00003320: PUSH2 0x332b
00003323: JUMPI
00003324: PUSH2 0x332b
00003327: PUSH2 0x3306
0000332a: JUMP
0000332b: JUMPDEST
0000332c: POP
0000332d: DIV
0000332e: SWAP1
0000332f: JUMP
00003330: JUMPDEST
00003331: PUSH1 0x1f
00003333: DUP3
00003334: GT
00003335: ISZERO
00003336: PUSH2 0x1782
00003339: JUMPI
0000333a: DUP1
0000333b: PUSH1 0x00
0000333d: MSTORE
0000333e: PUSH1 0x20
00003340: PUSH1 0x00
00003342: KECCAK256
00003343: PUSH1 0x1f
00003345: DUP5
00003346: ADD
00003347: PUSH1 0x05
00003349: SHR
0000334a: DUP2
0000334b: ADD
0000334c: PUSH1 0x20
0000334e: DUP6
0000334f: LT
00003350: ISZERO
00003351: PUSH2 0x3357
00003354: JUMPI
00003355: POP
00003356: DUP1
00003357: JUMPDEST
00003358: PUSH1 0x1f
0000335a: DUP5
0000335b: ADD
0000335c: PUSH1 0x05
0000335e: SHR
0000335f: DUP3
00003360: ADD
00003361: SWAP2
00003362: POP
00003363: JUMPDEST
00003364: DUP2
00003365: DUP2
00003366: LT
00003367: ISZERO
00003368: PUSH2 0x1c96
0000336b: JUMPI
0000336c: PUSH1 0x00
0000336e: DUP2
0000336f: SSTORE
00003370: PUSH1 0x01
00003372: ADD
00003373: PUSH2 0x3363
00003376: JUMP
00003377: JUMPDEST
00003378: DUP2
00003379: MLOAD
0000337a: PUSH8 0xffffffffffffffff
00003383: DUP2
00003384: GT
00003385: ISZERO
00003386: PUSH2 0x3391
00003389: JUMPI
0000338a: PUSH2 0x3391
0000338d: PUSH2 0x2de6
00003390: JUMP
00003391: JUMPDEST
00003392: PUSH2 0x33a5
00003395: DUP2
00003396: PUSH2 0x339f
00003399: DUP5
0000339a: SLOAD
0000339b: PUSH2 0x30c2
0000339e: JUMP
0000339f: JUMPDEST
000033a0: DUP5
000033a1: PUSH2 0x3330
000033a4: JUMP
000033a5: JUMPDEST
000033a6: PUSH1 0x20
000033a8: PUSH1 0x1f
000033aa: DUP3
000033ab: GT
000033ac: PUSH1 0x01
000033ae: DUP2
000033af: EQ
000033b0: PUSH2 0x33d9
000033b3: JUMPI
000033b4: PUSH1 0x00
000033b6: DUP4
000033b7: ISZERO
000033b8: PUSH2 0x33c1
000033bb: JUMPI
000033bc: POP
000033bd: DUP5
000033be: DUP3
000033bf: ADD
000033c0: MLOAD
000033c1: JUMPDEST
000033c2: PUSH1 0x00
000033c4: NOT
000033c5: PUSH1 0x03
000033c7: DUP6
000033c8: SWAP1
000033c9: SHL
000033ca: SHR
000033cb: NOT
000033cc: AND
000033cd: PUSH1 0x01
000033cf: DUP5
000033d0: SWAP1
000033d1: SHL
000033d2: OR
000033d3: DUP5
000033d4: SSTORE
000033d5: PUSH2 0x1c96
000033d8: JUMP
000033d9: JUMPDEST
000033da: PUSH1 0x00
000033dc: DUP5
000033dd: DUP2
000033de: MSTORE
000033df: PUSH1 0x20
000033e1: DUP2
000033e2: KECCAK256
000033e3: PUSH1 0x1f
000033e5: NOT
000033e6: DUP6
000033e7: AND
000033e8: SWAP2
000033e9: JUMPDEST
000033ea: DUP3
000033eb: DUP2
000033ec: LT
000033ed: ISZERO
000033ee: PUSH2 0x3409
000033f1: JUMPI
000033f2: DUP8
000033f3: DUP6
000033f4: ADD
000033f5: MLOAD
000033f6: DUP3
000033f7: SSTORE
000033f8: PUSH1 0x20
000033fa: SWAP5
000033fb: DUP6
000033fc: ADD
000033fd: SWAP5
000033fe: PUSH1 0x01
00003400: SWAP1
00003401: SWAP3
00003402: ADD
00003403: SWAP2
00003404: ADD
00003405: PUSH2 0x33e9
00003408: JUMP
00003409: JUMPDEST
0000340a: POP
0000340b: DUP5
0000340c: DUP3
0000340d: LT
0000340e: ISZERO
0000340f: PUSH2 0x3427
00003412: JUMPI
00003413: DUP7
00003414: DUP5
00003415: ADD
00003416: MLOAD
00003417: PUSH1 0x00
00003419: NOT
0000341a: PUSH1 0x03
0000341c: DUP8
0000341d: SWAP1
0000341e: SHL
0000341f: PUSH1 0xf8
00003421: AND
00003422: SHR
00003423: NOT
00003424: AND
00003425: DUP2
00003426: SSTORE
00003427: JUMPDEST
00003428: POP
00003429: POP
0000342a: POP
0000342b: POP
0000342c: PUSH1 0x01
0000342e: SWAP1
0000342f: DUP2
00003430: SHL
00003431: ADD
00003432: SWAP1
00003433: SSTORE
00003434: POP
00003435: JUMP
00003436: JUMPDEST
00003437: PUSH1 0x00
00003439: PUSH1 0x20
0000343b: DUP3
0000343c: DUP5
0000343d: SUB
0000343e: SLT
0000343f: ISZERO
00003440: PUSH2 0x3448
00003443: JUMPI
00003444: PUSH1 0x00
00003446: DUP1
00003447: REVERT
00003448: JUMPDEST
00003449: DUP2
0000344a: MLOAD
0000344b: PUSH2 0x0a4f
0000344e: DUP2
0000344f: PUSH2 0x2ff9
00003452: JUMP
00003453: JUMPDEST
00003454: PUSH4 0x4e487b71
00003459: PUSH1 0xe0
0000345b: SHL
0000345c: PUSH1 0x00
0000345e: MSTORE
0000345f: PUSH1 0x21
00003461: PUSH1 0x04
00003463: MSTORE
00003464: PUSH1 0x24
00003466: PUSH1 0x00
00003468: REVERT
00003469: JUMPDEST
0000346a: PUSH1 0x00
0000346c: PUSH1 0xff
0000346e: DUP4
0000346f: AND
00003470: DUP1
00003471: PUSH2 0x347c
00003474: JUMPI
00003475: PUSH2 0x347c
00003478: PUSH2 0x3306
0000347b: JUMP
0000347c: JUMPDEST
0000347d: DUP1
0000347e: PUSH1 0xff
00003480: DUP5
00003481: AND
00003482: MOD
00003483: SWAP2
00003484: POP
00003485: POP
00003486: SWAP3
00003487: SWAP2
00003488: POP
00003489: POP
0000348a: JUMP
0000348b: JUMPDEST
0000348c: PUSH1 0x00
0000348e: DUP3
0000348f: MLOAD
00003490: PUSH2 0x349d
00003493: DUP2
00003494: DUP5
00003495: PUSH1 0x20
00003497: DUP8
00003498: ADD
00003499: PUSH2 0x2cf4
0000349c: JUMP
0000349d: JUMPDEST
0000349e: SWAP2
0000349f: SWAP1
000034a0: SWAP2
000034a1: ADD
000034a2: SWAP3
000034a3: SWAP2
000034a4: POP
000034a5: POP
000034a6: JUMP
000034a7: INVALID
000034a8: MSTORE
000034a9: UNKNOWN(0xC6)
000034aa: ORIGIN
000034ab: SELFBALANCE
000034ac: UNKNOWN(0xE1)
000034ad: DELEGATECALL
000034ae: PUSH30 0xb19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1
000034cd: DELEGATECALL
000034ce: PUSH30 0xb19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02360894a13b
000034ed: LOG1
000034ee: LOG3
000034ef: UNKNOWN(0x21)
000034f0: MOD
000034f1: PUSH8 0xc828492db98dca3e
000034fa: KECCAK256
000034fb: PUSH23 0xcc3735a920a3ca505d382bbc9b779b17422d0df9222301
00003513: DUP12
00003514: ORIGIN
00003515: UNKNOWN(0xB4)
00003516: UNKNOWN(0xD1)
00003517: STATICCALL
00003518: CHAINID
00003519: UNKNOWN(0xE0)
0000351a: PUSH18 0x723d6817e2486d003becc55f00a264697066
0000352d: PUSH20 0x58221220877857600ee00a88f25a1c4f1f14eefb
00003542: UNKNOWN(0xE8)
00003543: JUMPI
00003544: PC
00003545: SIGNEXTEND
00003546: UNKNOWN(0xD6)
00003547: SWAP9
00003548: PUSH14 0xac523a7ec5dfbd4a7b64736f6c63
00003557: NUMBER
00003558: STOP
00003559: ADDMOD
0000355a: BYTE
0000355b: STOP
0000355c: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xef8b30f7",
            "selector": "0xef8b30f7",
            "calldata_variants": [
                "0xef8b30f7",
                "0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf14faf6f",
            "selector": "0xf14faf6f",
            "calldata_variants": [
                "0xf14faf6f",
                "0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4b70990",
            "selector": "0xf4b70990",
            "calldata_variants": [
                "0xf4b70990",
                "0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd905777e",
            "selector": "0xd905777e",
            "calldata_variants": [
                "0xd905777e",
                "0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe42d19dc",
            "selector": "0xe42d19dc",
            "calldata_variants": [
                "0xe42d19dc",
                "0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba087652",
            "selector": "0xba087652",
            "calldata_variants": [
                "0xba087652",
                "0xba0876520000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 13482,
            "type": "tx_origin_used"
        },
        {
            "pc": 13588,
            "type": "tx_origin_used"
        }
    ]
}
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0xe45c971654a4195c79be60b2489b1793787ebc273bd5a1ec707eff182b03691a
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0xe45c971654a4195c79be60b2489b1793787ebc273bd5a1ec707eff182b03691a",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xef8b30f7",
            "selector": "0xef8b30f7",
            "calldata_variants": [
                "0xef8b30f7",
                "0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf14faf6f",
            "selector": "0xf14faf6f",
            "calldata_variants": [
                "0xf14faf6f",
                "0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4b70990",
            "selector": "0xf4b70990",
            "calldata_variants": [
                "0xf4b70990",
                "0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd905777e",
            "selector": "0xd905777e",
            "calldata_variants": [
                "0xd905777e",
                "0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe42d19dc",
            "selector": "0xe42d19dc",
            "calldata_variants": [
                "0xe42d19dc",
                "0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba087652",
            "selector": "0xba087652",
            "calldata_variants": [
                "0xba087652",
                "0xba0876520000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 11133,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        },
        {
            "pc": 13485,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        },
        {
            "pc": 13517,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 13482,
            "type": "tx_origin_used"
        },
        {
            "pc": 13588,
            "type": "tx_origin_used"
        }
    ],
    "delegatecall_count": 3,
    "untrusted_delegatecall_count": 3
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 3
}
medium access_control codex AccessManager execution delays are bypassed for PerpManager/Vault privileged actions 75 no
view
evidence_json
{
    "evidence": "`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.",
    "locations": [
        "contracts/contracts/admin/PerpManager.sol:148",
        "contracts/contracts/admin/PerpManager.sol:153",
        "contracts/contracts/vaults/WasabiVault.sol:104",
        "contracts/contracts/vaults/WasabiVault.sol:110"
    ],
    "recommendation": "Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.",
    "exploit_scenario": "If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window."
}
medium other codex Strategy withdrawals do not reconcile actual assets returned, overstating total assets 75 no
view
evidence_json
{
    "evidence": "`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.",
    "locations": [
        "contracts/contracts/vaults/WasabiVault.sol:217",
        "contracts/contracts/vaults/WasabiVault.sol:228",
        "contracts/contracts/vaults/WasabiVault.sol:230"
    ],
    "recommendation": "Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.",
    "exploit_scenario": "If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts."
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90
call_targets: 0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a"
    ],
    "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": "0xef8b30f7",
            "selector": "0xef8b30f7",
            "calldata_variants": [
                "0xef8b30f7",
                "0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf14faf6f",
            "selector": "0xf14faf6f",
            "calldata_variants": [
                "0xf14faf6f",
                "0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4b70990",
            "selector": "0xf4b70990",
            "calldata_variants": [
                "0xf4b70990",
                "0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd905777e",
            "selector": "0xd905777e",
            "calldata_variants": [
                "0xd905777e",
                "0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe42d19dc",
            "selector": "0xe42d19dc",
            "calldata_variants": [
                "0xe42d19dc",
                "0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba087652",
            "selector": "0xba087652",
            "calldata_variants": [
                "0xba087652",
                "0xba0876520000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3469,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4174,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5384,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": [
        {
            "pc": 13482,
            "type": "tx_origin_used"
        },
        {
            "pc": 13588,
            "type": "tx_origin_used"
        }
    ]
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90
call_targets: 0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a"
    ],
    "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": "0xef8b30f7",
            "selector": "0xef8b30f7",
            "calldata_variants": [
                "0xef8b30f7",
                "0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf14faf6f",
            "selector": "0xf14faf6f",
            "calldata_variants": [
                "0xf14faf6f",
                "0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf4b70990",
            "selector": "0xf4b70990",
            "calldata_variants": [
                "0xf4b70990",
                "0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd905777e",
            "selector": "0xd905777e",
            "calldata_variants": [
                "0xd905777e",
                "0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdd62ed3e",
            "selector": "0xdd62ed3e",
            "calldata_variants": [
                "0xdd62ed3e",
                "0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe42d19dc",
            "selector": "0xe42d19dc",
            "calldata_variants": [
                "0xe42d19dc",
                "0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba087652",
            "selector": "0xba087652",
            "calldata_variants": [
                "0xba087652",
                "0xba0876520000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3469,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4174,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5384,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [
        {
            "pc": 13482,
            "type": "tx_origin_used"
        },
        {
            "pc": 13588,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 4
}
low math codex Interest fee shares are minted before interest is added, inflating fees 65 no
view
evidence_json
{
    "evidence": "`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.",
    "locations": [
        "contracts/contracts/vaults/WasabiVault.sol:184",
        "contracts/contracts/vaults/WasabiVault.sol:193",
        "contracts/contracts/vaults/WasabiVault.sol:351"
    ],
    "recommendation": "Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).",
    "exploit_scenario": "When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets."
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 21
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 12
}