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

Analysis Run

019d5666-ddb2-7138-a85b-4026ca2b3eec

failed
Chain ID
1
Address
Block Number
Created
Sat, Apr 4, 2026 2:51 AM
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
Untrusted CALL target/value reachable
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
42950 artifact.fetch complete 1 / 3 1 week ago
42951 proxy.resolve complete 1 / 3 1 week ago
42952 tool.cast_disasm complete 1 / 3 1 week ago
42953 analysis.bundle complete 1 / 3 1 week ago
42954 capability.graph complete 1 / 3 1 week ago
42955 detector.run complete 1 / 3 1 week ago
42956 validation.fork complete 1 / 3 1 week ago
43006 report.consolidate complete 1 / 6 1 week ago
43007 tool.slither failed 2 / 2 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
failed slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-p4ao9bao) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-p4ao9bao) 'forge' returned non-zero exit code 1 Error: Encountered invalid solc version in src/FrontrunMarket.sol: No solc version exists that matches the version requirement: =0.8.20 Traceback (most recent call last): File "/var/www/tripwire/.venv/bin/slither", line 10, in <module> sys.exit(main()) ~~~~^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main main_impl(all_detector_classes=detectors, all_printer_classes=printers) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl ) = process_all(filename, args, detector_classes, printer_classes) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all compilations = compile_all(target, **vars(args)) File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all compilations.append(CryticCompile(target, **kwargs)) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__ self._compile(**kwargs) ~~~~~~~~~~~~~^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile self._platform.compile(self, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile hardhat_like_parsing( ~~~~~~~~~~~~~~~~~~~~^ crytic_compile, str(self._target), build_directory, str(self._project_root) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing raise InvalidCompilation(txt) crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command? /tmp/slither-p4ao9bao/out/build-info is not a directory.
Attempts
2 / 2
Findings
0
Solc
View stderr
Traceback (most recent call last):
  File "/var/www/tripwire/worker/worker.py", line 198, in main
    payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
  File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
    return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 1084, in run
    stdout_text, stderr_text, result_json = _run_slither(
                                            ~~~~~~~~~~~~^
        workspace,
        ^^^^^^^^^^
    ...<4 lines>...
        target_path=target_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 958, in _run_slither
    raise RuntimeError(f"slither failed (exit {result.returncode}): {stderr_text or stdout_text}")
RuntimeError: slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-p4ao9bao)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-p4ao9bao)
'forge' returned non-zero exit code 1
Error: Encountered invalid solc version in src/FrontrunMarket.sol: No solc version exists that matches the version requirement: =0.8.20
Traceback (most recent call last):
  File "/var/www/tripwire/.venv/bin/slither", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main
    main_impl(all_detector_classes=detectors, all_printer_classes=printers)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
        ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all
    compilations = compile_all(target, **vars(args))
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all
    compilations.append(CryticCompile(target, **kwargs))
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__
    self._compile(**kwargs)
    ~~~~~~~~~~~~~^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile
    self._platform.compile(self, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile
    hardhat_like_parsing(
    ~~~~~~~~~~~~~~~~~~~~^
        crytic_compile, str(self._target), build_directory, str(self._project_root)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing
    raise InvalidCompilation(txt)
crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command?
/tmp/slither-p4ao9bao/out/build-info is not a directory.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
2
No findings?
no
Summary
Reviewed the full first-party bundle (`src/FrontrunMarket.sol`). Found two concrete loss-of-funds issues: escrow accounting breaks for fee-on-transfer collateral tokens, and the owner can de-whitelist an in-use token and withdraw user escrow.
View stdout
{"no_findings":false,"summary":"Reviewed the full first-party bundle (`src/FrontrunMarket.sol`). Found two concrete loss-of-funds issues: escrow accounting breaks for fee-on-transfer collateral tokens, and the owner can de-whitelist an in-use token and withdraw user escrow.","findings":[{"severity":"high","category":"other","title":"Fee-on-transfer collateral tokens let users over-withdraw from pooled escrow","exploit_scenario":"If the owner whitelists a deflationary or fee-on-transfer ERC20, `newOffer`/`fillOffer` record the nominal `value` or `collateral` even when the contract receives less. An attacker can create an offer with a token that takes 10% on inbound transfers, deposit 90 tokens while the contract books 100, then cancel the offer and withdraw 100 from the shared pool. Repeating this drains other users' balances for that token and leaves later settlements/refunds insolvent.","recommendation":"Reject non-standard collateral tokens, or account by actual balance deltas (`balanceAfter - balanceBefore`) instead of user-supplied nominal amounts. Store per-offer deposited amounts based on what was really received.","evidence":"`newOffer` and `fillOffer` call `safeTransferFrom` and then immediately store/order against the caller-provided `value`/`collateral` without checking the actual amount received. `cancelOffer`, `settleFilled`, and `settleCancelled` later pay out based on those nominal amounts from a shared per-token balance.","locations":["src/FrontrunMarket.sol:322","src/FrontrunMarket.sol:343","src/FrontrunMarket.sol:346","src/FrontrunMarket.sol:381","src/FrontrunMarket.sol:410","src/FrontrunMarket.sol:412","src/FrontrunMarket.sol:474","src/FrontrunMarket.sol:513","src/FrontrunMarket.sol:563"]},{"severity":"high","category":"access_control","title":"Owner can de-whitelist an active collateral token and withdraw funds backing live positions","exploit_scenario":"Any accepted collateral token can be toggled to `false` via `setAcceptedTokens`, after which `withdrawStuckToken` will transfer the contract's entire balance of that token to an arbitrary address. If there are still open offers or orders using that token, the owner or a compromised owner key can drain the escrowed funds and leave users unable to cancel or settle their positions.","recommendation":"Do not let rescue logic depend only on the current whitelist flag. Track outstanding liabilities per token and only allow withdrawing true surplus, or forbid de-whitelisting/rescuing any token while open offers/orders still reference it.","evidence":"`setAcceptedTokens` can remove any token from the whitelist with no check for outstanding exposure. `withdrawStuckToken` only requires `!acceptedTokens[_token]`, then transfers the full contract balance of that token even though open offers/orders continue to use pooled balances for refunds and settlements.","locations":["src/FrontrunMarket.sol:656","src/FrontrunMarket.sol:660","src/FrontrunMarket.sol:780","src/FrontrunMarket.sol:782","src/FrontrunMarket.sol:784"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-2v_62mvt
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d56b2-800c-7663-9f14-1c673215956b
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
  → Inspect workspace and locate first-party Solidity sources, starting with AUDIT_BUNDLE.txt
  • Review bundled contracts for exploitable issues in scope categories
  • Produce JSON audit findings with evidence and locations
exec
/bin/bash -lc "pwd && rg --files -g 'AUDIT_BUNDLE.txt' -g '*.sol' -g 'AGENTS.md'" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
/tmp/codex-2v_62mvt
src/FrontrunMarket.sol
AUDIT_BUNDLE.txt
lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol
lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol
lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol
lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol
lib/openzeppelin-contracts/contracts/proxy/utils/UUPSUpgradeable.sol
lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol
lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol
lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol
lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol
lib/openzeppelin-contracts/contracts/utils/Address.sol
lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol
lib/openzeppelin-contracts/contracts/access/IAccessControl.sol
lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol
lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol
lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol

exec
/bin/bash -lc 'wc -l AUDIT_BUNDLE.txt' in /tmp/codex-2v_62mvt
 succeeded in 0ms:
793 AUDIT_BUNDLE.txt

exec
/bin/bash -lc "sed -n '1,260p' AUDIT_BUNDLE.txt" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: src/FrontrunMarket.sol
================================================================================
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.20;

import '@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol';
import '@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol';
import '@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol';
import '@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol';
import '@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol';
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';

struct Token {
  address token;
  uint48 settleTime;
  uint48 settleDuration;
  uint152 settleRate; // number of token per point
  uint8 status; //
  uint256 minAmount;
}

struct Offer {
  uint8 offerType;
  bytes32 tokenId;
  address exToken;
  uint256 amount;
  uint256 value;
  uint256 collateral;
  uint256 filledAmount;
  uint8 status;
  address offeredBy;
  uint256 minAmount;
}

struct Order {
  uint256 offerId;
  uint256 amount;
  address seller;
  address buyer;
  uint8 status;
}

struct Config {
  uint256 pledgeRate;
  uint256 feeRefund;
  uint256 feeSettle;
  address feeWallet;
}

contract FrontrunMarket is Initializable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
  using SafeERC20 for IERC20;

  uint256 constant WEI6 = 10 ** 6;
  uint8 constant OFFER_BUY = 1;
  uint8 constant OFFER_SELL = 2;

  // Status
  // Offer status
  uint8 constant STATUS_OFFER_OPEN = 1;
  uint8 constant STATUS_OFFER_FILLED = 2;
  uint8 constant STATUS_OFFER_CANCELLED = 3;

  // Order Status
  uint8 constant STATUS_ORDER_OPEN = 1;
  uint8 constant STATUS_ORDER_SETTLE_FILLED = 2;
  uint8 constant STATUS_ORDER_SETTLE_CANCELLED = 3;
  uint8 constant STATUS_ORDER_CANCELLED = 4;

  // token status
  uint8 constant STATUS_TOKEN_ACTIVE = 1;
  uint8 constant STATUS_TOKEN_INACTIVE = 2;
  uint8 constant STATUS_TOKEN_SETTLE = 3;

  struct MarketStorage {
    mapping(address => bool) acceptedTokens;
    mapping(bytes32 => Token) tokens;
    mapping(uint256 => Offer) offers;
    uint256 lastOfferId;
    mapping(uint256 => Order) orders;
    uint256 lastOrderId;
    Config config;
  }

  //keccak256(abi.encode(uint256(keccak256("frontrun.Market")) - 1)) & ~bytes32(uint256(0xff));
  bytes32 constant MarketStorageLocation = 0x02c326031f2f3dedd13e7fde59c7c20af05a8826f4c07e8d42538c5f2be06800;

  function _getOwnStorage() private pure returns (MarketStorage storage $) {
    assembly {
      $.slot := MarketStorageLocation
    }
  }

  // event

  event NewOffer(
    uint256 id,
    uint8 offerType,
    bytes32 tokenId,
    address exToken,
    uint256 amount,
    uint256 value,
    uint256 collateral,
    uint256 minAmount,
    address doer
  );
  event NewToken(bytes32 tokenId, uint256 settleDuration, uint256 minAmount);
  event NewOrder(uint256 id, uint256 offerId, uint256 amount, address seller, address buyer);

  event SettleFilled(uint256 orderId, uint256 value, uint256 fee, address doer);
  event SettleCancelled(uint256 orderId, uint256 value, uint256 fee, address doer);

  event CancelOrder(uint256 orderId, address doer);
  event CancelOffer(uint256 offerId, uint256 refundValue, uint256 refundFee, address doer);

  event UpdateAcceptedTokens(address[] tokens, bool isAccepted);

  event CloseOffer(uint256 offerId, uint256 refundAmount);

  event UpdateConfig(
    address oldFeeWallet,
    uint256 oldFeeSettle,
    uint256 oldFeeRefund,
    uint256 oldPledgeRate,
    address newFeeWallet,
    uint256 newFeeSettle,
    uint256 newFeeRefund,
    uint256 newPledgeRate
  );

  event TokenToSettlePhase(bytes32 tokenId, address token, uint256 settleRate, uint256 settleTime);
  event UpdateTokenStatus(bytes32 tokenId, uint8 oldValue, uint8 newValue);
  event TokenForceCancelSettlePhase(bytes32 tokenId);

  event Settle2Steps(uint256 orderId, bytes32 hash, address doer);

  event UpdateTokenSettleDuration(bytes32 tokenId, uint48 oldValue, uint48 newValue);

  function initialize() external initializer {
    __Ownable_init(msg.sender);
    // init value
    MarketStorage storage $ = _getOwnStorage();
    $.config.pledgeRate = WEI6; //
    $.config.feeWallet = owner();
    $.config.feeSettle = WEI6 / 200; // 0.5%
    $.config.feeRefund = 0; // 0.0%
  }

  ///////////////////////////
  ////// SYSTEM ACTION //////
  ///////////////////////////

  /// @notice Creates a market to trade
  /// @param tokenId market identifier
  /// @param settleDuration Duration after which buyer of token can claim collateral if seller hasnt delivered
  /// @param minAmount minAmount that can be filled for this particular market including offers and orders , 6 decimals
  // add min order value in market so that in settle2steps we dont have to pay gas to settle low value orders
  function createToken(bytes32 tokenId, uint48 settleDuration, uint256 minAmount) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    _token.settleDuration = settleDuration;
    _token.minAmount = minAmount;
    _token.status = STATUS_TOKEN_ACTIVE;
    emit NewToken(tokenId, settleDuration, minAmount);
  }

  /// @notice moves a market to settlement phase
  /// @param tokenId market identifier
  /// @param tokenAddress contract address for token to be delivered
  /// @param settleRate how many tokens per 1M amount traded(if token to be delivered has 18 decimals write 1e12)
  function tokenToSettlePhase(
    bytes32 tokenId,
    address tokenAddress,
    uint152 settleRate // how many token for 1M points
  ) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    require(tokenAddress != address(0), 'Invalid Token Address');
    require(settleRate > 0, 'Invalid Settle Rate');
    require(_token.status == STATUS_TOKEN_ACTIVE || _token.status == STATUS_TOKEN_INACTIVE, 'Invalid Token Status');
    _token.token = tokenAddress;
    _token.settleRate = settleRate;
    // update token settle status & time
    _token.status = STATUS_TOKEN_SETTLE;
    _token.settleTime = uint48(block.timestamp);

    emit TokenToSettlePhase(tokenId, tokenAddress, settleRate, block.timestamp);
  }

  /// @notice toggle market active inactive
  /// @param tokenId market identifier
  function tokenToggleActivation(bytes32 tokenId) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    uint8 fromStatus = _token.status;
    uint8 toStatus = fromStatus == STATUS_TOKEN_ACTIVE ? STATUS_TOKEN_INACTIVE : STATUS_TOKEN_ACTIVE;

    require(fromStatus == STATUS_TOKEN_ACTIVE || fromStatus == STATUS_TOKEN_INACTIVE, 'Cannot Change Token Status');

    _token.status = toStatus;
    emit UpdateTokenStatus(tokenId, fromStatus, toStatus);
  }

  /// @notice  // in case wrong setting for settle
  /// @param tokenId market identifier
  function tokenForceCancelSettlePhase(bytes32 tokenId) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    require(_token.status == STATUS_TOKEN_SETTLE, 'Invalid Token Status');
    _token.status = STATUS_TOKEN_INACTIVE;
    emit TokenForceCancelSettlePhase(tokenId);
  }
  /// @notice  // updates settleDuration
  /// @param tokenId market identifier
  /// @param newValue settleDuration value

  function updateSettleDuration(bytes32 tokenId, uint48 newValue) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    uint48 oldValue = _token.settleDuration;
    _token.settleDuration = newValue;
    emit UpdateTokenSettleDuration(tokenId, oldValue, newValue);
  }

  // force cancel order - by Operator/Owner
  // refund for both seller & buyer without any fees cut
  /// @notice
  /// @param orderId order identifier
  function forceCancelOrder(uint256 orderId) public nonReentrant onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Order storage order = $.orders[orderId];
    Offer storage offer = $.offers[order.offerId];

    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');

    // calculate refund
    uint256 buyerRefundValue = (order.amount * offer.value) / offer.amount; // value
    uint256 sellerRefundValue = (order.amount * offer.collateral) / offer.amount; // collateral
    address buyer = order.buyer;
    address seller = order.seller;

    // refund
    if (offer.exToken == address(0)) {
      // refund ETH
      if (buyerRefundValue > 0 && buyer != address(0)) {
        (bool success,) = buyer.call{value: buyerRefundValue}('');
        require(success, 'Transfer Funds to Seller Fail');
      }
      if (sellerRefundValue > 0 && seller != address(0)) {
        (bool success,) = seller.call{value: sellerRefundValue}('');
        require(success, 'Transfer Funds to Seller Fail');
      }
    } else {
      IERC20 iexToken = IERC20(offer.exToken);
      if (buyerRefundValue > 0 && buyer != address(0)) {

exec
/bin/bash -lc "sed -n '1,260p' src/FrontrunMarket.sol" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
//SPDX-License-Identifier: Unlicense
pragma solidity 0.8.20;

import '@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol';
import '@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol';
import '@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol';
import '@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol';
import '@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol';
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';

struct Token {
  address token;
  uint48 settleTime;
  uint48 settleDuration;
  uint152 settleRate; // number of token per point
  uint8 status; //
  uint256 minAmount;
}

struct Offer {
  uint8 offerType;
  bytes32 tokenId;
  address exToken;
  uint256 amount;
  uint256 value;
  uint256 collateral;
  uint256 filledAmount;
  uint8 status;
  address offeredBy;
  uint256 minAmount;
}

struct Order {
  uint256 offerId;
  uint256 amount;
  address seller;
  address buyer;
  uint8 status;
}

struct Config {
  uint256 pledgeRate;
  uint256 feeRefund;
  uint256 feeSettle;
  address feeWallet;
}

contract FrontrunMarket is Initializable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
  using SafeERC20 for IERC20;

  uint256 constant WEI6 = 10 ** 6;
  uint8 constant OFFER_BUY = 1;
  uint8 constant OFFER_SELL = 2;

  // Status
  // Offer status
  uint8 constant STATUS_OFFER_OPEN = 1;
  uint8 constant STATUS_OFFER_FILLED = 2;
  uint8 constant STATUS_OFFER_CANCELLED = 3;

  // Order Status
  uint8 constant STATUS_ORDER_OPEN = 1;
  uint8 constant STATUS_ORDER_SETTLE_FILLED = 2;
  uint8 constant STATUS_ORDER_SETTLE_CANCELLED = 3;
  uint8 constant STATUS_ORDER_CANCELLED = 4;

  // token status
  uint8 constant STATUS_TOKEN_ACTIVE = 1;
  uint8 constant STATUS_TOKEN_INACTIVE = 2;
  uint8 constant STATUS_TOKEN_SETTLE = 3;

  struct MarketStorage {
    mapping(address => bool) acceptedTokens;
    mapping(bytes32 => Token) tokens;
    mapping(uint256 => Offer) offers;
    uint256 lastOfferId;
    mapping(uint256 => Order) orders;
    uint256 lastOrderId;
    Config config;
  }

  //keccak256(abi.encode(uint256(keccak256("frontrun.Market")) - 1)) & ~bytes32(uint256(0xff));
  bytes32 constant MarketStorageLocation = 0x02c326031f2f3dedd13e7fde59c7c20af05a8826f4c07e8d42538c5f2be06800;

  function _getOwnStorage() private pure returns (MarketStorage storage $) {
    assembly {
      $.slot := MarketStorageLocation
    }
  }

  // event

  event NewOffer(
    uint256 id,
    uint8 offerType,
    bytes32 tokenId,
    address exToken,
    uint256 amount,
    uint256 value,
    uint256 collateral,
    uint256 minAmount,
    address doer
  );
  event NewToken(bytes32 tokenId, uint256 settleDuration, uint256 minAmount);
  event NewOrder(uint256 id, uint256 offerId, uint256 amount, address seller, address buyer);

  event SettleFilled(uint256 orderId, uint256 value, uint256 fee, address doer);
  event SettleCancelled(uint256 orderId, uint256 value, uint256 fee, address doer);

  event CancelOrder(uint256 orderId, address doer);
  event CancelOffer(uint256 offerId, uint256 refundValue, uint256 refundFee, address doer);

  event UpdateAcceptedTokens(address[] tokens, bool isAccepted);

  event CloseOffer(uint256 offerId, uint256 refundAmount);

  event UpdateConfig(
    address oldFeeWallet,
    uint256 oldFeeSettle,
    uint256 oldFeeRefund,
    uint256 oldPledgeRate,
    address newFeeWallet,
    uint256 newFeeSettle,
    uint256 newFeeRefund,
    uint256 newPledgeRate
  );

  event TokenToSettlePhase(bytes32 tokenId, address token, uint256 settleRate, uint256 settleTime);
  event UpdateTokenStatus(bytes32 tokenId, uint8 oldValue, uint8 newValue);
  event TokenForceCancelSettlePhase(bytes32 tokenId);

  event Settle2Steps(uint256 orderId, bytes32 hash, address doer);

  event UpdateTokenSettleDuration(bytes32 tokenId, uint48 oldValue, uint48 newValue);

  function initialize() external initializer {
    __Ownable_init(msg.sender);
    // init value
    MarketStorage storage $ = _getOwnStorage();
    $.config.pledgeRate = WEI6; //
    $.config.feeWallet = owner();
    $.config.feeSettle = WEI6 / 200; // 0.5%
    $.config.feeRefund = 0; // 0.0%
  }

  ///////////////////////////
  ////// SYSTEM ACTION //////
  ///////////////////////////

  /// @notice Creates a market to trade
  /// @param tokenId market identifier
  /// @param settleDuration Duration after which buyer of token can claim collateral if seller hasnt delivered
  /// @param minAmount minAmount that can be filled for this particular market including offers and orders , 6 decimals
  // add min order value in market so that in settle2steps we dont have to pay gas to settle low value orders
  function createToken(bytes32 tokenId, uint48 settleDuration, uint256 minAmount) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    _token.settleDuration = settleDuration;
    _token.minAmount = minAmount;
    _token.status = STATUS_TOKEN_ACTIVE;
    emit NewToken(tokenId, settleDuration, minAmount);
  }

  /// @notice moves a market to settlement phase
  /// @param tokenId market identifier
  /// @param tokenAddress contract address for token to be delivered
  /// @param settleRate how many tokens per 1M amount traded(if token to be delivered has 18 decimals write 1e12)
  function tokenToSettlePhase(
    bytes32 tokenId,
    address tokenAddress,
    uint152 settleRate // how many token for 1M points
  ) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    require(tokenAddress != address(0), 'Invalid Token Address');
    require(settleRate > 0, 'Invalid Settle Rate');
    require(_token.status == STATUS_TOKEN_ACTIVE || _token.status == STATUS_TOKEN_INACTIVE, 'Invalid Token Status');
    _token.token = tokenAddress;
    _token.settleRate = settleRate;
    // update token settle status & time
    _token.status = STATUS_TOKEN_SETTLE;
    _token.settleTime = uint48(block.timestamp);

    emit TokenToSettlePhase(tokenId, tokenAddress, settleRate, block.timestamp);
  }

  /// @notice toggle market active inactive
  /// @param tokenId market identifier
  function tokenToggleActivation(bytes32 tokenId) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    uint8 fromStatus = _token.status;
    uint8 toStatus = fromStatus == STATUS_TOKEN_ACTIVE ? STATUS_TOKEN_INACTIVE : STATUS_TOKEN_ACTIVE;

    require(fromStatus == STATUS_TOKEN_ACTIVE || fromStatus == STATUS_TOKEN_INACTIVE, 'Cannot Change Token Status');

    _token.status = toStatus;
    emit UpdateTokenStatus(tokenId, fromStatus, toStatus);
  }

  /// @notice  // in case wrong setting for settle
  /// @param tokenId market identifier
  function tokenForceCancelSettlePhase(bytes32 tokenId) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    require(_token.status == STATUS_TOKEN_SETTLE, 'Invalid Token Status');
    _token.status = STATUS_TOKEN_INACTIVE;
    emit TokenForceCancelSettlePhase(tokenId);
  }
  /// @notice  // updates settleDuration
  /// @param tokenId market identifier
  /// @param newValue settleDuration value

  function updateSettleDuration(bytes32 tokenId, uint48 newValue) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Token storage _token = $.tokens[tokenId];
    uint48 oldValue = _token.settleDuration;
    _token.settleDuration = newValue;
    emit UpdateTokenSettleDuration(tokenId, oldValue, newValue);
  }

  // force cancel order - by Operator/Owner
  // refund for both seller & buyer without any fees cut
  /// @notice
  /// @param orderId order identifier
  function forceCancelOrder(uint256 orderId) public nonReentrant onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Order storage order = $.orders[orderId];
    Offer storage offer = $.offers[order.offerId];

    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');

    // calculate refund
    uint256 buyerRefundValue = (order.amount * offer.value) / offer.amount; // value
    uint256 sellerRefundValue = (order.amount * offer.collateral) / offer.amount; // collateral
    address buyer = order.buyer;
    address seller = order.seller;

    // refund
    if (offer.exToken == address(0)) {
      // refund ETH
      if (buyerRefundValue > 0 && buyer != address(0)) {
        (bool success,) = buyer.call{value: buyerRefundValue}('');
        require(success, 'Transfer Funds to Seller Fail');
      }
      if (sellerRefundValue > 0 && seller != address(0)) {
        (bool success,) = seller.call{value: sellerRefundValue}('');
        require(success, 'Transfer Funds to Seller Fail');
      }
    } else {
      IERC20 iexToken = IERC20(offer.exToken);
      if (buyerRefundValue > 0 && buyer != address(0)) {
        iexToken.safeTransfer(buyer, buyerRefundValue);
      }
      if (sellerRefundValue > 0 && seller != address(0)) {
        iexToken.safeTransfer(seller, sellerRefundValue);
      }
    }

exec
/bin/bash -lc "sed -n '261,520p' AUDIT_BUNDLE.txt" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
        iexToken.safeTransfer(buyer, buyerRefundValue);
      }
      if (sellerRefundValue > 0 && seller != address(0)) {
        iexToken.safeTransfer(seller, sellerRefundValue);
      }
    }
    order.status = STATUS_ORDER_CANCELLED;
    emit CancelOrder(orderId, msg.sender);
  }

  // 2 steps settle:
  // Tx1: Seller sending token to system vault/buyer
  // Tx2: then Operator/Owner verify and settle to pay seller money+collateral
  function settle2Steps(uint256 orderId, bytes32 hash) public nonReentrant onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    Order storage order = $.orders[orderId];
    Offer storage offer = $.offers[order.offerId];
    Token storage token = $.tokens[offer.tokenId];

    // check condition
    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');
    require(token.token != address(0) && token.settleRate > 0, 'Token Not Set');
    require(block.timestamp > token.settleTime, 'Settling Time Not Started');
    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');

    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
    uint256 value = (order.amount * offer.value) / offer.amount;

    // transfer liquid to seller
    uint256 settleFee = (value * $.config.feeSettle) / WEI6;
    uint256 totalValue = value + collateral - settleFee;
    if (offer.exToken == address(0)) {
      // by ETH
      (bool success1,) = order.seller.call{value: totalValue}('');
      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
      require(success1 && success2, 'Transfer Funds Fail');
    } else {
      // by exToken
      IERC20 iexToken = IERC20(offer.exToken);
      iexToken.safeTransfer(order.seller, totalValue);
      iexToken.safeTransfer($.config.feeWallet, settleFee);
    }

    order.status = STATUS_ORDER_SETTLE_FILLED;

    emit Settle2Steps(orderId, hash, msg.sender);
    emit SettleFilled(orderId, totalValue, settleFee, msg.sender);
  }

  function settle2StepsBatch(uint256[] calldata orderIds, bytes32[] calldata hashes) external {
    require(orderIds.length == hashes.length, 'Invalid Input');
    for (uint256 i = 0; i < orderIds.length; i++) {
      settle2Steps(orderIds[i], hashes[i]);
    }
  }

  /////////////////////////
  ////// USER ACTION //////
  /////////////////////////

  // make a offer request using erc20 collateral
  /// @notice
  /// @param tokenId market identifier
  /// @param amount amount of market asset in 6 decimals
  /// @param value amount of collateral being deposited, price = collateral/amount
  /// @param exToken collateral token contract addres
  /// @param minAmount min amount that must be filled by the counterparty in 6 decimals
  function newOffer(
    uint8 offerType,
    bytes32 tokenId,
    uint256 amount, //amount of asset
    uint256 value, // amount of collateral
    address exToken,
    uint256 minAmount
  ) external nonReentrant {
    MarketStorage storage $ = _getOwnStorage();
    Token storage token = $.tokens[tokenId];
    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid Token');
    require(exToken != address(0) && $.acceptedTokens[exToken], 'Invalid Offer Token');
    require(amount > 0 && value > 0, 'Invalid Amount or Value');
    require(amount >= minAmount, 'minamount to be filled cant be greater then amount');
    require(minAmount >= token.minAmount, 'minamount should be greater then eual to market global minamount');
    IERC20 iexToken = IERC20(exToken);
    // collateral
    uint256 collateral = (value * $.config.pledgeRate) / WEI6;

    // transfer offer value (offer buy) or collateral (offer sell)
    uint256 _transferAmount = offerType == OFFER_BUY ? value : collateral;
    iexToken.safeTransferFrom(msg.sender, address(this), _transferAmount);

    // create new offer
    _newOffer(offerType, tokenId, exToken, amount, value, collateral, minAmount);
  }

  // New offer in ETH
  /// @notice
  /// @param tokenId market identifier
  /// @param amount amount of market asset in 6 decimals
  /// @param value amount of collateral being deposited, price = collateral/amount
  /// @param minAmount min amount that must be filled by the counterparty in 6 decimals
  function newOfferETH(
    uint8 offerType,
    bytes32 tokenId,
    uint256 amount,
    uint256 value,
    uint256 minAmount
  ) external payable nonReentrant {
    MarketStorage storage $ = _getOwnStorage();
    Token storage token = $.tokens[tokenId];
    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid Token');
    require(amount > 0 && value > 0, 'Invalid Amount or Value');
    require(amount >= minAmount, 'minamount to be filled cant be greater then amount');
    require(minAmount >= token.minAmount, 'minamount should be greater then eual to market global minamount');

    // collateral
    uint256 collateral = (value * $.config.pledgeRate) / WEI6;

    uint256 _ethAmount = offerType == OFFER_BUY ? value : collateral;
    require(_ethAmount == msg.value, 'Insufficient Funds');
    // create new offer
    _newOffer(offerType, tokenId, address(0), amount, value, collateral, minAmount);
  }

  /// @notice fill an offer with erc20 collateral and generate an orderid associated with a trade
  /// @param offerId offer identifier
  /// @param amount amount of market asset in 6 decimals
  function fillOffer(uint256 offerId, uint256 amount) public {
    MarketStorage storage $ = _getOwnStorage();
    Offer storage offer = $.offers[offerId];
    Token storage token = $.tokens[offer.tokenId];
    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');
    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid token Status');
    require(amount > 0, 'Invalid Amount');
    require(offer.amount - offer.filledAmount >= amount, 'Insufficient Allocations');
    if (offer.amount - offer.filledAmount > offer.minAmount) {
      require(amount >= offer.minAmount, 'cannot fill less then offer minamount');
    } else {
      require(amount == offer.amount - offer.filledAmount, 'if less then asset minamount must fill complete order');
    }
    require(offer.exToken != address(0), 'Invalid Offer Token');

    // transfer value or collecteral
    IERC20 iexToken = IERC20(offer.exToken);
    uint256 _transferAmount;
    address buyer;
    address seller;
    if (offer.offerType == OFFER_BUY) {
      _transferAmount = (offer.collateral * amount) / offer.amount;
      buyer = offer.offeredBy;
      seller = msg.sender;
    } else {
      _transferAmount = (offer.value * amount) / offer.amount;
      buyer = msg.sender;
      seller = offer.offeredBy;
    }
    iexToken.safeTransferFrom(msg.sender, address(this), _transferAmount);

    _fillOffer(offerId, amount, buyer, seller);
  }

  /// @notice fill an offer with eth collateral and generate an orderid associated with a trade
  /// @param offerId offer identifier
  /// @param amount amount of market asset in 6 decimals
  function fillOfferETH(uint256 offerId, uint256 amount) external payable nonReentrant {
    uint256 _ethAmount = _fillOfferETH(offerId, amount);
    require(msg.value >= _ethAmount, 'Insufficient Funds');
    require(_ethAmount + 5 * 1e16 > msg.value, 'Extra Amount Sent');
  }

  /// @notice batche fill both types of offers
  function batchFillOffer(uint256[] calldata offerId, uint256[] calldata amount) external payable nonReentrant {
    require(offerId.length == amount.length, 'Invalid Input');
    uint256 _ethAmount;
    MarketStorage storage $ = _getOwnStorage();
    for (uint256 i = 0; i < offerId.length; i++) {
      Offer storage offer = $.offers[offerId[i]];
      if (offer.exToken == address(0)) {
        _ethAmount += _fillOfferETH(offerId[i], amount[i]);
      } else {
        fillOffer(offerId[i], amount[i]);
      }
    }
    require(msg.value >= _ethAmount, 'Insufficient Funds');
    require(_ethAmount + 5 * 1e16 > msg.value, 'Extra Amount Sent');
  }

  function _fillOfferETH(uint256 offerId, uint256 amount) internal returns (uint256 _ethAmount) {
    MarketStorage storage $ = _getOwnStorage();
    Offer storage offer = $.offers[offerId];
    Token storage token = $.tokens[offer.tokenId];
    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');
    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid token Status');
    require(amount > 0, 'Invalid Amount');
    require(offer.amount - offer.filledAmount >= amount, 'Insufficient Allocations');
    if (offer.amount - offer.filledAmount > offer.minAmount) {
      require(amount >= offer.minAmount, 'cannot fill less then offer minamount or asset minamount');
    } else {
      require(amount == offer.amount - offer.filledAmount, 'if less then asset minamount must fill complete order');
    }
    require(offer.exToken == address(0), 'Invalid Offer Token');

    // transfer value or collecteral
    address buyer;
    address seller;
    if (offer.offerType == OFFER_BUY) {
      _ethAmount = (offer.collateral * amount) / offer.amount;
      buyer = offer.offeredBy;
      seller = msg.sender;
    } else {
      _ethAmount = (offer.value * amount) / offer.amount;
      buyer = msg.sender;
      seller = offer.offeredBy;
    }
    // new order
    _fillOffer(offerId, amount, buyer, seller);
  }

  /// @notice close unfullfilled offer - by Offer owner
  /// @param offerId offer identifier
  function cancelOffer(uint256 offerId) public nonReentrant {
    MarketStorage storage $ = _getOwnStorage();
    Offer storage offer = $.offers[offerId];

    require(offer.offeredBy == msg.sender, 'Offer Owner Only');
    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');

    uint256 refundAmount = offer.amount - offer.filledAmount;
    require(refundAmount > 0, 'Insufficient Allocations');

    // calculate refund
    uint256 refundValue;
    if (offer.offerType == OFFER_BUY) {
      refundValue = (refundAmount * offer.value) / offer.amount;
    } else {
      refundValue = (refundAmount * offer.collateral) / offer.amount;
    }
    uint256 refundFee = (refundValue * $.config.feeRefund) / WEI6;
    refundValue -= refundFee;

    // refund
    if (offer.exToken == address(0)) {
      // refund ETH
      (bool success1,) = offer.offeredBy.call{value: refundValue}('');
      (bool success2,) = $.config.feeWallet.call{value: refundFee}('');
      require(success1 && success2, 'Transfer Funds Fail');
    } else {
      IERC20 iexToken = IERC20(offer.exToken);
      iexToken.safeTransfer(offer.offeredBy, refundValue);
      iexToken.safeTransfer($.config.feeWallet, refundFee);
    }

    offer.status = STATUS_OFFER_CANCELLED;
    emit CancelOffer(offerId, refundValue, refundFee, msg.sender);
  }

  //
  /// @notice settle order - deliver token to finillize the order
  /// @param orderId order identifier
  function settleFilled(uint256 orderId) public nonReentrant {
    MarketStorage storage $ = _getOwnStorage();

exec
/bin/bash -lc "sed -n '521,793p' AUDIT_BUNDLE.txt" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
    Order storage order = $.orders[orderId];
    Offer storage offer = $.offers[order.offerId];
    Token storage token = $.tokens[offer.tokenId];

    // check condition
    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');
    require(token.token != address(0) && token.settleRate > 0, 'Token Not Set');
    require(block.timestamp > token.settleTime, 'Settling Time Not Started');
    require(order.seller == msg.sender, 'Seller Only');
    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');

    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
    uint256 value = (order.amount * offer.value) / offer.amount;

    // transfer token to buyer
    IERC20 iToken = IERC20(token.token);
    // calculate token amount base on it's decimals
    uint256 tokenAmount = (order.amount * token.settleRate) / WEI6;
    uint256 tokenAmountFee = (tokenAmount * $.config.feeSettle) / WEI6;
    // transfer order fee in token to fee wallet
    iToken.safeTransferFrom(order.seller, $.config.feeWallet, tokenAmountFee);
    // transfer token after fee to buyer
    iToken.safeTransferFrom(order.seller, order.buyer, tokenAmount - tokenAmountFee);

    // transfer liquid to seller
    uint256 settleFee = (value * $.config.feeSettle) / WEI6;
    uint256 totalValue = value + collateral - settleFee;
    if (offer.exToken == address(0)) {
      // by ETH
      (bool success1,) = order.seller.call{value: totalValue}('');
      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
      require(success1 && success2, 'Transfer Funds Fail');
    } else {
      // by exToken
      IERC20 iexToken = IERC20(offer.exToken);
      iexToken.safeTransfer(order.seller, totalValue);
      iexToken.safeTransfer($.config.feeWallet, settleFee);
    }

    order.status = STATUS_ORDER_SETTLE_FILLED;

    emit SettleFilled(orderId, totalValue, settleFee, msg.sender);
  }

  /// @notice cancel unfilled order by token buyer after settleDuration time frame
  /// @notice   // token seller lose collateral to token buyer
  /// @param orderId order identifier

  function settleCancelled(uint256 orderId) public nonReentrant {
    MarketStorage storage $ = _getOwnStorage();
    Order storage order = $.orders[orderId];
    Offer storage offer = $.offers[order.offerId];
    Token storage token = $.tokens[offer.tokenId];

    // check condition
    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');
    require(block.timestamp > token.settleTime + token.settleDuration, 'Settling Time Not Ended Yet');
    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');
    require(order.buyer == msg.sender || owner() == msg.sender, 'Buyer or Operator/Owner Only');

    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
    uint256 value = (order.amount * offer.value) / offer.amount;

    // transfer liquid to buyer
    uint256 settleFee = (collateral * $.config.feeSettle * 2) / WEI6;
    uint256 totalValue = value + collateral - settleFee;
    if (offer.exToken == address(0)) {
      // by ETH
      (bool success1,) = order.buyer.call{value: totalValue}('');
      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
      require(success1 && success2, 'Transfer Funds Fail');
    } else {
      // by exToken
      IERC20 iexToken = IERC20(offer.exToken);
      iexToken.safeTransfer(order.buyer, totalValue);
      iexToken.safeTransfer($.config.feeWallet, settleFee);
    }

    order.status = STATUS_ORDER_SETTLE_CANCELLED;

    emit SettleCancelled(orderId, totalValue, settleFee, msg.sender);
  }

  // Batch actions
  function batchForceCancelOrders(uint256[] calldata orderIds) external {
    for (uint256 i = 0; i < orderIds.length; i++) {
      forceCancelOrder(orderIds[i]);
    }
  }

  function batchCancelOffers(uint256[] calldata offerIds) external {
    for (uint256 i = 0; i < offerIds.length; i++) {
      cancelOffer(offerIds[i]);
    }
  }

  function batchSettleFilleds(uint256[] calldata orderIds) external {
    for (uint256 i = 0; i < orderIds.length; i++) {
      settleFilled(orderIds[i]);
    }
  }

  function batchSettleCancelleds(uint256[] calldata orderIds) external {
    for (uint256 i = 0; i < orderIds.length; i++) {
      settleCancelled(orderIds[i]);
    }
  }

  ///////////////////////////
  ///////// SETTER //////////
  ///////////////////////////

  function updateConfig(
    address feeWallet_,
    uint256 feeSettle_,
    uint256 feeRefund_,
    uint256 pledgeRate_
  ) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    require(feeWallet_ != address(0), 'Invalid Address');
    require(feeSettle_ <= WEI6 / 100, 'Settle Fee <= 10%');
    require(feeRefund_ <= WEI6 / 100, 'Cancel Fee <= 10%');
    emit UpdateConfig(
      $.config.feeWallet,
      $.config.feeSettle,
      $.config.feeRefund,
      $.config.pledgeRate,
      feeWallet_,
      feeSettle_,
      feeRefund_,
      pledgeRate_
    );
    // update
    $.config.feeWallet = feeWallet_;
    $.config.feeSettle = feeSettle_;
    $.config.feeRefund = feeRefund_;
    $.config.pledgeRate = pledgeRate_;
  }

  //
  /// @notice adding/removing asset to be allowed to use as collateral
  function setAcceptedTokens(address[] calldata tokenAddresses, bool isAccepted) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();

    for (uint256 i = 0; i < tokenAddresses.length; i++) {
      $.acceptedTokens[tokenAddresses[i]] = isAccepted;
    }
    emit UpdateAcceptedTokens(tokenAddresses, isAccepted);
  }

  ///////////////////////////
  ///////// GETTER //////////
  ///////////////////////////
  function offerAmount(uint256 offerId) external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].amount;
  }

  function offerAmountAvailable(uint256 offerId) external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].amount - $.offers[offerId].filledAmount;
  }

  function offerValue(uint256 offerId) external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].value;
  }

  function offerExToken(uint256 offerId) external view returns (address) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].exToken;
  }

  function isBuyOffer(uint256 offerId) external view returns (bool) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].offerType == OFFER_BUY;
  }

  function isSellOffer(uint256 offerId) external view returns (bool) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].offerType == OFFER_SELL;
  }

  function offerStatus(uint256 offerId) external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[offerId].status;
  }

  function orderStatus(uint256 orderId) external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.orders[orderId].status;
  }

  function tokens(bytes32 tokenId) external view returns (Token memory) {
    MarketStorage storage $ = _getOwnStorage();
    return $.tokens[tokenId];
  }

  function offers(uint256 id) external view returns (Offer memory) {
    MarketStorage storage $ = _getOwnStorage();
    return $.offers[id];
  }

  function orders(uint256 id) external view returns (Order memory) {
    MarketStorage storage $ = _getOwnStorage();
    return $.orders[id];
  }

  function config() external view returns (Config memory) {
    MarketStorage storage $ = _getOwnStorage();
    return $.config;
  }

  function isAcceptedToken(address token) external view returns (bool) {
    MarketStorage storage $ = _getOwnStorage();
    return $.acceptedTokens[token];
  }

  function lastOfferId() external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.lastOfferId;
  }

  function lastOrderId() external view returns (uint256) {
    MarketStorage storage $ = _getOwnStorage();
    return $.lastOrderId;
  }

  ///////////////////////////
  //////// INTERNAL /////////
  ///////////////////////////
  function _newOffer(
    uint8 offerType,
    bytes32 tokenId,
    address exToken,
    uint256 amount,
    uint256 value,
    uint256 collateral,
    uint256 minAmount
  ) internal {
    MarketStorage storage $ = _getOwnStorage();
    // create new offer
    $.offers[++$.lastOfferId] =
      Offer(offerType, tokenId, exToken, amount, value, collateral, 0, STATUS_OFFER_OPEN, msg.sender, minAmount);

    emit NewOffer($.lastOfferId, offerType, tokenId, exToken, amount, value, collateral, minAmount, msg.sender);
  }

  function _fillOffer(uint256 offerId, uint256 amount, address buyer, address seller) internal {
    MarketStorage storage $ = _getOwnStorage();
    Offer storage offer = $.offers[offerId];
    // new order
    $.orders[++$.lastOrderId] = Order(offerId, amount, seller, buyer, STATUS_ORDER_OPEN);

    // check if offer is fullfilled
    offer.filledAmount += amount;
    if (offer.filledAmount == offer.amount) {
      offer.status = STATUS_OFFER_FILLED;
      emit CloseOffer(offerId, 0);
    }

    emit NewOrder($.lastOrderId, offerId, amount, seller, buyer);
  }

  // get stuck token in contract
  function withdrawStuckToken(address _token, address _to) external onlyOwner {
    MarketStorage storage $ = _getOwnStorage();
    require(_token != address(0) && !$.acceptedTokens[_token], 'Invalid Token Address');
    uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
    IERC20(_token).safeTransfer(_to, _contractBalance);
  }
}


exec
/bin/bash -lc "nl -ba src/FrontrunMarket.sol | sed -n '1,260p'" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
     1	//SPDX-License-Identifier: Unlicense
     2	pragma solidity 0.8.20;
     3	
     4	import '@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol';
     5	import '@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol';
     6	import '@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol';
     7	import '@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol';
     8	import '@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol';
     9	import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
    10	import '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
    11	import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';
    12	
    13	struct Token {
    14	  address token;
    15	  uint48 settleTime;
    16	  uint48 settleDuration;
    17	  uint152 settleRate; // number of token per point
    18	  uint8 status; //
    19	  uint256 minAmount;
    20	}
    21	
    22	struct Offer {
    23	  uint8 offerType;
    24	  bytes32 tokenId;
    25	  address exToken;
    26	  uint256 amount;
    27	  uint256 value;
    28	  uint256 collateral;
    29	  uint256 filledAmount;
    30	  uint8 status;
    31	  address offeredBy;
    32	  uint256 minAmount;
    33	}
    34	
    35	struct Order {
    36	  uint256 offerId;
    37	  uint256 amount;
    38	  address seller;
    39	  address buyer;
    40	  uint8 status;
    41	}
    42	
    43	struct Config {
    44	  uint256 pledgeRate;
    45	  uint256 feeRefund;
    46	  uint256 feeSettle;
    47	  address feeWallet;
    48	}
    49	
    50	contract FrontrunMarket is Initializable, OwnableUpgradeable, ReentrancyGuardUpgradeable {
    51	  using SafeERC20 for IERC20;
    52	
    53	  uint256 constant WEI6 = 10 ** 6;
    54	  uint8 constant OFFER_BUY = 1;
    55	  uint8 constant OFFER_SELL = 2;
    56	
    57	  // Status
    58	  // Offer status
    59	  uint8 constant STATUS_OFFER_OPEN = 1;
    60	  uint8 constant STATUS_OFFER_FILLED = 2;
    61	  uint8 constant STATUS_OFFER_CANCELLED = 3;
    62	
    63	  // Order Status
    64	  uint8 constant STATUS_ORDER_OPEN = 1;
    65	  uint8 constant STATUS_ORDER_SETTLE_FILLED = 2;
    66	  uint8 constant STATUS_ORDER_SETTLE_CANCELLED = 3;
    67	  uint8 constant STATUS_ORDER_CANCELLED = 4;
    68	
    69	  // token status
    70	  uint8 constant STATUS_TOKEN_ACTIVE = 1;
    71	  uint8 constant STATUS_TOKEN_INACTIVE = 2;
    72	  uint8 constant STATUS_TOKEN_SETTLE = 3;
    73	
    74	  struct MarketStorage {
    75	    mapping(address => bool) acceptedTokens;
    76	    mapping(bytes32 => Token) tokens;
    77	    mapping(uint256 => Offer) offers;
    78	    uint256 lastOfferId;
    79	    mapping(uint256 => Order) orders;
    80	    uint256 lastOrderId;
    81	    Config config;
    82	  }
    83	
    84	  //keccak256(abi.encode(uint256(keccak256("frontrun.Market")) - 1)) & ~bytes32(uint256(0xff));
    85	  bytes32 constant MarketStorageLocation = 0x02c326031f2f3dedd13e7fde59c7c20af05a8826f4c07e8d42538c5f2be06800;
    86	
    87	  function _getOwnStorage() private pure returns (MarketStorage storage $) {
    88	    assembly {
    89	      $.slot := MarketStorageLocation
    90	    }
    91	  }
    92	
    93	  // event
    94	
    95	  event NewOffer(
    96	    uint256 id,
    97	    uint8 offerType,
    98	    bytes32 tokenId,
    99	    address exToken,
   100	    uint256 amount,
   101	    uint256 value,
   102	    uint256 collateral,
   103	    uint256 minAmount,
   104	    address doer
   105	  );
   106	  event NewToken(bytes32 tokenId, uint256 settleDuration, uint256 minAmount);
   107	  event NewOrder(uint256 id, uint256 offerId, uint256 amount, address seller, address buyer);
   108	
   109	  event SettleFilled(uint256 orderId, uint256 value, uint256 fee, address doer);
   110	  event SettleCancelled(uint256 orderId, uint256 value, uint256 fee, address doer);
   111	
   112	  event CancelOrder(uint256 orderId, address doer);
   113	  event CancelOffer(uint256 offerId, uint256 refundValue, uint256 refundFee, address doer);
   114	
   115	  event UpdateAcceptedTokens(address[] tokens, bool isAccepted);
   116	
   117	  event CloseOffer(uint256 offerId, uint256 refundAmount);
   118	
   119	  event UpdateConfig(
   120	    address oldFeeWallet,
   121	    uint256 oldFeeSettle,
   122	    uint256 oldFeeRefund,
   123	    uint256 oldPledgeRate,
   124	    address newFeeWallet,
   125	    uint256 newFeeSettle,
   126	    uint256 newFeeRefund,
   127	    uint256 newPledgeRate
   128	  );
   129	
   130	  event TokenToSettlePhase(bytes32 tokenId, address token, uint256 settleRate, uint256 settleTime);
   131	  event UpdateTokenStatus(bytes32 tokenId, uint8 oldValue, uint8 newValue);
   132	  event TokenForceCancelSettlePhase(bytes32 tokenId);
   133	
   134	  event Settle2Steps(uint256 orderId, bytes32 hash, address doer);
   135	
   136	  event UpdateTokenSettleDuration(bytes32 tokenId, uint48 oldValue, uint48 newValue);
   137	
   138	  function initialize() external initializer {
   139	    __Ownable_init(msg.sender);
   140	    // init value
   141	    MarketStorage storage $ = _getOwnStorage();
   142	    $.config.pledgeRate = WEI6; //
   143	    $.config.feeWallet = owner();
   144	    $.config.feeSettle = WEI6 / 200; // 0.5%
   145	    $.config.feeRefund = 0; // 0.0%
   146	  }
   147	
   148	  ///////////////////////////
   149	  ////// SYSTEM ACTION //////
   150	  ///////////////////////////
   151	
   152	  /// @notice Creates a market to trade
   153	  /// @param tokenId market identifier
   154	  /// @param settleDuration Duration after which buyer of token can claim collateral if seller hasnt delivered
   155	  /// @param minAmount minAmount that can be filled for this particular market including offers and orders , 6 decimals
   156	  // add min order value in market so that in settle2steps we dont have to pay gas to settle low value orders
   157	  function createToken(bytes32 tokenId, uint48 settleDuration, uint256 minAmount) external onlyOwner {
   158	    MarketStorage storage $ = _getOwnStorage();
   159	    Token storage _token = $.tokens[tokenId];
   160	    _token.settleDuration = settleDuration;
   161	    _token.minAmount = minAmount;
   162	    _token.status = STATUS_TOKEN_ACTIVE;
   163	    emit NewToken(tokenId, settleDuration, minAmount);
   164	  }
   165	
   166	  /// @notice moves a market to settlement phase
   167	  /// @param tokenId market identifier
   168	  /// @param tokenAddress contract address for token to be delivered
   169	  /// @param settleRate how many tokens per 1M amount traded(if token to be delivered has 18 decimals write 1e12)
   170	  function tokenToSettlePhase(
   171	    bytes32 tokenId,
   172	    address tokenAddress,
   173	    uint152 settleRate // how many token for 1M points
   174	  ) external onlyOwner {
   175	    MarketStorage storage $ = _getOwnStorage();
   176	    Token storage _token = $.tokens[tokenId];
   177	    require(tokenAddress != address(0), 'Invalid Token Address');
   178	    require(settleRate > 0, 'Invalid Settle Rate');
   179	    require(_token.status == STATUS_TOKEN_ACTIVE || _token.status == STATUS_TOKEN_INACTIVE, 'Invalid Token Status');
   180	    _token.token = tokenAddress;
   181	    _token.settleRate = settleRate;
   182	    // update token settle status & time
   183	    _token.status = STATUS_TOKEN_SETTLE;
   184	    _token.settleTime = uint48(block.timestamp);
   185	
   186	    emit TokenToSettlePhase(tokenId, tokenAddress, settleRate, block.timestamp);
   187	  }
   188	
   189	  /// @notice toggle market active inactive
   190	  /// @param tokenId market identifier
   191	  function tokenToggleActivation(bytes32 tokenId) external onlyOwner {
   192	    MarketStorage storage $ = _getOwnStorage();
   193	    Token storage _token = $.tokens[tokenId];
   194	    uint8 fromStatus = _token.status;
   195	    uint8 toStatus = fromStatus == STATUS_TOKEN_ACTIVE ? STATUS_TOKEN_INACTIVE : STATUS_TOKEN_ACTIVE;
   196	
   197	    require(fromStatus == STATUS_TOKEN_ACTIVE || fromStatus == STATUS_TOKEN_INACTIVE, 'Cannot Change Token Status');
   198	
   199	    _token.status = toStatus;
   200	    emit UpdateTokenStatus(tokenId, fromStatus, toStatus);
   201	  }
   202	
   203	  /// @notice  // in case wrong setting for settle
   204	  /// @param tokenId market identifier
   205	  function tokenForceCancelSettlePhase(bytes32 tokenId) external onlyOwner {
   206	    MarketStorage storage $ = _getOwnStorage();
   207	    Token storage _token = $.tokens[tokenId];
   208	    require(_token.status == STATUS_TOKEN_SETTLE, 'Invalid Token Status');
   209	    _token.status = STATUS_TOKEN_INACTIVE;
   210	    emit TokenForceCancelSettlePhase(tokenId);
   211	  }
   212	  /// @notice  // updates settleDuration
   213	  /// @param tokenId market identifier
   214	  /// @param newValue settleDuration value
   215	
   216	  function updateSettleDuration(bytes32 tokenId, uint48 newValue) external onlyOwner {
   217	    MarketStorage storage $ = _getOwnStorage();
   218	    Token storage _token = $.tokens[tokenId];
   219	    uint48 oldValue = _token.settleDuration;
   220	    _token.settleDuration = newValue;
   221	    emit UpdateTokenSettleDuration(tokenId, oldValue, newValue);
   222	  }
   223	
   224	  // force cancel order - by Operator/Owner
   225	  // refund for both seller & buyer without any fees cut
   226	  /// @notice
   227	  /// @param orderId order identifier
   228	  function forceCancelOrder(uint256 orderId) public nonReentrant onlyOwner {
   229	    MarketStorage storage $ = _getOwnStorage();
   230	    Order storage order = $.orders[orderId];
   231	    Offer storage offer = $.offers[order.offerId];
   232	
   233	    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');
   234	
   235	    // calculate refund
   236	    uint256 buyerRefundValue = (order.amount * offer.value) / offer.amount; // value
   237	    uint256 sellerRefundValue = (order.amount * offer.collateral) / offer.amount; // collateral
   238	    address buyer = order.buyer;
   239	    address seller = order.seller;
   240	
   241	    // refund
   242	    if (offer.exToken == address(0)) {
   243	      // refund ETH
   244	      if (buyerRefundValue > 0 && buyer != address(0)) {
   245	        (bool success,) = buyer.call{value: buyerRefundValue}('');
   246	        require(success, 'Transfer Funds to Seller Fail');
   247	      }
   248	      if (sellerRefundValue > 0 && seller != address(0)) {
   249	        (bool success,) = seller.call{value: sellerRefundValue}('');
   250	        require(success, 'Transfer Funds to Seller Fail');
   251	      }
   252	    } else {
   253	      IERC20 iexToken = IERC20(offer.exToken);
   254	      if (buyerRefundValue > 0 && buyer != address(0)) {
   255	        iexToken.safeTransfer(buyer, buyerRefundValue);
   256	      }
   257	      if (sellerRefundValue > 0 && seller != address(0)) {
   258	        iexToken.safeTransfer(seller, sellerRefundValue);
   259	      }
   260	    }

exec
/bin/bash -lc "nl -ba src/FrontrunMarket.sol | sed -n '261,520p'" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
   261	    order.status = STATUS_ORDER_CANCELLED;
   262	    emit CancelOrder(orderId, msg.sender);
   263	  }
   264	
   265	  // 2 steps settle:
   266	  // Tx1: Seller sending token to system vault/buyer
   267	  // Tx2: then Operator/Owner verify and settle to pay seller money+collateral
   268	  function settle2Steps(uint256 orderId, bytes32 hash) public nonReentrant onlyOwner {
   269	    MarketStorage storage $ = _getOwnStorage();
   270	    Order storage order = $.orders[orderId];
   271	    Offer storage offer = $.offers[order.offerId];
   272	    Token storage token = $.tokens[offer.tokenId];
   273	
   274	    // check condition
   275	    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');
   276	    require(token.token != address(0) && token.settleRate > 0, 'Token Not Set');
   277	    require(block.timestamp > token.settleTime, 'Settling Time Not Started');
   278	    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');
   279	
   280	    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
   281	    uint256 value = (order.amount * offer.value) / offer.amount;
   282	
   283	    // transfer liquid to seller
   284	    uint256 settleFee = (value * $.config.feeSettle) / WEI6;
   285	    uint256 totalValue = value + collateral - settleFee;
   286	    if (offer.exToken == address(0)) {
   287	      // by ETH
   288	      (bool success1,) = order.seller.call{value: totalValue}('');
   289	      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
   290	      require(success1 && success2, 'Transfer Funds Fail');
   291	    } else {
   292	      // by exToken
   293	      IERC20 iexToken = IERC20(offer.exToken);
   294	      iexToken.safeTransfer(order.seller, totalValue);
   295	      iexToken.safeTransfer($.config.feeWallet, settleFee);
   296	    }
   297	
   298	    order.status = STATUS_ORDER_SETTLE_FILLED;
   299	
   300	    emit Settle2Steps(orderId, hash, msg.sender);
   301	    emit SettleFilled(orderId, totalValue, settleFee, msg.sender);
   302	  }
   303	
   304	  function settle2StepsBatch(uint256[] calldata orderIds, bytes32[] calldata hashes) external {
   305	    require(orderIds.length == hashes.length, 'Invalid Input');
   306	    for (uint256 i = 0; i < orderIds.length; i++) {
   307	      settle2Steps(orderIds[i], hashes[i]);
   308	    }
   309	  }
   310	
   311	  /////////////////////////
   312	  ////// USER ACTION //////
   313	  /////////////////////////
   314	
   315	  // make a offer request using erc20 collateral
   316	  /// @notice
   317	  /// @param tokenId market identifier
   318	  /// @param amount amount of market asset in 6 decimals
   319	  /// @param value amount of collateral being deposited, price = collateral/amount
   320	  /// @param exToken collateral token contract addres
   321	  /// @param minAmount min amount that must be filled by the counterparty in 6 decimals
   322	  function newOffer(
   323	    uint8 offerType,
   324	    bytes32 tokenId,
   325	    uint256 amount, //amount of asset
   326	    uint256 value, // amount of collateral
   327	    address exToken,
   328	    uint256 minAmount
   329	  ) external nonReentrant {
   330	    MarketStorage storage $ = _getOwnStorage();
   331	    Token storage token = $.tokens[tokenId];
   332	    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid Token');
   333	    require(exToken != address(0) && $.acceptedTokens[exToken], 'Invalid Offer Token');
   334	    require(amount > 0 && value > 0, 'Invalid Amount or Value');
   335	    require(amount >= minAmount, 'minamount to be filled cant be greater then amount');
   336	    require(minAmount >= token.minAmount, 'minamount should be greater then eual to market global minamount');
   337	    IERC20 iexToken = IERC20(exToken);
   338	    // collateral
   339	    uint256 collateral = (value * $.config.pledgeRate) / WEI6;
   340	
   341	    // transfer offer value (offer buy) or collateral (offer sell)
   342	    uint256 _transferAmount = offerType == OFFER_BUY ? value : collateral;
   343	    iexToken.safeTransferFrom(msg.sender, address(this), _transferAmount);
   344	
   345	    // create new offer
   346	    _newOffer(offerType, tokenId, exToken, amount, value, collateral, minAmount);
   347	  }
   348	
   349	  // New offer in ETH
   350	  /// @notice
   351	  /// @param tokenId market identifier
   352	  /// @param amount amount of market asset in 6 decimals
   353	  /// @param value amount of collateral being deposited, price = collateral/amount
   354	  /// @param minAmount min amount that must be filled by the counterparty in 6 decimals
   355	  function newOfferETH(
   356	    uint8 offerType,
   357	    bytes32 tokenId,
   358	    uint256 amount,
   359	    uint256 value,
   360	    uint256 minAmount
   361	  ) external payable nonReentrant {
   362	    MarketStorage storage $ = _getOwnStorage();
   363	    Token storage token = $.tokens[tokenId];
   364	    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid Token');
   365	    require(amount > 0 && value > 0, 'Invalid Amount or Value');
   366	    require(amount >= minAmount, 'minamount to be filled cant be greater then amount');
   367	    require(minAmount >= token.minAmount, 'minamount should be greater then eual to market global minamount');
   368	
   369	    // collateral
   370	    uint256 collateral = (value * $.config.pledgeRate) / WEI6;
   371	
   372	    uint256 _ethAmount = offerType == OFFER_BUY ? value : collateral;
   373	    require(_ethAmount == msg.value, 'Insufficient Funds');
   374	    // create new offer
   375	    _newOffer(offerType, tokenId, address(0), amount, value, collateral, minAmount);
   376	  }
   377	
   378	  /// @notice fill an offer with erc20 collateral and generate an orderid associated with a trade
   379	  /// @param offerId offer identifier
   380	  /// @param amount amount of market asset in 6 decimals
   381	  function fillOffer(uint256 offerId, uint256 amount) public {
   382	    MarketStorage storage $ = _getOwnStorage();
   383	    Offer storage offer = $.offers[offerId];
   384	    Token storage token = $.tokens[offer.tokenId];
   385	    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');
   386	    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid token Status');
   387	    require(amount > 0, 'Invalid Amount');
   388	    require(offer.amount - offer.filledAmount >= amount, 'Insufficient Allocations');
   389	    if (offer.amount - offer.filledAmount > offer.minAmount) {
   390	      require(amount >= offer.minAmount, 'cannot fill less then offer minamount');
   391	    } else {
   392	      require(amount == offer.amount - offer.filledAmount, 'if less then asset minamount must fill complete order');
   393	    }
   394	    require(offer.exToken != address(0), 'Invalid Offer Token');
   395	
   396	    // transfer value or collecteral
   397	    IERC20 iexToken = IERC20(offer.exToken);
   398	    uint256 _transferAmount;
   399	    address buyer;
   400	    address seller;
   401	    if (offer.offerType == OFFER_BUY) {
   402	      _transferAmount = (offer.collateral * amount) / offer.amount;
   403	      buyer = offer.offeredBy;
   404	      seller = msg.sender;
   405	    } else {
   406	      _transferAmount = (offer.value * amount) / offer.amount;
   407	      buyer = msg.sender;
   408	      seller = offer.offeredBy;
   409	    }
   410	    iexToken.safeTransferFrom(msg.sender, address(this), _transferAmount);
   411	
   412	    _fillOffer(offerId, amount, buyer, seller);
   413	  }
   414	
   415	  /// @notice fill an offer with eth collateral and generate an orderid associated with a trade
   416	  /// @param offerId offer identifier
   417	  /// @param amount amount of market asset in 6 decimals
   418	  function fillOfferETH(uint256 offerId, uint256 amount) external payable nonReentrant {
   419	    uint256 _ethAmount = _fillOfferETH(offerId, amount);
   420	    require(msg.value >= _ethAmount, 'Insufficient Funds');
   421	    require(_ethAmount + 5 * 1e16 > msg.value, 'Extra Amount Sent');
   422	  }
   423	
   424	  /// @notice batche fill both types of offers
   425	  function batchFillOffer(uint256[] calldata offerId, uint256[] calldata amount) external payable nonReentrant {
   426	    require(offerId.length == amount.length, 'Invalid Input');
   427	    uint256 _ethAmount;
   428	    MarketStorage storage $ = _getOwnStorage();
   429	    for (uint256 i = 0; i < offerId.length; i++) {
   430	      Offer storage offer = $.offers[offerId[i]];
   431	      if (offer.exToken == address(0)) {
   432	        _ethAmount += _fillOfferETH(offerId[i], amount[i]);
   433	      } else {
   434	        fillOffer(offerId[i], amount[i]);
   435	      }
   436	    }
   437	    require(msg.value >= _ethAmount, 'Insufficient Funds');
   438	    require(_ethAmount + 5 * 1e16 > msg.value, 'Extra Amount Sent');
   439	  }
   440	
   441	  function _fillOfferETH(uint256 offerId, uint256 amount) internal returns (uint256 _ethAmount) {
   442	    MarketStorage storage $ = _getOwnStorage();
   443	    Offer storage offer = $.offers[offerId];
   444	    Token storage token = $.tokens[offer.tokenId];
   445	    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');
   446	    require(token.status == STATUS_TOKEN_ACTIVE, 'Invalid token Status');
   447	    require(amount > 0, 'Invalid Amount');
   448	    require(offer.amount - offer.filledAmount >= amount, 'Insufficient Allocations');
   449	    if (offer.amount - offer.filledAmount > offer.minAmount) {
   450	      require(amount >= offer.minAmount, 'cannot fill less then offer minamount or asset minamount');
   451	    } else {
   452	      require(amount == offer.amount - offer.filledAmount, 'if less then asset minamount must fill complete order');
   453	    }
   454	    require(offer.exToken == address(0), 'Invalid Offer Token');
   455	
   456	    // transfer value or collecteral
   457	    address buyer;
   458	    address seller;
   459	    if (offer.offerType == OFFER_BUY) {
   460	      _ethAmount = (offer.collateral * amount) / offer.amount;
   461	      buyer = offer.offeredBy;
   462	      seller = msg.sender;
   463	    } else {
   464	      _ethAmount = (offer.value * amount) / offer.amount;
   465	      buyer = msg.sender;
   466	      seller = offer.offeredBy;
   467	    }
   468	    // new order
   469	    _fillOffer(offerId, amount, buyer, seller);
   470	  }
   471	
   472	  /// @notice close unfullfilled offer - by Offer owner
   473	  /// @param offerId offer identifier
   474	  function cancelOffer(uint256 offerId) public nonReentrant {
   475	    MarketStorage storage $ = _getOwnStorage();
   476	    Offer storage offer = $.offers[offerId];
   477	
   478	    require(offer.offeredBy == msg.sender, 'Offer Owner Only');
   479	    require(offer.status == STATUS_OFFER_OPEN, 'Invalid Offer Status');
   480	
   481	    uint256 refundAmount = offer.amount - offer.filledAmount;
   482	    require(refundAmount > 0, 'Insufficient Allocations');
   483	
   484	    // calculate refund
   485	    uint256 refundValue;
   486	    if (offer.offerType == OFFER_BUY) {
   487	      refundValue = (refundAmount * offer.value) / offer.amount;
   488	    } else {
   489	      refundValue = (refundAmount * offer.collateral) / offer.amount;
   490	    }
   491	    uint256 refundFee = (refundValue * $.config.feeRefund) / WEI6;
   492	    refundValue -= refundFee;
   493	
   494	    // refund
   495	    if (offer.exToken == address(0)) {
   496	      // refund ETH
   497	      (bool success1,) = offer.offeredBy.call{value: refundValue}('');
   498	      (bool success2,) = $.config.feeWallet.call{value: refundFee}('');
   499	      require(success1 && success2, 'Transfer Funds Fail');
   500	    } else {
   501	      IERC20 iexToken = IERC20(offer.exToken);
   502	      iexToken.safeTransfer(offer.offeredBy, refundValue);
   503	      iexToken.safeTransfer($.config.feeWallet, refundFee);
   504	    }
   505	
   506	    offer.status = STATUS_OFFER_CANCELLED;
   507	    emit CancelOffer(offerId, refundValue, refundFee, msg.sender);
   508	  }
   509	
   510	  //
   511	  /// @notice settle order - deliver token to finillize the order
   512	  /// @param orderId order identifier
   513	  function settleFilled(uint256 orderId) public nonReentrant {
   514	    MarketStorage storage $ = _getOwnStorage();
   515	    Order storage order = $.orders[orderId];
   516	    Offer storage offer = $.offers[order.offerId];
   517	    Token storage token = $.tokens[offer.tokenId];
   518	
   519	    // check condition
   520	    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');

exec
/bin/bash -lc "sed -n '1,220p' lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardUpgradeable.sol" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)

pragma solidity ^0.8.20;
import {Initializable} from "../proxy/utils/Initializable.sol";

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuardUpgradeable is Initializable {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard
    struct ReentrancyGuardStorage {
        uint256 _status;
    }

    // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff))
    bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;

    function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {
        assembly {
            $.slot := ReentrancyGuardStorageLocation
        }
    }

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    function __ReentrancyGuard_init() internal onlyInitializing {
        __ReentrancyGuard_init_unchained();
    }

    function __ReentrancyGuard_init_unchained() internal onlyInitializing {
        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
        $._status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if ($._status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        $._status = ENTERED;
    }

    function _nonReentrantAfter() private {
        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        $._status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
        return $._status == ENTERED;
    }
}

exec
/bin/bash -lc "nl -ba src/FrontrunMarket.sol | sed -n '521,793p'" in /tmp/codex-2v_62mvt
 succeeded in 0ms:
   521	    require(token.token != address(0) && token.settleRate > 0, 'Token Not Set');
   522	    require(block.timestamp > token.settleTime, 'Settling Time Not Started');
   523	    require(order.seller == msg.sender, 'Seller Only');
   524	    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');
   525	
   526	    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
   527	    uint256 value = (order.amount * offer.value) / offer.amount;
   528	
   529	    // transfer token to buyer
   530	    IERC20 iToken = IERC20(token.token);
   531	    // calculate token amount base on it's decimals
   532	    uint256 tokenAmount = (order.amount * token.settleRate) / WEI6;
   533	    uint256 tokenAmountFee = (tokenAmount * $.config.feeSettle) / WEI6;
   534	    // transfer order fee in token to fee wallet
   535	    iToken.safeTransferFrom(order.seller, $.config.feeWallet, tokenAmountFee);
   536	    // transfer token after fee to buyer
   537	    iToken.safeTransferFrom(order.seller, order.buyer, tokenAmount - tokenAmountFee);
   538	
   539	    // transfer liquid to seller
   540	    uint256 settleFee = (value * $.config.feeSettle) / WEI6;
   541	    uint256 totalValue = value + collateral - settleFee;
   542	    if (offer.exToken == address(0)) {
   543	      // by ETH
   544	      (bool success1,) = order.seller.call{value: totalValue}('');
   545	      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
   546	      require(success1 && success2, 'Transfer Funds Fail');
   547	    } else {
   548	      // by exToken
   549	      IERC20 iexToken = IERC20(offer.exToken);
   550	      iexToken.safeTransfer(order.seller, totalValue);
   551	      iexToken.safeTransfer($.config.feeWallet, settleFee);
   552	    }
   553	
   554	    order.status = STATUS_ORDER_SETTLE_FILLED;
   555	
   556	    emit SettleFilled(orderId, totalValue, settleFee, msg.sender);
   557	  }
   558	
   559	  /// @notice cancel unfilled order by token buyer after settleDuration time frame
   560	  /// @notice   // token seller lose collateral to token buyer
   561	  /// @param orderId order identifier
   562	
   563	  function settleCancelled(uint256 orderId) public nonReentrant {
   564	    MarketStorage storage $ = _getOwnStorage();
   565	    Order storage order = $.orders[orderId];
   566	    Offer storage offer = $.offers[order.offerId];
   567	    Token storage token = $.tokens[offer.tokenId];
   568	
   569	    // check condition
   570	    require(token.status == STATUS_TOKEN_SETTLE, 'Invalid Status');
   571	    require(block.timestamp > token.settleTime + token.settleDuration, 'Settling Time Not Ended Yet');
   572	    require(order.status == STATUS_ORDER_OPEN, 'Invalid Order Status');
   573	    require(order.buyer == msg.sender || owner() == msg.sender, 'Buyer or Operator/Owner Only');
   574	
   575	    uint256 collateral = (order.amount * offer.collateral) / offer.amount;
   576	    uint256 value = (order.amount * offer.value) / offer.amount;
   577	
   578	    // transfer liquid to buyer
   579	    uint256 settleFee = (collateral * $.config.feeSettle * 2) / WEI6;
   580	    uint256 totalValue = value + collateral - settleFee;
   581	    if (offer.exToken == address(0)) {
   582	      // by ETH
   583	      (bool success1,) = order.buyer.call{value: totalValue}('');
   584	      (bool success2,) = $.config.feeWallet.call{value: settleFee}('');
   585	      require(success1 && success2, 'Transfer Funds Fail');
   586	    } else {
   587	      // by exToken
   588	      IERC20 iexToken = IERC20(offer.exToken);
   589	      iexToken.safeTransfer(order.buyer, totalValue);
   590	      iexToken.safeTransfer($.config.feeWallet, settleFee);
   591	    }
   592	
   593	    order.status = STATUS_ORDER_SETTLE_CANCELLED;
   594	
   595	    emit SettleCancelled(orderId, totalValue, settleFee, msg.sender);
   596	  }
   597	
   598	  // Batch actions
   599	  function batchForceCancelOrders(uint256[] calldata orderIds) external {
   600	    for (uint256 i = 0; i < orderIds.length; i++) {
   601	      forceCancelOrder(orderIds[i]);
   602	    }
   603	  }
   604	
   605	  function batchCancelOffers(uint256[] calldata offerIds) external {
   606	    for (uint256 i = 0; i < offerIds.length; i++) {
   607	      cancelOffer(offerIds[i]);
   608	    }
   609	  }
   610	
   611	  function batchSettleFilleds(uint256[] calldata orderIds) external {
   612	    for (uint256 i = 0; i < orderIds.length; i++) {
   613	      settleFilled(orderIds[i]);
   614	    }
   615	  }
   616	
   617	  function batchSettleCancelleds(uint256[] calldata orderIds) external {
   618	    for (uint256 i = 0; i < orderIds.length; i++) {
   619	      settleCancelled(orderIds[i]);
   620	    }
   621	  }
   622	
   623	  ///////////////////////////
   624	  ///////// SETTER //////////
   625	  ///////////////////////////
   626	
   627	  function updateConfig(
   628	    address feeWallet_,
   629	    uint256 feeSettle_,
   630	    uint256 feeRefund_,
   631	    uint256 pledgeRate_
   632	  ) external onlyOwner {
   633	    MarketStorage storage $ = _getOwnStorage();
   634	    require(feeWallet_ != address(0), 'Invalid Address');
   635	    require(feeSettle_ <= WEI6 / 100, 'Settle Fee <= 10%');
   636	    require(feeRefund_ <= WEI6 / 100, 'Cancel Fee <= 10%');
   637	    emit UpdateConfig(
   638	      $.config.feeWallet,
   639	      $.config.feeSettle,
   640	      $.config.feeRefund,
   641	      $.config.pledgeRate,
   642	      feeWallet_,
   643	      feeSettle_,
   644	      feeRefund_,
   645	      pledgeRate_
   646	    );
   647	    // update
   648	    $.config.feeWallet = feeWallet_;
   649	    $.config.feeSettle = feeSettle_;
   650	    $.config.feeRefund = feeRefund_;
   651	    $.config.pledgeRate = pledgeRate_;
   652	  }
   653	
   654	  //
   655	  /// @notice adding/removing asset to be allowed to use as collateral
   656	  function setAcceptedTokens(address[] calldata tokenAddresses, bool isAccepted) external onlyOwner {
   657	    MarketStorage storage $ = _getOwnStorage();
   658	
   659	    for (uint256 i = 0; i < tokenAddresses.length; i++) {
   660	      $.acceptedTokens[tokenAddresses[i]] = isAccepted;
   661	    }
   662	    emit UpdateAcceptedTokens(tokenAddresses, isAccepted);
   663	  }
   664	
   665	  ///////////////////////////
   666	  ///////// GETTER //////////
   667	  ///////////////////////////
   668	  function offerAmount(uint256 offerId) external view returns (uint256) {
   669	    MarketStorage storage $ = _getOwnStorage();
   670	    return $.offers[offerId].amount;
   671	  }
   672	
   673	  function offerAmountAvailable(uint256 offerId) external view returns (uint256) {
   674	    MarketStorage storage $ = _getOwnStorage();
   675	    return $.offers[offerId].amount - $.offers[offerId].filledAmount;
   676	  }
   677	
   678	  function offerValue(uint256 offerId) external view returns (uint256) {
   679	    MarketStorage storage $ = _getOwnStorage();
   680	    return $.offers[offerId].value;
   681	  }
   682	
   683	  function offerExToken(uint256 offerId) external view returns (address) {
   684	    MarketStorage storage $ = _getOwnStorage();
   685	    return $.offers[offerId].exToken;
   686	  }
   687	
   688	  function isBuyOffer(uint256 offerId) external view returns (bool) {
   689	    MarketStorage storage $ = _getOwnStorage();
   690	    return $.offers[offerId].offerType == OFFER_BUY;
   691	  }
   692	
   693	  function isSellOffer(uint256 offerId) external view returns (bool) {
   694	    MarketStorage storage $ = _getOwnStorage();
   695	    return $.offers[offerId].offerType == OFFER_SELL;
   696	  }
   697	
   698	  function offerStatus(uint256 offerId) external view returns (uint256) {
   699	    MarketStorage storage $ = _getOwnStorage();
   700	    return $.offers[offerId].status;
   701	  }
   702	
   703	  function orderStatus(uint256 orderId) external view returns (uint256) {
   704	    MarketStorage storage $ = _getOwnStorage();
   705	    return $.orders[orderId].status;
   706	  }
   707	
   708	  function tokens(bytes32 tokenId) external view returns (Token memory) {
   709	    MarketStorage storage $ = _getOwnStorage();
   710	    return $.tokens[tokenId];
   711	  }
   712	
   713	  function offers(uint256 id) external view returns (Offer memory) {
   714	    MarketStorage storage $ = _getOwnStorage();
   715	    return $.offers[id];
   716	  }
   717	
   718	  function orders(uint256 id) external view returns (Order memory) {
   719	    MarketStorage storage $ = _getOwnStorage();
   720	    return $.orders[id];
   721	  }
   722	
   723	  function config() external view returns (Config memory) {
   724	    MarketStorage storage $ = _getOwnStorage();
   725	    return $.config;
   726	  }
   727	
   728	  function isAcceptedToken(address token) external view returns (bool) {
   729	    MarketStorage storage $ = _getOwnStorage();
   730	    return $.acceptedTokens[token];
   731	  }
   732	
   733	  function lastOfferId() external view returns (uint256) {
   734	    MarketStorage storage $ = _getOwnStorage();
   735	    return $.lastOfferId;
   736	  }
   737	
   738	  function lastOrderId() external view returns (uint256) {
   739	    MarketStorage storage $ = _getOwnStorage();
   740	    return $.lastOrderId;
   741	  }
   742	
   743	  ///////////////////////////
   744	  //////// INTERNAL /////////
   745	  ///////////////////////////
   746	  function _newOffer(
   747	    uint8 offerType,
   748	    bytes32 tokenId,
   749	    address exToken,
   750	    uint256 amount,
   751	    uint256 value,
   752	    uint256 collateral,
   753	    uint256 minAmount
   754	  ) internal {
   755	    MarketStorage storage $ = _getOwnStorage();
   756	    // create new offer
   757	    $.offers[++$.lastOfferId] =
   758	      Offer(offerType, tokenId, exToken, amount, value, collateral, 0, STATUS_OFFER_OPEN, msg.sender, minAmount);
   759	
   760	    emit NewOffer($.lastOfferId, offerType, tokenId, exToken, amount, value, collateral, minAmount, msg.sender);
   761	  }
   762	
   763	  function _fillOffer(uint256 offerId, uint256 amount, address buyer, address seller) internal {
   764	    MarketStorage storage $ = _getOwnStorage();
   765	    Offer storage offer = $.offers[offerId];
   766	    // new order
   767	    $.orders[++$.lastOrderId] = Order(offerId, amount, seller, buyer, STATUS_ORDER_OPEN);
   768	
   769	    // check if offer is fullfilled
   770	    offer.filledAmount += amount;
   771	    if (offer.filledAmount == offer.amount) {
   772	      offer.status = STATUS_OFFER_FILLED;
   773	      emit CloseOffer(offerId, 0);
   774	    }
   775	
   776	    emit NewOrder($.lastOrderId, offerId, amount, seller, buyer);
   777	  }
   778	
   779	  // get stuck token in contract
   780	  function withdrawStuckToken(address _token, address _to) external onlyOwner {
   781	    MarketStorage storage $ = _getOwnStorage();
   782	    require(_token != address(0) && !$.acceptedTokens[_token], 'Invalid Token Address');
   783	    uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
   784	    IERC20(_token).safeTransfer(_to, _contractBalance);
   785	  }
   786	}

Finished reading the full bundle and the contract. I’m now validating two concrete loss-of-funds issues around token accounting and privileged withdrawals, and checking whether any other in-scope exploit paths are stronger than those.
  ✓ Inspect workspace and locate first-party Solidity sources, starting with AUDIT_BUNDLE.txt
  → Review bundled contracts for exploitable issues in scope categories
  • Produce JSON audit findings with evidence and locations
  ✓ Inspect workspace and locate first-party Solidity sources, starting with AUDIT_BUNDLE.txt
  ✓ Review bundled contracts for exploitable issues in scope categories
  → Produce JSON audit findings with evidence and locations
codex
{"no_findings":false,"summary":"Reviewed the full first-party bundle (`src/FrontrunMarket.sol`). Found two concrete loss-of-funds issues: escrow accounting breaks for fee-on-transfer collateral tokens, and the owner can de-whitelist an in-use token and withdraw user escrow.","findings":[{"severity":"high","category":"other","title":"Fee-on-transfer collateral tokens let users over-withdraw from pooled escrow","exploit_scenario":"If the owner whitelists a deflationary or fee-on-transfer ERC20, `newOffer`/`fillOffer` record the nominal `value` or `collateral` even when the contract receives less. An attacker can create an offer with a token that takes 10% on inbound transfers, deposit 90 tokens while the contract books 100, then cancel the offer and withdraw 100 from the shared pool. Repeating this drains other users' balances for that token and leaves later settlements/refunds insolvent.","recommendation":"Reject non-standard collateral tokens, or account by actual balance deltas (`balanceAfter - balanceBefore`) instead of user-supplied nominal amounts. Store per-offer deposited amounts based on what was really received.","evidence":"`newOffer` and `fillOffer` call `safeTransferFrom` and then immediately store/order against the caller-provided `value`/`collateral` without checking the actual amount received. `cancelOffer`, `settleFilled`, and `settleCancelled` later pay out based on those nominal amounts from a shared per-token balance.","locations":["src/FrontrunMarket.sol:322","src/FrontrunMarket.sol:343","src/FrontrunMarket.sol:346","src/FrontrunMarket.sol:381","src/FrontrunMarket.sol:410","src/FrontrunMarket.sol:412","src/FrontrunMarket.sol:474","src/FrontrunMarket.sol:513","src/FrontrunMarket.sol:563"]},{"severity":"high","category":"access_control","title":"Owner can de-whitelist an active collateral token and withdraw funds backing live positions","exploit_scenario":"Any accepted collateral token can be toggled to `false` via `setAcceptedTokens`, after which `withdrawStuckToken` will transfer the contract's entire balance of that token to an arbitrary address. If there are still open offers or orders using that token, the owner or a compromised owner key can drain the escrowed funds and leave users unable to cancel or settle their positions.","recommendation":"Do not let rescue logic depend only on the current whitelist flag. Track outstanding liabilities per token and only allow withdrawing true surplus, or forbid de-whitelisting/rescuing any token while open offers/orders still reference it.","evidence":"`setAcceptedTokens` can remove any token from the whitelist with no check for outstanding exposure. `withdrawStuckToken` only requires `!acceptedTokens[_token]`, then transfers the full contract balance of that token even though open offers/orders continue to use pooled balances for refunds and settlements.","locations":["src/FrontrunMarket.sol:656","src/FrontrunMarket.sol:660","src/FrontrunMarket.sol:780","src/FrontrunMarket.sol:782","src/FrontrunMarket.sol:784"]}]}
tokens used
32,931
Metadata
{
    "codex": {
        "ran_at": "2026-04-04T04:16:39.345192+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 19,
        "import_count": 22,
        "first_party_contracts_count": 1
    },
    "summary": "Reviewed the full first-party bundle (`src/FrontrunMarket.sol`). Found two concrete loss-of-funds issues: escrow accounting breaks for fee-on-transfer collateral tokens, and the owner can de-whitelist an in-use token and withdraw user escrow.",
    "raw_final": {
        "summary": "Reviewed the full first-party bundle (`src/FrontrunMarket.sol`). Found two concrete loss-of-funds issues: escrow accounting breaks for fee-on-transfer collateral tokens, and the owner can de-whitelist an in-use token and withdraw user escrow.",
        "findings": [
            {
                "title": "Fee-on-transfer collateral tokens let users over-withdraw from pooled escrow",
                "category": "other",
                "evidence": "`newOffer` and `fillOffer` call `safeTransferFrom` and then immediately store/order against the caller-provided `value`/`collateral` without checking the actual amount received. `cancelOffer`, `settleFilled`, and `settleCancelled` later pay out based on those nominal amounts from a shared per-token balance.",
                "severity": "high",
                "locations": [
                    "src/FrontrunMarket.sol:322",
                    "src/FrontrunMarket.sol:343",
                    "src/FrontrunMarket.sol:346",
                    "src/FrontrunMarket.sol:381",
                    "src/FrontrunMarket.sol:410",
                    "src/FrontrunMarket.sol:412",
                    "src/FrontrunMarket.sol:474",
                    "src/FrontrunMarket.sol:513",
                    "src/FrontrunMarket.sol:563"
                ],
                "recommendation": "Reject non-standard collateral tokens, or account by actual balance deltas (`balanceAfter - balanceBefore`) instead of user-supplied nominal amounts. Store per-offer deposited amounts based on what was really received.",
                "exploit_scenario": "If the owner whitelists a deflationary or fee-on-transfer ERC20, `newOffer`/`fillOffer` record the nominal `value` or `collateral` even when the contract receives less. An attacker can create an offer with a token that takes 10% on inbound transfers, deposit 90 tokens while the contract books 100, then cancel the offer and withdraw 100 from the shared pool. Repeating this drains other users' balances for that token and leaves later settlements/refunds insolvent."
            },
            {
                "title": "Owner can de-whitelist an active collateral token and withdraw funds backing live positions",
                "category": "access_control",
                "evidence": "`setAcceptedTokens` can remove any token from the whitelist with no check for outstanding exposure. `withdrawStuckToken` only requires `!acceptedTokens[_token]`, then transfers the full contract balance of that token even though open offers/orders continue to use pooled balances for refunds and settlements.",
                "severity": "high",
                "locations": [
                    "src/FrontrunMarket.sol:656",
                    "src/FrontrunMarket.sol:660",
                    "src/FrontrunMarket.sol:780",
                    "src/FrontrunMarket.sol:782",
                    "src/FrontrunMarket.sol:784"
                ],
                "recommendation": "Do not let rescue logic depend only on the current whitelist flag. Track outstanding liabilities per token and only allow withdrawing true surplus, or forbid de-whitelisting/rescuing any token while open offers/orders still reference it.",
                "exploit_scenario": "Any accepted collateral token can be toggled to `false` via `setAcceptedTokens`, after which `withdrawStuckToken` will transfer the contract's entire balance of that token to an arbitrary address. If there are still open offers or orders using that token, the owner or a compromised owner key can drain the escrowed funds and leave users unable to cancel or settle their positions."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
12
EXT*/BALANCE
3
Total opcodes
11385
Flags
call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x01e1
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x0787ef39
00000019: EQ
0000001a: PUSH2 0x01e6
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0x16b4cdb2
00000024: EQ
00000025: PUSH2 0x0208
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0x18b4f367
0000002f: EQ
00000030: PUSH2 0x0228
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0x1f25a2d8
0000003a: EQ
0000003b: PUSH2 0x025d
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0x21146fa2
00000045: EQ
00000046: PUSH2 0x027d
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0x2d670584
00000050: EQ
00000051: PUSH2 0x029d
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0x3b6e750f
0000005b: EQ
0000005c: PUSH2 0x02bd
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0x410ce4c4
00000066: EQ
00000067: PUSH2 0x02dd
0000006a: JUMPI
0000006b: DUP1
0000006c: PUSH4 0x4536bff1
00000071: EQ
00000072: PUSH2 0x02fd
00000075: JUMPI
00000076: DUP1
00000077: PUSH4 0x5662ecc7
0000007c: EQ
0000007d: PUSH2 0x0310
00000080: JUMPI
00000081: DUP1
00000082: PUSH4 0x5d3473e3
00000087: EQ
00000088: PUSH2 0x0333
0000008b: JUMPI
0000008c: DUP1
0000008d: PUSH4 0x643268c9
00000092: EQ
00000093: PUSH2 0x0353
00000096: JUMPI
00000097: DUP1
00000098: PUSH4 0x69bd7dbb
0000009d: EQ
0000009e: PUSH2 0x0368
000000a1: JUMPI
000000a2: DUP1
000000a3: PUSH4 0x6a951f20
000000a8: EQ
000000a9: PUSH2 0x0388
000000ac: JUMPI
000000ad: DUP1
000000ae: PUSH4 0x715018a6
000000b3: EQ
000000b4: PUSH2 0x03a8
000000b7: JUMPI
000000b8: DUP1
000000b9: PUSH4 0x7400f52d
000000be: EQ
000000bf: PUSH2 0x03bd
000000c2: JUMPI
000000c3: DUP1
000000c4: PUSH4 0x76fbc544
000000c9: EQ
000000ca: PUSH2 0x03dd
000000cd: JUMPI
000000ce: DUP1
000000cf: PUSH4 0x78447e7f
000000d4: EQ
000000d5: PUSH2 0x03f0
000000d8: JUMPI
000000d9: DUP1
000000da: PUSH4 0x79502c55
000000df: EQ
000000e0: PUSH2 0x0410
000000e3: JUMPI
000000e4: DUP1
000000e5: PUSH4 0x8129fc1c
000000ea: EQ
000000eb: PUSH2 0x0461
000000ee: JUMPI
000000ef: DUP1
000000f0: PUSH4 0x81cc37b2
000000f5: EQ
000000f6: PUSH2 0x0476
000000f9: JUMPI
000000fa: DUP1
000000fb: PUSH4 0x86aa7db0
00000100: EQ
00000101: PUSH2 0x0489
00000104: JUMPI
00000105: DUP1
00000106: PUSH4 0x8a72ea6a
0000010b: EQ
0000010c: PUSH2 0x04a9
0000010f: JUMPI
00000110: DUP1
00000111: PUSH4 0x8da5cb5b
00000116: EQ
00000117: PUSH2 0x04d6
0000011a: JUMPI
0000011b: DUP1
0000011c: PUSH4 0x904194a3
00000121: EQ
00000122: PUSH2 0x04f8
00000125: JUMPI
00000126: DUP1
00000127: PUSH4 0x982c3402
0000012c: EQ
0000012d: PUSH2 0x0581
00000130: JUMPI
00000131: DUP1
00000132: PUSH4 0x985a7c1d
00000137: EQ
00000138: PUSH2 0x05a1
0000013b: JUMPI
0000013c: DUP1
0000013d: PUSH4 0xa1bd91e1
00000142: EQ
00000143: PUSH2 0x05c1
00000146: JUMPI
00000147: DUP1
00000148: PUSH4 0xa85c38ef
0000014d: EQ
0000014e: PUSH2 0x05e1
00000151: JUMPI
00000152: DUP1
00000153: PUSH4 0xaa22093f
00000158: EQ
00000159: PUSH2 0x0652
0000015c: JUMPI
0000015d: DUP1
0000015e: PUSH4 0xaaab596a
00000163: EQ
00000164: PUSH2 0x0672
00000167: JUMPI
00000168: DUP1
00000169: PUSH4 0xb33ec6f7
0000016e: EQ
0000016f: PUSH2 0x0692
00000172: JUMPI
00000173: DUP1
00000174: PUSH4 0xbc205ad3
00000179: EQ
0000017a: PUSH2 0x06b2
0000017d: JUMPI
0000017e: DUP1
0000017f: PUSH4 0xbff49450
00000184: EQ
00000185: PUSH2 0x06d2
00000188: JUMPI
00000189: DUP1
0000018a: PUSH4 0xd843b2c7
0000018f: EQ
00000190: PUSH2 0x06f2
00000193: JUMPI
00000194: DUP1
00000195: PUSH4 0xdc8beea9
0000019a: EQ
0000019b: PUSH2 0x0712
0000019e: JUMPI
0000019f: DUP1
000001a0: PUSH4 0xdeb2ec6a
000001a5: EQ
000001a6: PUSH2 0x0732
000001a9: JUMPI
000001aa: DUP1
000001ab: PUSH4 0xe3df748a
000001b0: EQ
000001b1: PUSH2 0x0752
000001b4: JUMPI
000001b5: DUP1
000001b6: PUSH4 0xe4cb62c0
000001bb: EQ
000001bc: PUSH2 0x0772
000001bf: JUMPI
000001c0: DUP1
000001c1: PUSH4 0xe7a75949
000001c6: EQ
000001c7: PUSH2 0x0792
000001ca: JUMPI
000001cb: DUP1
000001cc: PUSH4 0xef706adf
000001d1: EQ
000001d2: PUSH2 0x07b2
000001d5: JUMPI
000001d6: DUP1
000001d7: PUSH4 0xf2fde38b
000001dc: EQ
000001dd: PUSH2 0x07d2
000001e0: JUMPI
000001e1: JUMPDEST
000001e2: PUSH1 0x00
000001e4: DUP1
000001e5: REVERT
000001e6: JUMPDEST
000001e7: CALLVALUE
000001e8: DUP1
000001e9: ISZERO
000001ea: PUSH2 0x01f2
000001ed: JUMPI
000001ee: PUSH1 0x00
000001f0: DUP1
000001f1: REVERT
000001f2: JUMPDEST
000001f3: POP
000001f4: PUSH2 0x0206
000001f7: PUSH2 0x0201
000001fa: CALLDATASIZE
000001fb: PUSH1 0x04
000001fd: PUSH2 0x39eb
00000200: JUMP
00000201: JUMPDEST
00000202: PUSH2 0x07f2
00000205: JUMP
00000206: JUMPDEST
00000207: STOP
00000208: JUMPDEST
00000209: CALLVALUE
0000020a: DUP1
0000020b: ISZERO
0000020c: PUSH2 0x0214
0000020f: JUMPI
00000210: PUSH1 0x00
00000212: DUP1
00000213: REVERT
00000214: JUMPDEST
00000215: POP
00000216: PUSH2 0x0206
00000219: PUSH2 0x0223
0000021c: CALLDATASIZE
0000021d: PUSH1 0x04
0000021f: PUSH2 0x3a2c
00000222: JUMP
00000223: JUMPDEST
00000224: PUSH2 0x0835
00000227: JUMP
00000228: JUMPDEST
00000229: CALLVALUE
0000022a: DUP1
0000022b: ISZERO
0000022c: PUSH2 0x0234
0000022f: JUMPI
00000230: PUSH1 0x00
00000232: DUP1
00000233: REVERT
00000234: JUMPDEST
00000235: POP
00000236: PUSH2 0x0248
00000239: PUSH2 0x0243
0000023c: CALLDATASIZE
0000023d: PUSH1 0x04
0000023f: PUSH2 0x3a4e
00000242: JUMP
00000243: JUMPDEST
00000244: PUSH2 0x0bae
00000247: JUMP
00000248: JUMPDEST
00000249: PUSH1 0x40
0000024b: MLOAD
0000024c: SWAP1
0000024d: ISZERO
0000024e: ISZERO
0000024f: DUP2
00000250: MSTORE
00000251: PUSH1 0x20
00000253: ADD
00000254: JUMPDEST
00000255: PUSH1 0x40
00000257: MLOAD
00000258: DUP1
00000259: SWAP2
0000025a: SUB
0000025b: SWAP1
0000025c: RETURN
0000025d: JUMPDEST
0000025e: CALLVALUE
0000025f: DUP1
00000260: ISZERO
00000261: PUSH2 0x0269
00000264: JUMPI
00000265: PUSH1 0x00
00000267: DUP1
00000268: REVERT
00000269: JUMPDEST
0000026a: POP
0000026b: PUSH2 0x0206
0000026e: PUSH2 0x0278
00000271: CALLDATASIZE
00000272: PUSH1 0x04
00000274: PUSH2 0x3a83
00000277: JUMP
00000278: JUMPDEST
00000279: PUSH2 0x0bd8
0000027c: JUMP
0000027d: JUMPDEST
0000027e: CALLVALUE
0000027f: DUP1
00000280: ISZERO
00000281: PUSH2 0x0289
00000284: JUMPI
00000285: PUSH1 0x00
00000287: DUP1
00000288: REVERT
00000289: JUMPDEST
0000028a: POP
0000028b: PUSH2 0x0206
0000028e: PUSH2 0x0298
00000291: CALLDATASIZE
00000292: PUSH1 0x04
00000294: PUSH2 0x3ad2
00000297: JUMP
00000298: JUMPDEST
00000299: PUSH2 0x0d91
0000029c: JUMP
0000029d: JUMPDEST
0000029e: CALLVALUE
0000029f: DUP1
000002a0: ISZERO
000002a1: PUSH2 0x02a9
000002a4: JUMPI
000002a5: PUSH1 0x00
000002a7: DUP1
000002a8: REVERT
000002a9: JUMPDEST
000002aa: POP
000002ab: PUSH2 0x0206
000002ae: PUSH2 0x02b8
000002b1: CALLDATASIZE
000002b2: PUSH1 0x04
000002b4: PUSH2 0x3afe
000002b7: JUMP
000002b8: JUMPDEST
000002b9: PUSH2 0x0e28
000002bc: JUMP
000002bd: JUMPDEST
000002be: CALLVALUE
000002bf: DUP1
000002c0: ISZERO
000002c1: PUSH2 0x02c9
000002c4: JUMPI
000002c5: PUSH1 0x00
000002c7: DUP1
000002c8: REVERT
000002c9: JUMPDEST
000002ca: POP
000002cb: PUSH2 0x0248
000002ce: PUSH2 0x02d8
000002d1: CALLDATASIZE
000002d2: PUSH1 0x04
000002d4: PUSH2 0x3b69
000002d7: JUMP
000002d8: JUMPDEST
000002d9: PUSH2 0x0ea5
000002dc: JUMP
000002dd: JUMPDEST
000002de: CALLVALUE
000002df: DUP1
000002e0: ISZERO
000002e1: PUSH2 0x02e9
000002e4: JUMPI
000002e5: PUSH1 0x00
000002e7: DUP1
000002e8: REVERT
000002e9: JUMPDEST
000002ea: POP
000002eb: PUSH2 0x0206
000002ee: PUSH2 0x02f8
000002f1: CALLDATASIZE
000002f2: PUSH1 0x04
000002f4: PUSH2 0x3b84
000002f7: JUMP
000002f8: JUMPDEST
000002f9: PUSH2 0x0ed3
000002fc: JUMP
000002fd: JUMPDEST
000002fe: PUSH2 0x0206
00000301: PUSH2 0x030b
00000304: CALLDATASIZE
00000305: PUSH1 0x04
00000307: PUSH2 0x3afe
0000030a: JUMP
0000030b: JUMPDEST
0000030c: PUSH2 0x0f77
0000030f: JUMP
00000310: JUMPDEST
00000311: CALLVALUE
00000312: DUP1
00000313: ISZERO
00000314: PUSH2 0x031c
00000317: JUMPI
00000318: PUSH1 0x00
0000031a: DUP1
0000031b: REVERT
0000031c: JUMPDEST
0000031d: POP
0000031e: PUSH2 0x0325
00000321: PUSH2 0x10f6
00000324: JUMP
00000325: JUMPDEST
00000326: PUSH1 0x40
00000328: MLOAD
00000329: SWAP1
0000032a: DUP2
0000032b: MSTORE
0000032c: PUSH1 0x20
0000032e: ADD
0000032f: PUSH2 0x0254
00000332: JUMP
00000333: JUMPDEST
00000334: CALLVALUE
00000335: DUP1
00000336: ISZERO
00000337: PUSH2 0x033f
0000033a: JUMPI
0000033b: PUSH1 0x00
0000033d: DUP1
0000033e: REVERT
0000033f: JUMPDEST
00000340: POP
00000341: PUSH2 0x0248
00000344: PUSH2 0x034e
00000347: CALLDATASIZE
00000348: PUSH1 0x04
0000034a: PUSH2 0x3a4e
0000034d: JUMP
0000034e: JUMPDEST
0000034f: PUSH2 0x110b
00000352: JUMP
00000353: JUMPDEST
00000354: CALLVALUE
00000355: DUP1
00000356: ISZERO
00000357: PUSH2 0x035f
0000035a: JUMPI
0000035b: PUSH1 0x00
0000035d: DUP1
0000035e: REVERT
0000035f: JUMPDEST
00000360: POP
00000361: PUSH2 0x0325
00000364: PUSH2 0x1131
00000367: JUMP
00000368: JUMPDEST
00000369: CALLVALUE
0000036a: DUP1
0000036b: ISZERO
0000036c: PUSH2 0x0374
0000036f: JUMPI
00000370: PUSH1 0x00
00000372: DUP1
00000373: REVERT
00000374: JUMPDEST
00000375: POP
00000376: PUSH2 0x0206
00000379: PUSH2 0x0383
0000037c: CALLDATASIZE
0000037d: PUSH1 0x04
0000037f: PUSH2 0x39eb
00000382: JUMP
00000383: JUMPDEST
00000384: PUSH2 0x1146
00000387: JUMP
00000388: JUMPDEST
00000389: CALLVALUE
0000038a: DUP1
0000038b: ISZERO
0000038c: PUSH2 0x0394
0000038f: JUMPI
00000390: PUSH1 0x00
00000392: DUP1
00000393: REVERT
00000394: JUMPDEST
00000395: POP
00000396: PUSH2 0x0206
00000399: PUSH2 0x03a3
0000039c: CALLDATASIZE
0000039d: PUSH1 0x04
0000039f: PUSH2 0x3a4e
000003a2: JUMP
000003a3: JUMPDEST
000003a4: PUSH2 0x1184
000003a7: JUMP
000003a8: JUMPDEST
000003a9: CALLVALUE
000003aa: DUP1
000003ab: ISZERO
000003ac: PUSH2 0x03b4
000003af: JUMPI
000003b0: PUSH1 0x00
000003b2: DUP1
000003b3: REVERT
000003b4: JUMPDEST
000003b5: POP
000003b6: PUSH2 0x0206
000003b9: PUSH2 0x1289
000003bc: JUMP
000003bd: JUMPDEST
000003be: CALLVALUE
000003bf: DUP1
000003c0: ISZERO
000003c1: PUSH2 0x03c9
000003c4: JUMPI
000003c5: PUSH1 0x00
000003c7: DUP1
000003c8: REVERT
000003c9: JUMPDEST
000003ca: POP
000003cb: PUSH2 0x0206
000003ce: PUSH2 0x03d8
000003d1: CALLDATASIZE
000003d2: PUSH1 0x04
000003d4: PUSH2 0x3a4e
000003d7: JUMP
000003d8: JUMPDEST
000003d9: PUSH2 0x129d
000003dc: JUMP
000003dd: JUMPDEST
000003de: PUSH2 0x0206
000003e1: PUSH2 0x03eb
000003e4: CALLDATASIZE
000003e5: PUSH1 0x04
000003e7: PUSH2 0x3bca
000003ea: JUMP
000003eb: JUMPDEST
000003ec: PUSH2 0x133f
000003ef: JUMP
000003f0: JUMPDEST
000003f1: CALLVALUE
000003f2: DUP1
000003f3: ISZERO
000003f4: PUSH2 0x03fc
000003f7: JUMPI
000003f8: PUSH1 0x00
000003fa: DUP1
000003fb: REVERT
000003fc: JUMPDEST
000003fd: POP
000003fe: PUSH2 0x0206
00000401: PUSH2 0x040b
00000404: CALLDATASIZE
00000405: PUSH1 0x04
00000407: PUSH2 0x3a2c
0000040a: JUMP
0000040b: JUMPDEST
0000040c: PUSH2 0x1477
0000040f: JUMP
00000410: JUMPDEST
00000411: CALLVALUE
00000412: DUP1
00000413: ISZERO
00000414: PUSH2 0x041c
00000417: JUMPI
00000418: PUSH1 0x00
0000041a: DUP1
0000041b: REVERT
0000041c: JUMPDEST
0000041d: POP
0000041e: PUSH2 0x0425
00000421: PUSH2 0x16e9
00000424: JUMP
00000425: JUMPDEST
00000426: PUSH1 0x40
00000428: MLOAD
00000429: PUSH2 0x0254
0000042c: SWAP2
0000042d: SWAP1
0000042e: DUP2
0000042f: MLOAD
00000430: DUP2
00000431: MSTORE
00000432: PUSH1 0x20
00000434: DUP1
00000435: DUP4
00000436: ADD
00000437: MLOAD
00000438: SWAP1
00000439: DUP3
0000043a: ADD
0000043b: MSTORE
0000043c: PUSH1 0x40
0000043e: DUP1
0000043f: DUP4
00000440: ADD
00000441: MLOAD
00000442: SWAP1
00000443: DUP3
00000444: ADD
00000445: MSTORE
00000446: PUSH1 0x60
00000448: SWAP2
00000449: DUP3
0000044a: ADD
0000044b: MLOAD
0000044c: PUSH1 0x01
0000044e: PUSH1 0x01
00000450: PUSH1 0xa0
00000452: SHL
00000453: SUB
00000454: AND
00000455: SWAP2
00000456: DUP2
00000457: ADD
00000458: SWAP2
00000459: SWAP1
0000045a: SWAP2
0000045b: MSTORE
0000045c: PUSH1 0x80
0000045e: ADD
0000045f: SWAP1
00000460: JUMP
00000461: JUMPDEST
00000462: CALLVALUE
00000463: DUP1
00000464: ISZERO
00000465: PUSH2 0x046d
00000468: JUMPI
00000469: PUSH1 0x00
0000046b: DUP1
0000046c: REVERT
0000046d: JUMPDEST
0000046e: POP
0000046f: PUSH2 0x0206
00000472: PUSH2 0x1768
00000475: JUMP
00000476: JUMPDEST
00000477: PUSH2 0x0206
0000047a: PUSH2 0x0484
0000047d: CALLDATASIZE
0000047e: PUSH1 0x04
00000480: PUSH2 0x3a2c
00000483: JUMP
00000484: JUMPDEST
00000485: PUSH2 0x18af
00000488: JUMP
00000489: JUMPDEST
0000048a: CALLVALUE
0000048b: DUP1
0000048c: ISZERO
0000048d: PUSH2 0x0495
00000490: JUMPI
00000491: PUSH1 0x00
00000493: DUP1
00000494: REVERT
00000495: JUMPDEST
00000496: POP
00000497: PUSH2 0x0206
0000049a: PUSH2 0x04a4
0000049d: CALLDATASIZE
0000049e: PUSH1 0x04
000004a0: PUSH2 0x3c19
000004a3: JUMP
000004a4: JUMPDEST
000004a5: PUSH2 0x191d
000004a8: JUMP
000004a9: JUMPDEST
000004aa: CALLVALUE
000004ab: DUP1
000004ac: ISZERO
000004ad: PUSH2 0x04b5
000004b0: JUMPI
000004b1: PUSH1 0x00
000004b3: DUP1
000004b4: REVERT
000004b5: JUMPDEST
000004b6: POP
000004b7: PUSH2 0x04c9
000004ba: PUSH2 0x04c4
000004bd: CALLDATASIZE
000004be: PUSH1 0x04
000004c0: PUSH2 0x3a4e
000004c3: JUMP
000004c4: JUMPDEST
000004c5: PUSH2 0x1a9b
000004c8: JUMP
000004c9: JUMPDEST
000004ca: PUSH1 0x40
000004cc: MLOAD
000004cd: PUSH2 0x0254
000004d0: SWAP2
000004d1: SWAP1
000004d2: PUSH2 0x3c65
000004d5: JUMP
000004d6: JUMPDEST
000004d7: CALLVALUE
000004d8: DUP1
000004d9: ISZERO
000004da: PUSH2 0x04e2
000004dd: JUMPI
000004de: PUSH1 0x00
000004e0: DUP1
000004e1: REVERT
000004e2: JUMPDEST
000004e3: POP
000004e4: PUSH2 0x04eb
000004e7: PUSH2 0x1b93
000004ea: JUMP
000004eb: JUMPDEST
000004ec: PUSH1 0x40
000004ee: MLOAD
000004ef: PUSH2 0x0254
000004f2: SWAP2
000004f3: SWAP1
000004f4: PUSH2 0x3cef
000004f7: JUMP
000004f8: JUMPDEST
000004f9: CALLVALUE
000004fa: DUP1
000004fb: ISZERO
000004fc: PUSH2 0x0504
000004ff: JUMPI
00000500: PUSH1 0x00
00000502: DUP1
00000503: REVERT
00000504: JUMPDEST
00000505: POP
00000506: PUSH2 0x0518
00000509: PUSH2 0x0513
0000050c: CALLDATASIZE
0000050d: PUSH1 0x04
0000050f: PUSH2 0x3a4e
00000512: JUMP
00000513: JUMPDEST
00000514: PUSH2 0x1bae
00000517: JUMP
00000518: JUMPDEST
00000519: PUSH1 0x40
0000051b: DUP1
0000051c: MLOAD
0000051d: DUP3
0000051e: MLOAD
0000051f: PUSH1 0x01
00000521: PUSH1 0x01
00000523: PUSH1 0xa0
00000525: SHL
00000526: SUB
00000527: AND
00000528: DUP2
00000529: MSTORE
0000052a: PUSH1 0x20
0000052c: DUP1
0000052d: DUP5
0000052e: ADD
0000052f: MLOAD
00000530: PUSH6 0xffffffffffff
00000537: SWAP1
00000538: DUP2
00000539: AND
0000053a: SWAP2
0000053b: DUP4
0000053c: ADD
0000053d: SWAP2
0000053e: SWAP1
0000053f: SWAP2
00000540: MSTORE
00000541: DUP4
00000542: DUP4
00000543: ADD
00000544: MLOAD
00000545: AND
00000546: SWAP2
00000547: DUP2
00000548: ADD
00000549: SWAP2
0000054a: SWAP1
0000054b: SWAP2
0000054c: MSTORE
0000054d: PUSH1 0x60
0000054f: DUP1
00000550: DUP4
00000551: ADD
00000552: MLOAD
00000553: PUSH1 0x01
00000555: PUSH1 0x01
00000557: PUSH1 0x98
00000559: SHL
0000055a: SUB
0000055b: AND
0000055c: SWAP1
0000055d: DUP3
0000055e: ADD
0000055f: MSTORE
00000560: PUSH1 0x80
00000562: DUP1
00000563: DUP4
00000564: ADD
00000565: MLOAD
00000566: PUSH1 0xff
00000568: AND
00000569: SWAP1
0000056a: DUP3
0000056b: ADD
0000056c: MSTORE
0000056d: PUSH1 0xa0
0000056f: SWAP2
00000570: DUP3
00000571: ADD
00000572: MLOAD
00000573: SWAP2
00000574: DUP2
00000575: ADD
00000576: SWAP2
00000577: SWAP1
00000578: SWAP2
00000579: MSTORE
0000057a: PUSH1 0xc0
0000057c: ADD
0000057d: PUSH2 0x0254
00000580: JUMP
00000581: JUMPDEST
00000582: CALLVALUE
00000583: DUP1
00000584: ISZERO
00000585: PUSH2 0x058d
00000588: JUMPI
00000589: PUSH1 0x00
0000058b: DUP1
0000058c: REVERT
0000058d: JUMPDEST
0000058e: POP
0000058f: PUSH2 0x0206
00000592: PUSH2 0x059c
00000595: CALLDATASIZE
00000596: PUSH1 0x04
00000598: PUSH2 0x39eb
0000059b: JUMP
0000059c: JUMPDEST
0000059d: PUSH2 0x1c70
000005a0: JUMP
000005a1: JUMPDEST
000005a2: CALLVALUE
000005a3: DUP1
000005a4: ISZERO
000005a5: PUSH2 0x05ad
000005a8: JUMPI
000005a9: PUSH1 0x00
000005ab: DUP1
000005ac: REVERT
000005ad: JUMPDEST
000005ae: POP
000005af: PUSH2 0x0206
000005b2: PUSH2 0x05bc
000005b5: CALLDATASIZE
000005b6: PUSH1 0x04
000005b8: PUSH2 0x3d11
000005bb: JUMP
000005bc: JUMPDEST
000005bd: PUSH2 0x1cae
000005c0: JUMP
000005c1: JUMPDEST
000005c2: CALLVALUE
000005c3: DUP1
000005c4: ISZERO
000005c5: PUSH2 0x05cd
000005c8: JUMPI
000005c9: PUSH1 0x00
000005cb: DUP1
000005cc: REVERT
000005cd: JUMPDEST
000005ce: POP
000005cf: PUSH2 0x0325
000005d2: PUSH2 0x05dc
000005d5: CALLDATASIZE
000005d6: PUSH1 0x04
000005d8: PUSH2 0x3a4e
000005db: JUMP
000005dc: JUMPDEST
000005dd: PUSH2 0x1d74
000005e0: JUMP
000005e1: JUMPDEST
000005e2: CALLVALUE
000005e3: DUP1
000005e4: ISZERO
000005e5: PUSH2 0x05ed
000005e8: JUMPI
000005e9: PUSH1 0x00
000005eb: DUP1
000005ec: REVERT
000005ed: JUMPDEST
000005ee: POP
000005ef: PUSH2 0x0601
000005f2: PUSH2 0x05fc
000005f5: CALLDATASIZE
000005f6: PUSH1 0x04
000005f8: PUSH2 0x3a4e
000005fb: JUMP
000005fc: JUMPDEST
000005fd: PUSH2 0x1dad
00000600: JUMP
00000601: JUMPDEST
00000602: PUSH1 0x40
00000604: MLOAD
00000605: PUSH2 0x0254
00000608: SWAP2
00000609: SWAP1
0000060a: DUP2
0000060b: MLOAD
0000060c: DUP2
0000060d: MSTORE
0000060e: PUSH1 0x20
00000610: DUP1
00000611: DUP4
00000612: ADD
00000613: MLOAD
00000614: SWAP1
00000615: DUP3
00000616: ADD
00000617: MSTORE
00000618: PUSH1 0x40
0000061a: DUP1
0000061b: DUP4
0000061c: ADD
0000061d: MLOAD
0000061e: PUSH1 0x01
00000620: PUSH1 0x01
00000622: PUSH1 0xa0
00000624: SHL
00000625: SUB
00000626: SWAP1
00000627: DUP2
00000628: AND
00000629: SWAP2
0000062a: DUP4
0000062b: ADD
0000062c: SWAP2
0000062d: SWAP1
0000062e: SWAP2
0000062f: MSTORE
00000630: PUSH1 0x60
00000632: DUP1
00000633: DUP5
00000634: ADD
00000635: MLOAD
00000636: SWAP1
00000637: SWAP2
00000638: AND
00000639: SWAP1
0000063a: DUP3
0000063b: ADD
0000063c: MSTORE
0000063d: PUSH1 0x80
0000063f: SWAP2
00000640: DUP3
00000641: ADD
00000642: MLOAD
00000643: PUSH1 0xff
00000645: AND
00000646: SWAP2
00000647: DUP2
00000648: ADD
00000649: SWAP2
0000064a: SWAP1
0000064b: SWAP2
0000064c: MSTORE
0000064d: PUSH1 0xa0
0000064f: ADD
00000650: SWAP1
00000651: JUMP
00000652: JUMPDEST
00000653: CALLVALUE
00000654: DUP1
00000655: ISZERO
00000656: PUSH2 0x065e
00000659: JUMPI
0000065a: PUSH1 0x00
0000065c: DUP1
0000065d: REVERT
0000065e: JUMPDEST
0000065f: POP
00000660: PUSH2 0x0206
00000663: PUSH2 0x066d
00000666: CALLDATASIZE
00000667: PUSH1 0x04
00000669: PUSH2 0x3d5c
0000066c: JUMP
0000066d: JUMPDEST
0000066e: PUSH2 0x1e45
00000671: JUMP
00000672: JUMPDEST
00000673: CALLVALUE
00000674: DUP1
00000675: ISZERO
00000676: PUSH2 0x067e
00000679: JUMPI
0000067a: PUSH1 0x00
0000067c: DUP1
0000067d: REVERT
0000067e: JUMPDEST
0000067f: POP
00000680: PUSH2 0x0206
00000683: PUSH2 0x068d
00000686: CALLDATASIZE
00000687: PUSH1 0x04
00000689: PUSH2 0x3a4e
0000068c: JUMP
0000068d: JUMPDEST
0000068e: PUSH2 0x1fc9
00000691: JUMP
00000692: JUMPDEST
00000693: CALLVALUE
00000694: DUP1
00000695: ISZERO
00000696: PUSH2 0x069e
00000699: JUMPI
0000069a: PUSH1 0x00
0000069c: DUP1
0000069d: REVERT
0000069e: JUMPDEST
0000069f: POP
000006a0: PUSH2 0x0206
000006a3: PUSH2 0x06ad
000006a6: CALLDATASIZE
000006a7: PUSH1 0x04
000006a9: PUSH2 0x39eb
000006ac: JUMP
000006ad: JUMPDEST
000006ae: PUSH2 0x23fd
000006b1: JUMP
000006b2: JUMPDEST
000006b3: CALLVALUE
000006b4: DUP1
000006b5: ISZERO
000006b6: PUSH2 0x06be
000006b9: JUMPI
000006ba: PUSH1 0x00
000006bc: DUP1
000006bd: REVERT
000006be: JUMPDEST
000006bf: POP
000006c0: PUSH2 0x0206
000006c3: PUSH2 0x06cd
000006c6: CALLDATASIZE
000006c7: PUSH1 0x04
000006c9: PUSH2 0x3db4
000006cc: JUMP
000006cd: JUMPDEST
000006ce: PUSH2 0x243b
000006d1: JUMP
000006d2: JUMPDEST
000006d3: CALLVALUE
000006d4: DUP1
000006d5: ISZERO
000006d6: PUSH2 0x06de
000006d9: JUMPI
000006da: PUSH1 0x00
000006dc: DUP1
000006dd: REVERT
000006de: JUMPDEST
000006df: POP
000006e0: PUSH2 0x0325
000006e3: PUSH2 0x06ed
000006e6: CALLDATASIZE
000006e7: PUSH1 0x04
000006e9: PUSH2 0x3a4e
000006ec: JUMP
000006ed: JUMPDEST
000006ee: PUSH2 0x2522
000006f1: JUMP
000006f2: JUMPDEST
000006f3: CALLVALUE
000006f4: DUP1
000006f5: ISZERO
000006f6: PUSH2 0x06fe
000006f9: JUMPI
000006fa: PUSH1 0x00
000006fc: DUP1
000006fd: REVERT
000006fe: JUMPDEST
000006ff: POP
00000700: PUSH2 0x0325
00000703: PUSH2 0x070d
00000706: CALLDATASIZE
00000707: PUSH1 0x04
00000709: PUSH2 0x3a4e
0000070c: JUMP
0000070d: JUMPDEST
0000070e: PUSH2 0x254f
00000711: JUMP
00000712: JUMPDEST
00000713: CALLVALUE
00000714: DUP1
00000715: ISZERO
00000716: PUSH2 0x071e
00000719: JUMPI
0000071a: PUSH1 0x00
0000071c: DUP1
0000071d: REVERT
0000071e: JUMPDEST
0000071f: POP
00000720: PUSH2 0x04eb
00000723: PUSH2 0x072d
00000726: CALLDATASIZE
00000727: PUSH1 0x04
00000729: PUSH2 0x3a4e
0000072c: JUMP
0000072d: JUMPDEST
0000072e: PUSH2 0x2575
00000731: JUMP
00000732: JUMPDEST
00000733: CALLVALUE
00000734: DUP1
00000735: ISZERO
00000736: PUSH2 0x073e
00000739: JUMPI
0000073a: PUSH1 0x00
0000073c: DUP1
0000073d: REVERT
0000073e: JUMPDEST
0000073f: POP
00000740: PUSH2 0x0206
00000743: PUSH2 0x074d
00000746: CALLDATASIZE
00000747: PUSH1 0x04
00000749: PUSH2 0x3a4e
0000074c: JUMP
0000074d: JUMPDEST
0000074e: PUSH2 0x25a5
00000751: JUMP
00000752: JUMPDEST
00000753: CALLVALUE
00000754: DUP1
00000755: ISZERO
00000756: PUSH2 0x075e
00000759: JUMPI
0000075a: PUSH1 0x00
0000075c: DUP1
0000075d: REVERT
0000075e: JUMPDEST
0000075f: POP
00000760: PUSH2 0x0325
00000763: PUSH2 0x076d
00000766: CALLDATASIZE
00000767: PUSH1 0x04
00000769: PUSH2 0x3a4e
0000076c: JUMP
0000076d: JUMPDEST
0000076e: PUSH2 0x287c
00000771: JUMP
00000772: JUMPDEST
00000773: CALLVALUE
00000774: DUP1
00000775: ISZERO
00000776: PUSH2 0x077e
00000779: JUMPI
0000077a: PUSH1 0x00
0000077c: DUP1
0000077d: REVERT
0000077e: JUMPDEST
0000077f: POP
00000780: PUSH2 0x0206
00000783: PUSH2 0x078d
00000786: CALLDATASIZE
00000787: PUSH1 0x04
00000789: PUSH2 0x3a4e
0000078c: JUMP
0000078d: JUMPDEST
0000078e: PUSH2 0x289f
00000791: JUMP
00000792: JUMPDEST
00000793: CALLVALUE
00000794: DUP1
00000795: ISZERO
00000796: PUSH2 0x079e
00000799: JUMPI
0000079a: PUSH1 0x00
0000079c: DUP1
0000079d: REVERT
0000079e: JUMPDEST
0000079f: POP
000007a0: PUSH2 0x0325
000007a3: PUSH2 0x07ad
000007a6: CALLDATASIZE
000007a7: PUSH1 0x04
000007a9: PUSH2 0x3a4e
000007ac: JUMP
000007ad: JUMPDEST
000007ae: PUSH2 0x2c5e
000007b1: JUMP
000007b2: JUMPDEST
000007b3: CALLVALUE
000007b4: DUP1
000007b5: ISZERO
000007b6: PUSH2 0x07be
000007b9: JUMPI
000007ba: PUSH1 0x00
000007bc: DUP1
000007bd: REVERT
000007be: JUMPDEST
000007bf: POP
000007c0: PUSH2 0x0206
000007c3: PUSH2 0x07cd
000007c6: CALLDATASIZE
000007c7: PUSH1 0x04
000007c9: PUSH2 0x3a4e
000007cc: JUMP
000007cd: JUMPDEST
000007ce: PUSH2 0x2c81
000007d1: JUMP
000007d2: JUMPDEST
000007d3: CALLVALUE
000007d4: DUP1
000007d5: ISZERO
000007d6: PUSH2 0x07de
000007d9: JUMPI
000007da: PUSH1 0x00
000007dc: DUP1
000007dd: REVERT
000007de: JUMPDEST
000007df: POP
000007e0: PUSH2 0x0206
000007e3: PUSH2 0x07ed
000007e6: CALLDATASIZE
000007e7: PUSH1 0x04
000007e9: PUSH2 0x3b69
000007ec: JUMP
000007ed: JUMPDEST
000007ee: PUSH2 0x2f78
000007f1: JUMP
000007f2: JUMPDEST
000007f3: PUSH1 0x00
000007f5: JUMPDEST
000007f6: DUP2
000007f7: DUP2
000007f8: LT
000007f9: ISZERO
000007fa: PUSH2 0x0830
000007fd: JUMPI
000007fe: PUSH2 0x081e
00000801: DUP4
00000802: DUP4
00000803: DUP4
00000804: DUP2
00000805: DUP2
00000806: LT
00000807: PUSH2 0x0812
0000080a: JUMPI
0000080b: PUSH2 0x0812
0000080e: PUSH2 0x3dde
00000811: JUMP
00000812: JUMPDEST
00000813: SWAP1
00000814: POP
00000815: PUSH1 0x20
00000817: MUL
00000818: ADD
00000819: CALLDATALOAD
0000081a: PUSH2 0x1fc9
0000081d: JUMP
0000081e: JUMPDEST
0000081f: DUP1
00000820: PUSH2 0x0828
00000823: DUP2
00000824: PUSH2 0x3e0a
00000827: JUMP
00000828: JUMPDEST
00000829: SWAP2
0000082a: POP
0000082b: POP
0000082c: PUSH2 0x07f5
0000082f: JUMP
00000830: JUMPDEST
00000831: POP
00000832: POP
00000833: POP
00000834: JUMP
00000835: JUMPDEST
00000836: PUSH2 0x083d
00000839: PUSH2 0x2fb3
0000083c: JUMP
0000083d: JUMPDEST
0000083e: PUSH2 0x0845
00000841: PUSH2 0x2fe9
00000844: JUMP
00000845: JUMPDEST
00000846: PUSH1 0x00
00000848: PUSH2 0x084f
0000084b: PUSH2 0x301b
0000084e: JUMP
0000084f: JUMPDEST
00000850: PUSH1 0x00
00000852: DUP5
00000853: DUP2
00000854: MSTORE
00000855: PUSH1 0x04
00000857: DUP3
00000858: ADD
00000859: PUSH1 0x20
0000085b: SWAP1
0000085c: DUP2
0000085d: MSTORE
0000085e: PUSH1 0x40
00000860: DUP1
00000861: DUP4
00000862: KECCAK256
00000863: DUP1
00000864: SLOAD
00000865: DUP5
00000866: MSTORE
00000867: PUSH1 0x02
00000869: DUP6
0000086a: ADD
0000086b: DUP4
0000086c: MSTORE
0000086d: DUP2
0000086e: DUP5
0000086f: KECCAK256
00000870: PUSH1 0x01
00000872: DUP1
00000873: DUP3
00000874: ADD
00000875: SLOAD
00000876: DUP7
00000877: MSTORE
00000878: DUP1
00000879: DUP8
0000087a: ADD
0000087b: SWAP1
0000087c: SWAP5
0000087d: MSTORE
0000087e: SWAP2
0000087f: SWAP1
00000880: SWAP4
00000881: KECCAK256
00000882: SWAP2
00000883: DUP3
00000884: ADD
00000885: SLOAD
00000886: SWAP4
00000887: SWAP5
00000888: POP
00000889: SWAP2
0000088a: SWAP3
0000088b: PUSH1 0x01
0000088d: PUSH1 0x98
0000088f: SHL
00000890: SWAP1
00000891: DIV
00000892: PUSH1 0xff
00000894: AND
00000895: PUSH1 0x03
00000897: EQ
00000898: PUSH2 0x08bc
0000089b: JUMPI
0000089c: PUSH1 0x40
0000089e: MLOAD
0000089f: PUSH3 0x461bcd
000008a3: PUSH1 0xe5
000008a5: SHL
000008a6: DUP2
000008a7: MSTORE
000008a8: PUSH1 0x04
000008aa: ADD
000008ab: PUSH2 0x08b3
000008ae: SWAP1
000008af: PUSH2 0x3e23
000008b2: JUMP
000008b3: JUMPDEST
000008b4: PUSH1 0x40
000008b6: MLOAD
000008b7: DUP1
000008b8: SWAP2
000008b9: SUB
000008ba: SWAP1
000008bb: REVERT
000008bc: JUMPDEST
000008bd: DUP1
000008be: SLOAD
000008bf: PUSH1 0x01
000008c1: PUSH1 0x01
000008c3: PUSH1 0xa0
000008c5: SHL
000008c6: SUB
000008c7: AND
000008c8: ISZERO
000008c9: DUP1
000008ca: ISZERO
000008cb: SWAP1
000008cc: PUSH2 0x08e1
000008cf: JUMPI
000008d0: POP
000008d1: PUSH1 0x01
000008d3: DUP2
000008d4: ADD
000008d5: SLOAD
000008d6: PUSH1 0x01
000008d8: PUSH1 0x01
000008da: PUSH1 0x98
000008dc: SHL
000008dd: SUB
000008de: AND
000008df: ISZERO
000008e0: ISZERO
000008e1: JUMPDEST
000008e2: PUSH2 0x08fd
000008e5: JUMPI
000008e6: PUSH1 0x40
000008e8: MLOAD
000008e9: PUSH3 0x461bcd
000008ed: PUSH1 0xe5
000008ef: SHL
000008f0: DUP2
000008f1: MSTORE
000008f2: PUSH1 0x04
000008f4: ADD
000008f5: PUSH2 0x08b3
000008f8: SWAP1
000008f9: PUSH2 0x3e4b
000008fc: JUMP
000008fd: JUMPDEST
000008fe: DUP1
000008ff: SLOAD
00000900: PUSH1 0x01
00000902: PUSH1 0xa0
00000904: SHL
00000905: SWAP1
00000906: DIV
00000907: PUSH6 0xffffffffffff
0000090e: AND
0000090f: TIMESTAMP
00000910: GT
00000911: PUSH2 0x092c
00000914: JUMPI
00000915: PUSH1 0x40
00000917: MLOAD
00000918: PUSH3 0x461bcd
0000091c: PUSH1 0xe5
0000091e: SHL
0000091f: DUP2
00000920: MSTORE
00000921: PUSH1 0x04
00000923: ADD
00000924: PUSH2 0x08b3
00000927: SWAP1
00000928: PUSH2 0x3e72
0000092b: JUMP
0000092c: JUMPDEST
0000092d: PUSH1 0x03
0000092f: DUP4
00000930: ADD
00000931: SLOAD
00000932: PUSH1 0x01
00000934: PUSH1 0xa0
00000936: SHL
00000937: SWAP1
00000938: DIV
00000939: PUSH1 0xff
0000093b: AND
0000093c: PUSH1 0x01
0000093e: EQ
0000093f: PUSH2 0x095a
00000942: JUMPI
00000943: PUSH1 0x40
00000945: MLOAD
00000946: PUSH3 0x461bcd
0000094a: PUSH1 0xe5
0000094c: SHL
0000094d: DUP2
0000094e: MSTORE
0000094f: PUSH1 0x04
00000951: ADD
00000952: PUSH2 0x08b3
00000955: SWAP1
00000956: PUSH2 0x3ea5
00000959: JUMP
0000095a: JUMPDEST
0000095b: PUSH1 0x00
0000095d: DUP3
0000095e: PUSH1 0x03
00000960: ADD
00000961: SLOAD
00000962: DUP4
00000963: PUSH1 0x05
00000965: ADD
00000966: SLOAD
00000967: DUP6
00000968: PUSH1 0x01
0000096a: ADD
0000096b: SLOAD
0000096c: PUSH2 0x0975
0000096f: SWAP2
00000970: SWAP1
00000971: PUSH2 0x3ed3
00000974: JUMP
00000975: JUMPDEST
00000976: PUSH2 0x097f
00000979: SWAP2
0000097a: SWAP1
0000097b: PUSH2 0x3eea
0000097e: JUMP
0000097f: JUMPDEST
00000980: SWAP1
00000981: POP
00000982: PUSH1 0x00
00000984: DUP4
00000985: PUSH1 0x03
00000987: ADD
00000988: SLOAD
00000989: DUP5
0000098a: PUSH1 0x04
0000098c: ADD
0000098d: SLOAD
0000098e: DUP7
0000098f: PUSH1 0x01
00000991: ADD
00000992: SLOAD
00000993: PUSH2 0x099c
00000996: SWAP2
00000997: SWAP1
00000998: PUSH2 0x3ed3
0000099b: JUMP
0000099c: JUMPDEST
0000099d: PUSH2 0x09a6
000009a0: SWAP2
000009a1: SWAP1
000009a2: PUSH2 0x3eea
000009a5: JUMP
000009a6: JUMPDEST
000009a7: SWAP1
000009a8: POP
000009a9: PUSH1 0x00
000009ab: PUSH3 0x0f4240
000009af: DUP8
000009b0: PUSH1 0x06
000009b2: ADD
000009b3: PUSH1 0x02
000009b5: ADD
000009b6: SLOAD
000009b7: DUP4
000009b8: PUSH2 0x09c1
000009bb: SWAP2
000009bc: SWAP1
000009bd: PUSH2 0x3ed3
000009c0: JUMP
000009c1: JUMPDEST
000009c2: PUSH2 0x09cb
000009c5: SWAP2
000009c6: SWAP1
000009c7: PUSH2 0x3eea
000009ca: JUMP
000009cb: JUMPDEST
000009cc: SWAP1
000009cd: POP
000009ce: PUSH1 0x00
000009d0: DUP2
000009d1: PUSH2 0x09da
000009d4: DUP6
000009d5: DUP6
000009d6: PUSH2 0x3f0c
000009d9: JUMP
000009da: JUMPDEST
000009db: PUSH2 0x09e4
000009de: SWAP2
000009df: SWAP1
000009e0: PUSH2 0x3f1f
000009e3: JUMP
000009e4: JUMPDEST
000009e5: PUSH1 0x02
000009e7: DUP8
000009e8: ADD
000009e9: SLOAD
000009ea: SWAP1
000009eb: SWAP2
000009ec: POP
000009ed: PUSH1 0x01
000009ef: PUSH1 0x01
000009f1: PUSH1 0xa0
000009f3: SHL
000009f4: SUB
000009f5: AND
000009f6: PUSH2 0x0ad9
000009f9: JUMPI
000009fa: PUSH1 0x02
000009fc: DUP8
000009fd: ADD
000009fe: SLOAD
000009ff: PUSH1 0x40
00000a01: MLOAD
00000a02: PUSH1 0x00
00000a04: SWAP2
00000a05: PUSH1 0x01
00000a07: PUSH1 0x01
00000a09: PUSH1 0xa0
00000a0b: SHL
00000a0c: SUB
00000a0d: AND
00000a0e: SWAP1
00000a0f: DUP4
00000a10: SWAP1
00000a11: DUP4
00000a12: DUP2
00000a13: DUP2
00000a14: DUP2
00000a15: DUP6
00000a16: DUP8
00000a17: GAS
00000a18: CALL
00000a19: SWAP3
00000a1a: POP
00000a1b: POP
00000a1c: POP
00000a1d: RETURNDATASIZE
00000a1e: DUP1
00000a1f: PUSH1 0x00
00000a21: DUP2
00000a22: EQ
00000a23: PUSH2 0x0a48
00000a26: JUMPI
00000a27: PUSH1 0x40
00000a29: MLOAD
00000a2a: SWAP2
00000a2b: POP
00000a2c: PUSH1 0x1f
00000a2e: NOT
00000a2f: PUSH1 0x3f
00000a31: RETURNDATASIZE
00000a32: ADD
00000a33: AND
00000a34: DUP3
00000a35: ADD
00000a36: PUSH1 0x40
00000a38: MSTORE
00000a39: RETURNDATASIZE
00000a3a: DUP3
00000a3b: MSTORE
00000a3c: RETURNDATASIZE
00000a3d: PUSH1 0x00
00000a3f: PUSH1 0x20
00000a41: DUP5
00000a42: ADD
00000a43: RETURNDATACOPY
00000a44: PUSH2 0x0a4d
00000a47: JUMP
00000a48: JUMPDEST
00000a49: PUSH1 0x60
00000a4b: SWAP2
00000a4c: POP
00000a4d: JUMPDEST
00000a4e: POP
00000a4f: POP
00000a50: PUSH1 0x09
00000a52: DUP11
00000a53: ADD
00000a54: SLOAD
00000a55: PUSH1 0x40
00000a57: MLOAD
00000a58: SWAP2
00000a59: SWAP3
00000a5a: POP
00000a5b: PUSH1 0x00
00000a5d: SWAP2
00000a5e: PUSH1 0x01
00000a60: PUSH1 0x01
00000a62: PUSH1 0xa0
00000a64: SHL
00000a65: SUB
00000a66: SWAP1
00000a67: SWAP2
00000a68: AND
00000a69: SWAP1
00000a6a: DUP6
00000a6b: SWAP1
00000a6c: DUP4
00000a6d: DUP2
00000a6e: DUP2
00000a6f: DUP2
00000a70: DUP6
00000a71: DUP8
00000a72: GAS
00000a73: CALL
00000a74: SWAP3
00000a75: POP
00000a76: POP
00000a77: POP
00000a78: RETURNDATASIZE
00000a79: DUP1
00000a7a: PUSH1 0x00
00000a7c: DUP2
00000a7d: EQ
00000a7e: PUSH2 0x0aa3
00000a81: JUMPI
00000a82: PUSH1 0x40
00000a84: MLOAD
00000a85: SWAP2
00000a86: POP
00000a87: PUSH1 0x1f
00000a89: NOT
00000a8a: PUSH1 0x3f
00000a8c: RETURNDATASIZE
00000a8d: ADD
00000a8e: AND
00000a8f: DUP3
00000a90: ADD
00000a91: PUSH1 0x40
00000a93: MSTORE
00000a94: RETURNDATASIZE
00000a95: DUP3
00000a96: MSTORE
00000a97: RETURNDATASIZE
00000a98: PUSH1 0x00
00000a9a: PUSH1 0x20
00000a9c: DUP5
00000a9d: ADD
00000a9e: RETURNDATACOPY
00000a9f: PUSH2 0x0aa8
00000aa2: JUMP
00000aa3: JUMPDEST
00000aa4: PUSH1 0x60
00000aa6: SWAP2
00000aa7: POP
00000aa8: JUMPDEST
00000aa9: POP
00000aaa: POP
00000aab: SWAP1
00000aac: POP
00000aad: DUP2
00000aae: DUP1
00000aaf: ISZERO
00000ab0: PUSH2 0x0ab6
00000ab3: JUMPI
00000ab4: POP
00000ab5: DUP1
00000ab6: JUMPDEST
00000ab7: PUSH2 0x0ad2
00000aba: JUMPI
00000abb: PUSH1 0x40
00000abd: MLOAD
00000abe: PUSH3 0x461bcd
00000ac2: PUSH1 0xe5
00000ac4: SHL
00000ac5: DUP2
00000ac6: MSTORE
00000ac7: PUSH1 0x04
00000ac9: ADD
00000aca: PUSH2 0x08b3
00000acd: SWAP1
00000ace: PUSH2 0x3f32
00000ad1: JUMP
00000ad2: JUMPDEST
00000ad3: POP
00000ad4: POP
00000ad5: PUSH2 0x0b1a
00000ad8: JUMP
00000ad9: JUMPDEST
00000ada: PUSH1 0x02
00000adc: DUP1
00000add: DUP8
00000ade: ADD
00000adf: SLOAD
00000ae0: SWAP1
00000ae1: DUP9
00000ae2: ADD
00000ae3: SLOAD
00000ae4: PUSH1 0x01
00000ae6: PUSH1 0x01
00000ae8: PUSH1 0xa0
00000aea: SHL
00000aeb: SUB
00000aec: SWAP2
00000aed: DUP3
00000aee: AND
00000aef: SWAP2
00000af0: PUSH2 0x0afc
00000af3: SWAP2
00000af4: DUP4
00000af5: SWAP2
00000af6: AND
00000af7: DUP5
00000af8: PUSH2 0x303f
00000afb: JUMP
00000afc: JUMPDEST
00000afd: PUSH1 0x09
00000aff: DUP10
00000b00: ADD
00000b01: SLOAD
00000b02: PUSH2 0x0b18
00000b05: SWAP1
00000b06: PUSH1 0x01
00000b08: PUSH1 0x01
00000b0a: PUSH1 0xa0
00000b0c: SHL
00000b0d: SUB
00000b0e: DUP4
00000b0f: DUP2
00000b10: AND
00000b11: SWAP2
00000b12: AND
00000b13: DUP6
00000b14: PUSH2 0x303f
00000b17: JUMP
00000b18: JUMPDEST
00000b19: POP
00000b1a: JUMPDEST
00000b1b: PUSH1 0x03
00000b1d: DUP8
00000b1e: ADD
00000b1f: DUP1
00000b20: SLOAD
00000b21: PUSH1 0xff
00000b23: PUSH1 0xa0
00000b25: SHL
00000b26: NOT
00000b27: AND
00000b28: PUSH1 0x01
00000b2a: PUSH1 0xa1
00000b2c: SHL
00000b2d: OR
00000b2e: SWAP1
00000b2f: SSTORE
00000b30: PUSH1 0x40
00000b32: DUP1
00000b33: MLOAD
00000b34: DUP12
00000b35: DUP2
00000b36: MSTORE
00000b37: PUSH1 0x20
00000b39: DUP2
00000b3a: ADD
00000b3b: DUP12
00000b3c: SWAP1
00000b3d: MSTORE
00000b3e: CALLER
00000b3f: DUP2
00000b40: DUP4
00000b41: ADD
00000b42: MSTORE
00000b43: SWAP1
00000b44: MLOAD
00000b45: PUSH32 0xbac7c71779ccc41f8c859e9d622536f76f0375a85b23e1b3d4134f613a9fff54
00000b66: SWAP2
00000b67: PUSH1 0x60
00000b69: SWAP1
00000b6a: DUP3
00000b6b: SWAP1
00000b6c: SUB
00000b6d: ADD
00000b6e: SWAP1
00000b6f: LOG1
00000b70: PUSH1 0x00
00000b72: DUP1
00000b73: MLOAD
00000b74: PUSH1 0x20
00000b76: PUSH2 0x43d8
00000b79: DUP4
00000b7a: CODECOPY
00000b7b: DUP2
00000b7c: MLOAD
00000b7d: SWAP2
00000b7e: MSTORE
00000b7f: DUP11
00000b80: DUP3
00000b81: DUP5
00000b82: CALLER
00000b83: PUSH1 0x40
00000b85: MLOAD
00000b86: PUSH2 0x0b92
00000b89: SWAP5
00000b8a: SWAP4
00000b8b: SWAP3
00000b8c: SWAP2
00000b8d: SWAP1
00000b8e: PUSH2 0x3f5f
00000b91: JUMP
00000b92: JUMPDEST
00000b93: PUSH1 0x40
00000b95: MLOAD
00000b96: DUP1
00000b97: SWAP2
00000b98: SUB
00000b99: SWAP1
00000b9a: LOG1
00000b9b: POP
00000b9c: POP
00000b9d: POP
00000b9e: POP
00000b9f: POP
00000ba0: POP
00000ba1: POP
00000ba2: POP
00000ba3: PUSH2 0x0baa
00000ba6: PUSH2 0x309e
00000ba9: JUMP
00000baa: JUMPDEST
00000bab: POP
00000bac: POP
00000bad: JUMP
00000bae: JUMPDEST
00000baf: PUSH1 0x00
00000bb1: DUP1
00000bb2: PUSH2 0x0bb9
00000bb5: PUSH2 0x301b
00000bb8: JUMP
00000bb9: JUMPDEST
00000bba: PUSH1 0x00
00000bbc: SWAP4
00000bbd: DUP5
00000bbe: MSTORE
00000bbf: PUSH1 0x02
00000bc1: SWAP1
00000bc2: DUP2
00000bc3: ADD
00000bc4: PUSH1 0x20
00000bc6: MSTORE
00000bc7: PUSH1 0x40
00000bc9: SWAP1
00000bca: SWAP4
00000bcb: KECCAK256
00000bcc: SLOAD
00000bcd: PUSH1 0xff
00000bcf: AND
00000bd0: SWAP1
00000bd1: SWAP3
00000bd2: EQ
00000bd3: SWAP3
00000bd4: SWAP2
00000bd5: POP
00000bd6: POP
00000bd7: JUMP
00000bd8: JUMPDEST
00000bd9: PUSH2 0x0be0
00000bdc: PUSH2 0x2fe9
00000bdf: JUMP
00000be0: JUMPDEST
00000be1: PUSH1 0x00
00000be3: PUSH2 0x0bea
00000be6: PUSH2 0x301b
00000be9: JUMP
00000bea: JUMPDEST
00000beb: SWAP1
00000bec: POP
00000bed: PUSH1 0x01
00000bef: PUSH1 0x01
00000bf1: PUSH1 0xa0
00000bf3: SHL
00000bf4: SUB
00000bf5: DUP6
00000bf6: AND
00000bf7: PUSH2 0x0c34
00000bfa: JUMPI
00000bfb: PUSH1 0x40
00000bfd: MLOAD
00000bfe: PUSH3 0x461bcd
00000c02: PUSH1 0xe5
00000c04: SHL
00000c05: DUP2
00000c06: MSTORE
00000c07: PUSH1 0x20
00000c09: PUSH1 0x04
00000c0b: DUP3
00000c0c: ADD
00000c0d: MSTORE
00000c0e: PUSH1 0x0f
00000c10: PUSH1 0x24
00000c12: DUP3
00000c13: ADD
00000c14: MSTORE
00000c15: PUSH15 0x496e76616c69642041646472657373
00000c25: PUSH1 0x88
00000c27: SHL
00000c28: PUSH1 0x44
00000c2a: DUP3
00000c2b: ADD
00000c2c: MSTORE
00000c2d: PUSH1 0x64
00000c2f: ADD
00000c30: PUSH2 0x08b3
00000c33: JUMP
00000c34: JUMPDEST
00000c35: PUSH2 0x0c42
00000c38: PUSH1 0x64
00000c3a: PUSH3 0x0f4240
00000c3e: PUSH2 0x3eea
00000c41: JUMP
00000c42: JUMPDEST
00000c43: DUP5
00000c44: GT
00000c45: ISZERO
00000c46: PUSH2 0x0c85
00000c49: JUMPI
00000c4a: PUSH1 0x40
00000c4c: MLOAD
00000c4d: PUSH3 0x461bcd
00000c51: PUSH1 0xe5
00000c53: SHL
00000c54: DUP2
00000c55: MSTORE
00000c56: PUSH1 0x20
00000c58: PUSH1 0x04
00000c5a: DUP3
00000c5b: ADD
00000c5c: MSTORE
00000c5d: PUSH1 0x11
00000c5f: PUSH1 0x24
00000c61: DUP3
00000c62: ADD
00000c63: MSTORE
00000c64: PUSH17 0x536574746c6520466565203c3d20313025
00000c76: PUSH1 0x78
00000c78: SHL
00000c79: PUSH1 0x44
00000c7b: DUP3
00000c7c: ADD
00000c7d: MSTORE
00000c7e: PUSH1 0x64
00000c80: ADD
00000c81: PUSH2 0x08b3
00000c84: JUMP
00000c85: JUMPDEST
00000c86: PUSH2 0x0c93
00000c89: PUSH1 0x64
00000c8b: PUSH3 0x0f4240
00000c8f: PUSH2 0x3eea
00000c92: JUMP
00000c93: JUMPDEST
00000c94: DUP4
00000c95: GT
00000c96: ISZERO
00000c97: PUSH2 0x0cd6
00000c9a: JUMPI
00000c9b: PUSH1 0x40
00000c9d: MLOAD
00000c9e: PUSH3 0x461bcd
00000ca2: PUSH1 0xe5
00000ca4: SHL
00000ca5: DUP2
00000ca6: MSTORE
00000ca7: PUSH1 0x20
00000ca9: PUSH1 0x04
00000cab: DUP3
00000cac: ADD
00000cad: MSTORE
00000cae: PUSH1 0x11
00000cb0: PUSH1 0x24
00000cb2: DUP3
00000cb3: ADD
00000cb4: MSTORE
00000cb5: PUSH17 0x43616e63656c20466565203c3d20313025
00000cc7: PUSH1 0x78
00000cc9: SHL
00000cca: PUSH1 0x44
00000ccc: DUP3
00000ccd: ADD
00000cce: MSTORE
00000ccf: PUSH1 0x64
00000cd1: ADD
00000cd2: PUSH2 0x08b3
00000cd5: JUMP
00000cd6: JUMPDEST
00000cd7: PUSH1 0x09
00000cd9: DUP2
00000cda: ADD
00000cdb: SLOAD
00000cdc: PUSH1 0x08
00000cde: DUP3
00000cdf: ADD
00000ce0: SLOAD
00000ce1: PUSH1 0x07
00000ce3: DUP4
00000ce4: ADD
00000ce5: SLOAD
00000ce6: PUSH1 0x06
00000ce8: DUP5
00000ce9: ADD
00000cea: SLOAD
00000ceb: PUSH1 0x40
00000ced: DUP1
00000cee: MLOAD
00000cef: PUSH1 0x01
00000cf1: PUSH1 0x01
00000cf3: PUSH1 0xa0
00000cf5: SHL
00000cf6: SUB
00000cf7: SWAP6
00000cf8: DUP7
00000cf9: AND
00000cfa: DUP2
00000cfb: MSTORE
00000cfc: PUSH1 0x20
00000cfe: DUP2
00000cff: ADD
00000d00: SWAP5
00000d01: SWAP1
00000d02: SWAP5
00000d03: MSTORE
00000d04: DUP4
00000d05: ADD
00000d06: SWAP2
00000d07: SWAP1
00000d08: SWAP2
00000d09: MSTORE
00000d0a: PUSH1 0x60
00000d0c: DUP3
00000d0d: ADD
00000d0e: MSTORE
00000d0f: SWAP1
00000d10: DUP7
00000d11: AND
00000d12: PUSH1 0x80
00000d14: DUP3
00000d15: ADD
00000d16: MSTORE
00000d17: PUSH1 0xa0
00000d19: DUP2
00000d1a: ADD
00000d1b: DUP6
00000d1c: SWAP1
00000d1d: MSTORE
00000d1e: PUSH1 0xc0
00000d20: DUP2
00000d21: ADD
00000d22: DUP5
00000d23: SWAP1
00000d24: MSTORE
00000d25: PUSH1 0xe0
00000d27: DUP2
00000d28: ADD
00000d29: DUP4
00000d2a: SWAP1
00000d2b: MSTORE
00000d2c: PUSH32 0x72fe78202ae1d56b2334bc8c804db955e2349789b271b7f55e8109f7122f0a11
00000d4d: SWAP1
00000d4e: PUSH2 0x0100
00000d51: ADD
00000d52: PUSH1 0x40
00000d54: MLOAD
00000d55: DUP1
00000d56: SWAP2
00000d57: SUB
00000d58: SWAP1
00000d59: LOG1
00000d5a: PUSH1 0x09
00000d5c: DUP2
00000d5d: ADD
00000d5e: DUP1
00000d5f: SLOAD
00000d60: PUSH1 0x01
00000d62: PUSH1 0x01
00000d64: PUSH1 0xa0
00000d66: SHL
00000d67: SUB
00000d68: NOT
00000d69: AND
00000d6a: PUSH1 0x01
00000d6c: PUSH1 0x01
00000d6e: PUSH1 0xa0
00000d70: SHL
00000d71: SUB
00000d72: SWAP7
00000d73: SWAP1
00000d74: SWAP7
00000d75: AND
00000d76: SWAP6
00000d77: SWAP1
00000d78: SWAP6
00000d79: OR
00000d7a: SWAP1
00000d7b: SWAP5
00000d7c: SSTORE
00000d7d: PUSH1 0x08
00000d7f: DUP5
00000d80: ADD
00000d81: SWAP3
00000d82: SWAP1
00000d83: SWAP3
00000d84: SSTORE
00000d85: PUSH1 0x07
00000d87: DUP4
00000d88: ADD
00000d89: SSTORE
00000d8a: PUSH1 0x06
00000d8c: SWAP1
00000d8d: SWAP2
00000d8e: ADD
00000d8f: SSTORE
00000d90: JUMP
00000d91: JUMPDEST
00000d92: PUSH2 0x0d99
00000d95: PUSH2 0x2fe9
00000d98: JUMP
00000d99: JUMPDEST
00000d9a: PUSH1 0x00
00000d9c: PUSH2 0x0da3
00000d9f: PUSH2 0x301b
00000da2: JUMP
00000da3: JUMPDEST
00000da4: PUSH1 0x00
00000da6: DUP5
00000da7: DUP2
00000da8: MSTORE
00000da9: PUSH1 0x01
00000dab: DUP3
00000dac: ADD
00000dad: PUSH1 0x20
00000daf: SWAP1
00000db0: DUP2
00000db1: MSTORE
00000db2: PUSH1 0x40
00000db4: SWAP2
00000db5: DUP3
00000db6: SWAP1
00000db7: KECCAK256
00000db8: DUP1
00000db9: SLOAD
00000dba: PUSH6 0xffffffffffff
00000dc1: DUP8
00000dc2: DUP2
00000dc3: AND
00000dc4: PUSH1 0x01
00000dc6: PUSH1 0xd0
00000dc8: SHL
00000dc9: DUP2
00000dca: DUP2
00000dcb: MUL
00000dcc: PUSH1 0x01
00000dce: PUSH1 0x01
00000dd0: PUSH1 0xd0
00000dd2: SHL
00000dd3: SUB
00000dd4: DUP6
00000dd5: AND
00000dd6: OR
00000dd7: DUP6
00000dd8: SSTORE
00000dd9: DUP7
00000dda: MLOAD
00000ddb: DUP12
00000ddc: DUP2
00000ddd: MSTORE
00000dde: SWAP4
00000ddf: DIV
00000de0: SWAP1
00000de1: SWAP2
00000de2: AND
00000de3: SWAP4
00000de4: DUP3
00000de5: ADD
00000de6: DUP5
00000de7: SWAP1
00000de8: MSTORE
00000de9: SWAP4
00000dea: DUP2
00000deb: ADD
00000dec: SWAP4
00000ded: SWAP1
00000dee: SWAP4
00000def: MSTORE
00000df0: SWAP3
00000df1: SWAP4
00000df2: POP
00000df3: SWAP1
00000df4: PUSH32 0xd5042937eda12ebddebb9d9ecaf0d88595a67d0d28513340610674acbd48274b
00000e15: SWAP1
00000e16: PUSH1 0x60
00000e18: ADD
00000e19: JUMPDEST
00000e1a: PUSH1 0x40
00000e1c: MLOAD
00000e1d: DUP1
00000e1e: SWAP2
00000e1f: SUB
00000e20: SWAP1
00000e21: LOG1
00000e22: POP
00000e23: POP
00000e24: POP
00000e25: POP
00000e26: POP
00000e27: JUMP
00000e28: JUMPDEST
00000e29: DUP3
00000e2a: DUP2
00000e2b: EQ
00000e2c: PUSH2 0x0e47
00000e2f: JUMPI
00000e30: PUSH1 0x40
00000e32: MLOAD
00000e33: PUSH3 0x461bcd
00000e37: PUSH1 0xe5
00000e39: SHL
00000e3a: DUP2
00000e3b: MSTORE
00000e3c: PUSH1 0x04
00000e3e: ADD
00000e3f: PUSH2 0x08b3
00000e42: SWAP1
00000e43: PUSH2 0x3f83
00000e46: JUMP
00000e47: JUMPDEST
00000e48: PUSH1 0x00
00000e4a: JUMPDEST
00000e4b: DUP4
00000e4c: DUP2
00000e4d: LT
00000e4e: ISZERO
00000e4f: PUSH2 0x0e9e
00000e52: JUMPI
00000e53: PUSH2 0x0e8c
00000e56: DUP6
00000e57: DUP6
00000e58: DUP4
00000e59: DUP2
00000e5a: DUP2
00000e5b: LT
00000e5c: PUSH2 0x0e67
00000e5f: JUMPI
00000e60: PUSH2 0x0e67
00000e63: PUSH2 0x3dde
00000e66: JUMP
00000e67: JUMPDEST
00000e68: SWAP1
00000e69: POP
00000e6a: PUSH1 0x20
00000e6c: MUL
00000e6d: ADD
00000e6e: CALLDATALOAD
00000e6f: DUP5
00000e70: DUP5
00000e71: DUP5
00000e72: DUP2
00000e73: DUP2
00000e74: LT
00000e75: PUSH2 0x0e80
00000e78: JUMPI
00000e79: PUSH2 0x0e80
00000e7c: PUSH2 0x3dde
00000e7f: JUMP
00000e80: JUMPDEST
00000e81: SWAP1
00000e82: POP
00000e83: PUSH1 0x20
00000e85: MUL
00000e86: ADD
00000e87: CALLDATALOAD
00000e88: PUSH2 0x0835
00000e8b: JUMP
00000e8c: JUMPDEST
00000e8d: DUP1
00000e8e: PUSH2 0x0e96
00000e91: DUP2
00000e92: PUSH2 0x3e0a
00000e95: JUMP
00000e96: JUMPDEST
00000e97: SWAP2
00000e98: POP
00000e99: POP
00000e9a: PUSH2 0x0e4a
00000e9d: JUMP
00000e9e: JUMPDEST
00000e9f: POP
00000ea0: POP
00000ea1: POP
00000ea2: POP
00000ea3: POP
00000ea4: JUMP
00000ea5: JUMPDEST
00000ea6: PUSH1 0x00
00000ea8: DUP1
00000ea9: PUSH2 0x0eb0
00000eac: PUSH2 0x301b
00000eaf: JUMP
00000eb0: JUMPDEST
00000eb1: PUSH1 0x01
00000eb3: PUSH1 0x01
00000eb5: PUSH1 0xa0
00000eb7: SHL
00000eb8: SUB
00000eb9: SWAP1
00000eba: SWAP4
00000ebb: AND
00000ebc: PUSH1 0x00
00000ebe: SWAP1
00000ebf: DUP2
00000ec0: MSTORE
00000ec1: PUSH1 0x20
00000ec3: SWAP4
00000ec4: SWAP1
00000ec5: SWAP4
00000ec6: MSTORE
00000ec7: POP
00000ec8: POP
00000ec9: PUSH1 0x40
00000ecb: SWAP1
00000ecc: KECCAK256
00000ecd: SLOAD
00000ece: PUSH1 0xff
00000ed0: AND
00000ed1: SWAP1
00000ed2: JUMP
00000ed3: JUMPDEST
00000ed4: PUSH2 0x0edb
00000ed7: PUSH2 0x2fe9
00000eda: JUMP
00000edb: JUMPDEST
00000edc: PUSH1 0x00
00000ede: PUSH2 0x0ee5
00000ee1: PUSH2 0x301b
00000ee4: JUMP
00000ee5: JUMPDEST
00000ee6: PUSH1 0x00
00000ee8: DUP6
00000ee9: DUP2
00000eea: MSTORE
00000eeb: PUSH1 0x01
00000eed: DUP3
00000eee: DUP2
00000eef: ADD
00000ef0: PUSH1 0x20
00000ef2: SWAP1
00000ef3: DUP2
00000ef4: MSTORE
00000ef5: PUSH1 0x40
00000ef7: SWAP3
00000ef8: DUP4
00000ef9: SWAP1
00000efa: KECCAK256
00000efb: DUP1
00000efc: SLOAD
00000efd: PUSH6 0xffffffffffff
00000f04: DUP10
00000f05: AND
00000f06: PUSH1 0x01
00000f08: PUSH1 0xd0
00000f0a: SHL
00000f0b: DUP2
00000f0c: MUL
00000f0d: PUSH1 0x01
00000f0f: PUSH1 0x01
00000f11: PUSH1 0xd0
00000f13: SHL
00000f14: SUB
00000f15: SWAP1
00000f16: SWAP3
00000f17: AND
00000f18: SWAP2
00000f19: SWAP1
00000f1a: SWAP2
00000f1b: OR
00000f1c: DUP3
00000f1d: SSTORE
00000f1e: PUSH1 0x02
00000f20: DUP3
00000f21: ADD
00000f22: DUP9
00000f23: SWAP1
00000f24: SSTORE
00000f25: SWAP3
00000f26: DUP2
00000f27: ADD
00000f28: DUP1
00000f29: SLOAD
00000f2a: PUSH1 0xff
00000f2c: PUSH1 0x98
00000f2e: SHL
00000f2f: NOT
00000f30: AND
00000f31: PUSH1 0x01
00000f33: PUSH1 0x98
00000f35: SHL
00000f36: OR
00000f37: SWAP1
00000f38: SSTORE
00000f39: DUP4
00000f3a: MLOAD
00000f3b: DUP10
00000f3c: DUP2
00000f3d: MSTORE
00000f3e: SWAP2
00000f3f: DUP3
00000f40: ADD
00000f41: SWAP3
00000f42: SWAP1
00000f43: SWAP3
00000f44: MSTORE
00000f45: SWAP2
00000f46: DUP3
00000f47: ADD
00000f48: DUP6
00000f49: SWAP1
00000f4a: MSTORE
00000f4b: SWAP2
00000f4c: SWAP3
00000f4d: POP
00000f4e: PUSH32 0x9e0513480601e91dca98526cffea0fce74a3e9eaf7efe15ba940450a4e4d0764
00000f6f: SWAP1
00000f70: PUSH1 0x60
00000f72: ADD
00000f73: PUSH2 0x0e19
00000f76: JUMP
00000f77: JUMPDEST
00000f78: PUSH2 0x0f7f
00000f7b: PUSH2 0x2fb3
00000f7e: JUMP
00000f7f: JUMPDEST
00000f80: DUP3
00000f81: DUP2
00000f82: EQ
00000f83: PUSH2 0x0f9e
00000f86: JUMPI
00000f87: PUSH1 0x40
00000f89: MLOAD
00000f8a: PUSH3 0x461bcd
00000f8e: PUSH1 0xe5
00000f90: SHL
00000f91: DUP2
00000f92: MSTORE
00000f93: PUSH1 0x04
00000f95: ADD
00000f96: PUSH2 0x08b3
00000f99: SWAP1
00000f9a: PUSH2 0x3f83
00000f9d: JUMP
00000f9e: JUMPDEST
00000f9f: PUSH1 0x00
00000fa1: DUP1
00000fa2: PUSH2 0x0fa9
00000fa5: PUSH2 0x301b
00000fa8: JUMP
00000fa9: JUMPDEST
00000faa: SWAP1
00000fab: POP
00000fac: PUSH1 0x00
00000fae: JUMPDEST
00000faf: DUP6
00000fb0: DUP2
00000fb1: LT
00000fb2: ISZERO
00000fb3: PUSH2 0x1096
00000fb6: JUMPI
00000fb7: PUSH1 0x00
00000fb9: DUP3
00000fba: PUSH1 0x02
00000fbc: ADD
00000fbd: PUSH1 0x00
00000fbf: DUP10
00000fc0: DUP10
00000fc1: DUP6
00000fc2: DUP2
00000fc3: DUP2
00000fc4: LT
00000fc5: PUSH2 0x0fd0
00000fc8: JUMPI
00000fc9: PUSH2 0x0fd0
00000fcc: PUSH2 0x3dde
00000fcf: JUMP
00000fd0: JUMPDEST
00000fd1: PUSH1 0x20
00000fd3: SWAP1
00000fd4: DUP2
00000fd5: MUL
00000fd6: SWAP3
00000fd7: SWAP1
00000fd8: SWAP3
00000fd9: ADD
00000fda: CALLDATALOAD
00000fdb: DUP4
00000fdc: MSTORE
00000fdd: POP
00000fde: DUP2
00000fdf: ADD
00000fe0: SWAP2
00000fe1: SWAP1
00000fe2: SWAP2
00000fe3: MSTORE
00000fe4: PUSH1 0x40
00000fe6: ADD
00000fe7: PUSH1 0x00
00000fe9: KECCAK256
00000fea: PUSH1 0x02
00000fec: DUP2
00000fed: ADD
00000fee: SLOAD
00000fef: SWAP1
00000ff0: SWAP2
00000ff1: POP
00000ff2: PUSH1 0x01
00000ff4: PUSH1 0x01
00000ff6: PUSH1 0xa0
00000ff8: SHL
00000ff9: SUB
00000ffa: AND
00000ffb: PUSH2 0x1049
00000ffe: JUMPI
00000fff: PUSH2 0x1038
00001002: DUP9
00001003: DUP9
00001004: DUP5
00001005: DUP2
00001006: DUP2
00001007: LT
00001008: PUSH2 0x1013
0000100b: JUMPI
0000100c: PUSH2 0x1013
0000100f: PUSH2 0x3dde
00001012: JUMP
00001013: JUMPDEST
00001014: SWAP1
00001015: POP
00001016: PUSH1 0x20
00001018: MUL
00001019: ADD
0000101a: CALLDATALOAD
0000101b: DUP8
0000101c: DUP8
0000101d: DUP6
0000101e: DUP2
0000101f: DUP2
00001020: LT
00001021: PUSH2 0x102c
00001024: JUMPI
00001025: PUSH2 0x102c
00001028: PUSH2 0x3dde
0000102b: JUMP
0000102c: JUMPDEST
0000102d: SWAP1
0000102e: POP
0000102f: PUSH1 0x20
00001031: MUL
00001032: ADD
00001033: CALLDATALOAD
00001034: PUSH2 0x30af
00001037: JUMP
00001038: JUMPDEST
00001039: PUSH2 0x1042
0000103c: SWAP1
0000103d: DUP6
0000103e: PUSH2 0x3f0c
00001041: JUMP
00001042: JUMPDEST
00001043: SWAP4
00001044: POP
00001045: PUSH2 0x1083
00001048: JUMP
00001049: JUMPDEST
0000104a: PUSH2 0x1083
0000104d: DUP9
0000104e: DUP9
0000104f: DUP5
00001050: DUP2
00001051: DUP2
00001052: LT
00001053: PUSH2 0x105e
00001056: JUMPI
00001057: PUSH2 0x105e
0000105a: PUSH2 0x3dde
0000105d: JUMP
0000105e: JUMPDEST
0000105f: SWAP1
00001060: POP
00001061: PUSH1 0x20
00001063: MUL
00001064: ADD
00001065: CALLDATALOAD
00001066: DUP8
00001067: DUP8
00001068: DUP6
00001069: DUP2
0000106a: DUP2
0000106b: LT
0000106c: PUSH2 0x1077
0000106f: JUMPI
00001070: PUSH2 0x1077
00001073: PUSH2 0x3dde
00001076: JUMP
00001077: JUMPDEST
00001078: SWAP1
00001079: POP
0000107a: PUSH1 0x20
0000107c: MUL
0000107d: ADD
0000107e: CALLDATALOAD
0000107f: PUSH2 0x1477
00001082: JUMP
00001083: JUMPDEST
00001084: POP
00001085: DUP1
00001086: PUSH2 0x108e
00001089: DUP2
0000108a: PUSH2 0x3e0a
0000108d: JUMP
0000108e: JUMPDEST
0000108f: SWAP2
00001090: POP
00001091: POP
00001092: PUSH2 0x0fae
00001095: JUMP
00001096: JUMPDEST
00001097: POP
00001098: DUP2
00001099: CALLVALUE
0000109a: LT
0000109b: ISZERO
0000109c: PUSH2 0x10b7
0000109f: JUMPI
000010a0: PUSH1 0x40
000010a2: MLOAD
000010a3: PUSH3 0x461bcd
000010a7: PUSH1 0xe5
000010a9: SHL
000010aa: DUP2
000010ab: MSTORE
000010ac: PUSH1 0x04
000010ae: ADD
000010af: PUSH2 0x08b3
000010b2: SWAP1
000010b3: PUSH2 0x3faa
000010b6: JUMP
000010b7: JUMPDEST
000010b8: CALLVALUE
000010b9: PUSH2 0x10c9
000010bc: DUP4
000010bd: PUSH7 0xb1a2bc2ec50000
000010c5: PUSH2 0x3f0c
000010c8: JUMP
000010c9: JUMPDEST
000010ca: GT
000010cb: PUSH2 0x10e6
000010ce: JUMPI
000010cf: PUSH1 0x40
000010d1: MLOAD
000010d2: PUSH3 0x461bcd
000010d6: PUSH1 0xe5
000010d8: SHL
000010d9: DUP2
000010da: MSTORE
000010db: PUSH1 0x04
000010dd: ADD
000010de: PUSH2 0x08b3
000010e1: SWAP1
000010e2: PUSH2 0x3fd6
000010e5: JUMP
000010e6: JUMPDEST
000010e7: POP
000010e8: POP
000010e9: PUSH2 0x10f0
000010ec: PUSH2 0x309e
000010ef: JUMP
000010f0: JUMPDEST
000010f1: POP
000010f2: POP
000010f3: POP
000010f4: POP
000010f5: JUMP
000010f6: JUMPDEST
000010f7: PUSH1 0x00
000010f9: DUP1
000010fa: PUSH2 0x1101
000010fd: PUSH2 0x301b
00001100: JUMP
00001101: JUMPDEST
00001102: PUSH1 0x05
00001104: ADD
00001105: SLOAD
00001106: SWAP3
00001107: SWAP2
00001108: POP
00001109: POP
0000110a: JUMP
0000110b: JUMPDEST
0000110c: PUSH1 0x00
0000110e: DUP1
0000110f: PUSH2 0x1116
00001112: PUSH2 0x301b
00001115: JUMP
00001116: JUMPDEST
00001117: PUSH1 0x00
00001119: SWAP4
0000111a: DUP5
0000111b: MSTORE
0000111c: PUSH1 0x02
0000111e: ADD
0000111f: PUSH1 0x20
00001121: MSTORE
00001122: POP
00001123: POP
00001124: PUSH1 0x40
00001126: SWAP1
00001127: KECCAK256
00001128: SLOAD
00001129: PUSH1 0xff
0000112b: AND
0000112c: PUSH1 0x01
0000112e: EQ
0000112f: SWAP1
00001130: JUMP
00001131: JUMPDEST
00001132: PUSH1 0x00
00001134: DUP1
00001135: PUSH2 0x113c
00001138: PUSH2 0x301b
0000113b: JUMP
0000113c: JUMPDEST
0000113d: PUSH1 0x03
0000113f: ADD
00001140: SLOAD
00001141: SWAP3
00001142: SWAP2
00001143: POP
00001144: POP
00001145: JUMP
00001146: JUMPDEST
00001147: PUSH1 0x00
00001149: JUMPDEST
0000114a: DUP2
0000114b: DUP2
0000114c: LT
0000114d: ISZERO
0000114e: PUSH2 0x0830
00001151: JUMPI
00001152: PUSH2 0x1172
00001155: DUP4
00001156: DUP4
00001157: DUP4
00001158: DUP2
00001159: DUP2
0000115a: LT
0000115b: PUSH2 0x1166
0000115e: JUMPI
0000115f: PUSH2 0x1166
00001162: PUSH2 0x3dde
00001165: JUMP
00001166: JUMPDEST
00001167: SWAP1
00001168: POP
00001169: PUSH1 0x20
0000116b: MUL
0000116c: ADD
0000116d: CALLDATALOAD
0000116e: PUSH2 0x2c81
00001171: JUMP
00001172: JUMPDEST
00001173: DUP1
00001174: PUSH2 0x117c
00001177: DUP2
00001178: PUSH2 0x3e0a
0000117b: JUMP
0000117c: JUMPDEST
0000117d: SWAP2
0000117e: POP
0000117f: POP
00001180: PUSH2 0x1149
00001183: JUMP
00001184: JUMPDEST
00001185: PUSH2 0x118c
00001188: PUSH2 0x2fe9
0000118b: JUMP
0000118c: JUMPDEST
0000118d: PUSH1 0x00
0000118f: PUSH2 0x1196
00001192: PUSH2 0x301b
00001195: JUMP
00001196: JUMPDEST
00001197: PUSH1 0x00
00001199: DUP4
0000119a: DUP2
0000119b: MSTORE
0000119c: PUSH1 0x01
0000119e: DUP3
0000119f: DUP2
000011a0: ADD
000011a1: PUSH1 0x20
000011a3: MSTORE
000011a4: PUSH1 0x40
000011a6: DUP3
000011a7: KECCAK256
000011a8: DUP1
000011a9: DUP3
000011aa: ADD
000011ab: SLOAD
000011ac: SWAP4
000011ad: SWAP5
000011ae: POP
000011af: SWAP3
000011b0: PUSH1 0x01
000011b2: PUSH1 0x98
000011b4: SHL
000011b5: SWAP1
000011b6: DIV
000011b7: PUSH1 0xff
000011b9: AND
000011ba: SWAP2
000011bb: SWAP1
000011bc: DUP3
000011bd: EQ
000011be: PUSH2 0x11c8
000011c1: JUMPI
000011c2: PUSH1 0x01
000011c4: PUSH2 0x11cb
000011c7: JUMP
000011c8: JUMPDEST
000011c9: PUSH1 0x02
000011cb: JUMPDEST
000011cc: SWAP1
000011cd: POP
000011ce: PUSH1 0xff
000011d0: DUP3
000011d1: AND
000011d2: PUSH1 0x01
000011d4: EQ
000011d5: DUP1
000011d6: PUSH2 0x11e2
000011d9: JUMPI
000011da: POP
000011db: PUSH1 0xff
000011dd: DUP3
000011de: AND
000011df: PUSH1 0x02
000011e1: EQ
000011e2: JUMPDEST
000011e3: PUSH2 0x122b
000011e6: JUMPI
000011e7: PUSH1 0x40
000011e9: MLOAD
000011ea: PUSH3 0x461bcd
000011ee: PUSH1 0xe5
000011f0: SHL
000011f1: DUP2
000011f2: MSTORE
000011f3: PUSH1 0x20
000011f5: PUSH1 0x04
000011f7: DUP3
000011f8: ADD
000011f9: MSTORE
000011fa: PUSH1 0x1a
000011fc: PUSH1 0x24
000011fe: DUP3
000011ff: ADD
00001200: MSTORE
00001201: PUSH26 0x43616e6e6f74204368616e676520546f6b656e20537461747573
0000121c: PUSH1 0x30
0000121e: SHL
0000121f: PUSH1 0x44
00001221: DUP3
00001222: ADD
00001223: MSTORE
00001224: PUSH1 0x64
00001226: ADD
00001227: PUSH2 0x08b3
0000122a: JUMP
0000122b: JUMPDEST
0000122c: PUSH1 0x01
0000122e: DUP4
0000122f: ADD
00001230: DUP1
00001231: SLOAD
00001232: PUSH1 0xff
00001234: DUP4
00001235: DUP2
00001236: AND
00001237: PUSH1 0x01
00001239: PUSH1 0x98
0000123b: SHL
0000123c: DUP2
0000123d: MUL
0000123e: PUSH1 0xff
00001240: PUSH1 0x98
00001242: SHL
00001243: NOT
00001244: SWAP1
00001245: SWAP4
00001246: AND
00001247: SWAP3
00001248: SWAP1
00001249: SWAP3
0000124a: OR
0000124b: SWAP1
0000124c: SWAP3
0000124d: SSTORE
0000124e: PUSH1 0x40
00001250: DUP1
00001251: MLOAD
00001252: DUP9
00001253: DUP2
00001254: MSTORE
00001255: SWAP3
00001256: DUP6
00001257: AND
00001258: PUSH1 0x20
0000125a: DUP5
0000125b: ADD
0000125c: MSTORE
0000125d: DUP3
0000125e: ADD
0000125f: MSTORE
00001260: PUSH32 0x853e3a954af7889419a6922a1bc350b54c6217937a4a2aed1176ed3f5a1dfb52
00001281: SWAP1
00001282: PUSH1 0x60
00001284: ADD
00001285: PUSH2 0x0e19
00001288: JUMP
00001289: JUMPDEST
0000128a: PUSH2 0x1291
0000128d: PUSH2 0x2fe9
00001290: JUMP
00001291: JUMPDEST
00001292: PUSH2 0x129b
00001295: PUSH1 0x00
00001297: PUSH2 0x330e
0000129a: JUMP
0000129b: JUMPDEST
0000129c: JUMP
0000129d: JUMPDEST
0000129e: PUSH2 0x12a5
000012a1: PUSH2 0x2fe9
000012a4: JUMP
000012a5: JUMPDEST
000012a6: PUSH1 0x00
000012a8: PUSH2 0x12af
000012ab: PUSH2 0x301b
000012ae: JUMP
000012af: JUMPDEST
000012b0: PUSH1 0x00
000012b2: DUP4
000012b3: DUP2
000012b4: MSTORE
000012b5: PUSH1 0x01
000012b7: DUP1
000012b8: DUP4
000012b9: ADD
000012ba: PUSH1 0x20
000012bc: MSTORE
000012bd: PUSH1 0x40
000012bf: SWAP1
000012c0: SWAP2
000012c1: KECCAK256
000012c2: SWAP1
000012c3: DUP2
000012c4: ADD
000012c5: SLOAD
000012c6: SWAP2
000012c7: SWAP3
000012c8: POP
000012c9: SWAP1
000012ca: PUSH1 0x01
000012cc: PUSH1 0x98
000012ce: SHL
000012cf: SWAP1
000012d0: DIV
000012d1: PUSH1 0xff
000012d3: AND
000012d4: PUSH1 0x03
000012d6: EQ
000012d7: PUSH2 0x12f2
000012da: JUMPI
000012db: PUSH1 0x40
000012dd: MLOAD
000012de: PUSH3 0x461bcd
000012e2: PUSH1 0xe5
000012e4: SHL
000012e5: DUP2
000012e6: MSTORE
000012e7: PUSH1 0x04
000012e9: ADD
000012ea: PUSH2 0x08b3
000012ed: SWAP1
000012ee: PUSH2 0x4001
000012f1: JUMP
000012f2: JUMPDEST
000012f3: PUSH1 0x01
000012f5: DUP2
000012f6: ADD
000012f7: DUP1
000012f8: SLOAD
000012f9: PUSH1 0xff
000012fb: PUSH1 0x98
000012fd: SHL
000012fe: NOT
000012ff: AND
00001300: PUSH1 0x01
00001302: PUSH1 0x99
00001304: SHL
00001305: OR
00001306: SWAP1
00001307: SSTORE
00001308: PUSH1 0x40
0000130a: MLOAD
0000130b: DUP4
0000130c: DUP2
0000130d: MSTORE
0000130e: PUSH32 0x6ac56c552b96d07b41e8ee97200f747e7476892e0e2e53e9803199bfe014b0a8
0000132f: SWAP1
00001330: PUSH1 0x20
00001332: ADD
00001333: PUSH1 0x40
00001335: MLOAD
00001336: DUP1
00001337: SWAP2
00001338: SUB
00001339: SWAP1
0000133a: LOG1
0000133b: POP
0000133c: POP
0000133d: POP
0000133e: JUMP
0000133f: JUMPDEST
00001340: PUSH2 0x1347
00001343: PUSH2 0x2fb3
00001346: JUMP
00001347: JUMPDEST
00001348: PUSH1 0x00
0000134a: PUSH2 0x1351
0000134d: PUSH2 0x301b
00001350: JUMP
00001351: JUMPDEST
00001352: PUSH1 0x00
00001354: DUP7
00001355: DUP2
00001356: MSTORE
00001357: PUSH1 0x01
00001359: DUP1
0000135a: DUP4
0000135b: ADD
0000135c: PUSH1 0x20
0000135e: MSTORE
0000135f: PUSH1 0x40
00001361: SWAP1
00001362: SWAP2
00001363: KECCAK256
00001364: DUP1
00001365: DUP3
00001366: ADD
00001367: SLOAD
00001368: SWAP3
00001369: SWAP4
0000136a: POP
0000136b: SWAP2
0000136c: PUSH1 0x01
0000136e: PUSH1 0x98
00001370: SHL
00001371: SWAP1
00001372: DIV
00001373: PUSH1 0xff
00001375: AND
00001376: EQ
00001377: PUSH2 0x1392
0000137a: JUMPI
0000137b: PUSH1 0x40
0000137d: MLOAD
0000137e: PUSH3 0x461bcd
00001382: PUSH1 0xe5
00001384: SHL
00001385: DUP2
00001386: MSTORE
00001387: PUSH1 0x04
00001389: ADD
0000138a: PUSH2 0x08b3
0000138d: SWAP1
0000138e: PUSH2 0x402f
00001391: JUMP
00001392: JUMPDEST
00001393: PUSH1 0x00
00001395: DUP6
00001396: GT
00001397: DUP1
00001398: ISZERO
00001399: PUSH2 0x13a2
0000139c: JUMPI
0000139d: POP
0000139e: PUSH1 0x00
000013a0: DUP5
000013a1: GT
000013a2: JUMPDEST
000013a3: PUSH2 0x13be
000013a6: JUMPI
000013a7: PUSH1 0x40
000013a9: MLOAD
000013aa: PUSH3 0x461bcd
000013ae: PUSH1 0xe5
000013b0: SHL
000013b1: DUP2
000013b2: MSTORE
000013b3: PUSH1 0x04
000013b5: ADD
000013b6: PUSH2 0x08b3
000013b9: SWAP1
000013ba: PUSH2 0x4056
000013bd: JUMP
000013be: JUMPDEST
000013bf: DUP3
000013c0: DUP6
000013c1: LT
000013c2: ISZERO
000013c3: PUSH2 0x13de
000013c6: JUMPI
000013c7: PUSH1 0x40
000013c9: MLOAD
000013ca: PUSH3 0x461bcd
000013ce: PUSH1 0xe5
000013d0: SHL
000013d1: DUP2
000013d2: MSTORE
000013d3: PUSH1 0x04
000013d5: ADD
000013d6: PUSH2 0x08b3
000013d9: SWAP1
000013da: PUSH2 0x4087
000013dd: JUMP
000013de: JUMPDEST
000013df: DUP1
000013e0: PUSH1 0x02
000013e2: ADD
000013e3: SLOAD
000013e4: DUP4
000013e5: LT
000013e6: ISZERO
000013e7: PUSH2 0x1402
000013ea: JUMPI
000013eb: PUSH1 0x40
000013ed: MLOAD
000013ee: PUSH3 0x461bcd
000013f2: PUSH1 0xe5
000013f4: SHL
000013f5: DUP2
000013f6: MSTORE
000013f7: PUSH1 0x04
000013f9: ADD
000013fa: PUSH2 0x08b3
000013fd: SWAP1
000013fe: PUSH2 0x40d9
00001401: JUMP
00001402: JUMPDEST
00001403: PUSH1 0x06
00001405: DUP3
00001406: ADD
00001407: SLOAD
00001408: PUSH1 0x00
0000140a: SWAP1
0000140b: PUSH3 0x0f4240
0000140f: SWAP1
00001410: PUSH2 0x1419
00001413: SWAP1
00001414: DUP8
00001415: PUSH2 0x3ed3
00001418: JUMP
00001419: JUMPDEST
0000141a: PUSH2 0x1423
0000141d: SWAP2
0000141e: SWAP1
0000141f: PUSH2 0x3eea
00001422: JUMP
00001423: JUMPDEST
00001424: SWAP1
00001425: POP
00001426: PUSH1 0x00
00001428: PUSH1 0xff
0000142a: DUP10
0000142b: AND
0000142c: PUSH1 0x01
0000142e: EQ
0000142f: PUSH2 0x1438
00001432: JUMPI
00001433: DUP2
00001434: PUSH2 0x143a
00001437: JUMP
00001438: JUMPDEST
00001439: DUP6
0000143a: JUMPDEST
0000143b: SWAP1
0000143c: POP
0000143d: CALLVALUE
0000143e: DUP2
0000143f: EQ
00001440: PUSH2 0x145b
00001443: JUMPI
00001444: PUSH1 0x40
00001446: MLOAD
00001447: PUSH3 0x461bcd
0000144b: PUSH1 0xe5
0000144d: SHL
0000144e: DUP2
0000144f: MSTORE
00001450: PUSH1 0x04
00001452: ADD
00001453: PUSH2 0x08b3
00001456: SWAP1
00001457: PUSH2 0x3faa
0000145a: JUMP
0000145b: JUMPDEST
0000145c: PUSH2 0x146b
0000145f: DUP10
00001460: DUP10
00001461: PUSH1 0x00
00001463: DUP11
00001464: DUP11
00001465: DUP8
00001466: DUP12
00001467: PUSH2 0x336a
0000146a: JUMP
0000146b: JUMPDEST
0000146c: POP
0000146d: POP
0000146e: POP
0000146f: POP
00001470: PUSH2 0x0e9e
00001473: PUSH2 0x309e
00001476: JUMP
00001477: JUMPDEST
00001478: PUSH1 0x00
0000147a: PUSH2 0x1481
0000147d: PUSH2 0x301b
00001480: JUMP
00001481: JUMPDEST
00001482: PUSH1 0x00
00001484: DUP5
00001485: DUP2
00001486: MSTORE
00001487: PUSH1 0x02
00001489: DUP3
0000148a: ADD
0000148b: PUSH1 0x20
0000148d: SWAP1
0000148e: DUP2
0000148f: MSTORE
00001490: PUSH1 0x40
00001492: DUP1
00001493: DUP4
00001494: KECCAK256
00001495: PUSH1 0x01
00001497: DUP1
00001498: DUP3
00001499: ADD
0000149a: SLOAD
0000149b: DUP6
0000149c: MSTORE
0000149d: DUP1
0000149e: DUP7
0000149f: ADD
000014a0: SWAP1
000014a1: SWAP4
000014a2: MSTORE
000014a3: SWAP3
000014a4: KECCAK256
000014a5: PUSH1 0x07
000014a7: DUP4
000014a8: ADD
000014a9: SLOAD
000014aa: SWAP4
000014ab: SWAP5
000014ac: POP
000014ad: SWAP2
000014ae: SWAP3
000014af: PUSH1 0xff
000014b1: AND
000014b2: EQ
000014b3: PUSH2 0x14ce
000014b6: JUMPI
000014b7: PUSH1 0x40
000014b9: MLOAD
000014ba: PUSH3 0x461bcd
000014be: PUSH1 0xe5
000014c0: SHL
000014c1: DUP2
000014c2: MSTORE
000014c3: PUSH1 0x04
000014c5: ADD
000014c6: PUSH2 0x08b3
000014c9: SWAP1
000014ca: PUSH2 0x4137
000014cd: JUMP
000014ce: JUMPDEST
000014cf: PUSH1 0x01
000014d1: DUP2
000014d2: DUP2
000014d3: ADD
000014d4: SLOAD
000014d5: PUSH1 0x01
000014d7: PUSH1 0x98
000014d9: SHL
000014da: SWAP1
000014db: DIV
000014dc: PUSH1 0xff
000014de: AND
000014df: EQ
000014e0: PUSH2 0x14fb
000014e3: JUMPI
000014e4: PUSH1 0x40
000014e6: MLOAD
000014e7: PUSH3 0x461bcd
000014eb: PUSH1 0xe5
000014ed: SHL
000014ee: DUP2
000014ef: MSTORE
000014f0: PUSH1 0x04
000014f2: ADD
000014f3: PUSH2 0x08b3
000014f6: SWAP1
000014f7: PUSH2 0x4165
000014fa: JUMP
000014fb: JUMPDEST
000014fc: PUSH1 0x00
000014fe: DUP5
000014ff: GT
00001500: PUSH2 0x151b
00001503: JUMPI
00001504: PUSH1 0x40
00001506: MLOAD
00001507: PUSH3 0x461bcd
0000150b: PUSH1 0xe5
0000150d: SHL
0000150e: DUP2
0000150f: MSTORE
00001510: PUSH1 0x04
00001512: ADD
00001513: PUSH2 0x08b3
00001516: SWAP1
00001517: PUSH2 0x4193
0000151a: JUMP
0000151b: JUMPDEST
0000151c: DUP4
0000151d: DUP3
0000151e: PUSH1 0x06
00001520: ADD
00001521: SLOAD
00001522: DUP4
00001523: PUSH1 0x03
00001525: ADD
00001526: SLOAD
00001527: PUSH2 0x1530
0000152a: SWAP2
0000152b: SWAP1
0000152c: PUSH2 0x3f1f
0000152f: JUMP
00001530: JUMPDEST
00001531: LT
00001532: ISZERO
00001533: PUSH2 0x154e
00001536: JUMPI
00001537: PUSH1 0x40
00001539: MLOAD
0000153a: PUSH3 0x461bcd
0000153e: PUSH1 0xe5
00001540: SHL
00001541: DUP2
00001542: MSTORE
00001543: PUSH1 0x04
00001545: ADD
00001546: PUSH2 0x08b3
00001549: SWAP1
0000154a: PUSH2 0x41bb
0000154d: JUMP
0000154e: JUMPDEST
0000154f: DUP2
00001550: PUSH1 0x08
00001552: ADD
00001553: SLOAD
00001554: DUP3
00001555: PUSH1 0x06
00001557: ADD
00001558: SLOAD
00001559: DUP4
0000155a: PUSH1 0x03
0000155c: ADD
0000155d: SLOAD
0000155e: PUSH2 0x1567
00001561: SWAP2
00001562: SWAP1
00001563: PUSH2 0x3f1f
00001566: JUMP
00001567: JUMPDEST
00001568: GT
00001569: ISZERO
0000156a: PUSH2 0x15c2
0000156d: JUMPI
0000156e: DUP2
0000156f: PUSH1 0x08
00001571: ADD
00001572: SLOAD
00001573: DUP5
00001574: LT
00001575: ISZERO
00001576: PUSH2 0x15bd
00001579: JUMPI
0000157a: PUSH1 0x40
0000157c: MLOAD
0000157d: PUSH3 0x461bcd
00001581: PUSH1 0xe5
00001583: SHL
00001584: DUP2
00001585: MSTORE
00001586: PUSH1 0x20
00001588: PUSH1 0x04
0000158a: DUP3
0000158b: ADD
0000158c: MSTORE
0000158d: PUSH1 0x25
0000158f: PUSH1 0x24
00001591: DUP3
00001592: ADD
00001593: MSTORE
00001594: PUSH1 0x00
00001596: DUP1
00001597: MLOAD
00001598: PUSH1 0x20
0000159a: PUSH2 0x43b8
0000159d: DUP4
0000159e: CODECOPY
0000159f: DUP2
000015a0: MLOAD
000015a1: SWAP2
000015a2: MSTORE
000015a3: PUSH1 0x44
000015a5: DUP3
000015a6: ADD
000015a7: MSTORE
000015a8: PUSH5 0x1b5bdd5b9d
000015ae: PUSH1 0xda
000015b0: SHL
000015b1: PUSH1 0x64
000015b3: DUP3
000015b4: ADD
000015b5: MSTORE
000015b6: PUSH1 0x84
000015b8: ADD
000015b9: PUSH2 0x08b3
000015bc: JUMP
000015bd: JUMPDEST
000015be: PUSH2 0x15f4
000015c1: JUMP
000015c2: JUMPDEST
000015c3: DUP2
000015c4: PUSH1 0x06
000015c6: ADD
000015c7: SLOAD
000015c8: DUP3
000015c9: PUSH1 0x03
000015cb: ADD
000015cc: SLOAD
000015cd: PUSH2 0x15d6
000015d0: SWAP2
000015d1: SWAP1
000015d2: PUSH2 0x3f1f
000015d5: JUMP
000015d6: JUMPDEST
000015d7: DUP5
000015d8: EQ
000015d9: PUSH2 0x15f4
000015dc: JUMPI
000015dd: PUSH1 0x40
000015df: MLOAD
000015e0: PUSH3 0x461bcd
000015e4: PUSH1 0xe5
000015e6: SHL
000015e7: DUP2
000015e8: MSTORE
000015e9: PUSH1 0x04
000015eb: ADD
000015ec: PUSH2 0x08b3
000015ef: SWAP1
000015f0: PUSH2 0x41ed
000015f3: JUMP
000015f4: JUMPDEST
000015f5: PUSH1 0x02
000015f7: DUP3
000015f8: ADD
000015f9: SLOAD
000015fa: PUSH1 0x01
000015fc: PUSH1 0x01
000015fe: PUSH1 0xa0
00001600: SHL
00001601: SUB
00001602: AND
00001603: PUSH2 0x161e
00001606: JUMPI
00001607: PUSH1 0x40
00001609: MLOAD
0000160a: PUSH3 0x461bcd
0000160e: PUSH1 0xe5
00001610: SHL
00001611: DUP2
00001612: MSTORE
00001613: PUSH1 0x04
00001615: ADD
00001616: PUSH2 0x08b3
00001619: SWAP1
0000161a: PUSH2 0x4242
0000161d: JUMP
0000161e: JUMPDEST
0000161f: PUSH1 0x02
00001621: DUP3
00001622: ADD
00001623: SLOAD
00001624: DUP3
00001625: SLOAD
00001626: PUSH1 0x01
00001628: PUSH1 0x01
0000162a: PUSH1 0xa0
0000162c: SHL
0000162d: SUB
0000162e: SWAP1
0000162f: SWAP2
00001630: AND
00001631: SWAP1
00001632: PUSH1 0x00
00001634: SWAP1
00001635: DUP2
00001636: SWAP1
00001637: DUP2
00001638: SWAP1
00001639: PUSH1 0xff
0000163b: AND
0000163c: PUSH1 0x00
0000163e: NOT
0000163f: ADD
00001640: PUSH2 0x1682
00001643: JUMPI
00001644: DUP6
00001645: PUSH1 0x03
00001647: ADD
00001648: SLOAD
00001649: DUP9
0000164a: DUP8
0000164b: PUSH1 0x05
0000164d: ADD
0000164e: SLOAD
0000164f: PUSH2 0x1658
00001652: SWAP2
00001653: SWAP1
00001654: PUSH2 0x3ed3
00001657: JUMP
00001658: JUMPDEST
00001659: PUSH2 0x1662
0000165c: SWAP2
0000165d: SWAP1
0000165e: PUSH2 0x3eea
00001661: JUMP
00001662: JUMPDEST
00001663: PUSH1 0x07
00001665: DUP8
00001666: ADD
00001667: SLOAD
00001668: SWAP1
00001669: SWAP4
0000166a: POP
0000166b: PUSH2 0x0100
0000166e: SWAP1
0000166f: DIV
00001670: PUSH1 0x01
00001672: PUSH1 0x01
00001674: PUSH1 0xa0
00001676: SHL
00001677: SUB
00001678: AND
00001679: SWAP2
0000167a: POP
0000167b: CALLER
0000167c: SWAP1
0000167d: POP
0000167e: PUSH2 0x16bd
00001681: JUMP
00001682: JUMPDEST
00001683: DUP6
00001684: PUSH1 0x03
00001686: ADD
00001687: SLOAD
00001688: DUP9
00001689: DUP8
0000168a: PUSH1 0x04
0000168c: ADD
0000168d: SLOAD
0000168e: PUSH2 0x1697
00001691: SWAP2
00001692: SWAP1
00001693: PUSH2 0x3ed3
00001696: JUMP
00001697: JUMPDEST
00001698: PUSH2 0x16a1
0000169b: SWAP2
0000169c: SWAP1
0000169d: PUSH2 0x3eea
000016a0: JUMP
000016a1: JUMPDEST
000016a2: PUSH1 0x07
000016a4: DUP8
000016a5: ADD
000016a6: SLOAD
000016a7: SWAP1
000016a8: SWAP4
000016a9: POP
000016aa: CALLER
000016ab: SWAP3
000016ac: POP
000016ad: PUSH2 0x0100
000016b0: SWAP1
000016b1: DIV
000016b2: PUSH1 0x01
000016b4: PUSH1 0x01
000016b6: PUSH1 0xa0
000016b8: SHL
000016b9: SUB
000016ba: AND
000016bb: SWAP1
000016bc: POP
000016bd: JUMPDEST
000016be: PUSH2 0x16d2
000016c1: PUSH1 0x01
000016c3: PUSH1 0x01
000016c5: PUSH1 0xa0
000016c7: SHL
000016c8: SUB
000016c9: DUP6
000016ca: AND
000016cb: CALLER
000016cc: ADDRESS
000016cd: DUP7
000016ce: PUSH2 0x354b
000016d1: JUMP
000016d2: JUMPDEST
000016d3: PUSH2 0x16de
000016d6: DUP10
000016d7: DUP10
000016d8: DUP5
000016d9: DUP5
000016da: PUSH2 0x3584
000016dd: JUMP
000016de: JUMPDEST
000016df: POP
000016e0: POP
000016e1: POP
000016e2: POP
000016e3: POP
000016e4: POP
000016e5: POP
000016e6: POP
000016e7: POP
000016e8: JUMP
000016e9: JUMPDEST
000016ea: PUSH2 0x171d
000016ed: PUSH1 0x40
000016ef: MLOAD
000016f0: DUP1
000016f1: PUSH1 0x80
000016f3: ADD
000016f4: PUSH1 0x40
000016f6: MSTORE
000016f7: DUP1
000016f8: PUSH1 0x00
000016fa: DUP2
000016fb: MSTORE
000016fc: PUSH1 0x20
000016fe: ADD
000016ff: PUSH1 0x00
00001701: DUP2
00001702: MSTORE
00001703: PUSH1 0x20
00001705: ADD
00001706: PUSH1 0x00
00001708: DUP2
00001709: MSTORE
0000170a: PUSH1 0x20
0000170c: ADD
0000170d: PUSH1 0x00
0000170f: PUSH1 0x01
00001711: PUSH1 0x01
00001713: PUSH1 0xa0
00001715: SHL
00001716: SUB
00001717: AND
00001718: DUP2
00001719: MSTORE
0000171a: POP
0000171b: SWAP1
0000171c: JUMP
0000171d: JUMPDEST
0000171e: PUSH1 0x00
00001720: PUSH2 0x1727
00001723: PUSH2 0x301b
00001726: JUMP
00001727: JUMPDEST
00001728: PUSH1 0x40
0000172a: DUP1
0000172b: MLOAD
0000172c: PUSH1 0x80
0000172e: DUP2
0000172f: ADD
00001730: DUP3
00001731: MSTORE
00001732: PUSH1 0x06
00001734: DUP4
00001735: ADD
00001736: SLOAD
00001737: DUP2
00001738: MSTORE
00001739: PUSH1 0x07
0000173b: DUP4
0000173c: ADD
0000173d: SLOAD
0000173e: PUSH1 0x20
00001740: DUP3
00001741: ADD
00001742: MSTORE
00001743: PUSH1 0x08
00001745: DUP4
00001746: ADD
00001747: SLOAD
00001748: SWAP2
00001749: DUP2
0000174a: ADD
0000174b: SWAP2
0000174c: SWAP1
0000174d: SWAP2
0000174e: MSTORE
0000174f: PUSH1 0x09
00001751: SWAP1
00001752: SWAP2
00001753: ADD
00001754: SLOAD
00001755: PUSH1 0x01
00001757: PUSH1 0x01
00001759: PUSH1 0xa0
0000175b: SHL
0000175c: SUB
0000175d: AND
0000175e: PUSH1 0x60
00001760: DUP3
00001761: ADD
00001762: MSTORE
00001763: SWAP3
00001764: SWAP2
00001765: POP
00001766: POP
00001767: JUMP
00001768: JUMPDEST
00001769: PUSH1 0x00
0000176b: PUSH2 0x1772
0000176e: PUSH2 0x3752
00001771: JUMP
00001772: JUMPDEST
00001773: DUP1
00001774: SLOAD
00001775: SWAP1
00001776: SWAP2
00001777: POP
00001778: PUSH1 0xff
0000177a: PUSH1 0x01
0000177c: PUSH1 0x40
0000177e: SHL
0000177f: DUP3
00001780: DIV
00001781: AND
00001782: ISZERO
00001783: SWAP1
00001784: PUSH1 0x01
00001786: PUSH1 0x01
00001788: PUSH1 0x40
0000178a: SHL
0000178b: SUB
0000178c: AND
0000178d: PUSH1 0x00
0000178f: DUP2
00001790: ISZERO
00001791: DUP1
00001792: ISZERO
00001793: PUSH2 0x1799
00001796: JUMPI
00001797: POP
00001798: DUP3
00001799: JUMPDEST
0000179a: SWAP1
0000179b: POP
0000179c: PUSH1 0x00
0000179e: DUP3
0000179f: PUSH1 0x01
000017a1: PUSH1 0x01
000017a3: PUSH1 0x40
000017a5: SHL
000017a6: SUB
000017a7: AND
000017a8: PUSH1 0x01
000017aa: EQ
000017ab: DUP1
000017ac: ISZERO
000017ad: PUSH2 0x17b5
000017b0: JUMPI
000017b1: POP
000017b2: ADDRESS
000017b3: EXTCODESIZE
000017b4: ISZERO
000017b5: JUMPDEST
000017b6: SWAP1
000017b7: POP
000017b8: DUP2
000017b9: ISZERO
000017ba: DUP1
000017bb: ISZERO
000017bc: PUSH2 0x17c3
000017bf: JUMPI
000017c0: POP
000017c1: DUP1
000017c2: ISZERO
000017c3: JUMPDEST
000017c4: ISZERO
000017c5: PUSH2 0x17e1
000017c8: JUMPI
000017c9: PUSH1 0x40
000017cb: MLOAD
000017cc: PUSH4 0xf92ee8a9
000017d1: PUSH1 0xe0
000017d3: SHL
000017d4: DUP2
000017d5: MSTORE
000017d6: PUSH1 0x04
000017d8: ADD
000017d9: PUSH1 0x40
000017db: MLOAD
000017dc: DUP1
000017dd: SWAP2
000017de: SUB
000017df: SWAP1
000017e0: REVERT
000017e1: JUMPDEST
000017e2: DUP5
000017e3: SLOAD
000017e4: PUSH1 0x01
000017e6: PUSH1 0x01
000017e8: PUSH1 0x40
000017ea: SHL
000017eb: SUB
000017ec: NOT
000017ed: AND
000017ee: PUSH1 0x01
000017f0: OR
000017f1: DUP6
000017f2: SSTORE
000017f3: DUP4
000017f4: ISZERO
000017f5: PUSH2 0x180a
000017f8: JUMPI
000017f9: DUP5
000017fa: SLOAD
000017fb: PUSH1 0xff
000017fd: PUSH1 0x40
000017ff: SHL
00001800: NOT
00001801: AND
00001802: PUSH1 0x01
00001804: PUSH1 0x40
00001806: SHL
00001807: OR
00001808: DUP6
00001809: SSTORE
0000180a: JUMPDEST
0000180b: PUSH2 0x1813
0000180e: CALLER
0000180f: PUSH2 0x3776
00001812: JUMP
00001813: JUMPDEST
00001814: PUSH1 0x00
00001816: PUSH2 0x181d
00001819: PUSH2 0x301b
0000181c: JUMP
0000181d: JUMPDEST
0000181e: PUSH3 0x0f4240
00001822: PUSH1 0x06
00001824: DUP3
00001825: ADD
00001826: SSTORE
00001827: SWAP1
00001828: POP
00001829: PUSH2 0x1830
0000182c: PUSH2 0x1b93
0000182f: JUMP
00001830: JUMPDEST
00001831: PUSH1 0x09
00001833: DUP3
00001834: ADD
00001835: DUP1
00001836: SLOAD
00001837: PUSH1 0x01
00001839: PUSH1 0x01
0000183b: PUSH1 0xa0
0000183d: SHL
0000183e: SUB
0000183f: NOT
00001840: AND
00001841: PUSH1 0x01
00001843: PUSH1 0x01
00001845: PUSH1 0xa0
00001847: SHL
00001848: SUB
00001849: SWAP3
0000184a: SWAP1
0000184b: SWAP3
0000184c: AND
0000184d: SWAP2
0000184e: SWAP1
0000184f: SWAP2
00001850: OR
00001851: SWAP1
00001852: SSTORE
00001853: PUSH2 0x1860
00001856: PUSH1 0xc8
00001858: PUSH3 0x0f4240
0000185c: PUSH2 0x3eea
0000185f: JUMP
00001860: JUMPDEST
00001861: PUSH1 0x08
00001863: DUP3
00001864: ADD
00001865: SSTORE
00001866: PUSH1 0x00
00001868: PUSH1 0x07
0000186a: SWAP1
0000186b: SWAP2
0000186c: ADD
0000186d: SSTORE
0000186e: DUP4
0000186f: ISZERO
00001870: PUSH2 0x0e9e
00001873: JUMPI
00001874: DUP5
00001875: SLOAD
00001876: PUSH1 0xff
00001878: PUSH1 0x40
0000187a: SHL
0000187b: NOT
0000187c: AND
0000187d: DUP6
0000187e: SSTORE
0000187f: PUSH1 0x40
00001881: MLOAD
00001882: PUSH1 0x01
00001884: DUP2
00001885: MSTORE
00001886: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2
000018a7: SWAP1
000018a8: PUSH1 0x20
000018aa: ADD
000018ab: PUSH2 0x0e19
000018ae: JUMP
000018af: JUMPDEST
000018b0: PUSH2 0x18b7
000018b3: PUSH2 0x2fb3
000018b6: JUMP
000018b7: JUMPDEST
000018b8: PUSH1 0x00
000018ba: PUSH2 0x18c3
000018bd: DUP4
000018be: DUP4
000018bf: PUSH2 0x30af
000018c2: JUMP
000018c3: JUMPDEST
000018c4: SWAP1
000018c5: POP
000018c6: DUP1
000018c7: CALLVALUE
000018c8: LT
000018c9: ISZERO
000018ca: PUSH2 0x18e5
000018cd: JUMPI
000018ce: PUSH1 0x40
000018d0: MLOAD
000018d1: PUSH3 0x461bcd
000018d5: PUSH1 0xe5
000018d7: SHL
000018d8: DUP2
000018d9: MSTORE
000018da: PUSH1 0x04
000018dc: ADD
000018dd: PUSH2 0x08b3
000018e0: SWAP1
000018e1: PUSH2 0x3faa
000018e4: JUMP
000018e5: JUMPDEST
000018e6: CALLVALUE
000018e7: PUSH2 0x18f7
000018ea: DUP3
000018eb: PUSH7 0xb1a2bc2ec50000
000018f3: PUSH2 0x3f0c
000018f6: JUMP
000018f7: JUMPDEST
000018f8: GT
000018f9: PUSH2 0x1914
000018fc: JUMPI
000018fd: PUSH1 0x40
000018ff: MLOAD
00001900: PUSH3 0x461bcd
00001904: PUSH1 0xe5
00001906: SHL
00001907: DUP2
00001908: MSTORE
00001909: PUSH1 0x04
0000190b: ADD
0000190c: PUSH2 0x08b3
0000190f: SWAP1
00001910: PUSH2 0x3fd6
00001913: JUMP
00001914: JUMPDEST
00001915: POP
00001916: PUSH2 0x0baa
00001919: PUSH2 0x309e
0000191c: JUMP
0000191d: JUMPDEST
0000191e: PUSH2 0x1925
00001921: PUSH2 0x2fe9
00001924: JUMP
00001925: JUMPDEST
00001926: PUSH1 0x00
00001928: PUSH2 0x192f
0000192b: PUSH2 0x301b
0000192e: JUMP
0000192f: JUMPDEST
00001930: PUSH1 0x00
00001932: DUP6
00001933: DUP2
00001934: MSTORE
00001935: PUSH1 0x01
00001937: DUP3
00001938: ADD
00001939: PUSH1 0x20
0000193b: MSTORE
0000193c: PUSH1 0x40
0000193e: SWAP1
0000193f: KECCAK256
00001940: SWAP1
00001941: SWAP2
00001942: POP
00001943: PUSH1 0x01
00001945: PUSH1 0x01
00001947: PUSH1 0xa0
00001949: SHL
0000194a: SUB
0000194b: DUP5
0000194c: AND
0000194d: PUSH2 0x1968
00001950: JUMPI
00001951: PUSH1 0x40
00001953: MLOAD
00001954: PUSH3 0x461bcd
00001958: PUSH1 0xe5
0000195a: SHL
0000195b: DUP2
0000195c: MSTORE
0000195d: PUSH1 0x04
0000195f: ADD
00001960: PUSH2 0x08b3
00001963: SWAP1
00001964: PUSH2 0x426f
00001967: JUMP
00001968: JUMPDEST
00001969: PUSH1 0x00
0000196b: DUP4
0000196c: PUSH1 0x01
0000196e: PUSH1 0x01
00001970: PUSH1 0x98
00001972: SHL
00001973: SUB
00001974: AND
00001975: GT
00001976: PUSH2 0x19b7
00001979: JUMPI
0000197a: PUSH1 0x40
0000197c: MLOAD
0000197d: PUSH3 0x461bcd
00001981: PUSH1 0xe5
00001983: SHL
00001984: DUP2
00001985: MSTORE
00001986: PUSH1 0x20
00001988: PUSH1 0x04
0000198a: DUP3
0000198b: ADD
0000198c: MSTORE
0000198d: PUSH1 0x13
0000198f: PUSH1 0x24
00001991: DUP3
00001992: ADD
00001993: MSTORE
00001994: PUSH19 0x496e76616c696420536574746c652052617465
000019a8: PUSH1 0x68
000019aa: SHL
000019ab: PUSH1 0x44
000019ad: DUP3
000019ae: ADD
000019af: MSTORE
000019b0: PUSH1 0x64
000019b2: ADD
000019b3: PUSH2 0x08b3
000019b6: JUMP
000019b7: JUMPDEST
000019b8: PUSH1 0x01
000019ba: DUP2
000019bb: DUP2
000019bc: ADD
000019bd: SLOAD
000019be: PUSH1 0x01
000019c0: PUSH1 0x98
000019c2: SHL
000019c3: SWAP1
000019c4: DIV
000019c5: PUSH1 0xff
000019c7: AND
000019c8: EQ
000019c9: DUP1
000019ca: PUSH2 0x19e1
000019cd: JUMPI
000019ce: POP
000019cf: PUSH1 0x01
000019d1: DUP2
000019d2: ADD
000019d3: SLOAD
000019d4: PUSH1 0x01
000019d6: PUSH1 0x98
000019d8: SHL
000019d9: SWAP1
000019da: DIV
000019db: PUSH1 0xff
000019dd: AND
000019de: PUSH1 0x02
000019e0: EQ
000019e1: JUMPDEST
000019e2: PUSH2 0x19fd
000019e5: JUMPI
000019e6: PUSH1 0x40
000019e8: MLOAD
000019e9: PUSH3 0x461bcd
000019ed: PUSH1 0xe5
000019ef: SHL
000019f0: DUP2
000019f1: MSTORE
000019f2: PUSH1 0x04
000019f4: ADD
000019f5: PUSH2 0x08b3
000019f8: SWAP1
000019f9: PUSH2 0x4001
000019fc: JUMP
000019fd: JUMPDEST
000019fe: DUP1
000019ff: SLOAD
00001a00: PUSH1 0x01
00001a02: DUP3
00001a03: ADD
00001a04: DUP1
00001a05: SLOAD
00001a06: PUSH1 0x01
00001a08: PUSH1 0x01
00001a0a: PUSH1 0x98
00001a0c: SHL
00001a0d: SUB
00001a0e: DUP7
00001a0f: AND
00001a10: PUSH1 0x01
00001a12: PUSH1 0x01
00001a14: PUSH1 0xa0
00001a16: SHL
00001a17: SUB
00001a18: NOT
00001a19: SWAP1
00001a1a: SWAP2
00001a1b: AND
00001a1c: DUP2
00001a1d: OR
00001a1e: PUSH1 0x03
00001a20: PUSH1 0x98
00001a22: SHL
00001a23: OR
00001a24: SWAP1
00001a25: SWAP2
00001a26: SSTORE
00001a27: PUSH1 0x01
00001a29: PUSH1 0x01
00001a2b: PUSH1 0xa0
00001a2d: SHL
00001a2e: SUB
00001a2f: DUP7
00001a30: AND
00001a31: PUSH1 0x01
00001a33: PUSH1 0x01
00001a35: PUSH1 0xd0
00001a37: SHL
00001a38: SUB
00001a39: NOT
00001a3a: SWAP1
00001a3b: SWAP3
00001a3c: AND
00001a3d: DUP3
00001a3e: OR
00001a3f: PUSH1 0x01
00001a41: PUSH1 0xa0
00001a43: SHL
00001a44: TIMESTAMP
00001a45: PUSH6 0xffffffffffff
00001a4c: DUP2
00001a4d: AND
00001a4e: SWAP2
00001a4f: SWAP1
00001a50: SWAP2
00001a51: MUL
00001a52: SWAP2
00001a53: SWAP1
00001a54: SWAP2
00001a55: OR
00001a56: DUP5
00001a57: SSTORE
00001a58: PUSH1 0x40
00001a5a: DUP1
00001a5b: MLOAD
00001a5c: DUP10
00001a5d: DUP2
00001a5e: MSTORE
00001a5f: PUSH1 0x20
00001a61: DUP2
00001a62: ADD
00001a63: SWAP5
00001a64: SWAP1
00001a65: SWAP5
00001a66: MSTORE
00001a67: DUP4
00001a68: ADD
00001a69: SWAP2
00001a6a: SWAP1
00001a6b: SWAP2
00001a6c: MSTORE
00001a6d: PUSH1 0x60
00001a6f: DUP3
00001a70: ADD
00001a71: MSTORE
00001a72: PUSH32 0x973839ac031e9779c3158a52ae98cb3b0be8a378b1adc2b2ce2c14f89c814895
00001a93: SWAP1
00001a94: PUSH1 0x80
00001a96: ADD
00001a97: PUSH2 0x0e19
00001a9a: JUMP
00001a9b: JUMPDEST
00001a9c: PUSH1 0x40
00001a9e: DUP1
00001a9f: MLOAD
00001aa0: PUSH2 0x0140
00001aa3: DUP2
00001aa4: ADD
00001aa5: DUP3
00001aa6: MSTORE
00001aa7: PUSH1 0x00
00001aa9: DUP1
00001aaa: DUP3
00001aab: MSTORE
00001aac: PUSH1 0x20
00001aae: DUP3
00001aaf: ADD
00001ab0: DUP2
00001ab1: SWAP1
00001ab2: MSTORE
00001ab3: SWAP2
00001ab4: DUP2
00001ab5: ADD
00001ab6: DUP3
00001ab7: SWAP1
00001ab8: MSTORE
00001ab9: PUSH1 0x60
00001abb: DUP2
00001abc: ADD
00001abd: DUP3
00001abe: SWAP1
00001abf: MSTORE
00001ac0: PUSH1 0x80
00001ac2: DUP2
00001ac3: ADD
00001ac4: DUP3
00001ac5: SWAP1
00001ac6: MSTORE
00001ac7: PUSH1 0xa0
00001ac9: DUP2
00001aca: ADD
00001acb: DUP3
00001acc: SWAP1
00001acd: MSTORE
00001ace: PUSH1 0xc0
00001ad0: DUP2
00001ad1: ADD
00001ad2: DUP3
00001ad3: SWAP1
00001ad4: MSTORE
00001ad5: PUSH1 0xe0
00001ad7: DUP2
00001ad8: ADD
00001ad9: DUP3
00001ada: SWAP1
00001adb: MSTORE
00001adc: PUSH2 0x0100
00001adf: DUP2
00001ae0: ADD
00001ae1: DUP3
00001ae2: SWAP1
00001ae3: MSTORE
00001ae4: PUSH2 0x0120
00001ae7: DUP2
00001ae8: ADD
00001ae9: DUP3
00001aea: SWAP1
00001aeb: MSTORE
00001aec: SWAP1
00001aed: PUSH2 0x1af4
00001af0: PUSH2 0x301b
00001af3: JUMP
00001af4: JUMPDEST
00001af5: PUSH1 0x00
00001af7: SWAP4
00001af8: DUP5
00001af9: MSTORE
00001afa: PUSH1 0x02
00001afc: SWAP1
00001afd: DUP2
00001afe: ADD
00001aff: PUSH1 0x20
00001b01: SWAP1
00001b02: DUP2
00001b03: MSTORE
00001b04: PUSH1 0x40
00001b06: SWAP5
00001b07: DUP6
00001b08: SWAP1
00001b09: KECCAK256
00001b0a: DUP6
00001b0b: MLOAD
00001b0c: PUSH2 0x0140
00001b0f: DUP2
00001b10: ADD
00001b11: DUP8
00001b12: MSTORE
00001b13: DUP2
00001b14: SLOAD
00001b15: PUSH1 0xff
00001b17: SWAP1
00001b18: DUP2
00001b19: AND
00001b1a: DUP3
00001b1b: MSTORE
00001b1c: PUSH1 0x01
00001b1e: DUP4
00001b1f: ADD
00001b20: SLOAD
00001b21: SWAP4
00001b22: DUP3
00001b23: ADD
00001b24: SWAP4
00001b25: SWAP1
00001b26: SWAP4
00001b27: MSTORE
00001b28: SWAP3
00001b29: DUP2
00001b2a: ADD
00001b2b: SLOAD
00001b2c: PUSH1 0x01
00001b2e: PUSH1 0x01
00001b30: PUSH1 0xa0
00001b32: SHL
00001b33: SUB
00001b34: SWAP1
00001b35: DUP2
00001b36: AND
00001b37: SWAP7
00001b38: DUP5
00001b39: ADD
00001b3a: SWAP7
00001b3b: SWAP1
00001b3c: SWAP7
00001b3d: MSTORE
00001b3e: PUSH1 0x03
00001b40: DUP2
00001b41: ADD
00001b42: SLOAD
00001b43: PUSH1 0x60
00001b45: DUP5
00001b46: ADD
00001b47: MSTORE
00001b48: PUSH1 0x04
00001b4a: DUP2
00001b4b: ADD
00001b4c: SLOAD
00001b4d: PUSH1 0x80
00001b4f: DUP5
00001b50: ADD
00001b51: MSTORE
00001b52: PUSH1 0x05
00001b54: DUP2
00001b55: ADD
00001b56: SLOAD
00001b57: PUSH1 0xa0
00001b59: DUP5
00001b5a: ADD
00001b5b: MSTORE
00001b5c: PUSH1 0x06
00001b5e: DUP2
00001b5f: ADD
00001b60: SLOAD
00001b61: PUSH1 0xc0
00001b63: DUP5
00001b64: ADD
00001b65: MSTORE
00001b66: PUSH1 0x07
00001b68: DUP2
00001b69: ADD
00001b6a: SLOAD
00001b6b: SWAP2
00001b6c: DUP3
00001b6d: AND
00001b6e: PUSH1 0xe0
00001b70: DUP5
00001b71: ADD
00001b72: MSTORE
00001b73: PUSH2 0x0100
00001b76: SWAP2
00001b77: DUP3
00001b78: SWAP1
00001b79: DIV
00001b7a: SWAP1
00001b7b: SWAP6
00001b7c: AND
00001b7d: SWAP1
00001b7e: DUP3
00001b7f: ADD
00001b80: MSTORE
00001b81: PUSH1 0x08
00001b83: SWAP1
00001b84: SWAP4
00001b85: ADD
00001b86: SLOAD
00001b87: PUSH2 0x0120
00001b8a: DUP5
00001b8b: ADD
00001b8c: MSTORE
00001b8d: POP
00001b8e: SWAP1
00001b8f: SWAP2
00001b90: SWAP1
00001b91: POP
00001b92: JUMP
00001b93: JUMPDEST
00001b94: PUSH1 0x00
00001b96: DUP1
00001b97: PUSH2 0x1b9e
00001b9a: PUSH2 0x3787
00001b9d: JUMP
00001b9e: JUMPDEST
00001b9f: SLOAD
00001ba0: PUSH1 0x01
00001ba2: PUSH1 0x01
00001ba4: PUSH1 0xa0
00001ba6: SHL
00001ba7: SUB
00001ba8: AND
00001ba9: SWAP3
00001baa: SWAP2
00001bab: POP
00001bac: POP
00001bad: JUMP
00001bae: JUMPDEST
00001baf: PUSH1 0x40
00001bb1: DUP1
00001bb2: MLOAD
00001bb3: PUSH1 0xc0
00001bb5: DUP2
00001bb6: ADD
00001bb7: DUP3
00001bb8: MSTORE
00001bb9: PUSH1 0x00
00001bbb: DUP1
00001bbc: DUP3
00001bbd: MSTORE
00001bbe: PUSH1 0x20
00001bc0: DUP3
00001bc1: ADD
00001bc2: DUP2
00001bc3: SWAP1
00001bc4: MSTORE
00001bc5: SWAP2
00001bc6: DUP2
00001bc7: ADD
00001bc8: DUP3
00001bc9: SWAP1
00001bca: MSTORE
00001bcb: PUSH1 0x60
00001bcd: DUP2
00001bce: ADD
00001bcf: DUP3
00001bd0: SWAP1
00001bd1: MSTORE
00001bd2: PUSH1 0x80
00001bd4: DUP2
00001bd5: ADD
00001bd6: DUP3
00001bd7: SWAP1
00001bd8: MSTORE
00001bd9: PUSH1 0xa0
00001bdb: DUP2
00001bdc: ADD
00001bdd: DUP3
00001bde: SWAP1
00001bdf: MSTORE
00001be0: SWAP1
00001be1: PUSH2 0x1be8
00001be4: PUSH2 0x301b
00001be7: JUMP
00001be8: JUMPDEST
00001be9: PUSH1 0x00
00001beb: SWAP4
00001bec: DUP5
00001bed: MSTORE
00001bee: PUSH1 0x01
00001bf0: SWAP1
00001bf1: DUP2
00001bf2: ADD
00001bf3: PUSH1 0x20
00001bf5: SWAP1
00001bf6: DUP2
00001bf7: MSTORE
00001bf8: PUSH1 0x40
00001bfa: SWAP5
00001bfb: DUP6
00001bfc: SWAP1
00001bfd: KECCAK256
00001bfe: DUP6
00001bff: MLOAD
00001c00: PUSH1 0xc0
00001c02: DUP2
00001c03: ADD
00001c04: DUP8
00001c05: MSTORE
00001c06: DUP2
00001c07: SLOAD
00001c08: PUSH1 0x01
00001c0a: PUSH1 0x01
00001c0c: PUSH1 0xa0
00001c0e: SHL
00001c0f: SUB
00001c10: DUP2
00001c11: AND
00001c12: DUP3
00001c13: MSTORE
00001c14: PUSH6 0xffffffffffff
00001c1b: PUSH1 0x01
00001c1d: PUSH1 0xa0
00001c1f: SHL
00001c20: DUP3
00001c21: DIV
00001c22: DUP2
00001c23: AND
00001c24: SWAP5
00001c25: DUP4
00001c26: ADD
00001c27: SWAP5
00001c28: SWAP1
00001c29: SWAP5
00001c2a: MSTORE
00001c2b: PUSH1 0x01
00001c2d: PUSH1 0xd0
00001c2f: SHL
00001c30: SWAP1
00001c31: DIV
00001c32: SWAP1
00001c33: SWAP3
00001c34: AND
00001c35: SWAP6
00001c36: DUP3
00001c37: ADD
00001c38: SWAP6
00001c39: SWAP1
00001c3a: SWAP6
00001c3b: MSTORE
00001c3c: SWAP1
00001c3d: DUP5
00001c3e: ADD
00001c3f: SLOAD
00001c40: PUSH1 0x01
00001c42: PUSH1 0x01
00001c44: PUSH1 0x98
00001c46: SHL
00001c47: SUB
00001c48: DUP2
00001c49: AND
00001c4a: PUSH1 0x60
00001c4c: DUP4
00001c4d: ADD
00001c4e: MSTORE
00001c4f: PUSH1 0xff
00001c51: PUSH1 0x01
00001c53: PUSH1 0x98
00001c55: SHL
00001c56: SWAP1
00001c57: SWAP2
00001c58: DIV
00001c59: AND
00001c5a: PUSH1 0x80
00001c5c: DUP3
00001c5d: ADD
00001c5e: MSTORE
00001c5f: PUSH1 0x02
00001c61: SWAP1
00001c62: SWAP4
00001c63: ADD
00001c64: SLOAD
00001c65: PUSH1 0xa0
00001c67: DUP5
00001c68: ADD
00001c69: MSTORE
00001c6a: POP
00001c6b: SWAP1
00001c6c: SWAP2
00001c6d: SWAP1
00001c6e: POP
00001c6f: JUMP
00001c70: JUMPDEST
00001c71: PUSH1 0x00
00001c73: JUMPDEST
00001c74: DUP2
00001c75: DUP2
00001c76: LT
00001c77: ISZERO
00001c78: PUSH2 0x0830
00001c7b: JUMPI
00001c7c: PUSH2 0x1c9c
00001c7f: DUP4
00001c80: DUP4
00001c81: DUP4
00001c82: DUP2
00001c83: DUP2
00001c84: LT
00001c85: PUSH2 0x1c90
00001c88: JUMPI
00001c89: PUSH2 0x1c90
00001c8c: PUSH2 0x3dde
00001c8f: JUMP
00001c90: JUMPDEST
00001c91: SWAP1
00001c92: POP
00001c93: PUSH1 0x20
00001c95: MUL
00001c96: ADD
00001c97: CALLDATALOAD
00001c98: PUSH2 0x289f
00001c9b: JUMP
00001c9c: JUMPDEST
00001c9d: DUP1
00001c9e: PUSH2 0x1ca6
00001ca1: DUP2
00001ca2: PUSH2 0x3e0a
00001ca5: JUMP
00001ca6: JUMPDEST
00001ca7: SWAP2
00001ca8: POP
00001ca9: POP
00001caa: PUSH2 0x1c73
00001cad: JUMP
00001cae: JUMPDEST
00001caf: PUSH2 0x1cb6
00001cb2: PUSH2 0x2fe9
00001cb5: JUMP
00001cb6: JUMPDEST
00001cb7: PUSH1 0x00
00001cb9: PUSH2 0x1cc0
00001cbc: PUSH2 0x301b
00001cbf: JUMP
00001cc0: JUMPDEST
00001cc1: SWAP1
00001cc2: POP
00001cc3: PUSH1 0x00
00001cc5: JUMPDEST
00001cc6: DUP4
00001cc7: DUP2
00001cc8: LT
00001cc9: ISZERO
00001cca: PUSH2 0x1d32
00001ccd: JUMPI
00001cce: DUP3
00001ccf: DUP3
00001cd0: PUSH1 0x00
00001cd2: DUP8
00001cd3: DUP8
00001cd4: DUP6
00001cd5: DUP2
00001cd6: DUP2
00001cd7: LT
00001cd8: PUSH2 0x1ce3
00001cdb: JUMPI
00001cdc: PUSH2 0x1ce3
00001cdf: PUSH2 0x3dde
00001ce2: JUMP
00001ce3: JUMPDEST
00001ce4: SWAP1
00001ce5: POP
00001ce6: PUSH1 0x20
00001ce8: MUL
00001ce9: ADD
00001cea: PUSH1 0x20
00001cec: DUP2
00001ced: ADD
00001cee: SWAP1
00001cef: PUSH2 0x1cf8
00001cf2: SWAP2
00001cf3: SWAP1
00001cf4: PUSH2 0x3b69
00001cf7: JUMP
00001cf8: JUMPDEST
00001cf9: PUSH1 0x01
00001cfb: PUSH1 0x01
00001cfd: PUSH1 0xa0
00001cff: SHL
00001d00: SUB
00001d01: AND
00001d02: DUP2
00001d03: MSTORE
00001d04: PUSH1 0x20
00001d06: DUP2
00001d07: ADD
00001d08: SWAP2
00001d09: SWAP1
00001d0a: SWAP2
00001d0b: MSTORE
00001d0c: PUSH1 0x40
00001d0e: ADD
00001d0f: PUSH1 0x00
00001d11: KECCAK256
00001d12: DUP1
00001d13: SLOAD
00001d14: PUSH1 0xff
00001d16: NOT
00001d17: AND
00001d18: SWAP2
00001d19: ISZERO
00001d1a: ISZERO
00001d1b: SWAP2
00001d1c: SWAP1
00001d1d: SWAP2
00001d1e: OR
00001d1f: SWAP1
00001d20: SSTORE
00001d21: DUP1
00001d22: PUSH2 0x1d2a
00001d25: DUP2
00001d26: PUSH2 0x3e0a
00001d29: JUMP
00001d2a: JUMPDEST
00001d2b: SWAP2
00001d2c: POP
00001d2d: POP
00001d2e: PUSH2 0x1cc5
00001d31: JUMP
00001d32: JUMPDEST
00001d33: POP
00001d34: PUSH32 0x6a980e8ca36409cff27b8778560e2a0f5183fea53171bc0aeff7317906c7c1f4
00001d55: DUP5
00001d56: DUP5
00001d57: DUP5
00001d58: PUSH1 0x40
00001d5a: MLOAD
00001d5b: PUSH2 0x1d66
00001d5e: SWAP4
00001d5f: SWAP3
00001d60: SWAP2
00001d61: SWAP1
00001d62: PUSH2 0x429e
00001d65: JUMP
00001d66: JUMPDEST
00001d67: PUSH1 0x40
00001d69: MLOAD
00001d6a: DUP1
00001d6b: SWAP2
00001d6c: SUB
00001d6d: SWAP1
00001d6e: LOG1
00001d6f: POP
00001d70: POP
00001d71: POP
00001d72: POP
00001d73: JUMP
00001d74: JUMPDEST
00001d75: PUSH1 0x00
00001d77: DUP1
00001d78: PUSH2 0x1d7f
00001d7b: PUSH2 0x301b
00001d7e: JUMP
00001d7f: JUMPDEST
00001d80: PUSH1 0x00
00001d82: DUP5
00001d83: DUP2
00001d84: MSTORE
00001d85: PUSH1 0x02
00001d87: DUP3
00001d88: ADD
00001d89: PUSH1 0x20
00001d8b: MSTORE
00001d8c: PUSH1 0x40
00001d8e: SWAP1
00001d8f: KECCAK256
00001d90: PUSH1 0x06
00001d92: DUP2
00001d93: ADD
00001d94: SLOAD
00001d95: PUSH1 0x03
00001d97: SWAP1
00001d98: SWAP2
00001d99: ADD
00001d9a: SLOAD
00001d9b: SWAP2
00001d9c: SWAP3
00001d9d: POP
00001d9e: PUSH2 0x1da6
00001da1: SWAP2
00001da2: PUSH2 0x3f1f
00001da5: JUMP
00001da6: JUMPDEST
00001da7: SWAP4
00001da8: SWAP3
00001da9: POP
00001daa: POP
00001dab: POP
00001dac: JUMP
00001dad: JUMPDEST
00001dae: PUSH1 0x40
00001db0: DUP1
00001db1: MLOAD
00001db2: PUSH1 0xa0
00001db4: DUP2
00001db5: ADD
00001db6: DUP3
00001db7: MSTORE
00001db8: PUSH1 0x00
00001dba: DUP1
00001dbb: DUP3
00001dbc: MSTORE
00001dbd: PUSH1 0x20
00001dbf: DUP3
00001dc0: ADD
00001dc1: DUP2
00001dc2: SWAP1
00001dc3: MSTORE
00001dc4: SWAP2
00001dc5: DUP2
00001dc6: ADD
00001dc7: DUP3
00001dc8: SWAP1
00001dc9: MSTORE
00001dca: PUSH1 0x60
00001dcc: DUP2
00001dcd: ADD
00001dce: DUP3
00001dcf: SWAP1
00001dd0: MSTORE
00001dd1: PUSH1 0x80
00001dd3: DUP2
00001dd4: ADD
00001dd5: DUP3
00001dd6: SWAP1
00001dd7: MSTORE
00001dd8: SWAP1
00001dd9: PUSH2 0x1de0
00001ddc: PUSH2 0x301b
00001ddf: JUMP
00001de0: JUMPDEST
00001de1: PUSH1 0x00
00001de3: SWAP4
00001de4: DUP5
00001de5: MSTORE
00001de6: PUSH1 0x04
00001de8: ADD
00001de9: PUSH1 0x20
00001deb: SWAP1
00001dec: DUP2
00001ded: MSTORE
00001dee: PUSH1 0x40
00001df0: SWAP4
00001df1: DUP5
00001df2: SWAP1
00001df3: KECCAK256
00001df4: DUP5
00001df5: MLOAD
00001df6: PUSH1 0xa0
00001df8: DUP2
00001df9: ADD
00001dfa: DUP7
00001dfb: MSTORE
00001dfc: DUP2
00001dfd: SLOAD
00001dfe: DUP2
00001dff: MSTORE
00001e00: PUSH1 0x01
00001e02: DUP3
00001e03: ADD
00001e04: SLOAD
00001e05: SWAP3
00001e06: DUP2
00001e07: ADD
00001e08: SWAP3
00001e09: SWAP1
00001e0a: SWAP3
00001e0b: MSTORE
00001e0c: PUSH1 0x02
00001e0e: DUP2
00001e0f: ADD
00001e10: SLOAD
00001e11: PUSH1 0x01
00001e13: PUSH1 0x01
00001e15: PUSH1 0xa0
00001e17: SHL
00001e18: SUB
00001e19: SWAP1
00001e1a: DUP2
00001e1b: AND
00001e1c: SWAP6
00001e1d: DUP4
00001e1e: ADD
00001e1f: SWAP6
00001e20: SWAP1
00001e21: SWAP6
00001e22: MSTORE
00001e23: PUSH1 0x03
00001e25: ADD
00001e26: SLOAD
00001e27: SWAP4
00001e28: DUP5
00001e29: AND
00001e2a: PUSH1 0x60
00001e2c: DUP3
00001e2d: ADD
00001e2e: MSTORE
00001e2f: PUSH1 0x01
00001e31: PUSH1 0xa0
00001e33: SHL
00001e34: SWAP1
00001e35: SWAP4
00001e36: DIV
00001e37: PUSH1 0xff
00001e39: AND
00001e3a: PUSH1 0x80
00001e3c: DUP5
00001e3d: ADD
00001e3e: MSTORE
00001e3f: POP
00001e40: SWAP1
00001e41: SWAP2
00001e42: SWAP1
00001e43: POP
00001e44: JUMP
00001e45: JUMPDEST
00001e46: PUSH2 0x1e4d
00001e49: PUSH2 0x2fb3
00001e4c: JUMP
00001e4d: JUMPDEST
00001e4e: PUSH1 0x00
00001e50: PUSH2 0x1e57
00001e53: PUSH2 0x301b
00001e56: JUMP
00001e57: JUMPDEST
00001e58: PUSH1 0x00
00001e5a: DUP8
00001e5b: DUP2
00001e5c: MSTORE
00001e5d: PUSH1 0x01
00001e5f: DUP1
00001e60: DUP4
00001e61: ADD
00001e62: PUSH1 0x20
00001e64: MSTORE
00001e65: PUSH1 0x40
00001e67: SWAP1
00001e68: SWAP2
00001e69: KECCAK256
00001e6a: DUP1
00001e6b: DUP3
00001e6c: ADD
00001e6d: SLOAD
00001e6e: SWAP3
00001e6f: SWAP4
00001e70: POP
00001e71: SWAP2
00001e72: PUSH1 0x01
00001e74: PUSH1 0x98
00001e76: SHL
00001e77: SWAP1
00001e78: DIV
00001e79: PUSH1 0xff
00001e7b: AND
00001e7c: EQ
00001e7d: PUSH2 0x1e98
00001e80: JUMPI
00001e81: PUSH1 0x40
00001e83: MLOAD
00001e84: PUSH3 0x461bcd
00001e88: PUSH1 0xe5
00001e8a: SHL
00001e8b: DUP2
00001e8c: MSTORE
00001e8d: PUSH1 0x04
00001e8f: ADD
00001e90: PUSH2 0x08b3
00001e93: SWAP1
00001e94: PUSH2 0x402f
00001e97: JUMP
00001e98: JUMPDEST
00001e99: PUSH1 0x01
00001e9b: PUSH1 0x01
00001e9d: PUSH1 0xa0
00001e9f: SHL
00001ea0: SUB
00001ea1: DUP5
00001ea2: AND
00001ea3: ISZERO
00001ea4: DUP1
00001ea5: ISZERO
00001ea6: SWAP1
00001ea7: PUSH2 0x1ec8
00001eaa: JUMPI
00001eab: POP
00001eac: PUSH1 0x01
00001eae: PUSH1 0x01
00001eb0: PUSH1 0xa0
00001eb2: SHL
00001eb3: SUB
00001eb4: DUP5
00001eb5: AND
00001eb6: PUSH1 0x00
00001eb8: SWAP1
00001eb9: DUP2
00001eba: MSTORE
00001ebb: PUSH1 0x20
00001ebd: DUP4
00001ebe: SWAP1
00001ebf: MSTORE
00001ec0: PUSH1 0x40
00001ec2: SWAP1
00001ec3: KECCAK256
00001ec4: SLOAD
00001ec5: PUSH1 0xff
00001ec7: AND
00001ec8: JUMPDEST
00001ec9: PUSH2 0x1ee4
00001ecc: JUMPI
00001ecd: PUSH1 0x40
00001ecf: MLOAD
00001ed0: PUSH3 0x461bcd
00001ed4: PUSH1 0xe5
00001ed6: SHL
00001ed7: DUP2
00001ed8: MSTORE
00001ed9: PUSH1 0x04
00001edb: ADD
00001edc: PUSH2 0x08b3
00001edf: SWAP1
00001ee0: PUSH2 0x4242
00001ee3: JUMP
00001ee4: JUMPDEST
00001ee5: PUSH1 0x00
00001ee7: DUP7
00001ee8: GT
00001ee9: DUP1
00001eea: ISZERO
00001eeb: PUSH2 0x1ef4
00001eee: JUMPI
00001eef: POP
00001ef0: PUSH1 0x00
00001ef2: DUP6
00001ef3: GT
00001ef4: JUMPDEST
00001ef5: PUSH2 0x1f10
00001ef8: JUMPI
00001ef9: PUSH1 0x40
00001efb: MLOAD
00001efc: PUSH3 0x461bcd
00001f00: PUSH1 0xe5
00001f02: SHL
00001f03: DUP2
00001f04: MSTORE
00001f05: PUSH1 0x04
00001f07: ADD
00001f08: PUSH2 0x08b3
00001f0b: SWAP1
00001f0c: PUSH2 0x4056
00001f0f: JUMP
00001f10: JUMPDEST
00001f11: DUP3
00001f12: DUP7
00001f13: LT
00001f14: ISZERO
00001f15: PUSH2 0x1f30
00001f18: JUMPI
00001f19: PUSH1 0x40
00001f1b: MLOAD
00001f1c: PUSH3 0x461bcd
00001f20: PUSH1 0xe5
00001f22: SHL
00001f23: DUP2
00001f24: MSTORE
00001f25: PUSH1 0x04
00001f27: ADD
00001f28: PUSH2 0x08b3
00001f2b: SWAP1
00001f2c: PUSH2 0x4087
00001f2f: JUMP
00001f30: JUMPDEST
00001f31: DUP1
00001f32: PUSH1 0x02
00001f34: ADD
00001f35: SLOAD
00001f36: DUP4
00001f37: LT
00001f38: ISZERO
00001f39: PUSH2 0x1f54
00001f3c: JUMPI
00001f3d: PUSH1 0x40
00001f3f: MLOAD
00001f40: PUSH3 0x461bcd
00001f44: PUSH1 0xe5
00001f46: SHL
00001f47: DUP2
00001f48: MSTORE
00001f49: PUSH1 0x04
00001f4b: ADD
00001f4c: PUSH2 0x08b3
00001f4f: SWAP1
00001f50: PUSH2 0x40d9
00001f53: JUMP
00001f54: JUMPDEST
00001f55: PUSH1 0x06
00001f57: DUP3
00001f58: ADD
00001f59: SLOAD
00001f5a: DUP5
00001f5b: SWAP1
00001f5c: PUSH1 0x00
00001f5e: SWAP1
00001f5f: PUSH3 0x0f4240
00001f63: SWAP1
00001f64: PUSH2 0x1f6d
00001f67: SWAP1
00001f68: DUP10
00001f69: PUSH2 0x3ed3
00001f6c: JUMP
00001f6d: JUMPDEST
00001f6e: PUSH2 0x1f77
00001f71: SWAP2
00001f72: SWAP1
00001f73: PUSH2 0x3eea
00001f76: JUMP
00001f77: JUMPDEST
00001f78: SWAP1
00001f79: POP
00001f7a: PUSH1 0x00
00001f7c: PUSH1 0xff
00001f7e: DUP12
00001f7f: AND
00001f80: PUSH1 0x01
00001f82: EQ
00001f83: PUSH2 0x1f8c
00001f86: JUMPI
00001f87: DUP2
00001f88: PUSH2 0x1f8e
00001f8b: JUMP
00001f8c: JUMPDEST
00001f8d: DUP8
00001f8e: JUMPDEST
00001f8f: SWAP1
00001f90: POP
00001f91: PUSH2 0x1fa5
00001f94: PUSH1 0x01
00001f96: PUSH1 0x01
00001f98: PUSH1 0xa0
00001f9a: SHL
00001f9b: SUB
00001f9c: DUP5
00001f9d: AND
00001f9e: CALLER
00001f9f: ADDRESS
00001fa0: DUP5
00001fa1: PUSH2 0x354b
00001fa4: JUMP
00001fa5: JUMPDEST
00001fa6: PUSH2 0x1fb4
00001fa9: DUP12
00001faa: DUP12
00001fab: DUP10
00001fac: DUP13
00001fad: DUP13
00001fae: DUP8
00001faf: DUP13
00001fb0: PUSH2 0x336a
00001fb3: JUMP
00001fb4: JUMPDEST
00001fb5: POP
00001fb6: POP
00001fb7: POP
00001fb8: POP
00001fb9: POP
00001fba: PUSH2 0x1fc1
00001fbd: PUSH2 0x309e
00001fc0: JUMP
00001fc1: JUMPDEST
00001fc2: POP
00001fc3: POP
00001fc4: POP
00001fc5: POP
00001fc6: POP
00001fc7: POP
00001fc8: JUMP
00001fc9: JUMPDEST
00001fca: PUSH2 0x1fd1
00001fcd: PUSH2 0x2fb3
00001fd0: JUMP
00001fd1: JUMPDEST
00001fd2: PUSH1 0x00
00001fd4: PUSH2 0x1fdb
00001fd7: PUSH2 0x301b
00001fda: JUMP
00001fdb: JUMPDEST
00001fdc: PUSH1 0x00
00001fde: DUP4
00001fdf: DUP2
00001fe0: MSTORE
00001fe1: PUSH1 0x04
00001fe3: DUP3
00001fe4: ADD
00001fe5: PUSH1 0x20
00001fe7: SWAP1
00001fe8: DUP2
00001fe9: MSTORE
00001fea: PUSH1 0x40
00001fec: DUP1
00001fed: DUP4
00001fee: KECCAK256
00001fef: DUP1
00001ff0: SLOAD
00001ff1: DUP5
00001ff2: MSTORE
00001ff3: PUSH1 0x02
00001ff5: DUP6
00001ff6: ADD
00001ff7: DUP4
00001ff8: MSTORE
00001ff9: DUP2
00001ffa: DUP5
00001ffb: KECCAK256
00001ffc: PUSH1 0x01
00001ffe: DUP1
00001fff: DUP3
00002000: ADD
00002001: SLOAD
00002002: DUP7
00002003: MSTORE
00002004: DUP1
00002005: DUP8
00002006: ADD
00002007: SWAP1
00002008: SWAP5
00002009: MSTORE
0000200a: SWAP2
0000200b: SWAP1
0000200c: SWAP4
0000200d: KECCAK256
0000200e: SWAP2
0000200f: DUP3
00002010: ADD
00002011: SLOAD
00002012: SWAP4
00002013: SWAP5
00002014: POP
00002015: SWAP2
00002016: SWAP3
00002017: PUSH1 0x01
00002019: PUSH1 0x98
0000201b: SHL
0000201c: SWAP1
0000201d: DIV
0000201e: PUSH1 0xff
00002020: AND
00002021: PUSH1 0x03
00002023: EQ
00002024: PUSH2 0x203f
00002027: JUMPI
00002028: PUSH1 0x40
0000202a: MLOAD
0000202b: PUSH3 0x461bcd
0000202f: PUSH1 0xe5
00002031: SHL
00002032: DUP2
00002033: MSTORE
00002034: PUSH1 0x04
00002036: ADD
00002037: PUSH2 0x08b3
0000203a: SWAP1
0000203b: PUSH2 0x3e23
0000203e: JUMP
0000203f: JUMPDEST
00002040: DUP1
00002041: SLOAD
00002042: PUSH1 0x01
00002044: PUSH1 0x01
00002046: PUSH1 0xa0
00002048: SHL
00002049: SUB
0000204a: AND
0000204b: ISZERO
0000204c: DUP1
0000204d: ISZERO
0000204e: SWAP1
0000204f: PUSH2 0x2064
00002052: JUMPI
00002053: POP
00002054: PUSH1 0x01
00002056: DUP2
00002057: ADD
00002058: SLOAD
00002059: PUSH1 0x01
0000205b: PUSH1 0x01
0000205d: PUSH1 0x98
0000205f: SHL
00002060: SUB
00002061: AND
00002062: ISZERO
00002063: ISZERO
00002064: JUMPDEST
00002065: PUSH2 0x2080
00002068: JUMPI
00002069: PUSH1 0x40
0000206b: MLOAD
0000206c: PUSH3 0x461bcd
00002070: PUSH1 0xe5
00002072: SHL
00002073: DUP2
00002074: MSTORE
00002075: PUSH1 0x04
00002077: ADD
00002078: PUSH2 0x08b3
0000207b: SWAP1
0000207c: PUSH2 0x3e4b
0000207f: JUMP
00002080: JUMPDEST
00002081: DUP1
00002082: SLOAD
00002083: PUSH1 0x01
00002085: PUSH1 0xa0
00002087: SHL
00002088: SWAP1
00002089: DIV
0000208a: PUSH6 0xffffffffffff
00002091: AND
00002092: TIMESTAMP
00002093: GT
00002094: PUSH2 0x20af
00002097: JUMPI
00002098: PUSH1 0x40
0000209a: MLOAD
0000209b: PUSH3 0x461bcd
0000209f: PUSH1 0xe5
000020a1: SHL
000020a2: DUP2
000020a3: MSTORE
000020a4: PUSH1 0x04
000020a6: ADD
000020a7: PUSH2 0x08b3
000020aa: SWAP1
000020ab: PUSH2 0x3e72
000020ae: JUMP
000020af: JUMPDEST
000020b0: PUSH1 0x02
000020b2: DUP4
000020b3: ADD
000020b4: SLOAD
000020b5: PUSH1 0x01
000020b7: PUSH1 0x01
000020b9: PUSH1 0xa0
000020bb: SHL
000020bc: SUB
000020bd: AND
000020be: CALLER
000020bf: EQ
000020c0: PUSH2 0x20f9
000020c3: JUMPI
000020c4: PUSH1 0x40
000020c6: MLOAD
000020c7: PUSH3 0x461bcd
000020cb: PUSH1 0xe5
000020cd: SHL
000020ce: DUP2
000020cf: MSTORE
000020d0: PUSH1 0x20
000020d2: PUSH1 0x04
000020d4: DUP3
000020d5: ADD
000020d6: MSTORE
000020d7: PUSH1 0x0b
000020d9: PUSH1 0x24
000020db: DUP3
000020dc: ADD
000020dd: MSTORE
000020de: PUSH11 0x53656c6c6572204f6e6c79
000020ea: PUSH1 0xa8
000020ec: SHL
000020ed: PUSH1 0x44
000020ef: DUP3
000020f0: ADD
000020f1: MSTORE
000020f2: PUSH1 0x64
000020f4: ADD
000020f5: PUSH2 0x08b3
000020f8: JUMP
000020f9: JUMPDEST
000020fa: PUSH1 0x03
000020fc: DUP4
000020fd: ADD
000020fe: SLOAD
000020ff: PUSH1 0x01
00002101: PUSH1 0xa0
00002103: SHL
00002104: SWAP1
00002105: DIV
00002106: PUSH1 0xff
00002108: AND
00002109: PUSH1 0x01
0000210b: EQ
0000210c: PUSH2 0x2127
0000210f: JUMPI
00002110: PUSH1 0x40
00002112: MLOAD
00002113: PUSH3 0x461bcd
00002117: PUSH1 0xe5
00002119: SHL
0000211a: DUP2
0000211b: MSTORE
0000211c: PUSH1 0x04
0000211e: ADD
0000211f: PUSH2 0x08b3
00002122: SWAP1
00002123: PUSH2 0x3ea5
00002126: JUMP
00002127: JUMPDEST
00002128: PUSH1 0x00
0000212a: DUP3
0000212b: PUSH1 0x03
0000212d: ADD
0000212e: SLOAD
0000212f: DUP4
00002130: PUSH1 0x05
00002132: ADD
00002133: SLOAD
00002134: DUP6
00002135: PUSH1 0x01
00002137: ADD
00002138: SLOAD
00002139: PUSH2 0x2142
0000213c: SWAP2
0000213d: SWAP1
0000213e: PUSH2 0x3ed3
00002141: JUMP
00002142: JUMPDEST
00002143: PUSH2 0x214c
00002146: SWAP2
00002147: SWAP1
00002148: PUSH2 0x3eea
0000214b: JUMP
0000214c: JUMPDEST
0000214d: SWAP1
0000214e: POP
0000214f: PUSH1 0x00
00002151: DUP4
00002152: PUSH1 0x03
00002154: ADD
00002155: SLOAD
00002156: DUP5
00002157: PUSH1 0x04
00002159: ADD
0000215a: SLOAD
0000215b: DUP7
0000215c: PUSH1 0x01
0000215e: ADD
0000215f: SLOAD
00002160: PUSH2 0x2169
00002163: SWAP2
00002164: SWAP1
00002165: PUSH2 0x3ed3
00002168: JUMP
00002169: JUMPDEST
0000216a: PUSH2 0x2173
0000216d: SWAP2
0000216e: SWAP1
0000216f: PUSH2 0x3eea
00002172: JUMP
00002173: JUMPDEST
00002174: DUP4
00002175: SLOAD
00002176: PUSH1 0x01
00002178: DUP1
00002179: DUP7
0000217a: ADD
0000217b: SLOAD
0000217c: SWAP1
0000217d: DUP9
0000217e: ADD
0000217f: SLOAD
00002180: SWAP3
00002181: SWAP4
00002182: POP
00002183: PUSH1 0x01
00002185: PUSH1 0x01
00002187: PUSH1 0xa0
00002189: SHL
0000218a: SUB
0000218b: SWAP1
0000218c: SWAP2
0000218d: AND
0000218e: SWAP2
0000218f: PUSH1 0x00
00002191: SWAP2
00002192: PUSH3 0x0f4240
00002196: SWAP2
00002197: PUSH2 0x21a9
0000219a: SWAP2
0000219b: PUSH1 0x01
0000219d: PUSH1 0x01
0000219f: PUSH1 0x98
000021a1: SHL
000021a2: SUB
000021a3: AND
000021a4: SWAP1
000021a5: PUSH2 0x3ed3
000021a8: JUMP
000021a9: JUMPDEST
000021aa: PUSH2 0x21b3
000021ad: SWAP2
000021ae: SWAP1
000021af: PUSH2 0x3eea
000021b2: JUMP
000021b3: JUMPDEST
000021b4: SWAP1
000021b5: POP
000021b6: PUSH1 0x00
000021b8: PUSH3 0x0f4240
000021bc: DUP10
000021bd: PUSH1 0x06
000021bf: ADD
000021c0: PUSH1 0x02
000021c2: ADD
000021c3: SLOAD
000021c4: DUP4
000021c5: PUSH2 0x21ce
000021c8: SWAP2
000021c9: SWAP1
000021ca: PUSH2 0x3ed3
000021cd: JUMP
000021ce: JUMPDEST
000021cf: PUSH2 0x21d8
000021d2: SWAP2
000021d3: SWAP1
000021d4: PUSH2 0x3eea
000021d7: JUMP
000021d8: JUMPDEST
000021d9: PUSH1 0x02
000021db: DUP10
000021dc: ADD
000021dd: SLOAD
000021de: PUSH1 0x09
000021e0: DUP12
000021e1: ADD
000021e2: SLOAD
000021e3: SWAP2
000021e4: SWAP3
000021e5: POP
000021e6: PUSH2 0x21ff
000021e9: SWAP2
000021ea: PUSH1 0x01
000021ec: PUSH1 0x01
000021ee: PUSH1 0xa0
000021f0: SHL
000021f1: SUB
000021f2: DUP7
000021f3: DUP2
000021f4: AND
000021f5: SWAP3
000021f6: DUP2
000021f7: AND
000021f8: SWAP2
000021f9: AND
000021fa: DUP5
000021fb: PUSH2 0x354b
000021fe: JUMP
000021ff: JUMPDEST
00002200: PUSH1 0x02
00002202: DUP9
00002203: ADD
00002204: SLOAD
00002205: PUSH1 0x03
00002207: DUP10
00002208: ADD
00002209: SLOAD
0000220a: PUSH2 0x2236
0000220d: SWAP2
0000220e: PUSH1 0x01
00002210: PUSH1 0x01
00002212: PUSH1 0xa0
00002214: SHL
00002215: SUB
00002216: SWAP1
00002217: DUP2
00002218: AND
00002219: SWAP2
0000221a: AND
0000221b: PUSH2 0x2224
0000221e: DUP5
0000221f: DUP7
00002220: PUSH2 0x3f1f
00002223: JUMP
00002224: JUMPDEST
00002225: PUSH1 0x01
00002227: PUSH1 0x01
00002229: PUSH1 0xa0
0000222b: SHL
0000222c: SUB
0000222d: DUP8
0000222e: AND
0000222f: SWAP3
00002230: SWAP2
00002231: SWAP1
00002232: PUSH2 0x354b
00002235: JUMP
00002236: JUMPDEST
00002237: PUSH1 0x08
00002239: DUP10
0000223a: ADD
0000223b: SLOAD
0000223c: PUSH1 0x00
0000223e: SWAP1
0000223f: PUSH3 0x0f4240
00002243: SWAP1
00002244: PUSH2 0x224d
00002247: SWAP1
00002248: DUP8
00002249: PUSH2 0x3ed3
0000224c: JUMP
0000224d: JUMPDEST
0000224e: PUSH2 0x2257
00002251: SWAP2
00002252: SWAP1
00002253: PUSH2 0x3eea
00002256: JUMP
00002257: JUMPDEST
00002258: SWAP1
00002259: POP
0000225a: PUSH1 0x00
0000225c: DUP2
0000225d: PUSH2 0x2266
00002260: DUP9
00002261: DUP9
00002262: PUSH2 0x3f0c
00002265: JUMP
00002266: JUMPDEST
00002267: PUSH2 0x2270
0000226a: SWAP2
0000226b: SWAP1
0000226c: PUSH2 0x3f1f
0000226f: JUMP
00002270: JUMPDEST
00002271: PUSH1 0x02
00002273: DUP11
00002274: ADD
00002275: SLOAD
00002276: SWAP1
00002277: SWAP2
00002278: POP
00002279: PUSH1 0x01
0000227b: PUSH1 0x01
0000227d: PUSH1 0xa0
0000227f: SHL
00002280: SUB
00002281: AND
00002282: PUSH2 0x2365
00002285: JUMPI
00002286: PUSH1 0x02
00002288: DUP11
00002289: ADD
0000228a: SLOAD
0000228b: PUSH1 0x40
0000228d: MLOAD
0000228e: PUSH1 0x00
00002290: SWAP2
00002291: PUSH1 0x01
00002293: PUSH1 0x01
00002295: PUSH1 0xa0
00002297: SHL
00002298: SUB
00002299: AND
0000229a: SWAP1
0000229b: DUP4
0000229c: SWAP1
0000229d: DUP4
0000229e: DUP2
0000229f: DUP2
000022a0: DUP2
000022a1: DUP6
000022a2: DUP8
000022a3: GAS
000022a4: CALL
000022a5: SWAP3
000022a6: POP
000022a7: POP
000022a8: POP
000022a9: RETURNDATASIZE
000022aa: DUP1
000022ab: PUSH1 0x00
000022ad: DUP2
000022ae: EQ
000022af: PUSH2 0x22d4
000022b2: JUMPI
000022b3: PUSH1 0x40
000022b5: MLOAD
000022b6: SWAP2
000022b7: POP
000022b8: PUSH1 0x1f
000022ba: NOT
000022bb: PUSH1 0x3f
000022bd: RETURNDATASIZE
000022be: ADD
000022bf: AND
000022c0: DUP3
000022c1: ADD
000022c2: PUSH1 0x40
000022c4: MSTORE
000022c5: RETURNDATASIZE
000022c6: DUP3
000022c7: MSTORE
000022c8: RETURNDATASIZE
000022c9: PUSH1 0x00
000022cb: PUSH1 0x20
000022cd: DUP5
000022ce: ADD
000022cf: RETURNDATACOPY
000022d0: PUSH2 0x22d9
000022d3: JUMP
000022d4: JUMPDEST
000022d5: PUSH1 0x60
000022d7: SWAP2
000022d8: POP
000022d9: JUMPDEST
000022da: POP
000022db: POP
000022dc: PUSH1 0x09
000022de: DUP14
000022df: ADD
000022e0: SLOAD
000022e1: PUSH1 0x40
000022e3: MLOAD
000022e4: SWAP2
000022e5: SWAP3
000022e6: POP
000022e7: PUSH1 0x00
000022e9: SWAP2
000022ea: PUSH1 0x01
000022ec: PUSH1 0x01
000022ee: PUSH1 0xa0
000022f0: SHL
000022f1: SUB
000022f2: SWAP1
000022f3: SWAP2
000022f4: AND
000022f5: SWAP1
000022f6: DUP6
000022f7: SWAP1
000022f8: DUP4
000022f9: DUP2
000022fa: DUP2
000022fb: DUP2
000022fc: DUP6
000022fd: DUP8
000022fe: GAS
000022ff: CALL
00002300: SWAP3
00002301: POP
00002302: POP
00002303: POP
00002304: RETURNDATASIZE
00002305: DUP1
00002306: PUSH1 0x00
00002308: DUP2
00002309: EQ
0000230a: PUSH2 0x232f
0000230d: JUMPI
0000230e: PUSH1 0x40
00002310: MLOAD
00002311: SWAP2
00002312: POP
00002313: PUSH1 0x1f
00002315: NOT
00002316: PUSH1 0x3f
00002318: RETURNDATASIZE
00002319: ADD
0000231a: AND
0000231b: DUP3
0000231c: ADD
0000231d: PUSH1 0x40
0000231f: MSTORE
00002320: RETURNDATASIZE
00002321: DUP3
00002322: MSTORE
00002323: RETURNDATASIZE
00002324: PUSH1 0x00
00002326: PUSH1 0x20
00002328: DUP5
00002329: ADD
0000232a: RETURNDATACOPY
0000232b: PUSH2 0x2334
0000232e: JUMP
0000232f: JUMPDEST
00002330: PUSH1 0x60
00002332: SWAP2
00002333: POP
00002334: JUMPDEST
00002335: POP
00002336: POP
00002337: SWAP1
00002338: POP
00002339: DUP2
0000233a: DUP1
0000233b: ISZERO
0000233c: PUSH2 0x2342
0000233f: JUMPI
00002340: POP
00002341: DUP1
00002342: JUMPDEST
00002343: PUSH2 0x235e
00002346: JUMPI
00002347: PUSH1 0x40
00002349: MLOAD
0000234a: PUSH3 0x461bcd
0000234e: PUSH1 0xe5
00002350: SHL
00002351: DUP2
00002352: MSTORE
00002353: PUSH1 0x04
00002355: ADD
00002356: PUSH2 0x08b3
00002359: SWAP1
0000235a: PUSH2 0x3f32
0000235d: JUMP
0000235e: JUMPDEST
0000235f: POP
00002360: POP
00002361: PUSH2 0x23a6
00002364: JUMP
00002365: JUMPDEST
00002366: PUSH1 0x02
00002368: DUP1
00002369: DUP11
0000236a: ADD
0000236b: SLOAD
0000236c: SWAP1
0000236d: DUP12
0000236e: ADD
0000236f: SLOAD
00002370: PUSH1 0x01
00002372: PUSH1 0x01
00002374: PUSH1 0xa0
00002376: SHL
00002377: SUB
00002378: SWAP2
00002379: DUP3
0000237a: AND
0000237b: SWAP2
0000237c: PUSH2 0x2388
0000237f: SWAP2
00002380: DUP4
00002381: SWAP2
00002382: AND
00002383: DUP5
00002384: PUSH2 0x303f
00002387: JUMP
00002388: JUMPDEST
00002389: PUSH1 0x09
0000238b: DUP13
0000238c: ADD
0000238d: SLOAD
0000238e: PUSH2 0x23a4
00002391: SWAP1
00002392: PUSH1 0x01
00002394: PUSH1 0x01
00002396: PUSH1 0xa0
00002398: SHL
00002399: SUB
0000239a: DUP4
0000239b: DUP2
0000239c: AND
0000239d: SWAP2
0000239e: AND
0000239f: DUP6
000023a0: PUSH2 0x303f
000023a3: JUMP
000023a4: JUMPDEST
000023a5: POP
000023a6: JUMPDEST
000023a7: PUSH1 0x03
000023a9: DUP11
000023aa: ADD
000023ab: DUP1
000023ac: SLOAD
000023ad: PUSH1 0xff
000023af: PUSH1 0xa0
000023b1: SHL
000023b2: NOT
000023b3: AND
000023b4: PUSH1 0x01
000023b6: PUSH1 0xa1
000023b8: SHL
000023b9: OR
000023ba: SWAP1
000023bb: SSTORE
000023bc: PUSH1 0x40
000023be: MLOAD
000023bf: PUSH1 0x00
000023c1: DUP1
000023c2: MLOAD
000023c3: PUSH1 0x20
000023c5: PUSH2 0x43d8
000023c8: DUP4
000023c9: CODECOPY
000023ca: DUP2
000023cb: MLOAD
000023cc: SWAP2
000023cd: MSTORE
000023ce: SWAP1
000023cf: PUSH2 0x23df
000023d2: SWAP1
000023d3: DUP15
000023d4: SWAP1
000023d5: DUP5
000023d6: SWAP1
000023d7: DUP7
000023d8: SWAP1
000023d9: CALLER
000023da: SWAP1
000023db: PUSH2 0x3f5f
000023de: JUMP
000023df: JUMPDEST
000023e0: PUSH1 0x40
000023e2: MLOAD
000023e3: DUP1
000023e4: SWAP2
000023e5: SUB
000023e6: SWAP1
000023e7: LOG1
000023e8: POP
000023e9: POP
000023ea: POP
000023eb: POP
000023ec: POP
000023ed: POP
000023ee: POP
000023ef: POP
000023f0: POP
000023f1: POP
000023f2: POP
000023f3: PUSH2 0x23fa
000023f6: PUSH2 0x309e
000023f9: JUMP
000023fa: JUMPDEST
000023fb: POP
000023fc: JUMP
000023fd: JUMPDEST
000023fe: PUSH1 0x00
00002400: JUMPDEST
00002401: DUP2
00002402: DUP2
00002403: LT
00002404: ISZERO
00002405: PUSH2 0x0830
00002408: JUMPI
00002409: PUSH2 0x2429
0000240c: DUP4
0000240d: DUP4
0000240e: DUP4
0000240f: DUP2
00002410: DUP2
00002411: LT
00002412: PUSH2 0x241d
00002415: JUMPI
00002416: PUSH2 0x241d
00002419: PUSH2 0x3dde
0000241c: JUMP
0000241d: JUMPDEST
0000241e: SWAP1
0000241f: POP
00002420: PUSH1 0x20
00002422: MUL
00002423: ADD
00002424: CALLDATALOAD
00002425: PUSH2 0x25a5
00002428: JUMP
00002429: JUMPDEST
0000242a: DUP1
0000242b: PUSH2 0x2433
0000242e: DUP2
0000242f: PUSH2 0x3e0a
00002432: JUMP
00002433: JUMPDEST
00002434: SWAP2
00002435: POP
00002436: POP
00002437: PUSH2 0x2400
0000243a: JUMP
0000243b: JUMPDEST
0000243c: PUSH2 0x2443
0000243f: PUSH2 0x2fe9
00002442: JUMP
00002443: JUMPDEST
00002444: PUSH1 0x00
00002446: PUSH2 0x244d
00002449: PUSH2 0x301b
0000244c: JUMP
0000244d: JUMPDEST
0000244e: SWAP1
0000244f: POP
00002450: PUSH1 0x01
00002452: PUSH1 0x01
00002454: PUSH1 0xa0
00002456: SHL
00002457: SUB
00002458: DUP4
00002459: AND
0000245a: ISZERO
0000245b: DUP1
0000245c: ISZERO
0000245d: SWAP1
0000245e: PUSH2 0x2480
00002461: JUMPI
00002462: POP
00002463: PUSH1 0x01
00002465: PUSH1 0x01
00002467: PUSH1 0xa0
00002469: SHL
0000246a: SUB
0000246b: DUP4
0000246c: AND
0000246d: PUSH1 0x00
0000246f: SWAP1
00002470: DUP2
00002471: MSTORE
00002472: PUSH1 0x20
00002474: DUP3
00002475: SWAP1
00002476: MSTORE
00002477: PUSH1 0x40
00002479: SWAP1
0000247a: KECCAK256
0000247b: SLOAD
0000247c: PUSH1 0xff
0000247e: AND
0000247f: ISZERO
00002480: JUMPDEST
00002481: PUSH2 0x249c
00002484: JUMPI
00002485: PUSH1 0x40
00002487: MLOAD
00002488: PUSH3 0x461bcd
0000248c: PUSH1 0xe5
0000248e: SHL
0000248f: DUP2
00002490: MSTORE
00002491: PUSH1 0x04
00002493: ADD
00002494: PUSH2 0x08b3
00002497: SWAP1
00002498: PUSH2 0x426f
0000249b: JUMP
0000249c: JUMPDEST
0000249d: PUSH1 0x40
0000249f: MLOAD
000024a0: PUSH4 0x70a08231
000024a5: PUSH1 0xe0
000024a7: SHL
000024a8: DUP2
000024a9: MSTORE
000024aa: PUSH1 0x00
000024ac: SWAP1
000024ad: PUSH1 0x01
000024af: PUSH1 0x01
000024b1: PUSH1 0xa0
000024b3: SHL
000024b4: SUB
000024b5: DUP6
000024b6: AND
000024b7: SWAP1
000024b8: PUSH4 0x70a08231
000024bd: SWAP1
000024be: PUSH2 0x24cb
000024c1: SWAP1
000024c2: ADDRESS
000024c3: SWAP1
000024c4: PUSH1 0x04
000024c6: ADD
000024c7: PUSH2 0x3cef
000024ca: JUMP
000024cb: JUMPDEST
000024cc: PUSH1 0x20
000024ce: PUSH1 0x40
000024d0: MLOAD
000024d1: DUP1
000024d2: DUP4
000024d3: SUB
000024d4: DUP2
000024d5: DUP7
000024d6: GAS
000024d7: STATICCALL
000024d8: ISZERO
000024d9: DUP1
000024da: ISZERO
000024db: PUSH2 0x24e8
000024de: JUMPI
000024df: RETURNDATASIZE
000024e0: PUSH1 0x00
000024e2: DUP1
000024e3: RETURNDATACOPY
000024e4: RETURNDATASIZE
000024e5: PUSH1 0x00
000024e7: REVERT
000024e8: JUMPDEST
000024e9: POP
000024ea: POP
000024eb: POP
000024ec: POP
000024ed: PUSH1 0x40
000024ef: MLOAD
000024f0: RETURNDATASIZE
000024f1: PUSH1 0x1f
000024f3: NOT
000024f4: PUSH1 0x1f
000024f6: DUP3
000024f7: ADD
000024f8: AND
000024f9: DUP3
000024fa: ADD
000024fb: DUP1
000024fc: PUSH1 0x40
000024fe: MSTORE
000024ff: POP
00002500: DUP2
00002501: ADD
00002502: SWAP1
00002503: PUSH2 0x250c
00002506: SWAP2
00002507: SWAP1
00002508: PUSH2 0x42f5
0000250b: JUMP
0000250c: JUMPDEST
0000250d: SWAP1
0000250e: POP
0000250f: PUSH2 0x10f0
00002512: PUSH1 0x01
00002514: PUSH1 0x01
00002516: PUSH1 0xa0
00002518: SHL
00002519: SUB
0000251a: DUP6
0000251b: AND
0000251c: DUP5
0000251d: DUP4
0000251e: PUSH2 0x303f
00002521: JUMP
00002522: JUMPDEST
00002523: PUSH1 0x00
00002525: DUP1
00002526: PUSH2 0x252d
00002529: PUSH2 0x301b
0000252c: JUMP
0000252d: JUMPDEST
0000252e: PUSH1 0x00
00002530: SWAP4
00002531: DUP5
00002532: MSTORE
00002533: PUSH1 0x04
00002535: ADD
00002536: PUSH1 0x20
00002538: MSTORE
00002539: POP
0000253a: POP
0000253b: PUSH1 0x40
0000253d: SWAP1
0000253e: KECCAK256
0000253f: PUSH1 0x03
00002541: ADD
00002542: SLOAD
00002543: PUSH1 0x01
00002545: PUSH1 0xa0
00002547: SHL
00002548: SWAP1
00002549: DIV
0000254a: PUSH1 0xff
0000254c: AND
0000254d: SWAP1
0000254e: JUMP
0000254f: JUMPDEST
00002550: PUSH1 0x00
00002552: DUP1
00002553: PUSH2 0x255a
00002556: PUSH2 0x301b
00002559: JUMP
0000255a: JUMPDEST
0000255b: PUSH1 0x00
0000255d: SWAP4
0000255e: DUP5
0000255f: MSTORE
00002560: PUSH1 0x02
00002562: ADD
00002563: PUSH1 0x20
00002565: MSTORE
00002566: POP
00002567: POP
00002568: PUSH1 0x40
0000256a: SWAP1
0000256b: KECCAK256
0000256c: PUSH1 0x07
0000256e: ADD
0000256f: SLOAD
00002570: PUSH1 0xff
00002572: AND
00002573: SWAP1
00002574: JUMP
00002575: JUMPDEST
00002576: PUSH1 0x00
00002578: DUP1
00002579: PUSH2 0x2580
0000257c: PUSH2 0x301b
0000257f: JUMP
00002580: JUMPDEST
00002581: PUSH1 0x00
00002583: SWAP4
00002584: DUP5
00002585: MSTORE
00002586: PUSH1 0x02
00002588: SWAP1
00002589: DUP2
0000258a: ADD
0000258b: PUSH1 0x20
0000258d: MSTORE
0000258e: PUSH1 0x40
00002590: SWAP1
00002591: SWAP4
00002592: KECCAK256
00002593: SWAP1
00002594: SWAP3
00002595: ADD
00002596: SLOAD
00002597: PUSH1 0x01
00002599: PUSH1 0x01
0000259b: PUSH1 0xa0
0000259d: SHL
0000259e: SUB
0000259f: AND
000025a0: SWAP3
000025a1: SWAP2
000025a2: POP
000025a3: POP
000025a4: JUMP
000025a5: JUMPDEST
000025a6: PUSH2 0x25ad
000025a9: PUSH2 0x2fb3
000025ac: JUMP
000025ad: JUMPDEST
000025ae: PUSH2 0x25b5
000025b1: PUSH2 0x2fe9
000025b4: JUMP
000025b5: JUMPDEST
000025b6: PUSH1 0x00
000025b8: PUSH2 0x25bf
000025bb: PUSH2 0x301b
000025be: JUMP
000025bf: JUMPDEST
000025c0: PUSH1 0x00
000025c2: DUP4
000025c3: DUP2
000025c4: MSTORE
000025c5: PUSH1 0x04
000025c7: DUP3
000025c8: ADD
000025c9: PUSH1 0x20
000025cb: SWAP1
000025cc: DUP2
000025cd: MSTORE
000025ce: PUSH1 0x40
000025d0: DUP1
000025d1: DUP4
000025d2: KECCAK256
000025d3: DUP1
000025d4: SLOAD
000025d5: DUP5
000025d6: MSTORE
000025d7: PUSH1 0x02
000025d9: DUP6
000025da: ADD
000025db: SWAP1
000025dc: SWAP3
000025dd: MSTORE
000025de: SWAP1
000025df: SWAP2
000025e0: KECCAK256
000025e1: PUSH1 0x03
000025e3: DUP3
000025e4: ADD
000025e5: SLOAD
000025e6: SWAP3
000025e7: SWAP4
000025e8: POP
000025e9: SWAP1
000025ea: SWAP2
000025eb: PUSH1 0x01
000025ed: PUSH1 0xa0
000025ef: SHL
000025f0: SWAP1
000025f1: DIV
000025f2: PUSH1 0xff
000025f4: AND
000025f5: PUSH1 0x01
000025f7: EQ
000025f8: PUSH2 0x2613
000025fb: JUMPI
000025fc: PUSH1 0x40
000025fe: MLOAD
000025ff: PUSH3 0x461bcd
00002603: PUSH1 0xe5
00002605: SHL
00002606: DUP2
00002607: MSTORE
00002608: PUSH1 0x04
0000260a: ADD
0000260b: PUSH2 0x08b3
0000260e: SWAP1
0000260f: PUSH2 0x3ea5
00002612: JUMP
00002613: JUMPDEST
00002614: PUSH1 0x00
00002616: DUP2
00002617: PUSH1 0x03
00002619: ADD
0000261a: SLOAD
0000261b: DUP3
0000261c: PUSH1 0x04
0000261e: ADD
0000261f: SLOAD
00002620: DUP5
00002621: PUSH1 0x01
00002623: ADD
00002624: SLOAD
00002625: PUSH2 0x262e
00002628: SWAP2
00002629: SWAP1
0000262a: PUSH2 0x3ed3
0000262d: JUMP
0000262e: JUMPDEST
0000262f: PUSH2 0x2638
00002632: SWAP2
00002633: SWAP1
00002634: PUSH2 0x3eea
00002637: JUMP
00002638: JUMPDEST
00002639: SWAP1
0000263a: POP
0000263b: PUSH1 0x00
0000263d: DUP3
0000263e: PUSH1 0x03
00002640: ADD
00002641: SLOAD
00002642: DUP4
00002643: PUSH1 0x05
00002645: ADD
00002646: SLOAD
00002647: DUP6
00002648: PUSH1 0x01
0000264a: ADD
0000264b: SLOAD
0000264c: PUSH2 0x2655
0000264f: SWAP2
00002650: SWAP1
00002651: PUSH2 0x3ed3
00002654: JUMP
00002655: JUMPDEST
00002656: PUSH2 0x265f
00002659: SWAP2
0000265a: SWAP1
0000265b: PUSH2 0x3eea
0000265e: JUMP
0000265f: JUMPDEST
00002660: PUSH1 0x03
00002662: DUP6
00002663: ADD
00002664: SLOAD
00002665: PUSH1 0x02
00002667: DUP1
00002668: DUP8
00002669: ADD
0000266a: SLOAD
0000266b: SWAP1
0000266c: DUP7
0000266d: ADD
0000266e: SLOAD
0000266f: SWAP3
00002670: SWAP4
00002671: POP
00002672: PUSH1 0x01
00002674: PUSH1 0x01
00002676: PUSH1 0xa0
00002678: SHL
00002679: SUB
0000267a: SWAP2
0000267b: DUP3
0000267c: AND
0000267d: SWAP3
0000267e: SWAP1
0000267f: DUP3
00002680: AND
00002681: SWAP2
00002682: AND
00002683: PUSH2 0x27af
00002686: JUMPI
00002687: PUSH1 0x00
00002689: DUP5
0000268a: GT
0000268b: DUP1
0000268c: ISZERO
0000268d: PUSH2 0x269e
00002690: JUMPI
00002691: POP
00002692: PUSH1 0x01
00002694: PUSH1 0x01
00002696: PUSH1 0xa0
00002698: SHL
00002699: SUB
0000269a: DUP3
0000269b: AND
0000269c: ISZERO
0000269d: ISZERO
0000269e: JUMPDEST
0000269f: ISZERO
000026a0: PUSH2 0x2718
000026a3: JUMPI
000026a4: PUSH1 0x00
000026a6: DUP3
000026a7: PUSH1 0x01
000026a9: PUSH1 0x01
000026ab: PUSH1 0xa0
000026ad: SHL
000026ae: SUB
000026af: AND
000026b0: DUP6
000026b1: PUSH1 0x40
000026b3: MLOAD
000026b4: PUSH1 0x00
000026b6: PUSH1 0x40
000026b8: MLOAD
000026b9: DUP1
000026ba: DUP4
000026bb: SUB
000026bc: DUP2
000026bd: DUP6
000026be: DUP8
000026bf: GAS
000026c0: CALL
000026c1: SWAP3
000026c2: POP
000026c3: POP
000026c4: POP
000026c5: RETURNDATASIZE
000026c6: DUP1
000026c7: PUSH1 0x00
000026c9: DUP2
000026ca: EQ
000026cb: PUSH2 0x26f0
000026ce: JUMPI
000026cf: PUSH1 0x40
000026d1: MLOAD
000026d2: SWAP2
000026d3: POP
000026d4: PUSH1 0x1f
000026d6: NOT
000026d7: PUSH1 0x3f
000026d9: RETURNDATASIZE
000026da: ADD
000026db: AND
000026dc: DUP3
000026dd: ADD
000026de: PUSH1 0x40
000026e0: MSTORE
000026e1: RETURNDATASIZE
000026e2: DUP3
000026e3: MSTORE
000026e4: RETURNDATASIZE
000026e5: PUSH1 0x00
000026e7: PUSH1 0x20
000026e9: DUP5
000026ea: ADD
000026eb: RETURNDATACOPY
000026ec: PUSH2 0x26f5
000026ef: JUMP
000026f0: JUMPDEST
000026f1: PUSH1 0x60
000026f3: SWAP2
000026f4: POP
000026f5: JUMPDEST
000026f6: POP
000026f7: POP
000026f8: SWAP1
000026f9: POP
000026fa: DUP1
000026fb: PUSH2 0x2716
000026fe: JUMPI
000026ff: PUSH1 0x40
00002701: MLOAD
00002702: PUSH3 0x461bcd
00002706: PUSH1 0xe5
00002708: SHL
00002709: DUP2
0000270a: MSTORE
0000270b: PUSH1 0x04
0000270d: ADD
0000270e: PUSH2 0x08b3
00002711: SWAP1
00002712: PUSH2 0x430e
00002715: JUMP
00002716: JUMPDEST
00002717: POP
00002718: JUMPDEST
00002719: PUSH1 0x00
0000271b: DUP4
0000271c: GT
0000271d: DUP1
0000271e: ISZERO
0000271f: PUSH2 0x2730
00002722: JUMPI
00002723: POP
00002724: PUSH1 0x01
00002726: PUSH1 0x01
00002728: PUSH1 0xa0
0000272a: SHL
0000272b: SUB
0000272c: DUP2
0000272d: AND
0000272e: ISZERO
0000272f: ISZERO
00002730: JUMPDEST
00002731: ISZERO
00002732: PUSH2 0x27aa
00002735: JUMPI
00002736: PUSH1 0x00
00002738: DUP2
00002739: PUSH1 0x01
0000273b: PUSH1 0x01
0000273d: PUSH1 0xa0
0000273f: SHL
00002740: SUB
00002741: AND
00002742: DUP5
00002743: PUSH1 0x40
00002745: MLOAD
00002746: PUSH1 0x00
00002748: PUSH1 0x40
0000274a: MLOAD
0000274b: DUP1
0000274c: DUP4
0000274d: SUB
0000274e: DUP2
0000274f: DUP6
00002750: DUP8
00002751: GAS
00002752: CALL
00002753: SWAP3
00002754: POP
00002755: POP
00002756: POP
00002757: RETURNDATASIZE
00002758: DUP1
00002759: PUSH1 0x00
0000275b: DUP2
0000275c: EQ
0000275d: PUSH2 0x2782
00002760: JUMPI
00002761: PUSH1 0x40
00002763: MLOAD
00002764: SWAP2
00002765: POP
00002766: PUSH1 0x1f
00002768: NOT
00002769: PUSH1 0x3f
0000276b: RETURNDATASIZE
0000276c: ADD
0000276d: AND
0000276e: DUP3
0000276f: ADD
00002770: PUSH1 0x40
00002772: MSTORE
00002773: RETURNDATASIZE
00002774: DUP3
00002775: MSTORE
00002776: RETURNDATASIZE
00002777: PUSH1 0x00
00002779: PUSH1 0x20
0000277b: DUP5
0000277c: ADD
0000277d: RETURNDATACOPY
0000277e: PUSH2 0x2787
00002781: JUMP
00002782: JUMPDEST
00002783: PUSH1 0x60
00002785: SWAP2
00002786: POP
00002787: JUMPDEST
00002788: POP
00002789: POP
0000278a: SWAP1
0000278b: POP
0000278c: DUP1
0000278d: PUSH2 0x27a8
00002790: JUMPI
00002791: PUSH1 0x40
00002793: MLOAD
00002794: PUSH3 0x461bcd
00002798: PUSH1 0xe5
0000279a: SHL
0000279b: DUP2
0000279c: MSTORE
0000279d: PUSH1 0x04
0000279f: ADD
000027a0: PUSH2 0x08b3
000027a3: SWAP1
000027a4: PUSH2 0x430e
000027a7: JUMP
000027a8: JUMPDEST
000027a9: POP
000027aa: JUMPDEST
000027ab: PUSH2 0x2820
000027ae: JUMP
000027af: JUMPDEST
000027b0: PUSH1 0x02
000027b2: DUP6
000027b3: ADD
000027b4: SLOAD
000027b5: PUSH1 0x01
000027b7: PUSH1 0x01
000027b9: PUSH1 0xa0
000027bb: SHL
000027bc: SUB
000027bd: AND
000027be: DUP5
000027bf: ISZERO
000027c0: DUP1
000027c1: ISZERO
000027c2: SWAP1
000027c3: PUSH2 0x27d4
000027c6: JUMPI
000027c7: POP
000027c8: PUSH1 0x01
000027ca: PUSH1 0x01
000027cc: PUSH1 0xa0
000027ce: SHL
000027cf: SUB
000027d0: DUP4
000027d1: AND
000027d2: ISZERO
000027d3: ISZERO
000027d4: JUMPDEST
000027d5: ISZERO
000027d6: PUSH2 0x27ed
000027d9: JUMPI
000027da: PUSH2 0x27ed
000027dd: PUSH1 0x01
000027df: PUSH1 0x01
000027e1: PUSH1 0xa0
000027e3: SHL
000027e4: SUB
000027e5: DUP3
000027e6: AND
000027e7: DUP5
000027e8: DUP8
000027e9: PUSH2 0x303f
000027ec: JUMP
000027ed: JUMPDEST
000027ee: PUSH1 0x00
000027f0: DUP5
000027f1: GT
000027f2: DUP1
000027f3: ISZERO
000027f4: PUSH2 0x2805
000027f7: JUMPI
000027f8: POP
000027f9: PUSH1 0x01
000027fb: PUSH1 0x01
000027fd: PUSH1 0xa0
000027ff: SHL
00002800: SUB
00002801: DUP3
00002802: AND
00002803: ISZERO
00002804: ISZERO
00002805: JUMPDEST
00002806: ISZERO
00002807: PUSH2 0x281e
0000280a: JUMPI
0000280b: PUSH2 0x281e
0000280e: PUSH1 0x01
00002810: PUSH1 0x01
00002812: PUSH1 0xa0
00002814: SHL
00002815: SUB
00002816: DUP3
00002817: AND
00002818: DUP4
00002819: DUP7
0000281a: PUSH2 0x303f
0000281d: JUMP
0000281e: JUMPDEST
0000281f: POP
00002820: JUMPDEST
00002821: PUSH1 0x03
00002823: DUP7
00002824: ADD
00002825: DUP1
00002826: SLOAD
00002827: PUSH1 0xff
00002829: PUSH1 0xa0
0000282b: SHL
0000282c: NOT
0000282d: AND
0000282e: PUSH1 0x01
00002830: PUSH1 0xa2
00002832: SHL
00002833: OR
00002834: SWAP1
00002835: SSTORE
00002836: PUSH1 0x40
00002838: DUP1
00002839: MLOAD
0000283a: DUP10
0000283b: DUP2
0000283c: MSTORE
0000283d: CALLER
0000283e: PUSH1 0x20
00002840: DUP3
00002841: ADD
00002842: MSTORE
00002843: PUSH32 0x22369ba22944aadf9e9d6f4c51462417a50ea7876b9c62c7c46b5522e9c672cc
00002864: SWAP2
00002865: ADD
00002866: PUSH1 0x40
00002868: MLOAD
00002869: DUP1
0000286a: SWAP2
0000286b: SUB
0000286c: SWAP1
0000286d: LOG1
0000286e: POP
0000286f: POP
00002870: POP
00002871: POP
00002872: POP
00002873: POP
00002874: POP
00002875: PUSH2 0x23fa
00002878: PUSH2 0x309e
0000287b: JUMP
0000287c: JUMPDEST
0000287d: PUSH1 0x00
0000287f: DUP1
00002880: PUSH2 0x2887
00002883: PUSH2 0x301b
00002886: JUMP
00002887: JUMPDEST
00002888: PUSH1 0x00
0000288a: SWAP4
0000288b: DUP5
0000288c: MSTORE
0000288d: PUSH1 0x02
0000288f: ADD
00002890: PUSH1 0x20
00002892: MSTORE
00002893: POP
00002894: POP
00002895: PUSH1 0x40
00002897: SWAP1
00002898: KECCAK256
00002899: PUSH1 0x04
0000289b: ADD
0000289c: SLOAD
0000289d: SWAP1
0000289e: JUMP
0000289f: JUMPDEST
000028a0: PUSH2 0x28a7
000028a3: PUSH2 0x2fb3
000028a6: JUMP
000028a7: JUMPDEST
000028a8: PUSH1 0x00
000028aa: PUSH2 0x28b1
000028ad: PUSH2 0x301b
000028b0: JUMP
000028b1: JUMPDEST
000028b2: PUSH1 0x00
000028b4: DUP4
000028b5: DUP2
000028b6: MSTORE
000028b7: PUSH1 0x04
000028b9: DUP3
000028ba: ADD
000028bb: PUSH1 0x20
000028bd: SWAP1
000028be: DUP2
000028bf: MSTORE
000028c0: PUSH1 0x40
000028c2: DUP1
000028c3: DUP4
000028c4: KECCAK256
000028c5: DUP1
000028c6: SLOAD
000028c7: DUP5
000028c8: MSTORE
000028c9: PUSH1 0x02
000028cb: DUP6
000028cc: ADD
000028cd: DUP4
000028ce: MSTORE
000028cf: DUP2
000028d0: DUP5
000028d1: KECCAK256
000028d2: PUSH1 0x01
000028d4: DUP1
000028d5: DUP3
000028d6: ADD
000028d7: SLOAD
000028d8: DUP7
000028d9: MSTORE
000028da: DUP1
000028db: DUP8
000028dc: ADD
000028dd: SWAP1
000028de: SWAP5
000028df: MSTORE
000028e0: SWAP2
000028e1: SWAP1
000028e2: SWAP4
000028e3: KECCAK256
000028e4: SWAP2
000028e5: DUP3
000028e6: ADD
000028e7: SLOAD
000028e8: SWAP4
000028e9: SWAP5
000028ea: POP
000028eb: SWAP2
000028ec: SWAP3
000028ed: PUSH1 0x01
000028ef: PUSH1 0x98
000028f1: SHL
000028f2: SWAP1
000028f3: DIV
000028f4: PUSH1 0xff
000028f6: AND
000028f7: PUSH1 0x03
000028f9: EQ
000028fa: PUSH2 0x2915
000028fd: JUMPI
000028fe: PUSH1 0x40
00002900: MLOAD
00002901: PUSH3 0x461bcd
00002905: PUSH1 0xe5
00002907: SHL
00002908: DUP2
00002909: MSTORE
0000290a: PUSH1 0x04
0000290c: ADD
0000290d: PUSH2 0x08b3
00002910: SWAP1
00002911: PUSH2 0x3e23
00002914: JUMP
00002915: JUMPDEST
00002916: DUP1
00002917: SLOAD
00002918: PUSH2 0x2939
0000291b: SWAP1
0000291c: PUSH6 0xffffffffffff
00002923: PUSH1 0x01
00002925: PUSH1 0xd0
00002927: SHL
00002928: DUP3
00002929: DIV
0000292a: DUP2
0000292b: AND
0000292c: SWAP2
0000292d: PUSH1 0x01
0000292f: PUSH1 0xa0
00002931: SHL
00002932: SWAP1
00002933: DIV
00002934: AND
00002935: PUSH2 0x4345
00002938: JUMP
00002939: JUMPDEST
0000293a: PUSH6 0xffffffffffff
00002941: AND
00002942: TIMESTAMP
00002943: GT
00002944: PUSH2 0x298d
00002947: JUMPI
00002948: PUSH1 0x40
0000294a: MLOAD
0000294b: PUSH3 0x461bcd
0000294f: PUSH1 0xe5
00002951: SHL
00002952: DUP2
00002953: MSTORE
00002954: PUSH1 0x20
00002956: PUSH1 0x04
00002958: DUP3
00002959: ADD
0000295a: MSTORE
0000295b: PUSH1 0x1b
0000295d: PUSH1 0x24
0000295f: DUP3
00002960: ADD
00002961: MSTORE
00002962: PUSH27 0x14d95d1d1b1a5b99c8151a5b5948139bdd08115b9919590816595d
0000297e: PUSH1 0x2a
00002980: SHL
00002981: PUSH1 0x44
00002983: DUP3
00002984: ADD
00002985: MSTORE
00002986: PUSH1 0x64
00002988: ADD
00002989: PUSH2 0x08b3
0000298c: JUMP
0000298d: JUMPDEST
0000298e: PUSH1 0x03
00002990: DUP4
00002991: ADD
00002992: SLOAD
00002993: PUSH1 0x01
00002995: PUSH1 0xa0
00002997: SHL
00002998: SWAP1
00002999: DIV
0000299a: PUSH1 0xff
0000299c: AND
0000299d: PUSH1 0x01
0000299f: EQ
000029a0: PUSH2 0x29bb
000029a3: JUMPI
000029a4: PUSH1 0x40
000029a6: MLOAD
000029a7: PUSH3 0x461bcd
000029ab: PUSH1 0xe5
000029ad: SHL
000029ae: DUP2
000029af: MSTORE
000029b0: PUSH1 0x04
000029b2: ADD
000029b3: PUSH2 0x08b3
000029b6: SWAP1
000029b7: PUSH2 0x3ea5
000029ba: JUMP
000029bb: JUMPDEST
000029bc: PUSH1 0x03
000029be: DUP4
000029bf: ADD
000029c0: SLOAD
000029c1: PUSH1 0x01
000029c3: PUSH1 0x01
000029c5: PUSH1 0xa0
000029c7: SHL
000029c8: SUB
000029c9: AND
000029ca: CALLER
000029cb: EQ
000029cc: DUP1
000029cd: PUSH2 0x29e5
000029d0: JUMPI
000029d1: POP
000029d2: CALLER
000029d3: PUSH2 0x29da
000029d6: PUSH2 0x1b93
000029d9: JUMP
000029da: JUMPDEST
000029db: PUSH1 0x01
000029dd: PUSH1 0x01
000029df: PUSH1 0xa0
000029e1: SHL
000029e2: SUB
000029e3: AND
000029e4: EQ
000029e5: JUMPDEST
000029e6: PUSH2 0x2a30
000029e9: JUMPI
000029ea: PUSH1 0x40
000029ec: MLOAD
000029ed: PUSH3 0x461bcd
000029f1: PUSH1 0xe5
000029f3: SHL
000029f4: DUP2
000029f5: MSTORE
000029f6: PUSH1 0x20
000029f8: PUSH1 0x04
000029fa: DUP3
000029fb: ADD
000029fc: MSTORE
000029fd: PUSH1 0x1c
000029ff: PUSH1 0x24
00002a01: DUP3
00002a02: ADD
00002a03: MSTORE
00002a04: PUSH28 0x4275796572206f72204f70657261746f722f4f776e6572204f6e6c79
00002a21: PUSH1 0x20
00002a23: SHL
00002a24: PUSH1 0x44
00002a26: DUP3
00002a27: ADD
00002a28: MSTORE
00002a29: PUSH1 0x64
00002a2b: ADD
00002a2c: PUSH2 0x08b3
00002a2f: JUMP
00002a30: JUMPDEST
00002a31: PUSH1 0x00
00002a33: DUP3
00002a34: PUSH1 0x03
00002a36: ADD
00002a37: SLOAD
00002a38: DUP4
00002a39: PUSH1 0x05
00002a3b: ADD
00002a3c: SLOAD
00002a3d: DUP6
00002a3e: PUSH1 0x01
00002a40: ADD
00002a41: SLOAD
00002a42: PUSH2 0x2a4b
00002a45: SWAP2
00002a46: SWAP1
00002a47: PUSH2 0x3ed3
00002a4a: JUMP
00002a4b: JUMPDEST
00002a4c: PUSH2 0x2a55
00002a4f: SWAP2
00002a50: SWAP1
00002a51: PUSH2 0x3eea
00002a54: JUMP
00002a55: JUMPDEST
00002a56: SWAP1
00002a57: POP
00002a58: PUSH1 0x00
00002a5a: DUP4
00002a5b: PUSH1 0x03
00002a5d: ADD
00002a5e: SLOAD
00002a5f: DUP5
00002a60: PUSH1 0x04
00002a62: ADD
00002a63: SLOAD
00002a64: DUP7
00002a65: PUSH1 0x01
00002a67: ADD
00002a68: SLOAD
00002a69: PUSH2 0x2a72
00002a6c: SWAP2
00002a6d: SWAP1
00002a6e: PUSH2 0x3ed3
00002a71: JUMP
00002a72: JUMPDEST
00002a73: PUSH2 0x2a7c
00002a76: SWAP2
00002a77: SWAP1
00002a78: PUSH2 0x3eea
00002a7b: JUMP
00002a7c: JUMPDEST
00002a7d: SWAP1
00002a7e: POP
00002a7f: PUSH1 0x00
00002a81: PUSH3 0x0f4240
00002a85: DUP8
00002a86: PUSH1 0x06
00002a88: ADD
00002a89: PUSH1 0x02
00002a8b: ADD
00002a8c: SLOAD
00002a8d: DUP5
00002a8e: PUSH2 0x2a97
00002a91: SWAP2
00002a92: SWAP1
00002a93: PUSH2 0x3ed3
00002a96: JUMP
00002a97: JUMPDEST
00002a98: PUSH2 0x2aa2
00002a9b: SWAP1
00002a9c: PUSH1 0x02
00002a9e: PUSH2 0x3ed3
00002aa1: JUMP
00002aa2: JUMPDEST
00002aa3: PUSH2 0x2aac
00002aa6: SWAP2
00002aa7: SWAP1
00002aa8: PUSH2 0x3eea
00002aab: JUMP
00002aac: JUMPDEST
00002aad: SWAP1
00002aae: POP
00002aaf: PUSH1 0x00
00002ab1: DUP2
00002ab2: PUSH2 0x2abb
00002ab5: DUP6
00002ab6: DUP6
00002ab7: PUSH2 0x3f0c
00002aba: JUMP
00002abb: JUMPDEST
00002abc: PUSH2 0x2ac5
00002abf: SWAP2
00002ac0: SWAP1
00002ac1: PUSH2 0x3f1f
00002ac4: JUMP
00002ac5: JUMPDEST
00002ac6: PUSH1 0x02
00002ac8: DUP8
00002ac9: ADD
00002aca: SLOAD
00002acb: SWAP1
00002acc: SWAP2
00002acd: POP
00002ace: PUSH1 0x01
00002ad0: PUSH1 0x01
00002ad2: PUSH1 0xa0
00002ad4: SHL
00002ad5: SUB
00002ad6: AND
00002ad7: PUSH2 0x2bba
00002ada: JUMPI
00002adb: PUSH1 0x03
00002add: DUP8
00002ade: ADD
00002adf: SLOAD
00002ae0: PUSH1 0x40
00002ae2: MLOAD
00002ae3: PUSH1 0x00
00002ae5: SWAP2
00002ae6: PUSH1 0x01
00002ae8: PUSH1 0x01
00002aea: PUSH1 0xa0
00002aec: SHL
00002aed: SUB
00002aee: AND
00002aef: SWAP1
00002af0: DUP4
00002af1: SWAP1
00002af2: DUP4
00002af3: DUP2
00002af4: DUP2
00002af5: DUP2
00002af6: DUP6
00002af7: DUP8
00002af8: GAS
00002af9: CALL
00002afa: SWAP3
00002afb: POP
00002afc: POP
00002afd: POP
00002afe: RETURNDATASIZE
00002aff: DUP1
00002b00: PUSH1 0x00
00002b02: DUP2
00002b03: EQ
00002b04: PUSH2 0x2b29
00002b07: JUMPI
00002b08: PUSH1 0x40
00002b0a: MLOAD
00002b0b: SWAP2
00002b0c: POP
00002b0d: PUSH1 0x1f
00002b0f: NOT
00002b10: PUSH1 0x3f
00002b12: RETURNDATASIZE
00002b13: ADD
00002b14: AND
00002b15: DUP3
00002b16: ADD
00002b17: PUSH1 0x40
00002b19: MSTORE
00002b1a: RETURNDATASIZE
00002b1b: DUP3
00002b1c: MSTORE
00002b1d: RETURNDATASIZE
00002b1e: PUSH1 0x00
00002b20: PUSH1 0x20
00002b22: DUP5
00002b23: ADD
00002b24: RETURNDATACOPY
00002b25: PUSH2 0x2b2e
00002b28: JUMP
00002b29: JUMPDEST
00002b2a: PUSH1 0x60
00002b2c: SWAP2
00002b2d: POP
00002b2e: JUMPDEST
00002b2f: POP
00002b30: POP
00002b31: PUSH1 0x09
00002b33: DUP11
00002b34: ADD
00002b35: SLOAD
00002b36: PUSH1 0x40
00002b38: MLOAD
00002b39: SWAP2
00002b3a: SWAP3
00002b3b: POP
00002b3c: PUSH1 0x00
00002b3e: SWAP2
00002b3f: PUSH1 0x01
00002b41: PUSH1 0x01
00002b43: PUSH1 0xa0
00002b45: SHL
00002b46: SUB
00002b47: SWAP1
00002b48: SWAP2
00002b49: AND
00002b4a: SWAP1
00002b4b: DUP6
00002b4c: SWAP1
00002b4d: DUP4
00002b4e: DUP2
00002b4f: DUP2
00002b50: DUP2
00002b51: DUP6
00002b52: DUP8
00002b53: GAS
00002b54: CALL
00002b55: SWAP3
00002b56: POP
00002b57: POP
00002b58: POP
00002b59: RETURNDATASIZE
00002b5a: DUP1
00002b5b: PUSH1 0x00
00002b5d: DUP2
00002b5e: EQ
00002b5f: PUSH2 0x2b84
00002b62: JUMPI
00002b63: PUSH1 0x40
00002b65: MLOAD
00002b66: SWAP2
00002b67: POP
00002b68: PUSH1 0x1f
00002b6a: NOT
00002b6b: PUSH1 0x3f
00002b6d: RETURNDATASIZE
00002b6e: ADD
00002b6f: AND
00002b70: DUP3
00002b71: ADD
00002b72: PUSH1 0x40
00002b74: MSTORE
00002b75: RETURNDATASIZE
00002b76: DUP3
00002b77: MSTORE
00002b78: RETURNDATASIZE
00002b79: PUSH1 0x00
00002b7b: PUSH1 0x20
00002b7d: DUP5
00002b7e: ADD
00002b7f: RETURNDATACOPY
00002b80: PUSH2 0x2b89
00002b83: JUMP
00002b84: JUMPDEST
00002b85: PUSH1 0x60
00002b87: SWAP2
00002b88: POP
00002b89: JUMPDEST
00002b8a: POP
00002b8b: POP
00002b8c: SWAP1
00002b8d: POP
00002b8e: DUP2
00002b8f: DUP1
00002b90: ISZERO
00002b91: PUSH2 0x2b97
00002b94: JUMPI
00002b95: POP
00002b96: DUP1
00002b97: JUMPDEST
00002b98: PUSH2 0x2bb3
00002b9b: JUMPI
00002b9c: PUSH1 0x40
00002b9e: MLOAD
00002b9f: PUSH3 0x461bcd
00002ba3: PUSH1 0xe5
00002ba5: SHL
00002ba6: DUP2
00002ba7: MSTORE
00002ba8: PUSH1 0x04
00002baa: ADD
00002bab: PUSH2 0x08b3
00002bae: SWAP1
00002baf: PUSH2 0x3f32
00002bb2: JUMP
00002bb3: JUMPDEST
00002bb4: POP
00002bb5: POP
00002bb6: PUSH2 0x2bfb
00002bb9: JUMP
00002bba: JUMPDEST
00002bbb: PUSH1 0x02
00002bbd: DUP7
00002bbe: ADD
00002bbf: SLOAD
00002bc0: PUSH1 0x03
00002bc2: DUP9
00002bc3: ADD
00002bc4: SLOAD
00002bc5: PUSH1 0x01
00002bc7: PUSH1 0x01
00002bc9: PUSH1 0xa0
00002bcb: SHL
00002bcc: SUB
00002bcd: SWAP2
00002bce: DUP3
00002bcf: AND
00002bd0: SWAP2
00002bd1: PUSH2 0x2bdd
00002bd4: SWAP2
00002bd5: DUP4
00002bd6: SWAP2
00002bd7: AND
00002bd8: DUP5
00002bd9: PUSH2 0x303f
00002bdc: JUMP
00002bdd: JUMPDEST
00002bde: PUSH1 0x09
00002be0: DUP10
00002be1: ADD
00002be2: SLOAD
00002be3: PUSH2 0x2bf9
00002be6: SWAP1
00002be7: PUSH1 0x01
00002be9: PUSH1 0x01
00002beb: PUSH1 0xa0
00002bed: SHL
00002bee: SUB
00002bef: DUP4
00002bf0: DUP2
00002bf1: AND
00002bf2: SWAP2
00002bf3: AND
00002bf4: DUP6
00002bf5: PUSH2 0x303f
00002bf8: JUMP
00002bf9: JUMPDEST
00002bfa: POP
00002bfb: JUMPDEST
00002bfc: PUSH1 0x03
00002bfe: DUP8
00002bff: ADD
00002c00: DUP1
00002c01: SLOAD
00002c02: PUSH1 0xff
00002c04: PUSH1 0xa0
00002c06: SHL
00002c07: NOT
00002c08: AND
00002c09: PUSH1 0x03
00002c0b: PUSH1 0xa0
00002c0d: SHL
00002c0e: OR
00002c0f: SWAP1
00002c10: SSTORE
00002c11: PUSH1 0x40
00002c13: MLOAD
00002c14: PUSH32 0x6353c0ce500c8ea1f1026c8f39a6e0c2d1b2f17034fcd8a4b021c72e6e293e51
00002c35: SWAP1
00002c36: PUSH2 0x2c46
00002c39: SWAP1
00002c3a: DUP12
00002c3b: SWAP1
00002c3c: DUP5
00002c3d: SWAP1
00002c3e: DUP7
00002c3f: SWAP1
00002c40: CALLER
00002c41: SWAP1
00002c42: PUSH2 0x3f5f
00002c45: JUMP
00002c46: JUMPDEST
00002c47: PUSH1 0x40
00002c49: MLOAD
00002c4a: DUP1
00002c4b: SWAP2
00002c4c: SUB
00002c4d: SWAP1
00002c4e: LOG1
00002c4f: POP
00002c50: POP
00002c51: POP
00002c52: POP
00002c53: POP
00002c54: POP
00002c55: POP
00002c56: POP
00002c57: PUSH2 0x23fa
00002c5a: PUSH2 0x309e
00002c5d: JUMP
00002c5e: JUMPDEST
00002c5f: PUSH1 0x00
00002c61: DUP1
00002c62: PUSH2 0x2c69
00002c65: PUSH2 0x301b
00002c68: JUMP
00002c69: JUMPDEST
00002c6a: PUSH1 0x00
00002c6c: SWAP4
00002c6d: DUP5
00002c6e: MSTORE
00002c6f: PUSH1 0x02
00002c71: ADD
00002c72: PUSH1 0x20
00002c74: MSTORE
00002c75: POP
00002c76: POP
00002c77: PUSH1 0x40
00002c79: SWAP1
00002c7a: KECCAK256
00002c7b: PUSH1 0x03
00002c7d: ADD
00002c7e: SLOAD
00002c7f: SWAP1
00002c80: JUMP
00002c81: JUMPDEST
00002c82: PUSH2 0x2c89
00002c85: PUSH2 0x2fb3
00002c88: JUMP
00002c89: JUMPDEST
00002c8a: PUSH1 0x00
00002c8c: PUSH2 0x2c93
00002c8f: PUSH2 0x301b
00002c92: JUMP
00002c93: JUMPDEST
00002c94: PUSH1 0x00
00002c96: DUP4
00002c97: DUP2
00002c98: MSTORE
00002c99: PUSH1 0x02
00002c9b: DUP3
00002c9c: ADD
00002c9d: PUSH1 0x20
00002c9f: MSTORE
00002ca0: PUSH1 0x40
00002ca2: SWAP1
00002ca3: KECCAK256
00002ca4: PUSH1 0x07
00002ca6: DUP2
00002ca7: ADD
00002ca8: SLOAD
00002ca9: SWAP2
00002caa: SWAP3
00002cab: POP
00002cac: SWAP1
00002cad: PUSH2 0x0100
00002cb0: SWAP1
00002cb1: DIV
00002cb2: PUSH1 0x01
00002cb4: PUSH1 0x01
00002cb6: PUSH1 0xa0
00002cb8: SHL
00002cb9: SUB
00002cba: AND
00002cbb: CALLER
00002cbc: EQ
00002cbd: PUSH2 0x2cfb
00002cc0: JUMPI
00002cc1: PUSH1 0x40
00002cc3: MLOAD
00002cc4: PUSH3 0x461bcd
00002cc8: PUSH1 0xe5
00002cca: SHL
00002ccb: DUP2
00002ccc: MSTORE
00002ccd: PUSH1 0x20
00002ccf: PUSH1 0x04
00002cd1: DUP3
00002cd2: ADD
00002cd3: MSTORE
00002cd4: PUSH1 0x10
00002cd6: PUSH1 0x24
00002cd8: DUP3
00002cd9: ADD
00002cda: MSTORE
00002cdb: PUSH16 0x4f66666572204f776e6572204f6e6c79
00002cec: PUSH1 0x80
00002cee: SHL
00002cef: PUSH1 0x44
00002cf1: DUP3
00002cf2: ADD
00002cf3: MSTORE
00002cf4: PUSH1 0x64
00002cf6: ADD
00002cf7: PUSH2 0x08b3
00002cfa: JUMP
00002cfb: JUMPDEST
00002cfc: PUSH1 0x07
00002cfe: DUP2
00002cff: ADD
00002d00: SLOAD
00002d01: PUSH1 0xff
00002d03: AND
00002d04: PUSH1 0x01
00002d06: EQ
00002d07: PUSH2 0x2d22
00002d0a: JUMPI
00002d0b: PUSH1 0x40
00002d0d: MLOAD
00002d0e: PUSH3 0x461bcd
00002d12: PUSH1 0xe5
00002d14: SHL
00002d15: DUP2
00002d16: MSTORE
00002d17: PUSH1 0x04
00002d19: ADD
00002d1a: PUSH2 0x08b3
00002d1d: SWAP1
00002d1e: PUSH2 0x4137
00002d21: JUMP
00002d22: JUMPDEST
00002d23: PUSH1 0x00
00002d25: DUP2
00002d26: PUSH1 0x06
00002d28: ADD
00002d29: SLOAD
00002d2a: DUP3
00002d2b: PUSH1 0x03
00002d2d: ADD
00002d2e: SLOAD
00002d2f: PUSH2 0x2d38
00002d32: SWAP2
00002d33: SWAP1
00002d34: PUSH2 0x3f1f
00002d37: JUMP
00002d38: JUMPDEST
00002d39: SWAP1
00002d3a: POP
00002d3b: PUSH1 0x00
00002d3d: DUP2
00002d3e: GT
00002d3f: PUSH2 0x2d5a
00002d42: JUMPI
00002d43: PUSH1 0x40
00002d45: MLOAD
00002d46: PUSH3 0x461bcd
00002d4a: PUSH1 0xe5
00002d4c: SHL
00002d4d: DUP2
00002d4e: MSTORE
00002d4f: PUSH1 0x04
00002d51: ADD
00002d52: PUSH2 0x08b3
00002d55: SWAP1
00002d56: PUSH2 0x41bb
00002d59: JUMP
00002d5a: JUMPDEST
00002d5b: DUP2
00002d5c: SLOAD
00002d5d: PUSH1 0x00
00002d5f: SWAP1
00002d60: PUSH1 0xff
00002d62: AND
00002d63: PUSH1 0x00
00002d65: NOT
00002d66: ADD
00002d67: PUSH2 0x2d8f
00002d6a: JUMPI
00002d6b: PUSH1 0x03
00002d6d: DUP4
00002d6e: ADD
00002d6f: SLOAD
00002d70: PUSH1 0x04
00002d72: DUP5
00002d73: ADD
00002d74: SLOAD
00002d75: PUSH2 0x2d7e
00002d78: SWAP1
00002d79: DUP5
00002d7a: PUSH2 0x3ed3
00002d7d: JUMP
00002d7e: JUMPDEST
00002d7f: PUSH2 0x2d88
00002d82: SWAP2
00002d83: SWAP1
00002d84: PUSH2 0x3eea
00002d87: JUMP
00002d88: JUMPDEST
00002d89: SWAP1
00002d8a: POP
00002d8b: PUSH2 0x2db0
00002d8e: JUMP
00002d8f: JUMPDEST
00002d90: PUSH1 0x03
00002d92: DUP4
00002d93: ADD
00002d94: SLOAD
00002d95: PUSH1 0x05
00002d97: DUP5
00002d98: ADD
00002d99: SLOAD
00002d9a: PUSH2 0x2da3
00002d9d: SWAP1
00002d9e: DUP5
00002d9f: PUSH2 0x3ed3
00002da2: JUMP
00002da3: JUMPDEST
00002da4: PUSH2 0x2dad
00002da7: SWAP2
00002da8: SWAP1
00002da9: PUSH2 0x3eea
00002dac: JUMP
00002dad: JUMPDEST
00002dae: SWAP1
00002daf: POP
00002db0: JUMPDEST
00002db1: PUSH1 0x07
00002db3: DUP5
00002db4: ADD
00002db5: SLOAD
00002db6: PUSH1 0x00
00002db8: SWAP1
00002db9: PUSH3 0x0f4240
00002dbd: SWAP1
00002dbe: PUSH2 0x2dc7
00002dc1: SWAP1
00002dc2: DUP5
00002dc3: PUSH2 0x3ed3
00002dc6: JUMP
00002dc7: JUMPDEST
00002dc8: PUSH2 0x2dd1
00002dcb: SWAP2
00002dcc: SWAP1
00002dcd: PUSH2 0x3eea
00002dd0: JUMP
00002dd1: JUMPDEST
00002dd2: SWAP1
00002dd3: POP
00002dd4: PUSH2 0x2ddd
00002dd7: DUP2
00002dd8: DUP4
00002dd9: PUSH2 0x3f1f
00002ddc: JUMP
00002ddd: JUMPDEST
00002dde: PUSH1 0x02
00002de0: DUP6
00002de1: ADD
00002de2: SLOAD
00002de3: SWAP1
00002de4: SWAP3
00002de5: POP
00002de6: PUSH1 0x01
00002de8: PUSH1 0x01
00002dea: PUSH1 0xa0
00002dec: SHL
00002ded: SUB
00002dee: AND
00002def: PUSH2 0x2ed7
00002df2: JUMPI
00002df3: PUSH1 0x07
00002df5: DUP5
00002df6: ADD
00002df7: SLOAD
00002df8: PUSH1 0x40
00002dfa: MLOAD
00002dfb: PUSH1 0x00
00002dfd: SWAP2
00002dfe: PUSH2 0x0100
00002e01: SWAP1
00002e02: DIV
00002e03: PUSH1 0x01
00002e05: PUSH1 0x01
00002e07: PUSH1 0xa0
00002e09: SHL
00002e0a: SUB
00002e0b: AND
00002e0c: SWAP1
00002e0d: DUP5
00002e0e: SWAP1
00002e0f: DUP4
00002e10: DUP2
00002e11: DUP2
00002e12: DUP2
00002e13: DUP6
00002e14: DUP8
00002e15: GAS
00002e16: CALL
00002e17: SWAP3
00002e18: POP
00002e19: POP
00002e1a: POP
00002e1b: RETURNDATASIZE
00002e1c: DUP1
00002e1d: PUSH1 0x00
00002e1f: DUP2
00002e20: EQ
00002e21: PUSH2 0x2e46
00002e24: JUMPI
00002e25: PUSH1 0x40
00002e27: MLOAD
00002e28: SWAP2
00002e29: POP
00002e2a: PUSH1 0x1f
00002e2c: NOT
00002e2d: PUSH1 0x3f
00002e2f: RETURNDATASIZE
00002e30: ADD
00002e31: AND
00002e32: DUP3
00002e33: ADD
00002e34: PUSH1 0x40
00002e36: MSTORE
00002e37: RETURNDATASIZE
00002e38: DUP3
00002e39: MSTORE
00002e3a: RETURNDATASIZE
00002e3b: PUSH1 0x00
00002e3d: PUSH1 0x20
00002e3f: DUP5
00002e40: ADD
00002e41: RETURNDATACOPY
00002e42: PUSH2 0x2e4b
00002e45: JUMP
00002e46: JUMPDEST
00002e47: PUSH1 0x60
00002e49: SWAP2
00002e4a: POP
00002e4b: JUMPDEST
00002e4c: POP
00002e4d: POP
00002e4e: PUSH1 0x09
00002e50: DUP8
00002e51: ADD
00002e52: SLOAD
00002e53: PUSH1 0x40
00002e55: MLOAD
00002e56: SWAP2
00002e57: SWAP3
00002e58: POP
00002e59: PUSH1 0x00
00002e5b: SWAP2
00002e5c: PUSH1 0x01
00002e5e: PUSH1 0x01
00002e60: PUSH1 0xa0
00002e62: SHL
00002e63: SUB
00002e64: SWAP1
00002e65: SWAP2
00002e66: AND
00002e67: SWAP1
00002e68: DUP5
00002e69: SWAP1
00002e6a: DUP4
00002e6b: DUP2
00002e6c: DUP2
00002e6d: DUP2
00002e6e: DUP6
00002e6f: DUP8
00002e70: GAS
00002e71: CALL
00002e72: SWAP3
00002e73: POP
00002e74: POP
00002e75: POP
00002e76: RETURNDATASIZE
00002e77: DUP1
00002e78: PUSH1 0x00
00002e7a: DUP2
00002e7b: EQ
00002e7c: PUSH2 0x2ea1
00002e7f: JUMPI
00002e80: PUSH1 0x40
00002e82: MLOAD
00002e83: SWAP2
00002e84: POP
00002e85: PUSH1 0x1f
00002e87: NOT
00002e88: PUSH1 0x3f
00002e8a: RETURNDATASIZE
00002e8b: ADD
00002e8c: AND
00002e8d: DUP3
00002e8e: ADD
00002e8f: PUSH1 0x40
00002e91: MSTORE
00002e92: RETURNDATASIZE
00002e93: DUP3
00002e94: MSTORE
00002e95: RETURNDATASIZE
00002e96: PUSH1 0x00
00002e98: PUSH1 0x20
00002e9a: DUP5
00002e9b: ADD
00002e9c: RETURNDATACOPY
00002e9d: PUSH2 0x2ea6
00002ea0: JUMP
00002ea1: JUMPDEST
00002ea2: PUSH1 0x60
00002ea4: SWAP2
00002ea5: POP
00002ea6: JUMPDEST
00002ea7: POP
00002ea8: POP
00002ea9: SWAP1
00002eaa: POP
00002eab: DUP2
00002eac: DUP1
00002ead: ISZERO
00002eae: PUSH2 0x2eb4
00002eb1: JUMPI
00002eb2: POP
00002eb3: DUP1
00002eb4: JUMPDEST
00002eb5: PUSH2 0x2ed0
00002eb8: JUMPI
00002eb9: PUSH1 0x40
00002ebb: MLOAD
00002ebc: PUSH3 0x461bcd
00002ec0: PUSH1 0xe5
00002ec2: SHL
00002ec3: DUP2
00002ec4: MSTORE
00002ec5: PUSH1 0x04
00002ec7: ADD
00002ec8: PUSH2 0x08b3
00002ecb: SWAP1
00002ecc: PUSH2 0x3f32
00002ecf: JUMP
00002ed0: JUMPDEST
00002ed1: POP
00002ed2: POP
00002ed3: PUSH2 0x2f1e
00002ed6: JUMP
00002ed7: JUMPDEST
00002ed8: PUSH1 0x02
00002eda: DUP5
00002edb: ADD
00002edc: SLOAD
00002edd: PUSH1 0x07
00002edf: DUP6
00002ee0: ADD
00002ee1: SLOAD
00002ee2: PUSH1 0x01
00002ee4: PUSH1 0x01
00002ee6: PUSH1 0xa0
00002ee8: SHL
00002ee9: SUB
00002eea: SWAP2
00002eeb: DUP3
00002eec: AND
00002eed: SWAP2
00002eee: PUSH2 0x2f00
00002ef1: SWAP2
00002ef2: DUP4
00002ef3: SWAP2
00002ef4: PUSH2 0x0100
00002ef7: SWAP1
00002ef8: SWAP2
00002ef9: DIV
00002efa: AND
00002efb: DUP6
00002efc: PUSH2 0x303f
00002eff: JUMP
00002f00: JUMPDEST
00002f01: PUSH1 0x09
00002f03: DUP7
00002f04: ADD
00002f05: SLOAD
00002f06: PUSH2 0x2f1c
00002f09: SWAP1
00002f0a: PUSH1 0x01
00002f0c: PUSH1 0x01
00002f0e: PUSH1 0xa0
00002f10: SHL
00002f11: SUB
00002f12: DUP4
00002f13: DUP2
00002f14: AND
00002f15: SWAP2
00002f16: AND
00002f17: DUP5
00002f18: PUSH2 0x303f
00002f1b: JUMP
00002f1c: JUMPDEST
00002f1d: POP
00002f1e: JUMPDEST
00002f1f: PUSH1 0x07
00002f21: DUP5
00002f22: ADD
00002f23: DUP1
00002f24: SLOAD
00002f25: PUSH1 0xff
00002f27: NOT
00002f28: AND
00002f29: PUSH1 0x03
00002f2b: OR
00002f2c: SWAP1
00002f2d: SSTORE
00002f2e: PUSH1 0x40
00002f30: MLOAD
00002f31: PUSH32 0xf65e543d34c6936603a3741b3eace109133f172d25637c2445b95c1f3288e937
00002f52: SWAP1
00002f53: PUSH2 0x2f63
00002f56: SWAP1
00002f57: DUP9
00002f58: SWAP1
00002f59: DUP6
00002f5a: SWAP1
00002f5b: DUP6
00002f5c: SWAP1
00002f5d: CALLER
00002f5e: SWAP1
00002f5f: PUSH2 0x3f5f
00002f62: JUMP
00002f63: JUMPDEST
00002f64: PUSH1 0x40
00002f66: MLOAD
00002f67: DUP1
00002f68: SWAP2
00002f69: SUB
00002f6a: SWAP1
00002f6b: LOG1
00002f6c: POP
00002f6d: POP
00002f6e: POP
00002f6f: POP
00002f70: POP
00002f71: PUSH2 0x23fa
00002f74: PUSH2 0x309e
00002f77: JUMP
00002f78: JUMPDEST
00002f79: PUSH2 0x2f80
00002f7c: PUSH2 0x2fe9
00002f7f: JUMP
00002f80: JUMPDEST
00002f81: PUSH1 0x01
00002f83: PUSH1 0x01
00002f85: PUSH1 0xa0
00002f87: SHL
00002f88: SUB
00002f89: DUP2
00002f8a: AND
00002f8b: PUSH2 0x2faa
00002f8e: JUMPI
00002f8f: PUSH1 0x00
00002f91: PUSH1 0x40
00002f93: MLOAD
00002f94: PUSH4 0x1e4fbdf7
00002f99: PUSH1 0xe0
00002f9b: SHL
00002f9c: DUP2
00002f9d: MSTORE
00002f9e: PUSH1 0x04
00002fa0: ADD
00002fa1: PUSH2 0x08b3
00002fa4: SWAP2
00002fa5: SWAP1
00002fa6: PUSH2 0x3cef
00002fa9: JUMP
00002faa: JUMPDEST
00002fab: PUSH2 0x23fa
00002fae: DUP2
00002faf: PUSH2 0x330e
00002fb2: JUMP
00002fb3: JUMPDEST
00002fb4: PUSH1 0x00
00002fb6: PUSH2 0x2fbd
00002fb9: PUSH2 0x37ab
00002fbc: JUMP
00002fbd: JUMPDEST
00002fbe: DUP1
00002fbf: SLOAD
00002fc0: SWAP1
00002fc1: SWAP2
00002fc2: POP
00002fc3: PUSH1 0x01
00002fc5: NOT
00002fc6: ADD
00002fc7: PUSH2 0x2fe3
00002fca: JUMPI
00002fcb: PUSH1 0x40
00002fcd: MLOAD
00002fce: PUSH4 0x3ee5aeb5
00002fd3: PUSH1 0xe0
00002fd5: SHL
00002fd6: DUP2
00002fd7: MSTORE
00002fd8: PUSH1 0x04
00002fda: ADD
00002fdb: PUSH1 0x40
00002fdd: MLOAD
00002fde: DUP1
00002fdf: SWAP2
00002fe0: SUB
00002fe1: SWAP1
00002fe2: REVERT
00002fe3: JUMPDEST
00002fe4: PUSH1 0x02
00002fe6: SWAP1
00002fe7: SSTORE
00002fe8: JUMP
00002fe9: JUMPDEST
00002fea: CALLER
00002feb: PUSH2 0x2ff2
00002fee: PUSH2 0x1b93
00002ff1: JUMP
00002ff2: JUMPDEST
00002ff3: PUSH1 0x01
00002ff5: PUSH1 0x01
00002ff7: PUSH1 0xa0
00002ff9: SHL
00002ffa: SUB
00002ffb: AND
00002ffc: EQ
00002ffd: PUSH2 0x129b
00003000: JUMPI
00003001: CALLER
00003002: PUSH1 0x40
00003004: MLOAD
00003005: PUSH4 0x118cdaa7
0000300a: PUSH1 0xe0
0000300c: SHL
0000300d: DUP2
0000300e: MSTORE
0000300f: PUSH1 0x04
00003011: ADD
00003012: PUSH2 0x08b3
00003015: SWAP2
00003016: SWAP1
00003017: PUSH2 0x3cef
0000301a: JUMP
0000301b: JUMPDEST
0000301c: PUSH32 0x02c326031f2f3dedd13e7fde59c7c20af05a8826f4c07e8d42538c5f2be06800
0000303d: SWAP1
0000303e: JUMP
0000303f: JUMPDEST
00003040: PUSH1 0x40
00003042: MLOAD
00003043: PUSH1 0x01
00003045: PUSH1 0x01
00003047: PUSH1 0xa0
00003049: SHL
0000304a: SUB
0000304b: DUP4
0000304c: DUP2
0000304d: AND
0000304e: PUSH1 0x24
00003050: DUP4
00003051: ADD
00003052: MSTORE
00003053: PUSH1 0x44
00003055: DUP3
00003056: ADD
00003057: DUP4
00003058: SWAP1
00003059: MSTORE
0000305a: PUSH2 0x0830
0000305d: SWAP2
0000305e: DUP6
0000305f: SWAP2
00003060: DUP3
00003061: AND
00003062: SWAP1
00003063: PUSH4 0xa9059cbb
00003068: SWAP1
00003069: PUSH1 0x64
0000306b: ADD
0000306c: JUMPDEST
0000306d: PUSH1 0x40
0000306f: MLOAD
00003070: PUSH1 0x20
00003072: DUP2
00003073: DUP4
00003074: SUB
00003075: SUB
00003076: DUP2
00003077: MSTORE
00003078: SWAP1
00003079: PUSH1 0x40
0000307b: MSTORE
0000307c: SWAP2
0000307d: POP
0000307e: PUSH1 0xe0
00003080: SHL
00003081: PUSH1 0x20
00003083: DUP3
00003084: ADD
00003085: DUP1
00003086: MLOAD
00003087: PUSH1 0x01
00003089: PUSH1 0x01
0000308b: PUSH1 0xe0
0000308d: SHL
0000308e: SUB
0000308f: DUP4
00003090: DUP2
00003091: DUP4
00003092: AND
00003093: OR
00003094: DUP4
00003095: MSTORE
00003096: POP
00003097: POP
00003098: POP
00003099: POP
0000309a: PUSH2 0x37cf
0000309d: JUMP
0000309e: JUMPDEST
0000309f: PUSH1 0x00
000030a1: PUSH2 0x30a8
000030a4: PUSH2 0x37ab
000030a7: JUMP
000030a8: JUMPDEST
000030a9: PUSH1 0x01
000030ab: SWAP1
000030ac: SSTORE
000030ad: POP
000030ae: JUMP
000030af: JUMPDEST
000030b0: PUSH1 0x00
000030b2: DUP1
000030b3: PUSH2 0x30ba
000030b6: PUSH2 0x301b
000030b9: JUMP
000030ba: JUMPDEST
000030bb: PUSH1 0x00
000030bd: DUP6
000030be: DUP2
000030bf: MSTORE
000030c0: PUSH1 0x02
000030c2: DUP3
000030c3: ADD
000030c4: PUSH1 0x20
000030c6: SWAP1
000030c7: DUP2
000030c8: MSTORE
000030c9: PUSH1 0x40
000030cb: DUP1
000030cc: DUP4
000030cd: KECCAK256
000030ce: PUSH1 0x01
000030d0: DUP1
000030d1: DUP3
000030d2: ADD
000030d3: SLOAD
000030d4: DUP6
000030d5: MSTORE
000030d6: DUP1
000030d7: DUP7
000030d8: ADD
000030d9: SWAP1
000030da: SWAP4
000030db: MSTORE
000030dc: SWAP3
000030dd: KECCAK256
000030de: PUSH1 0x07
000030e0: DUP4
000030e1: ADD
000030e2: SLOAD
000030e3: SWAP4
000030e4: SWAP5
000030e5: POP
000030e6: SWAP2
000030e7: SWAP3
000030e8: PUSH1 0xff
000030ea: AND
000030eb: EQ
000030ec: PUSH2 0x3107
000030ef: JUMPI
000030f0: PUSH1 0x40
000030f2: MLOAD
000030f3: PUSH3 0x461bcd
000030f7: PUSH1 0xe5
000030f9: SHL
000030fa: DUP2
000030fb: MSTORE
000030fc: PUSH1 0x04
000030fe: ADD
000030ff: PUSH2 0x08b3
00003102: SWAP1
00003103: PUSH2 0x4137
00003106: JUMP
00003107: JUMPDEST
00003108: PUSH1 0x01
0000310a: DUP2
0000310b: DUP2
0000310c: ADD
0000310d: SLOAD
0000310e: PUSH1 0x01
00003110: PUSH1 0x98
00003112: SHL
00003113: SWAP1
00003114: DIV
00003115: PUSH1 0xff
00003117: AND
00003118: EQ
00003119: PUSH2 0x3134
0000311c: JUMPI
0000311d: PUSH1 0x40
0000311f: MLOAD
00003120: PUSH3 0x461bcd
00003124: PUSH1 0xe5
00003126: SHL
00003127: DUP2
00003128: MSTORE
00003129: PUSH1 0x04
0000312b: ADD
0000312c: PUSH2 0x08b3
0000312f: SWAP1
00003130: PUSH2 0x4165
00003133: JUMP
00003134: JUMPDEST
00003135: PUSH1 0x00
00003137: DUP6
00003138: GT
00003139: PUSH2 0x3154
0000313c: JUMPI
0000313d: PUSH1 0x40
0000313f: MLOAD
00003140: PUSH3 0x461bcd
00003144: PUSH1 0xe5
00003146: SHL
00003147: DUP2
00003148: MSTORE
00003149: PUSH1 0x04
0000314b: ADD
0000314c: PUSH2 0x08b3
0000314f: SWAP1
00003150: PUSH2 0x4193
00003153: JUMP
00003154: JUMPDEST
00003155: DUP5
00003156: DUP3
00003157: PUSH1 0x06
00003159: ADD
0000315a: SLOAD
0000315b: DUP4
0000315c: PUSH1 0x03
0000315e: ADD
0000315f: SLOAD
00003160: PUSH2 0x3169
00003163: SWAP2
00003164: SWAP1
00003165: PUSH2 0x3f1f
00003168: JUMP
00003169: JUMPDEST
0000316a: LT
0000316b: ISZERO
0000316c: PUSH2 0x3187
0000316f: JUMPI
00003170: PUSH1 0x40
00003172: MLOAD
00003173: PUSH3 0x461bcd
00003177: PUSH1 0xe5
00003179: SHL
0000317a: DUP2
0000317b: MSTORE
0000317c: PUSH1 0x04
0000317e: ADD
0000317f: PUSH2 0x08b3
00003182: SWAP1
00003183: PUSH2 0x41bb
00003186: JUMP
00003187: JUMPDEST
00003188: DUP2
00003189: PUSH1 0x08
0000318b: ADD
0000318c: SLOAD
0000318d: DUP3
0000318e: PUSH1 0x06
00003190: ADD
00003191: SLOAD
00003192: DUP4
00003193: PUSH1 0x03
00003195: ADD
00003196: SLOAD
00003197: PUSH2 0x31a0
0000319a: SWAP2
0000319b: SWAP1
0000319c: PUSH2 0x3f1f
0000319f: JUMP
000031a0: JUMPDEST
000031a1: GT
000031a2: ISZERO
000031a3: PUSH2 0x320e
000031a6: JUMPI
000031a7: DUP2
000031a8: PUSH1 0x08
000031aa: ADD
000031ab: SLOAD
000031ac: DUP6
000031ad: LT
000031ae: ISZERO
000031af: PUSH2 0x3209
000031b2: JUMPI
000031b3: PUSH1 0x40
000031b5: MLOAD
000031b6: PUSH3 0x461bcd
000031ba: PUSH1 0xe5
000031bc: SHL
000031bd: DUP2
000031be: MSTORE
000031bf: PUSH1 0x20
000031c1: PUSH1 0x04
000031c3: DUP3
000031c4: ADD
000031c5: MSTORE
000031c6: PUSH1 0x38
000031c8: PUSH1 0x24
000031ca: DUP3
000031cb: ADD
000031cc: MSTORE
000031cd: PUSH1 0x00
000031cf: DUP1
000031d0: MLOAD
000031d1: PUSH1 0x20
000031d3: PUSH2 0x43b8
000031d6: DUP4
000031d7: CODECOPY
000031d8: DUP2
000031d9: MLOAD
000031da: SWAP2
000031db: MSTORE
000031dc: PUSH1 0x44
000031de: DUP3
000031df: ADD
000031e0: MSTORE
000031e1: PUSH24 0x1b5bdd5b9d081bdc88185cdcd95d081b5a5b985b5bdd5b9d
000031fa: PUSH1 0x42
000031fc: SHL
000031fd: PUSH1 0x64
000031ff: DUP3
00003200: ADD
00003201: MSTORE
00003202: PUSH1 0x84
00003204: ADD
00003205: PUSH2 0x08b3
00003208: JUMP
00003209: JUMPDEST
0000320a: PUSH2 0x3240
0000320d: JUMP
0000320e: JUMPDEST
0000320f: DUP2
00003210: PUSH1 0x06
00003212: ADD
00003213: SLOAD
00003214: DUP3
00003215: PUSH1 0x03
00003217: ADD
00003218: SLOAD
00003219: PUSH2 0x3222
0000321c: SWAP2
0000321d: SWAP1
0000321e: PUSH2 0x3f1f
00003221: JUMP
00003222: JUMPDEST
00003223: DUP6
00003224: EQ
00003225: PUSH2 0x3240
00003228: JUMPI
00003229: PUSH1 0x40
0000322b: MLOAD
0000322c: PUSH3 0x461bcd
00003230: PUSH1 0xe5
00003232: SHL
00003233: DUP2
00003234: MSTORE
00003235: PUSH1 0x04
00003237: ADD
00003238: PUSH2 0x08b3
0000323b: SWAP1
0000323c: PUSH2 0x41ed
0000323f: JUMP
00003240: JUMPDEST
00003241: PUSH1 0x02
00003243: DUP3
00003244: ADD
00003245: SLOAD
00003246: PUSH1 0x01
00003248: PUSH1 0x01
0000324a: PUSH1 0xa0
0000324c: SHL
0000324d: SUB
0000324e: AND
0000324f: ISZERO
00003250: PUSH2 0x326b
00003253: JUMPI
00003254: PUSH1 0x40
00003256: MLOAD
00003257: PUSH3 0x461bcd
0000325b: PUSH1 0xe5
0000325d: SHL
0000325e: DUP2
0000325f: MSTORE
00003260: PUSH1 0x04
00003262: ADD
00003263: PUSH2 0x08b3
00003266: SWAP1
00003267: PUSH2 0x4242
0000326a: JUMP
0000326b: JUMPDEST
0000326c: DUP2
0000326d: SLOAD
0000326e: PUSH1 0x00
00003270: SWAP1
00003271: DUP2
00003272: SWAP1
00003273: PUSH1 0xff
00003275: AND
00003276: PUSH1 0x00
00003278: NOT
00003279: ADD
0000327a: PUSH2 0x32bc
0000327d: JUMPI
0000327e: DUP4
0000327f: PUSH1 0x03
00003281: ADD
00003282: SLOAD
00003283: DUP8
00003284: DUP6
00003285: PUSH1 0x05
00003287: ADD
00003288: SLOAD
00003289: PUSH2 0x3292
0000328c: SWAP2
0000328d: SWAP1
0000328e: PUSH2 0x3ed3
00003291: JUMP
00003292: JUMPDEST
00003293: PUSH2 0x329c
00003296: SWAP2
00003297: SWAP1
00003298: PUSH2 0x3eea
0000329b: JUMP
0000329c: JUMPDEST
0000329d: PUSH1 0x07
0000329f: DUP6
000032a0: ADD
000032a1: SLOAD
000032a2: SWAP1
000032a3: SWAP7
000032a4: POP
000032a5: PUSH2 0x0100
000032a8: SWAP1
000032a9: DIV
000032aa: PUSH1 0x01
000032ac: PUSH1 0x01
000032ae: PUSH1 0xa0
000032b0: SHL
000032b1: SUB
000032b2: AND
000032b3: SWAP2
000032b4: POP
000032b5: CALLER
000032b6: SWAP1
000032b7: POP
000032b8: PUSH2 0x32f7
000032bb: JUMP
000032bc: JUMPDEST
000032bd: DUP4
000032be: PUSH1 0x03
000032c0: ADD
000032c1: SLOAD
000032c2: DUP8
000032c3: DUP6
000032c4: PUSH1 0x04
000032c6: ADD
000032c7: SLOAD
000032c8: PUSH2 0x32d1
000032cb: SWAP2
000032cc: SWAP1
000032cd: PUSH2 0x3ed3
000032d0: JUMP
000032d1: JUMPDEST
000032d2: PUSH2 0x32db
000032d5: SWAP2
000032d6: SWAP1
000032d7: PUSH2 0x3eea
000032da: JUMP
000032db: JUMPDEST
000032dc: PUSH1 0x07
000032de: DUP6
000032df: ADD
000032e0: SLOAD
000032e1: SWAP1
000032e2: SWAP7
000032e3: POP
000032e4: CALLER
000032e5: SWAP3
000032e6: POP
000032e7: PUSH2 0x0100
000032ea: SWAP1
000032eb: DIV
000032ec: PUSH1 0x01
000032ee: PUSH1 0x01
000032f0: PUSH1 0xa0
000032f2: SHL
000032f3: SUB
000032f4: AND
000032f5: SWAP1
000032f6: POP
000032f7: JUMPDEST
000032f8: PUSH2 0x3303
000032fb: DUP9
000032fc: DUP9
000032fd: DUP5
000032fe: DUP5
000032ff: PUSH2 0x3584
00003302: JUMP
00003303: JUMPDEST
00003304: POP
00003305: POP
00003306: POP
00003307: POP
00003308: POP
00003309: SWAP3
0000330a: SWAP2
0000330b: POP
0000330c: POP
0000330d: JUMP
0000330e: JUMPDEST
0000330f: PUSH1 0x00
00003311: PUSH2 0x3318
00003314: PUSH2 0x3787
00003317: JUMP
00003318: JUMPDEST
00003319: DUP1
0000331a: SLOAD
0000331b: PUSH1 0x01
0000331d: PUSH1 0x01
0000331f: PUSH1 0xa0
00003321: SHL
00003322: SUB
00003323: DUP5
00003324: DUP2
00003325: AND
00003326: PUSH1 0x01
00003328: PUSH1 0x01
0000332a: PUSH1 0xa0
0000332c: SHL
0000332d: SUB
0000332e: NOT
0000332f: DUP4
00003330: AND
00003331: DUP2
00003332: OR
00003333: DUP5
00003334: SSTORE
00003335: PUSH1 0x40
00003337: MLOAD
00003338: SWAP4
00003339: SWAP5
0000333a: POP
0000333b: SWAP2
0000333c: AND
0000333d: SWAP2
0000333e: DUP3
0000333f: SWAP1
00003340: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
00003361: SWAP1
00003362: PUSH1 0x00
00003364: SWAP1
00003365: LOG3
00003366: POP
00003367: POP
00003368: POP
00003369: JUMP
0000336a: JUMPDEST
0000336b: PUSH1 0x00
0000336d: PUSH2 0x3374
00003370: PUSH2 0x301b
00003373: JUMP
00003374: JUMPDEST
00003375: SWAP1
00003376: POP
00003377: PUSH1 0x40
00003379: MLOAD
0000337a: DUP1
0000337b: PUSH2 0x0140
0000337e: ADD
0000337f: PUSH1 0x40
00003381: MSTORE
00003382: DUP1
00003383: DUP10
00003384: PUSH1 0xff
00003386: AND
00003387: DUP2
00003388: MSTORE
00003389: PUSH1 0x20
0000338b: ADD
0000338c: DUP9
0000338d: DUP2
0000338e: MSTORE
0000338f: PUSH1 0x20
00003391: ADD
00003392: DUP8
00003393: PUSH1 0x01
00003395: PUSH1 0x01
00003397: PUSH1 0xa0
00003399: SHL
0000339a: SUB
0000339b: AND
0000339c: DUP2
0000339d: MSTORE
0000339e: PUSH1 0x20
000033a0: ADD
000033a1: DUP7
000033a2: DUP2
000033a3: MSTORE
000033a4: PUSH1 0x20
000033a6: ADD
000033a7: DUP6
000033a8: DUP2
000033a9: MSTORE
000033aa: PUSH1 0x20
000033ac: ADD
000033ad: DUP5
000033ae: DUP2
000033af: MSTORE
000033b0: PUSH1 0x20
000033b2: ADD
000033b3: PUSH1 0x00
000033b5: DUP2
000033b6: MSTORE
000033b7: PUSH1 0x20
000033b9: ADD
000033ba: PUSH1 0x01
000033bc: PUSH1 0xff
000033be: AND
000033bf: DUP2
000033c0: MSTORE
000033c1: PUSH1 0x20
000033c3: ADD
000033c4: CALLER
000033c5: PUSH1 0x01
000033c7: PUSH1 0x01
000033c9: PUSH1 0xa0
000033cb: SHL
000033cc: SUB
000033cd: AND
000033ce: DUP2
000033cf: MSTORE
000033d0: PUSH1 0x20
000033d2: ADD
000033d3: DUP4
000033d4: DUP2
000033d5: MSTORE
000033d6: POP
000033d7: DUP2
000033d8: PUSH1 0x02
000033da: ADD
000033db: PUSH1 0x00
000033dd: DUP4
000033de: PUSH1 0x03
000033e0: ADD
000033e1: PUSH1 0x00
000033e3: DUP2
000033e4: SLOAD
000033e5: PUSH2 0x33ed
000033e8: SWAP1
000033e9: PUSH2 0x3e0a
000033ec: JUMP
000033ed: JUMPDEST
000033ee: SWAP2
000033ef: DUP3
000033f0: SWAP1
000033f1: SSTORE
000033f2: POP
000033f3: DUP2
000033f4: MSTORE
000033f5: PUSH1 0x20
000033f7: DUP1
000033f8: DUP3
000033f9: ADD
000033fa: SWAP3
000033fb: SWAP1
000033fc: SWAP3
000033fd: MSTORE
000033fe: PUSH1 0x40
00003400: SWAP1
00003401: DUP2
00003402: ADD
00003403: PUSH1 0x00
00003405: KECCAK256
00003406: DUP4
00003407: MLOAD
00003408: DUP2
00003409: SLOAD
0000340a: PUSH1 0xff
0000340c: SWAP2
0000340d: DUP3
0000340e: AND
0000340f: PUSH1 0xff
00003411: NOT
00003412: SWAP1
00003413: SWAP2
00003414: AND
00003415: OR
00003416: DUP3
00003417: SSTORE
00003418: SWAP3
00003419: DUP5
0000341a: ADD
0000341b: MLOAD
0000341c: PUSH1 0x01
0000341e: DUP3
0000341f: ADD
00003420: SSTORE
00003421: DUP4
00003422: DUP3
00003423: ADD
00003424: MLOAD
00003425: PUSH1 0x02
00003427: DUP3
00003428: ADD
00003429: DUP1
0000342a: SLOAD
0000342b: PUSH1 0x01
0000342d: PUSH1 0x01
0000342f: PUSH1 0xa0
00003431: SHL
00003432: SUB
00003433: SWAP3
00003434: DUP4
00003435: AND
00003436: PUSH1 0x01
00003438: PUSH1 0x01
0000343a: PUSH1 0xa0
0000343c: SHL
0000343d: SUB
0000343e: NOT
0000343f: SWAP1
00003440: SWAP2
00003441: AND
00003442: OR
00003443: SWAP1
00003444: SSTORE
00003445: PUSH1 0x60
00003447: DUP6
00003448: ADD
00003449: MLOAD
0000344a: PUSH1 0x03
0000344c: DUP1
0000344d: DUP5
0000344e: ADD
0000344f: SWAP2
00003450: SWAP1
00003451: SWAP2
00003452: SSTORE
00003453: PUSH1 0x80
00003455: DUP7
00003456: ADD
00003457: MLOAD
00003458: PUSH1 0x04
0000345a: DUP5
0000345b: ADD
0000345c: SSTORE
0000345d: PUSH1 0xa0
0000345f: DUP7
00003460: ADD
00003461: MLOAD
00003462: PUSH1 0x05
00003464: DUP5
00003465: ADD
00003466: SSTORE
00003467: PUSH1 0xc0
00003469: DUP7
0000346a: ADD
0000346b: MLOAD
0000346c: PUSH1 0x06
0000346e: DUP5
0000346f: ADD
00003470: SSTORE
00003471: PUSH1 0xe0
00003473: DUP7
00003474: ADD
00003475: MLOAD
00003476: PUSH1 0x07
00003478: DUP5
00003479: ADD
0000347a: DUP1
0000347b: SLOAD
0000347c: PUSH2 0x0100
0000347f: DUP1
00003480: DUP11
00003481: ADD
00003482: MLOAD
00003483: SWAP1
00003484: SWAP6
00003485: AND
00003486: SWAP1
00003487: SWAP5
00003488: MUL
00003489: PUSH1 0x01
0000348b: PUSH1 0x01
0000348d: PUSH1 0xa8
0000348f: SHL
00003490: SUB
00003491: NOT
00003492: SWAP1
00003493: SWAP5
00003494: AND
00003495: SWAP2
00003496: SWAP1
00003497: SWAP7
00003498: AND
00003499: OR
0000349a: SWAP2
0000349b: SWAP1
0000349c: SWAP2
0000349d: OR
0000349e: SWAP1
0000349f: SWAP4
000034a0: SSTORE
000034a1: PUSH2 0x0120
000034a4: SWAP1
000034a5: SWAP4
000034a6: ADD
000034a7: MLOAD
000034a8: PUSH1 0x08
000034aa: SWAP1
000034ab: SWAP4
000034ac: ADD
000034ad: SWAP3
000034ae: SWAP1
000034af: SWAP3
000034b0: SSTORE
000034b1: DUP3
000034b2: ADD
000034b3: SLOAD
000034b4: SWAP1
000034b5: MLOAD
000034b6: PUSH32 0x3c39725ebd87585be65053a2e2e6eb510fec10780b584e490d11c8b2cc9311ea
000034d7: SWAP2
000034d8: PUSH2 0x3539
000034db: SWAP2
000034dc: DUP12
000034dd: SWAP1
000034de: DUP12
000034df: SWAP1
000034e0: DUP12
000034e1: SWAP1
000034e2: DUP12
000034e3: SWAP1
000034e4: DUP12
000034e5: SWAP1
000034e6: DUP12
000034e7: SWAP1
000034e8: DUP12
000034e9: SWAP1
000034ea: CALLER
000034eb: SWAP1
000034ec: SWAP9
000034ed: DUP10
000034ee: MSTORE
000034ef: PUSH1 0xff
000034f1: SWAP8
000034f2: SWAP1
000034f3: SWAP8
000034f4: AND
000034f5: PUSH1 0x20
000034f7: DUP10
000034f8: ADD
000034f9: MSTORE
000034fa: PUSH1 0x40
000034fc: DUP9
000034fd: ADD
000034fe: SWAP6
000034ff: SWAP1
00003500: SWAP6
00003501: MSTORE
00003502: PUSH1 0x01
00003504: PUSH1 0x01
00003506: PUSH1 0xa0
00003508: SHL
00003509: SUB
0000350a: SWAP4
0000350b: DUP5
0000350c: AND
0000350d: PUSH1 0x60
0000350f: DUP9
00003510: ADD
00003511: MSTORE
00003512: PUSH1 0x80
00003514: DUP8
00003515: ADD
00003516: SWAP3
00003517: SWAP1
00003518: SWAP3
00003519: MSTORE
0000351a: PUSH1 0xa0
0000351c: DUP7
0000351d: ADD
0000351e: MSTORE
0000351f: PUSH1 0xc0
00003521: DUP6
00003522: ADD
00003523: MSTORE
00003524: PUSH1 0xe0
00003526: DUP5
00003527: ADD
00003528: SWAP2
00003529: SWAP1
0000352a: SWAP2
0000352b: MSTORE
0000352c: AND
0000352d: PUSH2 0x0100
00003530: DUP3
00003531: ADD
00003532: MSTORE
00003533: PUSH2 0x0120
00003536: ADD
00003537: SWAP1
00003538: JUMP
00003539: JUMPDEST
0000353a: PUSH1 0x40
0000353c: MLOAD
0000353d: DUP1
0000353e: SWAP2
0000353f: SUB
00003540: SWAP1
00003541: LOG1
00003542: POP
00003543: POP
00003544: POP
00003545: POP
00003546: POP
00003547: POP
00003548: POP
00003549: POP
0000354a: JUMP
0000354b: JUMPDEST
0000354c: PUSH1 0x40
0000354e: MLOAD
0000354f: PUSH1 0x01
00003551: PUSH1 0x01
00003553: PUSH1 0xa0
00003555: SHL
00003556: SUB
00003557: DUP5
00003558: DUP2
00003559: AND
0000355a: PUSH1 0x24
0000355c: DUP4
0000355d: ADD
0000355e: MSTORE
0000355f: DUP4
00003560: DUP2
00003561: AND
00003562: PUSH1 0x44
00003564: DUP4
00003565: ADD
00003566: MSTORE
00003567: PUSH1 0x64
00003569: DUP3
0000356a: ADD
0000356b: DUP4
0000356c: SWAP1
0000356d: MSTORE
0000356e: PUSH2 0x10f0
00003571: SWAP2
00003572: DUP7
00003573: SWAP2
00003574: DUP3
00003575: AND
00003576: SWAP1
00003577: PUSH4 0x23b872dd
0000357c: SWAP1
0000357d: PUSH1 0x84
0000357f: ADD
00003580: PUSH2 0x306c
00003583: JUMP
00003584: JUMPDEST
00003585: PUSH1 0x00
00003587: PUSH2 0x358e
0000358a: PUSH2 0x301b
0000358d: JUMP
0000358e: JUMPDEST
0000358f: SWAP1
00003590: POP
00003591: PUSH1 0x00
00003593: DUP2
00003594: PUSH1 0x02
00003596: ADD
00003597: PUSH1 0x00
00003599: DUP8
0000359a: DUP2
0000359b: MSTORE
0000359c: PUSH1 0x20
0000359e: ADD
0000359f: SWAP1
000035a0: DUP2
000035a1: MSTORE
000035a2: PUSH1 0x20
000035a4: ADD
000035a5: PUSH1 0x00
000035a7: KECCAK256
000035a8: SWAP1
000035a9: POP
000035aa: PUSH1 0x40
000035ac: MLOAD
000035ad: DUP1
000035ae: PUSH1 0xa0
000035b0: ADD
000035b1: PUSH1 0x40
000035b3: MSTORE
000035b4: DUP1
000035b5: DUP8
000035b6: DUP2
000035b7: MSTORE
000035b8: PUSH1 0x20
000035ba: ADD
000035bb: DUP7
000035bc: DUP2
000035bd: MSTORE
000035be: PUSH1 0x20
000035c0: ADD
000035c1: DUP5
000035c2: PUSH1 0x01
000035c4: PUSH1 0x01
000035c6: PUSH1 0xa0
000035c8: SHL
000035c9: SUB
000035ca: AND
000035cb: DUP2
000035cc: MSTORE
000035cd: PUSH1 0x20
000035cf: ADD
000035d0: DUP6
000035d1: PUSH1 0x01
000035d3: PUSH1 0x01
000035d5: PUSH1 0xa0
000035d7: SHL
000035d8: SUB
000035d9: AND
000035da: DUP2
000035db: MSTORE
000035dc: PUSH1 0x20
000035de: ADD
000035df: PUSH1 0x01
000035e1: PUSH1 0xff
000035e3: AND
000035e4: DUP2
000035e5: MSTORE
000035e6: POP
000035e7: DUP3
000035e8: PUSH1 0x04
000035ea: ADD
000035eb: PUSH1 0x00
000035ed: DUP5
000035ee: PUSH1 0x05
000035f0: ADD
000035f1: PUSH1 0x00
000035f3: DUP2
000035f4: SLOAD
000035f5: PUSH2 0x35fd
000035f8: SWAP1
000035f9: PUSH2 0x3e0a
000035fc: JUMP
000035fd: JUMPDEST
000035fe: SWAP2
000035ff: DUP3
00003600: SWAP1
00003601: SSTORE
00003602: POP
00003603: DUP2
00003604: MSTORE
00003605: PUSH1 0x20
00003607: DUP1
00003608: DUP3
00003609: ADD
0000360a: SWAP3
0000360b: SWAP1
0000360c: SWAP3
0000360d: MSTORE
0000360e: PUSH1 0x40
00003610: SWAP1
00003611: DUP2
00003612: ADD
00003613: PUSH1 0x00
00003615: SWAP1
00003616: DUP2
00003617: KECCAK256
00003618: DUP5
00003619: MLOAD
0000361a: DUP2
0000361b: SSTORE
0000361c: SWAP3
0000361d: DUP5
0000361e: ADD
0000361f: MLOAD
00003620: PUSH1 0x01
00003622: DUP5
00003623: ADD
00003624: SSTORE
00003625: SWAP1
00003626: DUP4
00003627: ADD
00003628: MLOAD
00003629: PUSH1 0x02
0000362b: DUP4
0000362c: ADD
0000362d: DUP1
0000362e: SLOAD
0000362f: PUSH1 0x01
00003631: PUSH1 0x01
00003633: PUSH1 0xa0
00003635: SHL
00003636: SUB
00003637: SWAP3
00003638: DUP4
00003639: AND
0000363a: PUSH1 0x01
0000363c: PUSH1 0x01
0000363e: PUSH1 0xa0
00003640: SHL
00003641: SUB
00003642: NOT
00003643: SWAP1
00003644: SWAP2
00003645: AND
00003646: OR
00003647: SWAP1
00003648: SSTORE
00003649: PUSH1 0x60
0000364b: DUP5
0000364c: ADD
0000364d: MLOAD
0000364e: PUSH1 0x03
00003650: SWAP1
00003651: SWAP4
00003652: ADD
00003653: DUP1
00003654: SLOAD
00003655: PUSH1 0x80
00003657: SWAP1
00003658: SWAP6
00003659: ADD
0000365a: MLOAD
0000365b: PUSH1 0xff
0000365d: AND
0000365e: PUSH1 0x01
00003660: PUSH1 0xa0
00003662: SHL
00003663: MUL
00003664: PUSH1 0x01
00003666: PUSH1 0x01
00003668: PUSH1 0xa8
0000366a: SHL
0000366b: SUB
0000366c: NOT
0000366d: SWAP1
0000366e: SWAP6
0000366f: AND
00003670: SWAP4
00003671: SWAP1
00003672: SWAP2
00003673: AND
00003674: SWAP3
00003675: SWAP1
00003676: SWAP3
00003677: OR
00003678: SWAP3
00003679: SWAP1
0000367a: SWAP3
0000367b: OR
0000367c: SWAP1
0000367d: SSTORE
0000367e: PUSH1 0x06
00003680: DUP3
00003681: ADD
00003682: DUP1
00003683: SLOAD
00003684: DUP8
00003685: SWAP3
00003686: SWAP1
00003687: PUSH2 0x3691
0000368a: SWAP1
0000368b: DUP5
0000368c: SWAP1
0000368d: PUSH2 0x3f0c
00003690: JUMP
00003691: JUMPDEST
00003692: SWAP1
00003693: SWAP2
00003694: SSTORE
00003695: POP
00003696: POP
00003697: PUSH1 0x03
00003699: DUP2
0000369a: ADD
0000369b: SLOAD
0000369c: PUSH1 0x06
0000369e: DUP3
0000369f: ADD
000036a0: SLOAD
000036a1: SUB
000036a2: PUSH2 0x36ee
000036a5: JUMPI
000036a6: PUSH1 0x07
000036a8: DUP2
000036a9: ADD
000036aa: DUP1
000036ab: SLOAD
000036ac: PUSH1 0xff
000036ae: NOT
000036af: AND
000036b0: PUSH1 0x02
000036b2: OR
000036b3: SWAP1
000036b4: SSTORE
000036b5: PUSH1 0x40
000036b7: DUP1
000036b8: MLOAD
000036b9: DUP8
000036ba: DUP2
000036bb: MSTORE
000036bc: PUSH1 0x00
000036be: PUSH1 0x20
000036c0: DUP3
000036c1: ADD
000036c2: MSTORE
000036c3: PUSH32 0x37a30d6e3fcaec3144b11d51892b9eadbb0ec4d2a8a813d64bb6065c3adfcffa
000036e4: SWAP2
000036e5: ADD
000036e6: PUSH1 0x40
000036e8: MLOAD
000036e9: DUP1
000036ea: SWAP2
000036eb: SUB
000036ec: SWAP1
000036ed: LOG1
000036ee: JUMPDEST
000036ef: PUSH1 0x05
000036f1: DUP3
000036f2: ADD
000036f3: SLOAD
000036f4: PUSH1 0x40
000036f6: DUP1
000036f7: MLOAD
000036f8: SWAP2
000036f9: DUP3
000036fa: MSTORE
000036fb: PUSH1 0x20
000036fd: DUP3
000036fe: ADD
000036ff: DUP9
00003700: SWAP1
00003701: MSTORE
00003702: DUP2
00003703: ADD
00003704: DUP7
00003705: SWAP1
00003706: MSTORE
00003707: PUSH1 0x01
00003709: PUSH1 0x01
0000370b: PUSH1 0xa0
0000370d: SHL
0000370e: SUB
0000370f: DUP1
00003710: DUP6
00003711: AND
00003712: PUSH1 0x60
00003714: DUP4
00003715: ADD
00003716: MSTORE
00003717: DUP6
00003718: AND
00003719: PUSH1 0x80
0000371b: DUP3
0000371c: ADD
0000371d: MSTORE
0000371e: PUSH32 0xdc3effd7f2b46d1989f8b9ec5abba2e3c07eaa9caa9511c8af3c9444ecbb52f2
0000373f: SWAP1
00003740: PUSH1 0xa0
00003742: ADD
00003743: PUSH1 0x40
00003745: MLOAD
00003746: DUP1
00003747: SWAP2
00003748: SUB
00003749: SWAP1
0000374a: LOG1
0000374b: POP
0000374c: POP
0000374d: POP
0000374e: POP
0000374f: POP
00003750: POP
00003751: JUMP
00003752: JUMPDEST
00003753: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
00003774: SWAP1
00003775: JUMP
00003776: JUMPDEST
00003777: PUSH2 0x377e
0000377a: PUSH2 0x3829
0000377d: JUMP
0000377e: JUMPDEST
0000377f: PUSH2 0x23fa
00003782: DUP2
00003783: PUSH2 0x384e
00003786: JUMP
00003787: JUMPDEST
00003788: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300
000037a9: SWAP1
000037aa: JUMP
000037ab: JUMPDEST
000037ac: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00
000037cd: SWAP1
000037ce: JUMP
000037cf: JUMPDEST
000037d0: PUSH1 0x00
000037d2: PUSH2 0x37e4
000037d5: PUSH1 0x01
000037d7: PUSH1 0x01
000037d9: PUSH1 0xa0
000037db: SHL
000037dc: SUB
000037dd: DUP5
000037de: AND
000037df: DUP4
000037e0: PUSH2 0x3856
000037e3: JUMP
000037e4: JUMPDEST
000037e5: SWAP1
000037e6: POP
000037e7: DUP1
000037e8: MLOAD
000037e9: PUSH1 0x00
000037eb: EQ
000037ec: ISZERO
000037ed: DUP1
000037ee: ISZERO
000037ef: PUSH2 0x3809
000037f2: JUMPI
000037f3: POP
000037f4: DUP1
000037f5: DUP1
000037f6: PUSH1 0x20
000037f8: ADD
000037f9: SWAP1
000037fa: MLOAD
000037fb: DUP2
000037fc: ADD
000037fd: SWAP1
000037fe: PUSH2 0x3807
00003801: SWAP2
00003802: SWAP1
00003803: PUSH2 0x436b
00003806: JUMP
00003807: JUMPDEST
00003808: ISZERO
00003809: JUMPDEST
0000380a: ISZERO
0000380b: PUSH2 0x0830
0000380e: JUMPI
0000380f: DUP3
00003810: PUSH1 0x40
00003812: MLOAD
00003813: PUSH4 0x5274afe7
00003818: PUSH1 0xe0
0000381a: SHL
0000381b: DUP2
0000381c: MSTORE
0000381d: PUSH1 0x04
0000381f: ADD
00003820: PUSH2 0x08b3
00003823: SWAP2
00003824: SWAP1
00003825: PUSH2 0x3cef
00003828: JUMP
00003829: JUMPDEST
0000382a: PUSH2 0x3831
0000382d: PUSH2 0x386d
00003830: JUMP
00003831: JUMPDEST
00003832: PUSH2 0x129b
00003835: JUMPI
00003836: PUSH1 0x40
00003838: MLOAD
00003839: PUSH4 0x1afcd79f
0000383e: PUSH1 0xe3
00003840: SHL
00003841: DUP2
00003842: MSTORE
00003843: PUSH1 0x04
00003845: ADD
00003846: PUSH1 0x40
00003848: MLOAD
00003849: DUP1
0000384a: SWAP2
0000384b: SUB
0000384c: SWAP1
0000384d: REVERT
0000384e: JUMPDEST
0000384f: PUSH2 0x2f80
00003852: PUSH2 0x3829
00003855: JUMP
00003856: JUMPDEST
00003857: PUSH1 0x60
00003859: PUSH2 0x3864
0000385c: DUP4
0000385d: DUP4
0000385e: PUSH1 0x00
00003860: PUSH2 0x3887
00003863: JUMP
00003864: JUMPDEST
00003865: SWAP1
00003866: POP
00003867: JUMPDEST
00003868: SWAP3
00003869: SWAP2
0000386a: POP
0000386b: POP
0000386c: JUMP
0000386d: JUMPDEST
0000386e: PUSH1 0x00
00003870: PUSH2 0x3877
00003873: PUSH2 0x3752
00003876: JUMP
00003877: JUMPDEST
00003878: SLOAD
00003879: PUSH1 0x01
0000387b: PUSH1 0x40
0000387d: SHL
0000387e: SWAP1
0000387f: DIV
00003880: PUSH1 0xff
00003882: AND
00003883: SWAP2
00003884: SWAP1
00003885: POP
00003886: JUMP
00003887: JUMPDEST
00003888: PUSH1 0x60
0000388a: DUP2
0000388b: SELFBALANCE
0000388c: LT
0000388d: ISZERO
0000388e: PUSH2 0x38ac
00003891: JUMPI
00003892: ADDRESS
00003893: PUSH1 0x40
00003895: MLOAD
00003896: PUSH4 0xcd786059
0000389b: PUSH1 0xe0
0000389d: SHL
0000389e: DUP2
0000389f: MSTORE
000038a0: PUSH1 0x04
000038a2: ADD
000038a3: PUSH2 0x08b3
000038a6: SWAP2
000038a7: SWAP1
000038a8: PUSH2 0x3cef
000038ab: JUMP
000038ac: JUMPDEST
000038ad: PUSH1 0x00
000038af: DUP1
000038b0: DUP6
000038b1: PUSH1 0x01
000038b3: PUSH1 0x01
000038b5: PUSH1 0xa0
000038b7: SHL
000038b8: SUB
000038b9: AND
000038ba: DUP5
000038bb: DUP7
000038bc: PUSH1 0x40
000038be: MLOAD
000038bf: PUSH2 0x38c8
000038c2: SWAP2
000038c3: SWAP1
000038c4: PUSH2 0x4388
000038c7: JUMP
000038c8: JUMPDEST
000038c9: PUSH1 0x00
000038cb: PUSH1 0x40
000038cd: MLOAD
000038ce: DUP1
000038cf: DUP4
000038d0: SUB
000038d1: DUP2
000038d2: DUP6
000038d3: DUP8
000038d4: GAS
000038d5: CALL
000038d6: SWAP3
000038d7: POP
000038d8: POP
000038d9: POP
000038da: RETURNDATASIZE
000038db: DUP1
000038dc: PUSH1 0x00
000038de: DUP2
000038df: EQ
000038e0: PUSH2 0x3905
000038e3: JUMPI
000038e4: PUSH1 0x40
000038e6: MLOAD
000038e7: SWAP2
000038e8: POP
000038e9: PUSH1 0x1f
000038eb: NOT
000038ec: PUSH1 0x3f
000038ee: RETURNDATASIZE
000038ef: ADD
000038f0: AND
000038f1: DUP3
000038f2: ADD
000038f3: PUSH1 0x40
000038f5: MSTORE
000038f6: RETURNDATASIZE
000038f7: DUP3
000038f8: MSTORE
000038f9: RETURNDATASIZE
000038fa: PUSH1 0x00
000038fc: PUSH1 0x20
000038fe: DUP5
000038ff: ADD
00003900: RETURNDATACOPY
00003901: PUSH2 0x390a
00003904: JUMP
00003905: JUMPDEST
00003906: PUSH1 0x60
00003908: SWAP2
00003909: POP
0000390a: JUMPDEST
0000390b: POP
0000390c: SWAP2
0000390d: POP
0000390e: SWAP2
0000390f: POP
00003910: PUSH2 0x391a
00003913: DUP7
00003914: DUP4
00003915: DUP4
00003916: PUSH2 0x3924
00003919: JUMP
0000391a: JUMPDEST
0000391b: SWAP7
0000391c: SWAP6
0000391d: POP
0000391e: POP
0000391f: POP
00003920: POP
00003921: POP
00003922: POP
00003923: JUMP
00003924: JUMPDEST
00003925: PUSH1 0x60
00003927: DUP3
00003928: PUSH2 0x3939
0000392b: JUMPI
0000392c: PUSH2 0x3934
0000392f: DUP3
00003930: PUSH2 0x3977
00003933: JUMP
00003934: JUMPDEST
00003935: PUSH2 0x1da6
00003938: JUMP
00003939: JUMPDEST
0000393a: DUP2
0000393b: MLOAD
0000393c: ISZERO
0000393d: DUP1
0000393e: ISZERO
0000393f: PUSH2 0x3950
00003942: JUMPI
00003943: POP
00003944: PUSH1 0x01
00003946: PUSH1 0x01
00003948: PUSH1 0xa0
0000394a: SHL
0000394b: SUB
0000394c: DUP5
0000394d: AND
0000394e: EXTCODESIZE
0000394f: ISZERO
00003950: JUMPDEST
00003951: ISZERO
00003952: PUSH2 0x3970
00003955: JUMPI
00003956: DUP4
00003957: PUSH1 0x40
00003959: MLOAD
0000395a: PUSH4 0x9996b315
0000395f: PUSH1 0xe0
00003961: SHL
00003962: DUP2
00003963: MSTORE
00003964: PUSH1 0x04
00003966: ADD
00003967: PUSH2 0x08b3
0000396a: SWAP2
0000396b: SWAP1
0000396c: PUSH2 0x3cef
0000396f: JUMP
00003970: JUMPDEST
00003971: POP
00003972: DUP1
00003973: PUSH2 0x1da6
00003976: JUMP
00003977: JUMPDEST
00003978: DUP1
00003979: MLOAD
0000397a: ISZERO
0000397b: PUSH2 0x3987
0000397e: JUMPI
0000397f: DUP1
00003980: MLOAD
00003981: DUP1
00003982: DUP3
00003983: PUSH1 0x20
00003985: ADD
00003986: REVERT
00003987: JUMPDEST
00003988: PUSH1 0x40
0000398a: MLOAD
0000398b: PUSH4 0x0a12f521
00003990: PUSH1 0xe1
00003992: SHL
00003993: DUP2
00003994: MSTORE
00003995: PUSH1 0x04
00003997: ADD
00003998: PUSH1 0x40
0000399a: MLOAD
0000399b: DUP1
0000399c: SWAP2
0000399d: SUB
0000399e: SWAP1
0000399f: REVERT
000039a0: JUMPDEST
000039a1: PUSH1 0x00
000039a3: DUP1
000039a4: DUP4
000039a5: PUSH1 0x1f
000039a7: DUP5
000039a8: ADD
000039a9: SLT
000039aa: PUSH2 0x39b2
000039ad: JUMPI
000039ae: PUSH1 0x00
000039b0: DUP1
000039b1: REVERT
000039b2: JUMPDEST
000039b3: POP
000039b4: DUP2
000039b5: CALLDATALOAD
000039b6: PUSH1 0x01
000039b8: PUSH1 0x01
000039ba: PUSH1 0x40
000039bc: SHL
000039bd: SUB
000039be: DUP2
000039bf: GT
000039c0: ISZERO
000039c1: PUSH2 0x39c9
000039c4: JUMPI
000039c5: PUSH1 0x00
000039c7: DUP1
000039c8: REVERT
000039c9: JUMPDEST
000039ca: PUSH1 0x20
000039cc: DUP4
000039cd: ADD
000039ce: SWAP2
000039cf: POP
000039d0: DUP4
000039d1: PUSH1 0x20
000039d3: DUP3
000039d4: PUSH1 0x05
000039d6: SHL
000039d7: DUP6
000039d8: ADD
000039d9: ADD
000039da: GT
000039db: ISZERO
000039dc: PUSH2 0x39e4
000039df: JUMPI
000039e0: PUSH1 0x00
000039e2: DUP1
000039e3: REVERT
000039e4: JUMPDEST
000039e5: SWAP3
000039e6: POP
000039e7: SWAP3
000039e8: SWAP1
000039e9: POP
000039ea: JUMP
000039eb: JUMPDEST
000039ec: PUSH1 0x00
000039ee: DUP1
000039ef: PUSH1 0x20
000039f1: DUP4
000039f2: DUP6
000039f3: SUB
000039f4: SLT
000039f5: ISZERO
000039f6: PUSH2 0x39fe
000039f9: JUMPI
000039fa: PUSH1 0x00
000039fc: DUP1
000039fd: REVERT
000039fe: JUMPDEST
000039ff: DUP3
00003a00: CALLDATALOAD
00003a01: PUSH1 0x01
00003a03: PUSH1 0x01
00003a05: PUSH1 0x40
00003a07: SHL
00003a08: SUB
00003a09: DUP2
00003a0a: GT
00003a0b: ISZERO
00003a0c: PUSH2 0x3a14
00003a0f: JUMPI
00003a10: PUSH1 0x00
00003a12: DUP1
00003a13: REVERT
00003a14: JUMPDEST
00003a15: PUSH2 0x3a20
00003a18: DUP6
00003a19: DUP3
00003a1a: DUP7
00003a1b: ADD
00003a1c: PUSH2 0x39a0
00003a1f: JUMP
00003a20: JUMPDEST
00003a21: SWAP1
00003a22: SWAP7
00003a23: SWAP1
00003a24: SWAP6
00003a25: POP
00003a26: SWAP4
00003a27: POP
00003a28: POP
00003a29: POP
00003a2a: POP
00003a2b: JUMP
00003a2c: JUMPDEST
00003a2d: PUSH1 0x00
00003a2f: DUP1
00003a30: PUSH1 0x40
00003a32: DUP4
00003a33: DUP6
00003a34: SUB
00003a35: SLT
00003a36: ISZERO
00003a37: PUSH2 0x3a3f
00003a3a: JUMPI
00003a3b: PUSH1 0x00
00003a3d: DUP1
00003a3e: REVERT
00003a3f: JUMPDEST
00003a40: POP
00003a41: POP
00003a42: DUP1
00003a43: CALLDATALOAD
00003a44: SWAP3
00003a45: PUSH1 0x20
00003a47: SWAP1
00003a48: SWAP2
00003a49: ADD
00003a4a: CALLDATALOAD
00003a4b: SWAP2
00003a4c: POP
00003a4d: JUMP
00003a4e: JUMPDEST
00003a4f: PUSH1 0x00
00003a51: PUSH1 0x20
00003a53: DUP3
00003a54: DUP5
00003a55: SUB
00003a56: SLT
00003a57: ISZERO
00003a58: PUSH2 0x3a60
00003a5b: JUMPI
00003a5c: PUSH1 0x00
00003a5e: DUP1
00003a5f: REVERT
00003a60: JUMPDEST
00003a61: POP
00003a62: CALLDATALOAD
00003a63: SWAP2
00003a64: SWAP1
00003a65: POP
00003a66: JUMP
00003a67: JUMPDEST
00003a68: DUP1
00003a69: CALLDATALOAD
00003a6a: PUSH1 0x01
00003a6c: PUSH1 0x01
00003a6e: PUSH1 0xa0
00003a70: SHL
00003a71: SUB
00003a72: DUP2
00003a73: AND
00003a74: DUP2
00003a75: EQ
00003a76: PUSH2 0x3a7e
00003a79: JUMPI
00003a7a: PUSH1 0x00
00003a7c: DUP1
00003a7d: REVERT
00003a7e: JUMPDEST
00003a7f: SWAP2
00003a80: SWAP1
00003a81: POP
00003a82: JUMP
00003a83: JUMPDEST
00003a84: PUSH1 0x00
00003a86: DUP1
00003a87: PUSH1 0x00
00003a89: DUP1
00003a8a: PUSH1 0x80
00003a8c: DUP6
00003a8d: DUP8
00003a8e: SUB
00003a8f: SLT
00003a90: ISZERO
00003a91: PUSH2 0x3a99
00003a94: JUMPI
00003a95: PUSH1 0x00
00003a97: DUP1
00003a98: REVERT
00003a99: JUMPDEST
00003a9a: PUSH2 0x3aa2
00003a9d: DUP6
00003a9e: PUSH2 0x3a67
00003aa1: JUMP
00003aa2: JUMPDEST
00003aa3: SWAP7
00003aa4: PUSH1 0x20
00003aa6: DUP7
00003aa7: ADD
00003aa8: CALLDATALOAD
00003aa9: SWAP7
00003aaa: POP
00003aab: PUSH1 0x40
00003aad: DUP7
00003aae: ADD
00003aaf: CALLDATALOAD
00003ab0: SWAP6
00003ab1: PUSH1 0x60
00003ab3: ADD
00003ab4: CALLDATALOAD
00003ab5: SWAP5
00003ab6: POP
00003ab7: SWAP3
00003ab8: POP
00003ab9: POP
00003aba: POP
00003abb: JUMP
00003abc: JUMPDEST
00003abd: DUP1
00003abe: CALLDATALOAD
00003abf: PUSH6 0xffffffffffff
00003ac6: DUP2
00003ac7: AND
00003ac8: DUP2
00003ac9: EQ
00003aca: PUSH2 0x3a7e
00003acd: JUMPI
00003ace: PUSH1 0x00
00003ad0: DUP1
00003ad1: REVERT
00003ad2: JUMPDEST
00003ad3: PUSH1 0x00
00003ad5: DUP1
00003ad6: PUSH1 0x40
00003ad8: DUP4
00003ad9: DUP6
00003ada: SUB
00003adb: SLT
00003adc: ISZERO
00003add: PUSH2 0x3ae5
00003ae0: JUMPI
00003ae1: PUSH1 0x00
00003ae3: DUP1
00003ae4: REVERT
00003ae5: JUMPDEST
00003ae6: DUP3
00003ae7: CALLDATALOAD
00003ae8: SWAP2
00003ae9: POP
00003aea: PUSH2 0x3af5
00003aed: PUSH1 0x20
00003aef: DUP5
00003af0: ADD
00003af1: PUSH2 0x3abc
00003af4: JUMP
00003af5: JUMPDEST
00003af6: SWAP1
00003af7: POP
00003af8: SWAP3
00003af9: POP
00003afa: SWAP3
00003afb: SWAP1
00003afc: POP
00003afd: JUMP
00003afe: JUMPDEST
00003aff: PUSH1 0x00
00003b01: DUP1
00003b02: PUSH1 0x00
00003b04: DUP1
00003b05: PUSH1 0x40
00003b07: DUP6
00003b08: DUP8
00003b09: SUB
00003b0a: SLT
00003b0b: ISZERO
00003b0c: PUSH2 0x3b14
00003b0f: JUMPI
00003b10: PUSH1 0x00
00003b12: DUP1
00003b13: REVERT
00003b14: JUMPDEST
00003b15: DUP5
00003b16: CALLDATALOAD
00003b17: PUSH1 0x01
00003b19: PUSH1 0x01
00003b1b: PUSH1 0x40
00003b1d: SHL
00003b1e: SUB
00003b1f: DUP1
00003b20: DUP3
00003b21: GT
00003b22: ISZERO
00003b23: PUSH2 0x3b2b
00003b26: JUMPI
00003b27: PUSH1 0x00
00003b29: DUP1
00003b2a: REVERT
00003b2b: JUMPDEST
00003b2c: PUSH2 0x3b37
00003b2f: DUP9
00003b30: DUP4
00003b31: DUP10
00003b32: ADD
00003b33: PUSH2 0x39a0
00003b36: JUMP
00003b37: JUMPDEST
00003b38: SWAP1
00003b39: SWAP7
00003b3a: POP
00003b3b: SWAP5
00003b3c: POP
00003b3d: PUSH1 0x20
00003b3f: DUP8
00003b40: ADD
00003b41: CALLDATALOAD
00003b42: SWAP2
00003b43: POP
00003b44: DUP1
00003b45: DUP3
00003b46: GT
00003b47: ISZERO
00003b48: PUSH2 0x3b50
00003b4b: JUMPI
00003b4c: PUSH1 0x00
00003b4e: DUP1
00003b4f: REVERT
00003b50: JUMPDEST
00003b51: POP
00003b52: PUSH2 0x3b5d
00003b55: DUP8
00003b56: DUP3
00003b57: DUP9
00003b58: ADD
00003b59: PUSH2 0x39a0
00003b5c: JUMP
00003b5d: JUMPDEST
00003b5e: SWAP6
00003b5f: SWAP9
00003b60: SWAP5
00003b61: SWAP8
00003b62: POP
00003b63: SWAP6
00003b64: POP
00003b65: POP
00003b66: POP
00003b67: POP
00003b68: JUMP
00003b69: JUMPDEST
00003b6a: PUSH1 0x00
00003b6c: PUSH1 0x20
00003b6e: DUP3
00003b6f: DUP5
00003b70: SUB
00003b71: SLT
00003b72: ISZERO
00003b73: PUSH2 0x3b7b
00003b76: JUMPI
00003b77: PUSH1 0x00
00003b79: DUP1
00003b7a: REVERT
00003b7b: JUMPDEST
00003b7c: PUSH2 0x3864
00003b7f: DUP3
00003b80: PUSH2 0x3a67
00003b83: JUMP
00003b84: JUMPDEST
00003b85: PUSH1 0x00
00003b87: DUP1
00003b88: PUSH1 0x00
00003b8a: PUSH1 0x60
00003b8c: DUP5
00003b8d: DUP7
00003b8e: SUB
00003b8f: SLT
00003b90: ISZERO
00003b91: PUSH2 0x3b99
00003b94: JUMPI
00003b95: PUSH1 0x00
00003b97: DUP1
00003b98: REVERT
00003b99: JUMPDEST
00003b9a: DUP4
00003b9b: CALLDATALOAD
00003b9c: SWAP3
00003b9d: POP
00003b9e: PUSH2 0x3ba9
00003ba1: PUSH1 0x20
00003ba3: DUP6
00003ba4: ADD
00003ba5: PUSH2 0x3abc
00003ba8: JUMP
00003ba9: JUMPDEST
00003baa: SWAP2
00003bab: POP
00003bac: PUSH1 0x40
00003bae: DUP5
00003baf: ADD
00003bb0: CALLDATALOAD
00003bb1: SWAP1
00003bb2: POP
00003bb3: SWAP3
00003bb4: POP
00003bb5: SWAP3
00003bb6: POP
00003bb7: SWAP3
00003bb8: JUMP
00003bb9: JUMPDEST
00003bba: DUP1
00003bbb: CALLDATALOAD
00003bbc: PUSH1 0xff
00003bbe: DUP2
00003bbf: AND
00003bc0: DUP2
00003bc1: EQ
00003bc2: PUSH2 0x3a7e
00003bc5: JUMPI
00003bc6: PUSH1 0x00
00003bc8: DUP1
00003bc9: REVERT
00003bca: JUMPDEST
00003bcb: PUSH1 0x00
00003bcd: DUP1
00003bce: PUSH1 0x00
00003bd0: DUP1
00003bd1: PUSH1 0x00
00003bd3: PUSH1 0xa0
00003bd5: DUP7
00003bd6: DUP9
00003bd7: SUB
00003bd8: SLT
00003bd9: ISZERO
00003bda: PUSH2 0x3be2
00003bdd: JUMPI
00003bde: PUSH1 0x00
00003be0: DUP1
00003be1: REVERT
00003be2: JUMPDEST
00003be3: PUSH2 0x3beb
00003be6: DUP7
00003be7: PUSH2 0x3bb9
00003bea: JUMP
00003beb: JUMPDEST
00003bec: SWAP8
00003bed: PUSH1 0x20
00003bef: DUP8
00003bf0: ADD
00003bf1: CALLDATALOAD
00003bf2: SWAP8
00003bf3: POP
00003bf4: PUSH1 0x40
00003bf6: DUP8
00003bf7: ADD
00003bf8: CALLDATALOAD
00003bf9: SWAP7
00003bfa: PUSH1 0x60
00003bfc: DUP2
00003bfd: ADD
00003bfe: CALLDATALOAD
00003bff: SWAP7
00003c00: POP
00003c01: PUSH1 0x80
00003c03: ADD
00003c04: CALLDATALOAD
00003c05: SWAP5
00003c06: POP
00003c07: SWAP3
00003c08: POP
00003c09: POP
00003c0a: POP
00003c0b: JUMP
00003c0c: JUMPDEST
00003c0d: PUSH1 0x01
00003c0f: PUSH1 0x01
00003c11: PUSH1 0xa0
00003c13: SHL
00003c14: SUB
00003c15: AND
00003c16: SWAP1
00003c17: MSTORE
00003c18: JUMP
00003c19: JUMPDEST
00003c1a: PUSH1 0x00
00003c1c: DUP1
00003c1d: PUSH1 0x00
00003c1f: PUSH1 0x60
00003c21: DUP5
00003c22: DUP7
00003c23: SUB
00003c24: SLT
00003c25: ISZERO
00003c26: PUSH2 0x3c2e
00003c29: JUMPI
00003c2a: PUSH1 0x00
00003c2c: DUP1
00003c2d: REVERT
00003c2e: JUMPDEST
00003c2f: DUP4
00003c30: CALLDATALOAD
00003c31: SWAP3
00003c32: POP
00003c33: PUSH2 0x3c3e
00003c36: PUSH1 0x20
00003c38: DUP6
00003c39: ADD
00003c3a: PUSH2 0x3a67
00003c3d: JUMP
00003c3e: JUMPDEST
00003c3f: SWAP2
00003c40: POP
00003c41: PUSH1 0x40
00003c43: DUP5
00003c44: ADD
00003c45: CALLDATALOAD
00003c46: PUSH1 0x01
00003c48: PUSH1 0x01
00003c4a: PUSH1 0x98
00003c4c: SHL
00003c4d: SUB
00003c4e: DUP2
00003c4f: AND
00003c50: DUP2
00003c51: EQ
00003c52: PUSH2 0x3c5a
00003c55: JUMPI
00003c56: PUSH1 0x00
00003c58: DUP1
00003c59: REVERT
00003c5a: JUMPDEST
00003c5b: DUP1
00003c5c: SWAP2
00003c5d: POP
00003c5e: POP
00003c5f: SWAP3
00003c60: POP
00003c61: SWAP3
00003c62: POP
00003c63: SWAP3
00003c64: JUMP
00003c65: JUMPDEST
00003c66: DUP2
00003c67: MLOAD
00003c68: PUSH1 0xff
00003c6a: AND
00003c6b: DUP2
00003c6c: MSTORE
00003c6d: PUSH2 0x0140
00003c70: DUP2
00003c71: ADD
00003c72: PUSH1 0x20
00003c74: DUP4
00003c75: ADD
00003c76: MLOAD
00003c77: PUSH1 0x20
00003c79: DUP4
00003c7a: ADD
00003c7b: MSTORE
00003c7c: PUSH1 0x40
00003c7e: DUP4
00003c7f: ADD
00003c80: MLOAD
00003c81: PUSH2 0x3c8d
00003c84: PUSH1 0x40
00003c86: DUP5
00003c87: ADD
00003c88: DUP3
00003c89: PUSH2 0x3c0c
00003c8c: JUMP
00003c8d: JUMPDEST
00003c8e: POP
00003c8f: PUSH1 0x60
00003c91: DUP4
00003c92: ADD
00003c93: MLOAD
00003c94: PUSH1 0x60
00003c96: DUP4
00003c97: ADD
00003c98: MSTORE
00003c99: PUSH1 0x80
00003c9b: DUP4
00003c9c: ADD
00003c9d: MLOAD
00003c9e: PUSH1 0x80
00003ca0: DUP4
00003ca1: ADD
00003ca2: MSTORE
00003ca3: PUSH1 0xa0
00003ca5: DUP4
00003ca6: ADD
00003ca7: MLOAD
00003ca8: PUSH1 0xa0
00003caa: DUP4
00003cab: ADD
00003cac: MSTORE
00003cad: PUSH1 0xc0
00003caf: DUP4
00003cb0: ADD
00003cb1: MLOAD
00003cb2: PUSH1 0xc0
00003cb4: DUP4
00003cb5: ADD
00003cb6: MSTORE
00003cb7: PUSH1 0xe0
00003cb9: DUP4
00003cba: ADD
00003cbb: MLOAD
00003cbc: PUSH2 0x3cca
00003cbf: PUSH1 0xe0
00003cc1: DUP5
00003cc2: ADD
00003cc3: DUP3
00003cc4: PUSH1 0xff
00003cc6: AND
00003cc7: SWAP1
00003cc8: MSTORE
00003cc9: JUMP
00003cca: JUMPDEST
00003ccb: POP
00003ccc: PUSH2 0x0100
00003ccf: DUP1
00003cd0: DUP5
00003cd1: ADD
00003cd2: MLOAD
00003cd3: PUSH2 0x3cde
00003cd6: DUP3
00003cd7: DUP6
00003cd8: ADD
00003cd9: DUP3
00003cda: PUSH2 0x3c0c
00003cdd: JUMP
00003cde: JUMPDEST
00003cdf: POP
00003ce0: POP
00003ce1: PUSH2 0x0120
00003ce4: SWAP3
00003ce5: DUP4
00003ce6: ADD
00003ce7: MLOAD
00003ce8: SWAP2
00003ce9: SWAP1
00003cea: SWAP3
00003ceb: ADD
00003cec: MSTORE
00003ced: SWAP1
00003cee: JUMP
00003cef: JUMPDEST
00003cf0: PUSH1 0x01
00003cf2: PUSH1 0x01
00003cf4: PUSH1 0xa0
00003cf6: SHL
00003cf7: SUB
00003cf8: SWAP2
00003cf9: SWAP1
00003cfa: SWAP2
00003cfb: AND
00003cfc: DUP2
00003cfd: MSTORE
00003cfe: PUSH1 0x20
00003d00: ADD
00003d01: SWAP1
00003d02: JUMP
00003d03: JUMPDEST
00003d04: DUP1
00003d05: ISZERO
00003d06: ISZERO
00003d07: DUP2
00003d08: EQ
00003d09: PUSH2 0x23fa
00003d0c: JUMPI
00003d0d: PUSH1 0x00
00003d0f: DUP1
00003d10: REVERT
00003d11: JUMPDEST
00003d12: PUSH1 0x00
00003d14: DUP1
00003d15: PUSH1 0x00
00003d17: PUSH1 0x40
00003d19: DUP5
00003d1a: DUP7
00003d1b: SUB
00003d1c: SLT
00003d1d: ISZERO
00003d1e: PUSH2 0x3d26
00003d21: JUMPI
00003d22: PUSH1 0x00
00003d24: DUP1
00003d25: REVERT
00003d26: JUMPDEST
00003d27: DUP4
00003d28: CALLDATALOAD
00003d29: PUSH1 0x01
00003d2b: PUSH1 0x01
00003d2d: PUSH1 0x40
00003d2f: SHL
00003d30: SUB
00003d31: DUP2
00003d32: GT
00003d33: ISZERO
00003d34: PUSH2 0x3d3c
00003d37: JUMPI
00003d38: PUSH1 0x00
00003d3a: DUP1
00003d3b: REVERT
00003d3c: JUMPDEST
00003d3d: PUSH2 0x3d48
00003d40: DUP7
00003d41: DUP3
00003d42: DUP8
00003d43: ADD
00003d44: PUSH2 0x39a0
00003d47: JUMP
00003d48: JUMPDEST
00003d49: SWAP1
00003d4a: SWAP5
00003d4b: POP
00003d4c: SWAP3
00003d4d: POP
00003d4e: POP
00003d4f: PUSH1 0x20
00003d51: DUP5
00003d52: ADD
00003d53: CALLDATALOAD
00003d54: PUSH2 0x3c5a
00003d57: DUP2
00003d58: PUSH2 0x3d03
00003d5b: JUMP
00003d5c: JUMPDEST
00003d5d: PUSH1 0x00
00003d5f: DUP1
00003d60: PUSH1 0x00
00003d62: DUP1
00003d63: PUSH1 0x00
00003d65: DUP1
00003d66: PUSH1 0xc0
00003d68: DUP8
00003d69: DUP10
00003d6a: SUB
00003d6b: SLT
00003d6c: ISZERO
00003d6d: PUSH2 0x3d75
00003d70: JUMPI
00003d71: PUSH1 0x00
00003d73: DUP1
00003d74: REVERT
00003d75: JUMPDEST
00003d76: PUSH2 0x3d7e
00003d79: DUP8
00003d7a: PUSH2 0x3bb9
00003d7d: JUMP
00003d7e: JUMPDEST
00003d7f: SWAP6
00003d80: POP
00003d81: PUSH1 0x20
00003d83: DUP8
00003d84: ADD
00003d85: CALLDATALOAD
00003d86: SWAP5
00003d87: POP
00003d88: PUSH1 0x40
00003d8a: DUP8
00003d8b: ADD
00003d8c: CALLDATALOAD
00003d8d: SWAP4
00003d8e: POP
00003d8f: PUSH1 0x60
00003d91: DUP8
00003d92: ADD
00003d93: CALLDATALOAD
00003d94: SWAP3
00003d95: POP
00003d96: PUSH2 0x3da1
00003d99: PUSH1 0x80
00003d9b: DUP9
00003d9c: ADD
00003d9d: PUSH2 0x3a67
00003da0: JUMP
00003da1: JUMPDEST
00003da2: SWAP2
00003da3: POP
00003da4: PUSH1 0xa0
00003da6: DUP8
00003da7: ADD
00003da8: CALLDATALOAD
00003da9: SWAP1
00003daa: POP
00003dab: SWAP3
00003dac: SWAP6
00003dad: POP
00003dae: SWAP3
00003daf: SWAP6
00003db0: POP
00003db1: SWAP3
00003db2: SWAP6
00003db3: JUMP
00003db4: JUMPDEST
00003db5: PUSH1 0x00
00003db7: DUP1
00003db8: PUSH1 0x40
00003dba: DUP4
00003dbb: DUP6
00003dbc: SUB
00003dbd: SLT
00003dbe: ISZERO
00003dbf: PUSH2 0x3dc7
00003dc2: JUMPI
00003dc3: PUSH1 0x00
00003dc5: DUP1
00003dc6: REVERT
00003dc7: JUMPDEST
00003dc8: PUSH2 0x3dd0
00003dcb: DUP4
00003dcc: PUSH2 0x3a67
00003dcf: JUMP
00003dd0: JUMPDEST
00003dd1: SWAP2
00003dd2: POP
00003dd3: PUSH2 0x3af5
00003dd6: PUSH1 0x20
00003dd8: DUP5
00003dd9: ADD
00003dda: PUSH2 0x3a67
00003ddd: JUMP
00003dde: JUMPDEST
00003ddf: PUSH4 0x4e487b71
00003de4: PUSH1 0xe0
00003de6: SHL
00003de7: PUSH1 0x00
00003de9: MSTORE
00003dea: PUSH1 0x32
00003dec: PUSH1 0x04
00003dee: MSTORE
00003def: PUSH1 0x24
00003df1: PUSH1 0x00
00003df3: REVERT
00003df4: JUMPDEST
00003df5: PUSH4 0x4e487b71
00003dfa: PUSH1 0xe0
00003dfc: SHL
00003dfd: PUSH1 0x00
00003dff: MSTORE
00003e00: PUSH1 0x11
00003e02: PUSH1 0x04
00003e04: MSTORE
00003e05: PUSH1 0x24
00003e07: PUSH1 0x00
00003e09: REVERT
00003e0a: JUMPDEST
00003e0b: PUSH1 0x00
00003e0d: PUSH1 0x01
00003e0f: DUP3
00003e10: ADD
00003e11: PUSH2 0x3e1c
00003e14: JUMPI
00003e15: PUSH2 0x3e1c
00003e18: PUSH2 0x3df4
00003e1b: JUMP
00003e1c: JUMPDEST
00003e1d: POP
00003e1e: PUSH1 0x01
00003e20: ADD
00003e21: SWAP1
00003e22: JUMP
00003e23: JUMPDEST
00003e24: PUSH1 0x20
00003e26: DUP1
00003e27: DUP3
00003e28: MSTORE
00003e29: PUSH1 0x0e
00003e2b: SWAP1
00003e2c: DUP3
00003e2d: ADD
00003e2e: MSTORE
00003e2f: PUSH14 0x496e76616c696420537461747573
00003e3e: PUSH1 0x90
00003e40: SHL
00003e41: PUSH1 0x40
00003e43: DUP3
00003e44: ADD
00003e45: MSTORE
00003e46: PUSH1 0x60
00003e48: ADD
00003e49: SWAP1
00003e4a: JUMP
00003e4b: JUMPDEST
00003e4c: PUSH1 0x20
00003e4e: DUP1
00003e4f: DUP3
00003e50: MSTORE
00003e51: PUSH1 0x0d
00003e53: SWAP1
00003e54: DUP3
00003e55: ADD
00003e56: MSTORE
00003e57: PUSH13 0x151bdad95b88139bdd0814d95d
00003e65: PUSH1 0x9a
00003e67: SHL
00003e68: PUSH1 0x40
00003e6a: DUP3
00003e6b: ADD
00003e6c: MSTORE
00003e6d: PUSH1 0x60
00003e6f: ADD
00003e70: SWAP1
00003e71: JUMP
00003e72: JUMPDEST
00003e73: PUSH1 0x20
00003e75: DUP1
00003e76: DUP3
00003e77: MSTORE
00003e78: PUSH1 0x19
00003e7a: SWAP1
00003e7b: DUP3
00003e7c: ADD
00003e7d: MSTORE
00003e7e: PUSH25 0x14d95d1d1b1a5b99c8151a5b5948139bdd0814dd185c9d1959
00003e98: PUSH1 0x3a
00003e9a: SHL
00003e9b: PUSH1 0x40
00003e9d: DUP3
00003e9e: ADD
00003e9f: MSTORE
00003ea0: PUSH1 0x60
00003ea2: ADD
00003ea3: SWAP1
00003ea4: JUMP
00003ea5: JUMPDEST
00003ea6: PUSH1 0x20
00003ea8: DUP1
00003ea9: DUP3
00003eaa: MSTORE
00003eab: PUSH1 0x14
00003ead: SWAP1
00003eae: DUP3
00003eaf: ADD
00003eb0: MSTORE
00003eb1: PUSH20 0x496e76616c6964204f7264657220537461747573
00003ec6: PUSH1 0x60
00003ec8: SHL
00003ec9: PUSH1 0x40
00003ecb: DUP3
00003ecc: ADD
00003ecd: MSTORE
00003ece: PUSH1 0x60
00003ed0: ADD
00003ed1: SWAP1
00003ed2: JUMP
00003ed3: JUMPDEST
00003ed4: DUP1
00003ed5: DUP3
00003ed6: MUL
00003ed7: DUP2
00003ed8: ISZERO
00003ed9: DUP3
00003eda: DUP3
00003edb: DIV
00003edc: DUP5
00003edd: EQ
00003ede: OR
00003edf: PUSH2 0x3867
00003ee2: JUMPI
00003ee3: PUSH2 0x3867
00003ee6: PUSH2 0x3df4
00003ee9: JUMP
00003eea: JUMPDEST
00003eeb: PUSH1 0x00
00003eed: DUP3
00003eee: PUSH2 0x3f07
00003ef1: JUMPI
00003ef2: PUSH4 0x4e487b71
00003ef7: PUSH1 0xe0
00003ef9: SHL
00003efa: PUSH1 0x00
00003efc: MSTORE
00003efd: PUSH1 0x12
00003eff: PUSH1 0x04
00003f01: MSTORE
00003f02: PUSH1 0x24
00003f04: PUSH1 0x00
00003f06: REVERT
00003f07: JUMPDEST
00003f08: POP
00003f09: DIV
00003f0a: SWAP1
00003f0b: JUMP
00003f0c: JUMPDEST
00003f0d: DUP1
00003f0e: DUP3
00003f0f: ADD
00003f10: DUP1
00003f11: DUP3
00003f12: GT
00003f13: ISZERO
00003f14: PUSH2 0x3867
00003f17: JUMPI
00003f18: PUSH2 0x3867
00003f1b: PUSH2 0x3df4
00003f1e: JUMP
00003f1f: JUMPDEST
00003f20: DUP2
00003f21: DUP2
00003f22: SUB
00003f23: DUP2
00003f24: DUP2
00003f25: GT
00003f26: ISZERO
00003f27: PUSH2 0x3867
00003f2a: JUMPI
00003f2b: PUSH2 0x3867
00003f2e: PUSH2 0x3df4
00003f31: JUMP
00003f32: JUMPDEST
00003f33: PUSH1 0x20
00003f35: DUP1
00003f36: DUP3
00003f37: MSTORE
00003f38: PUSH1 0x13
00003f3a: SWAP1
00003f3b: DUP3
00003f3c: ADD
00003f3d: MSTORE
00003f3e: PUSH19 0x151c985b9cd9995c88119d5b991cc811985a5b
00003f52: PUSH1 0x6a
00003f54: SHL
00003f55: PUSH1 0x40
00003f57: DUP3
00003f58: ADD
00003f59: MSTORE
00003f5a: PUSH1 0x60
00003f5c: ADD
00003f5d: SWAP1
00003f5e: JUMP
00003f5f: JUMPDEST
00003f60: SWAP4
00003f61: DUP5
00003f62: MSTORE
00003f63: PUSH1 0x20
00003f65: DUP5
00003f66: ADD
00003f67: SWAP3
00003f68: SWAP1
00003f69: SWAP3
00003f6a: MSTORE
00003f6b: PUSH1 0x40
00003f6d: DUP4
00003f6e: ADD
00003f6f: MSTORE
00003f70: PUSH1 0x01
00003f72: PUSH1 0x01
00003f74: PUSH1 0xa0
00003f76: SHL
00003f77: SUB
00003f78: AND
00003f79: PUSH1 0x60
00003f7b: DUP3
00003f7c: ADD
00003f7d: MSTORE
00003f7e: PUSH1 0x80
00003f80: ADD
00003f81: SWAP1
00003f82: JUMP
00003f83: JUMPDEST
00003f84: PUSH1 0x20
00003f86: DUP1
00003f87: DUP3
00003f88: MSTORE
00003f89: PUSH1 0x0d
00003f8b: SWAP1
00003f8c: DUP3
00003f8d: ADD
00003f8e: MSTORE
00003f8f: PUSH13 0x125b9d985b1a5908125b9c1d5d
00003f9d: PUSH1 0x9a
00003f9f: SHL
00003fa0: PUSH1 0x40
00003fa2: DUP3
00003fa3: ADD
00003fa4: MSTORE
00003fa5: PUSH1 0x60
00003fa7: ADD
00003fa8: SWAP1
00003fa9: JUMP
00003faa: JUMPDEST
00003fab: PUSH1 0x20
00003fad: DUP1
00003fae: DUP3
00003faf: MSTORE
00003fb0: PUSH1 0x12
00003fb2: SWAP1
00003fb3: DUP3
00003fb4: ADD
00003fb5: MSTORE
00003fb6: PUSH18 0x496e73756666696369656e742046756e6473
00003fc9: PUSH1 0x70
00003fcb: SHL
00003fcc: PUSH1 0x40
00003fce: DUP3
00003fcf: ADD
00003fd0: MSTORE
00003fd1: PUSH1 0x60
00003fd3: ADD
00003fd4: SWAP1
00003fd5: JUMP
00003fd6: JUMPDEST
00003fd7: PUSH1 0x20
00003fd9: DUP1
00003fda: DUP3
00003fdb: MSTORE
00003fdc: PUSH1 0x11
00003fde: SWAP1
00003fdf: DUP3
00003fe0: ADD
00003fe1: MSTORE
00003fe2: PUSH17 0x115e1d1c9848105b5bdd5b9d0814d95b9d
00003ff4: PUSH1 0x7a
00003ff6: SHL
00003ff7: PUSH1 0x40
00003ff9: DUP3
00003ffa: ADD
00003ffb: MSTORE
00003ffc: PUSH1 0x60
00003ffe: ADD
00003fff: SWAP1
00004000: JUMP
00004001: JUMPDEST
00004002: PUSH1 0x20
00004004: DUP1
00004005: DUP3
00004006: MSTORE
00004007: PUSH1 0x14
00004009: SWAP1
0000400a: DUP3
0000400b: ADD
0000400c: MSTORE
0000400d: PUSH20 0x496e76616c696420546f6b656e20537461747573
00004022: PUSH1 0x60
00004024: SHL
00004025: PUSH1 0x40
00004027: DUP3
00004028: ADD
00004029: MSTORE
0000402a: PUSH1 0x60
0000402c: ADD
0000402d: SWAP1
0000402e: JUMP
0000402f: JUMPDEST
00004030: PUSH1 0x20
00004032: DUP1
00004033: DUP3
00004034: MSTORE
00004035: PUSH1 0x0d
00004037: SWAP1
00004038: DUP3
00004039: ADD
0000403a: MSTORE
0000403b: PUSH13 0x24b73b30b634b2102a37b5b2b7
00004049: PUSH1 0x99
0000404b: SHL
0000404c: PUSH1 0x40
0000404e: DUP3
0000404f: ADD
00004050: MSTORE
00004051: PUSH1 0x60
00004053: ADD
00004054: SWAP1
00004055: JUMP
00004056: JUMPDEST
00004057: PUSH1 0x20
00004059: DUP1
0000405a: DUP3
0000405b: MSTORE
0000405c: PUSH1 0x17
0000405e: SWAP1
0000405f: DUP3
00004060: ADD
00004061: MSTORE
00004062: PUSH23 0x496e76616c696420416d6f756e74206f722056616c7565
0000407a: PUSH1 0x48
0000407c: SHL
0000407d: PUSH1 0x40
0000407f: DUP3
00004080: ADD
00004081: MSTORE
00004082: PUSH1 0x60
00004084: ADD
00004085: SWAP1
00004086: JUMP
00004087: JUMPDEST
00004088: PUSH1 0x20
0000408a: DUP1
0000408b: DUP3
0000408c: MSTORE
0000408d: PUSH1 0x32
0000408f: SWAP1
00004090: DUP3
00004091: ADD
00004092: MSTORE
00004093: PUSH32 0x6d696e616d6f756e7420746f2062652066696c6c65642063616e742062652067
000040b4: PUSH1 0x40
000040b6: DUP3
000040b7: ADD
000040b8: MSTORE
000040b9: PUSH18 0x1c99585d195c881d1a195b88185b5bdd5b9d
000040cc: PUSH1 0x72
000040ce: SHL
000040cf: PUSH1 0x60
000040d1: DUP3
000040d2: ADD
000040d3: MSTORE
000040d4: PUSH1 0x80
000040d6: ADD
000040d7: SWAP1
000040d8: JUMP
000040d9: JUMPDEST
000040da: PUSH1 0x20
000040dc: DUP1
000040dd: DUP3
000040de: MSTORE
000040df: PUSH1 0x40
000040e1: SWAP1
000040e2: DUP3
000040e3: ADD
000040e4: DUP2
000040e5: SWAP1
000040e6: MSTORE
000040e7: PUSH32 0x6d696e616d6f756e742073686f756c642062652067726561746572207468656e
00004108: SWAP1
00004109: DUP3
0000410a: ADD
0000410b: MSTORE
0000410c: PUSH32 0x206575616c20746f206d61726b657420676c6f62616c206d696e616d6f756e74
0000412d: PUSH1 0x60
0000412f: DUP3
00004130: ADD
00004131: MSTORE
00004132: PUSH1 0x80
00004134: ADD
00004135: SWAP1
00004136: JUMP
00004137: JUMPDEST
00004138: PUSH1 0x20
0000413a: DUP1
0000413b: DUP3
0000413c: MSTORE
0000413d: PUSH1 0x14
0000413f: SWAP1
00004140: DUP3
00004141: ADD
00004142: MSTORE
00004143: PUSH20 0x496e76616c6964204f6666657220537461747573
00004158: PUSH1 0x60
0000415a: SHL
0000415b: PUSH1 0x40
0000415d: DUP3
0000415e: ADD
0000415f: MSTORE
00004160: PUSH1 0x60
00004162: ADD
00004163: SWAP1
00004164: JUMP
00004165: JUMPDEST
00004166: PUSH1 0x20
00004168: DUP1
00004169: DUP3
0000416a: MSTORE
0000416b: PUSH1 0x14
0000416d: SWAP1
0000416e: DUP3
0000416f: ADD
00004170: MSTORE
00004171: PUSH20 0x496e76616c696420746f6b656e20537461747573
00004186: PUSH1 0x60
00004188: SHL
00004189: PUSH1 0x40
0000418b: DUP3
0000418c: ADD
0000418d: MSTORE
0000418e: PUSH1 0x60
00004190: ADD
00004191: SWAP1
00004192: JUMP
00004193: JUMPDEST
00004194: PUSH1 0x20
00004196: DUP1
00004197: DUP3
00004198: MSTORE
00004199: PUSH1 0x0e
0000419b: SWAP1
0000419c: DUP3
0000419d: ADD
0000419e: MSTORE
0000419f: PUSH14 0x125b9d985b1a5908105b5bdd5b9d
000041ae: PUSH1 0x92
000041b0: SHL
000041b1: PUSH1 0x40
000041b3: DUP3
000041b4: ADD
000041b5: MSTORE
000041b6: PUSH1 0x60
000041b8: ADD
000041b9: SWAP1
000041ba: JUMP
000041bb: JUMPDEST
000041bc: PUSH1 0x20
000041be: DUP1
000041bf: DUP3
000041c0: MSTORE
000041c1: PUSH1 0x18
000041c3: SWAP1
000041c4: DUP3
000041c5: ADD
000041c6: MSTORE
000041c7: PUSH24 0x496e73756666696369656e7420416c6c6f636174696f6e73
000041e0: PUSH1 0x40
000041e2: SHL
000041e3: PUSH1 0x40
000041e5: DUP3
000041e6: ADD
000041e7: MSTORE
000041e8: PUSH1 0x60
000041ea: ADD
000041eb: SWAP1
000041ec: JUMP
000041ed: JUMPDEST
000041ee: PUSH1 0x20
000041f0: DUP1
000041f1: DUP3
000041f2: MSTORE
000041f3: PUSH1 0x35
000041f5: SWAP1
000041f6: DUP3
000041f7: ADD
000041f8: MSTORE
000041f9: PUSH32 0x6966206c657373207468656e206173736574206d696e616d6f756e74206d7573
0000421a: PUSH1 0x40
0000421c: DUP3
0000421d: ADD
0000421e: MSTORE
0000421f: PUSH21 0x3a103334b6361031b7b6b83632ba329037b93232b9
00004235: PUSH1 0x59
00004237: SHL
00004238: PUSH1 0x60
0000423a: DUP3
0000423b: ADD
0000423c: MSTORE
0000423d: PUSH1 0x80
0000423f: ADD
00004240: SWAP1
00004241: JUMP
00004242: JUMPDEST
00004243: PUSH1 0x20
00004245: DUP1
00004246: DUP3
00004247: MSTORE
00004248: PUSH1 0x13
0000424a: SWAP1
0000424b: DUP3
0000424c: ADD
0000424d: MSTORE
0000424e: PUSH19 0x24b73b30b634b21027b33332b9102a37b5b2b7
00004262: PUSH1 0x69
00004264: SHL
00004265: PUSH1 0x40
00004267: DUP3
00004268: ADD
00004269: MSTORE
0000426a: PUSH1 0x60
0000426c: ADD
0000426d: SWAP1
0000426e: JUMP
0000426f: JUMPDEST
00004270: PUSH1 0x20
00004272: DUP1
00004273: DUP3
00004274: MSTORE
00004275: PUSH1 0x15
00004277: SWAP1
00004278: DUP3
00004279: ADD
0000427a: MSTORE
0000427b: PUSH21 0x496e76616c696420546f6b656e2041646472657373
00004291: PUSH1 0x58
00004293: SHL
00004294: PUSH1 0x40
00004296: DUP3
00004297: ADD
00004298: MSTORE
00004299: PUSH1 0x60
0000429b: ADD
0000429c: SWAP1
0000429d: JUMP
0000429e: JUMPDEST
0000429f: PUSH1 0x40
000042a1: DUP1
000042a2: DUP3
000042a3: MSTORE
000042a4: DUP2
000042a5: ADD
000042a6: DUP4
000042a7: SWAP1
000042a8: MSTORE
000042a9: PUSH1 0x00
000042ab: DUP5
000042ac: PUSH1 0x60
000042ae: DUP4
000042af: ADD
000042b0: DUP3
000042b1: JUMPDEST
000042b2: DUP7
000042b3: DUP2
000042b4: LT
000042b5: ISZERO
000042b6: PUSH2 0x42df
000042b9: JUMPI
000042ba: PUSH1 0x01
000042bc: PUSH1 0x01
000042be: PUSH1 0xa0
000042c0: SHL
000042c1: SUB
000042c2: PUSH2 0x42ca
000042c5: DUP5
000042c6: PUSH2 0x3a67
000042c9: JUMP
000042ca: JUMPDEST
000042cb: AND
000042cc: DUP3
000042cd: MSTORE
000042ce: PUSH1 0x20
000042d0: SWAP3
000042d1: DUP4
000042d2: ADD
000042d3: SWAP3
000042d4: SWAP1
000042d5: SWAP2
000042d6: ADD
000042d7: SWAP1
000042d8: PUSH1 0x01
000042da: ADD
000042db: PUSH2 0x42b1
000042de: JUMP
000042df: JUMPDEST
000042e0: POP
000042e1: DUP1
000042e2: SWAP3
000042e3: POP
000042e4: POP
000042e5: POP
000042e6: DUP3
000042e7: ISZERO
000042e8: ISZERO
000042e9: PUSH1 0x20
000042eb: DUP4
000042ec: ADD
000042ed: MSTORE
000042ee: SWAP5
000042ef: SWAP4
000042f0: POP
000042f1: POP
000042f2: POP
000042f3: POP
000042f4: JUMP
000042f5: JUMPDEST
000042f6: PUSH1 0x00
000042f8: PUSH1 0x20
000042fa: DUP3
000042fb: DUP5
000042fc: SUB
000042fd: SLT
000042fe: ISZERO
000042ff: PUSH2 0x4307
00004302: JUMPI
00004303: PUSH1 0x00
00004305: DUP1
00004306: REVERT
00004307: JUMPDEST
00004308: POP
00004309: MLOAD
0000430a: SWAP2
0000430b: SWAP1
0000430c: POP
0000430d: JUMP
0000430e: JUMPDEST
0000430f: PUSH1 0x20
00004311: DUP1
00004312: DUP3
00004313: MSTORE
00004314: PUSH1 0x1d
00004316: SWAP1
00004317: DUP3
00004318: ADD
00004319: MSTORE
0000431a: PUSH32 0x5472616e736665722046756e647320746f2053656c6c6572204661696c000000
0000433b: PUSH1 0x40
0000433d: DUP3
0000433e: ADD
0000433f: MSTORE
00004340: PUSH1 0x60
00004342: ADD
00004343: SWAP1
00004344: JUMP
00004345: JUMPDEST
00004346: PUSH6 0xffffffffffff
0000434d: DUP2
0000434e: DUP2
0000434f: AND
00004350: DUP4
00004351: DUP3
00004352: AND
00004353: ADD
00004354: SWAP1
00004355: DUP1
00004356: DUP3
00004357: GT
00004358: ISZERO
00004359: PUSH2 0x4364
0000435c: JUMPI
0000435d: PUSH2 0x4364
00004360: PUSH2 0x3df4
00004363: JUMP
00004364: JUMPDEST
00004365: POP
00004366: SWAP3
00004367: SWAP2
00004368: POP
00004369: POP
0000436a: JUMP
0000436b: JUMPDEST
0000436c: PUSH1 0x00
0000436e: PUSH1 0x20
00004370: DUP3
00004371: DUP5
00004372: SUB
00004373: SLT
00004374: ISZERO
00004375: PUSH2 0x437d
00004378: JUMPI
00004379: PUSH1 0x00
0000437b: DUP1
0000437c: REVERT
0000437d: JUMPDEST
0000437e: DUP2
0000437f: MLOAD
00004380: PUSH2 0x1da6
00004383: DUP2
00004384: PUSH2 0x3d03
00004387: JUMP
00004388: JUMPDEST
00004389: PUSH1 0x00
0000438b: DUP3
0000438c: MLOAD
0000438d: PUSH1 0x00
0000438f: JUMPDEST
00004390: DUP2
00004391: DUP2
00004392: LT
00004393: ISZERO
00004394: PUSH2 0x43a9
00004397: JUMPI
00004398: PUSH1 0x20
0000439a: DUP2
0000439b: DUP7
0000439c: ADD
0000439d: DUP2
0000439e: ADD
0000439f: MLOAD
000043a0: DUP6
000043a1: DUP4
000043a2: ADD
000043a3: MSTORE
000043a4: ADD
000043a5: PUSH2 0x438f
000043a8: JUMP
000043a9: JUMPDEST
000043aa: POP
000043ab: PUSH1 0x00
000043ad: SWAP3
000043ae: ADD
000043af: SWAP2
000043b0: DUP3
000043b1: MSTORE
000043b2: POP
000043b3: SWAP2
000043b4: SWAP1
000043b5: POP
000043b6: JUMP
000043b7: INVALID
000043b8: PUSH4 0x616e6e6f
000043bd: PUSH21 0x2066696c6c206c657373207468656e206f66666572
000043d3: KECCAK256
000043d4: PUSH14 0x696e6194d22e970a1abb720b7410
000043e3: GASLIMIT
000043e4: UNKNOWN(0xE4)
000043e5: PUSH18 0xaf3fa516f4e2ede6b665387332888f92f213
000043f8: LOG2
000043f9: PUSH5 0x6970667358
000043ff: UNKNOWN(0x22)
00004400: SLT
00004401: KECCAK256
00004402: UNKNOWN(0xD2)
00004403: UNKNOWN(0xE0)
00004404: UNKNOWN(0x25)
00004405: UNKNOWN(0xFC)
00004406: UNKNOWN(0xC9)
00004407: UNKNOWN(0x2F)
00004408: UNKNOWN(0x2B)
00004409: SLOAD
0000440a: SAR
0000440b: DUP10
0000440c: UNKNOWN(0xA9)
0000440d: UNKNOWN(0xF9)
0000440e: UNKNOWN(0xDE)
0000440f: SWAP11
00004410: JUMPI
00004411: UNKNOWN(0xE8)
00004412: UNKNOWN(0xB3)
00004413: UNKNOWN(0xC1)
00004414: UNKNOWN(0xE6)
00004415: UNKNOWN(0xAF)
00004416: RETURNDATASIZE
00004417: UNKNOWN(0xE7)
00004418: UNKNOWN(0x4D)
00004419: BALANCE
0000441a: ADDRESS
0000441b: PUSH10 0x16844003ec8964736f6c
00004426: PUSH4 0x43000814
0000442b: STOP
0000442c: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x57c5b7fb40315ce94ce804aeeffecb25246ef720eee0e6456d4694e585819b51
call_targets: 0x6ac64c4760e0590f88233b2046810e87e0354324
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x57c5b7fb40315ce94ce804aeeffecb25246ef720eee0e6456d4694e585819b51",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6ac64c4760e0590f88233b2046810e87e0354324"
    ],
    "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": "0x0787ef39",
            "selector": "0x0787ef39",
            "calldata_variants": [
                "0x0787ef39",
                "0x0787ef390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x16b4cdb2",
            "selector": "0x16b4cdb2",
            "calldata_variants": [
                "0x16b4cdb2",
                "0x16b4cdb20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18b4f367",
            "selector": "0x18b4f367",
            "calldata_variants": [
                "0x18b4f367",
                "0x18b4f3670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1f25a2d8",
            "selector": "0x1f25a2d8",
            "calldata_variants": [
                "0x1f25a2d8",
                "0x1f25a2d80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x21146fa2",
            "selector": "0x21146fa2",
            "calldata_variants": [
                "0x21146fa2",
                "0x21146fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2d670584",
            "selector": "0x2d670584",
            "calldata_variants": [
                "0x2d670584",
                "0x2d6705840000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3b6e750f",
            "selector": "0x3b6e750f",
            "calldata_variants": [
                "0x3b6e750f",
                "0x3b6e750f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x410ce4c4",
            "selector": "0x410ce4c4",
            "calldata_variants": [
                "0x410ce4c4",
                "0x410ce4c40000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2584,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2675,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8868,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 11,
    "guards_detected": [],
    "untrusted_call_count": 11
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x57c5b7fb40315ce94ce804aeeffecb25246ef720eee0e6456d4694e585819b51
call_targets: 0x6ac64c4760e0590f88233b2046810e87e0354324
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x57c5b7fb40315ce94ce804aeeffecb25246ef720eee0e6456d4694e585819b51",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6ac64c4760e0590f88233b2046810e87e0354324"
    ],
    "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": "0x0787ef39",
            "selector": "0x0787ef39",
            "calldata_variants": [
                "0x0787ef39",
                "0x0787ef390000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x16b4cdb2",
            "selector": "0x16b4cdb2",
            "calldata_variants": [
                "0x16b4cdb2",
                "0x16b4cdb20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x18b4f367",
            "selector": "0x18b4f367",
            "calldata_variants": [
                "0x18b4f367",
                "0x18b4f3670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1f25a2d8",
            "selector": "0x1f25a2d8",
            "calldata_variants": [
                "0x1f25a2d8",
                "0x1f25a2d80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x21146fa2",
            "selector": "0x21146fa2",
            "calldata_variants": [
                "0x21146fa2",
                "0x21146fa20000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2d670584",
            "selector": "0x2d670584",
            "calldata_variants": [
                "0x2d670584",
                "0x2d6705840000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3b6e750f",
            "selector": "0x3b6e750f",
            "calldata_variants": [
                "0x3b6e750f",
                "0x3b6e750f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x410ce4c4",
            "selector": "0x410ce4c4",
            "calldata_variants": [
                "0x410ce4c4",
                "0x410ce4c40000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2584,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2675,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 8868,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 11,
    "guards_detected": []
}
high other codex Fee-on-transfer collateral tokens let users over-withdraw from pooled escrow 85 no
view
evidence_json
{
    "evidence": "`newOffer` and `fillOffer` call `safeTransferFrom` and then immediately store/order against the caller-provided `value`/`collateral` without checking the actual amount received. `cancelOffer`, `settleFilled`, and `settleCancelled` later pay out based on those nominal amounts from a shared per-token balance.",
    "locations": [
        "src/FrontrunMarket.sol:322",
        "src/FrontrunMarket.sol:343",
        "src/FrontrunMarket.sol:346",
        "src/FrontrunMarket.sol:381",
        "src/FrontrunMarket.sol:410",
        "src/FrontrunMarket.sol:412",
        "src/FrontrunMarket.sol:474",
        "src/FrontrunMarket.sol:513",
        "src/FrontrunMarket.sol:563"
    ],
    "recommendation": "Reject non-standard collateral tokens, or account by actual balance deltas (`balanceAfter - balanceBefore`) instead of user-supplied nominal amounts. Store per-offer deposited amounts based on what was really received.",
    "exploit_scenario": "If the owner whitelists a deflationary or fee-on-transfer ERC20, `newOffer`/`fillOffer` record the nominal `value` or `collateral` even when the contract receives less. An attacker can create an offer with a token that takes 10% on inbound transfers, deposit 90 tokens while the contract books 100, then cancel the offer and withdraw 100 from the shared pool. Repeating this drains other users' balances for that token and leaves later settlements/refunds insolvent."
}
high access_control codex Owner can de-whitelist an active collateral token and withdraw funds backing live positions 85 no
view
evidence_json
{
    "evidence": "`setAcceptedTokens` can remove any token from the whitelist with no check for outstanding exposure. `withdrawStuckToken` only requires `!acceptedTokens[_token]`, then transfers the full contract balance of that token even though open offers/orders continue to use pooled balances for refunds and settlements.",
    "locations": [
        "src/FrontrunMarket.sol:656",
        "src/FrontrunMarket.sol:660",
        "src/FrontrunMarket.sol:780",
        "src/FrontrunMarket.sol:782",
        "src/FrontrunMarket.sol:784"
    ],
    "recommendation": "Do not let rescue logic depend only on the current whitelist flag. Track outstanding liabilities per token and only allow withdrawing true surplus, or forbid de-whitelisting/rescuing any token while open offers/orders still reference it.",
    "exploit_scenario": "Any accepted collateral token can be toggled to `false` via `setAcceptedTokens`, after which `withdrawStuckToken` will transfer the contract's entire balance of that token to an arbitrary address. If there are still open offers or orders using that token, the owner or a compromised owner key can drain the escrowed funds and leave users unable to cancel or settle their positions."
}
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": 12
}