ETH Price: $3,376.24 (+0.26%)

Token

Zombie Pepe (ZOMBIEPEPE)
 

Overview

Max Total Supply

1,000,000 ZOMBIEPEPE

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,871.329854133778438332 ZOMBIEPEPE

Value
$0.00
0xfb8f2163a4628ebc3ff578e1d8525a439ffbea4f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ZOMBIEPEPE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-24
*/

//
//
//
//
//          ____  ____  _      ____  _  _____   ____  _____ ____  _____
//         /_   \/  _ \/ \__/|/  _ \/ \/  __/  /  __\/  __//  __\/  __/
//         /   /| / \|| |\/||| | //| ||  \    |  \/||  \  |  \/||  \  
//         /   /_| \_/|| |  ||| |_\\| ||  /_   |  __/|  /_ |  __/|  /_ 
//         \____/\____/\_/  \|\____/\_/\____\  \_/   \____\\_/   \____\
//
//
//                           https://zombiepepe.cc/
//
//



// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// An example of a consumer contract that relies on a subscription for funding.
pragma solidity ^0.8.7;



interface IOwnable {
  function owner() external returns (address);

  function transferOwnership(address recipient) external;

  function acceptOwnership() external;
}


/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwnerWithProposal is IOwnable {
  address private s_owner;
  address private s_pendingOwner;

  event OwnershipTransferRequested(address indexed from, address indexed to);
  event OwnershipTransferred(address indexed from, address indexed to);

  constructor(address newOwner, address pendingOwner) {
    require(newOwner != address(0), "Cannot set owner to zero");

    s_owner = newOwner;
    if (pendingOwner != address(0)) {
      _transferOwnership(pendingOwner);
    }
  }

  /**
   * @notice Allows an owner to begin transferring ownership to a new address,
   * pending.
   */
  function transferOwnership(address to) public override onlyOwner {
    _transferOwnership(to);
  }

  /**
   * @notice Allows an ownership transfer to be completed by the recipient.
   */
  function acceptOwnership() external override {
    require(msg.sender == s_pendingOwner, "Must be proposed owner");

    address oldOwner = s_owner;
    s_owner = msg.sender;
    s_pendingOwner = address(0);

    emit OwnershipTransferred(oldOwner, msg.sender);
  }

  /**
   * @notice Get the current owner
   */
  function owner() public view override returns (address) {
    return s_owner;
  }

  /**
   * @notice validate, transfer ownership, and emit relevant events
   */
  function _transferOwnership(address to) private {
    require(to != msg.sender, "Cannot transfer to self");

    s_pendingOwner = to;

    emit OwnershipTransferRequested(s_owner, to);
  }

  /**
   * @notice validate access
   */
  function _validateOwnership() internal view {
    require(msg.sender == s_owner, "Only callable by owner");
  }

  /**
   * @notice Reverts if called by anyone other than the contract owner.
   */
  modifier onlyOwner() {
    _validateOwnership();
    _;
  }
}


/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwner is ConfirmedOwnerWithProposal {
  constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}
}


pragma solidity ^0.8.0;

interface VRFCoordinatorV2Interface {
  /**
   * @notice Get configuration relevant for making requests
   * @return minimumRequestConfirmations global min for request confirmations
   * @return maxGasLimit global max for request gas limit
   * @return s_provingKeyHashes list of registered key hashes
   */
  function getRequestConfig() external view returns (uint16, uint32, bytes32[] memory);

  /**
   * @notice Request a set of random words.
   * @param keyHash - Corresponds to a particular oracle job which uses
   * that key for generating the VRF proof. Different keyHash's have different gas price
   * ceilings, so you can select a specific one to bound your maximum per request cost.
   * @param subId  - The ID of the VRF subscription. Must be funded
   * with the minimum subscription balance required for the selected keyHash.
   * @param minimumRequestConfirmations - How many blocks you'd like the
   * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS
   * for why you may want to request more. The acceptable range is
   * [minimumRequestBlockConfirmations, 200].
   * @param callbackGasLimit - How much gas you'd like to receive in your
   * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords
   * may be slightly less than this amount because of gas used calling the function
   * (argument decoding etc.), so you may need to request slightly more than you expect
   * to have inside fulfillRandomWords. The acceptable range is
   * [0, maxGasLimit]
   * @param numWords - The number of uint256 random values you'd like to receive
   * in your fulfillRandomWords callback. Note these numbers are expanded in a
   * secure way by the VRFCoordinator from a single random value supplied by the oracle.
   * @return requestId - A unique identifier of the request. Can be used to match
   * a request to a response in fulfillRandomWords.
   */
  function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);

  /**
   * @notice Create a VRF subscription.
   * @return subId - A unique subscription id.
   * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.
   * @dev Note to fund the subscription, use transferAndCall. For example
   * @dev  LINKTOKEN.transferAndCall(
   * @dev    address(COORDINATOR),
   * @dev    amount,
   * @dev    abi.encode(subId));
   */
  function createSubscription() external returns (uint64 subId);

  /**
   * @notice Get a VRF subscription.
   * @param subId - ID of the subscription
   * @return balance - LINK balance of the subscription in juels.
   * @return reqCount - number of requests for this subscription, determines fee tier.
   * @return owner - owner of the subscription.
   * @return consumers - list of consumer address which are able to use this subscription.
   */
  function getSubscription(
    uint64 subId
  ) external view returns (uint96 balance, uint64 reqCount, address owner, address[] memory consumers);

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @param newOwner - proposed new owner of the subscription
   */
  function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @dev will revert if original owner of subId has
   * not requested that msg.sender become the new owner.
   */
  function acceptSubscriptionOwnerTransfer(uint64 subId) external;

  /**
   * @notice Add a consumer to a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - New consumer which can use the subscription
   */
  function addConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Remove a consumer from a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - Consumer to remove from the subscription
   */
  function removeConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Cancel a subscription
   * @param subId - ID of the subscription
   * @param to - Where to send the remaining LINK to
   */
  function cancelSubscription(uint64 subId, address to) external;

  /*
   * @notice Check to see if there exists a request commitment consumers
   * for all consumers and keyhashes for a given sub.
   * @param subId - ID of the subscription
   * @return true if there exists at least one unfulfilled request for the subscription, false
   * otherwise.
   */
  function pendingRequestExists(uint64 subId) external view returns (bool);
}

/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness. It ensures 2 things:
 * @dev 1. The fulfillment came from the VRFCoordinator
 * @dev 2. The consumer contract implements fulfillRandomWords.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constructor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash). Create subscription, fund it
 * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface
 * @dev subscription management functions).
 * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,
 * @dev callbackGasLimit, numWords),
 * @dev see (VRFCoordinatorInterface for a description of the arguments).
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomWords method.
 *
 * @dev The randomness argument to fulfillRandomWords is a set of random words
 * @dev generated from your requestId and the blockHash of the request.
 *
 * @dev If your contract could have concurrent requests open, you can use the
 * @dev requestId returned from requestRandomWords to track which response is associated
 * @dev with which randomness request.
 * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ.
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request. It is for this reason that
 * @dev that you can signal to an oracle you'd like them to wait longer before
 * @dev responding to the request (however this is not enforced in the contract
 * @dev and so remains effective only in the case of unmodified oracle software).
 */
abstract contract VRFConsumerBaseV2 {
  error OnlyCoordinatorCanFulfill(address have, address want);
  address private immutable vrfCoordinator;

  /**
   * @param _vrfCoordinator address of VRFCoordinator contract
   */
  constructor(address _vrfCoordinator) {
    vrfCoordinator = _vrfCoordinator;
  }

  /**
   * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomWords the VRF output expanded to the requested number of words
   */
  function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;

  // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
  // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
  // the origin of the call
  function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
    if (msg.sender != vrfCoordinator) {
      revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
    }
    fulfillRandomWords(requestId, randomWords);
  }
}



contract VRFv2Consumer is VRFConsumerBaseV2, ConfirmedOwner {
    event RequestSent(uint256 requestId, uint32 numWords);
    event RequestFulfilled(uint256 requestId, uint256[] randomWords);

    struct RequestStatus {
        bool fulfilled; // whether the request has been successfully fulfilled
        bool exists; // whether a requestId exists
        uint256[] randomWords;
    }
    mapping(uint256 => RequestStatus)
        public s_requests; /* requestId --> requestStatus */
    VRFCoordinatorV2Interface COORDINATOR;

    // Your subscription ID.
    uint64 s_subscriptionId;

    // past requests Id.
    uint256[] public requestIds;
    uint256 public lastRequestId;

    // The gas lane to use, which specifies the maximum gas price to bump to.
    // For a list of available gas lanes on each network,
    // see https://docs.chain.link/docs/vrf/v2/subscription/supported-networks/#configurations
    bytes32 keyHash =
        0x474e34a077df58807dbe9c96d3c009b23b3c6d0cce433e59bbf5b34f823bc56c;

    // Depends on the number of requested values that you want sent to the
    // fulfillRandomWords() function. Storing each word costs about 20,000 gas,
    // so 100,000 is a safe default for this example contract. Test and adjust
    // this limit based on the network that you select, the size of the request,
    // and the processing of the callback request in the fulfillRandomWords()
    // function.
    uint32 callbackGasLimit = 2500000;

    // The default is 3, but you can set this higher.
    uint16 requestConfirmations = 3;

    // For this example, retrieve 2 random values in one request.
    // Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS.
    uint32 numWords = 2;

    /**
     * HARDCODED FOR SEPOLIA
     * COORDINATOR: 0x8103B0A8A00be2DDC778e6e7eaa21791Cd364625
     */
    constructor(
        uint64 subscriptionId
    )
        VRFConsumerBaseV2(0x8103B0A8A00be2DDC778e6e7eaa21791Cd364625)
        ConfirmedOwner(msg.sender)
    {
        COORDINATOR = VRFCoordinatorV2Interface(
            0x8103B0A8A00be2DDC778e6e7eaa21791Cd364625
        );
        s_subscriptionId = subscriptionId;
    }

    // Assumes the subscription is funded sufficiently.
    function requestRandomWords()
        external
        returns (uint256 requestId)
    {
        // Will revert if subscription is not set and funded.
        requestId = COORDINATOR.requestRandomWords(
            keyHash,
            s_subscriptionId,
            requestConfirmations,
            callbackGasLimit,
            numWords
        );
        s_requests[requestId] = RequestStatus({
            randomWords: new uint256[](0),
            exists: true,
            fulfilled: false
        });
        requestIds.push(requestId);
        lastRequestId = requestId;
        emit RequestSent(requestId, numWords);
        return requestId;
    }

    function fulfillRandomWords(
        uint256 _requestId,
        uint256[] memory _randomWords
    ) internal override {
        require(s_requests[_requestId].exists, "request not found");
        s_requests[_requestId].fulfilled = true;
        s_requests[_requestId].randomWords = _randomWords;
        emit RequestFulfilled(_requestId, _randomWords);
    }

    function getRequestStatus(
        uint256 _requestId
    ) external view returns (bool fulfilled, uint256[] memory randomWords) {
        require(s_requests[_requestId].exists, "request not found");
        RequestStatus memory request = s_requests[_requestId];
        return (request.fulfilled, request.randomWords);
    }
}

contract ZOMBIEPEPE is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public compoundFencedIn = true;
    bool public endofWorld = false;
    bool public swapEnabled = false;

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public deadBlocks;

    uint256 private buyInfectionFee = 5;
    uint256 private sellInfectionFee = 5;
    uint256 private _buyInfectionFee;
    uint256 private _sellInfectionFee;
    address private devWallet;
    uint256 public minTokensToReceiveCure;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(uint256 => uint256) private swapInBlock;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public lpPairs;
    mapping (address => uint256) private _infected;
    mapping(address => bool) private _isImmune;
    address[] public infectedHolders;
    address[] public possibleCured;
    address public infectedHolderOne;
    address public infectedHolderTwo;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event Immunized(address indexed account, bool receivedVaccine);
    event newMinToReceiveCure(uint256 minTokensToReceiveCure);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SetlpPairs(address indexed pair, bool indexed value);
    event TransferForeignToken(address token, uint256 amount);
    event Cured(address infectedHolderOne, address infectedHolderTwo, uint256 ethForCured);

    VRFv2Consumer public randomNumContract;

    constructor(address VRFv2Address) ERC20("Zombie Pepe", "ZOMBIEPEPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        
        
        randomNumContract = VRFv2Consumer(
            VRFv2Address
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        devWallet = address(msg.sender);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setlpPairs(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000 * 1e18;
        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 1) / 10000;
        minTokensToReceiveCure = (totalSupply * 35) / 10000; // .35% required to be considered for the cure

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _isImmune[address(this)] = true;
        _isImmune[address(0xdead)] = true;
        _isImmune[address(owner())] = true;
        _isImmune[address(uniswapV2Pair)] = true;

        _approve(address(this), address(msg.sender), totalSupply);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}


    function locateSurvivors() public {
        randomNumContract.requestRandomWords();
    }

    function RandomValues()
        public
        view
        returns (bool fulfilled, uint256[] memory randomWords)
    {
        uint256 requestID = randomNumContract.lastRequestId();
        (fulfilled, randomWords) = randomNumContract.getRequestStatus(
            requestID
        );
    }

    function randomNumGenerator() public view returns (uint256) {
        uint256 requestID = randomNumContract.lastRequestId();
        (, uint256[] memory randomWords) = randomNumContract.getRequestStatus(
            requestID
        );
        return randomWords[0];
    }

    function releaseTheVirus(uint256 _deadBlocks) external onlyOwner {
        deadBlocks = _deadBlocks;
        endofWorld = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function takedownFences() external onlyOwner returns (bool) {
        compoundFencedIn = false;
        return true;
    }

    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

     function immunize(address account, bool _vaccine) public onlyOwner {
        _isImmune[account] = _vaccine;
        emit Immunized(account, _vaccine);
    }

    function rescueForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        (_sent, ) = address(_to).call{value: address(this).balance}("");
        emit TransferForeignToken(_token, _contractBalance);
    }

    function _setlpPairs(address pair, bool value) private {
        lpPairs[pair] = value;

        emit SetlpPairs(pair, value);
    }

    function newInfectionFees(uint256 _bInfectionFee, uint256 _sInfectionFee) external onlyOwner {
        buyInfectionFee = _bInfectionFee;
        sellInfectionFee = _sInfectionFee;
    }


    function newMinReceiveCure(uint256 _numerator, uint256 _divisor) external onlyOwner {
        minTokensToReceiveCure = (totalSupply() * _numerator) / _divisor;
        emit newMinToReceiveCure(minTokensToReceiveCure);
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 blockNum = block.number;

        if (compoundFencedIn) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
               

                if (!endofWorld) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    lpPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    lpPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            (swapInBlock[blockNum] < 2) &&
            !lpPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            vaccineResearchFund();
            ++swapInBlock[blockNum];
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            if ((launchedAt + deadBlocks) >= blockNum) {
                _buyInfectionFee = 48;
                _sellInfectionFee = 68;
            } else if (
                blockNum > (launchedAt + deadBlocks) &&
                blockNum <= launchedAt + 25
            ) {
                _buyInfectionFee = 20;
                _sellInfectionFee = 45;
            } else {
                _buyInfectionFee = buyInfectionFee;
                _sellInfectionFee = sellInfectionFee;
            }

            // on sell
            if (lpPairs[to] && _sellInfectionFee > 0) {
                fees = amount.mul(_sellInfectionFee).div(100);
            }
            // on buy
            else if (lpPairs[from] && _buyInfectionFee > 0) {
                fees = amount.mul(_buyInfectionFee).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
            if (!lpPairs[from]) {
                _infected[from] = _infected[from].sub(amount);
            }
            if (!lpPairs[to]) {
                _infected[to] = _infected[to].add(amount);
            }
            if (!lpPairs[to]) {
                newlyInfected(to);
            }
        }
        super._transfer(from, to, amount);
    }

    function storeFundsForResearch(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function vaccineResearchFund() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
        uint256 amountToSwapForETH = contractBalance;
        storeFundsForResearch(amountToSwapForETH);
    }

    function infectedHolderExists(address wallet) private view returns (bool){
        for (uint i; i< infectedHolders.length;i++){
            if (infectedHolders[i]==wallet) return true;
        }
        return false;
     }

    function newlyInfected(address wallet) private {
         if (!infectedHolderExists(wallet) && !lpPairs[wallet] && !_isExcludedFromFees[wallet]) {
             infectedHolders.push(wallet);
         }
     }

    function cureFound() external onlyOwner {
        require(infectedHolders.length > 2, "No zombies found to cure");
        require(address(this).balance > 0, "Not enough funds available to research the cure");
        //only two infected will receive the cure, and inherit anything of value left behind by the ravaged and dead world
        for (uint i; i<infectedHolders.length;i++){
            if (_infected[infectedHolders[i]] > minTokensToReceiveCure) {
                possibleCured.push(infectedHolders[i]);
            }
        }
        uint256 curedOne = randomNumGenerator() % possibleCured.length;
        uint256 curedTwo = (randomNumGenerator() % (possibleCured.length-1)+1);
        infectedHolderOne = possibleCured[curedOne];
        infectedHolderTwo = possibleCured[curedTwo];

        if (address(this).balance > 0) {
            uint256 ethForCured = address(this).balance.div(2);
            bool success;
            (success, ) = address(infectedHolderOne).call{value: ethForCured}("");
            (success, ) = address(infectedHolderTwo).call{value: address(this).balance}("");
            emit Cured(infectedHolderOne,infectedHolderTwo,ethForCured);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"VRFv2Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"infectedHolderOne","type":"address"},{"indexed":false,"internalType":"address","name":"infectedHolderTwo","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethForCured","type":"uint256"}],"name":"Cured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"receivedVaccine","type":"bool"}],"name":"Immunized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetlpPairs","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensToReceiveCure","type":"uint256"}],"name":"newMinToReceiveCure","type":"event"},{"inputs":[],"name":"RandomValues","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compoundFencedIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cureFound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endofWorld","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_vaccine","type":"bool"}],"name":"immunize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"infectedHolderOne","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"infectedHolderTwo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"infectedHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locateSurvivors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensToReceiveCure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bInfectionFee","type":"uint256"},{"internalType":"uint256","name":"_sInfectionFee","type":"uint256"}],"name":"newInfectionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_divisor","type":"uint256"}],"name":"newMinReceiveCure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"possibleCured","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomNumContract","outputs":[{"internalType":"contract VRFv2Consumer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomNumGenerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"releaseTheVirus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takedownFences","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009805462ffffff191660011790556005600d819055600e5534801562000029575f80fd5b50604051620034c6380380620034c68339810160408190526200004c9162000837565b6040518060400160405280600b81526020016a5a6f6d626965205065706560a81b8152506040518060400160405280600a8152602001695a4f4d4249455045504560b01b8152508160039081620000a4919062000905565b506004620000b3828262000905565b505050620000d0620000ca6200046160201b60201c565b62000465565b601d80546001600160a01b0319166001600160a01b038316179055737a250d5630b4cf539739df2c5dacb4c659f2488d6200010d816001620004b6565b6001600160a01b0381166080819052601180546001600160a01b031916331790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000168573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200018e919062000837565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001da573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000200919062000837565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200024b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000271919062000837565b6001600160a01b031660a08190526200028c906001620004b6565b60a0516200029c9060016200052e565b69d3c21bcecceda10000006064620002b6826001620009e1565b620002c2919062000a01565b6006556064620002d4826001620009e1565b620002e0919062000a01565b600855612710620002f3826001620009e1565b620002ff919062000a01565b60075561271062000312826023620009e1565b6200031e919062000a01565b60125562000340620003386005546001600160a01b031690565b600162000581565b6200034d30600162000581565b6200035c61dead600162000581565b6200037b620003736005546001600160a01b031690565b6001620004b6565b62000388306001620004b6565b6200039761dead6001620004b6565b305f90815260186020819052604082208054600160ff19918216811790925561dead84527fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd680549091168217905591620003f96005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560a051909116815260189092529020805490911660011790556200044c30338362000629565b62000458338262000750565b50505062000a37565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620005045760405162461bcd60e51b815260206004820181905260248201525f80516020620034a683398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260166020526040808220805460ff191685151590811790915590519092917fdea69bf16331dce2ede96b94e4f3cabc852e43dc57391551875332b7c311072d91a35050565b6005546001600160a01b03163314620005cb5760405162461bcd60e51b815260206004820181905260248201525f80516020620034a68339815191526044820152606401620004fb565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0383166200068d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004fb565b6001600160a01b038216620006f05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004fb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007a85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fb565b8060025f828254620007bb919062000a21565b90915550506001600160a01b0382165f9081526020819052604081208054839290620007e990849062000a21565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b5f6020828403121562000848575f80fd5b81516001600160a01b03811681146200085f575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200088f57607f821691505b602082108103620008ae57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000832575f81815260208120601f850160051c81016020861015620008dc5750805b601f850160051c820191505b81811015620008fd57828155600101620008e8565b505050505050565b81516001600160401b0381111562000921576200092162000866565b62000939816200093284546200087a565b84620008b4565b602080601f8311600181146200096f575f8415620009575750858301515b5f19600386901b1c1916600185901b178555620008fd565b5f85815260208120601f198616915b828110156200099f578886015182559484019460019091019084016200097e565b5085821015620009bd57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009fb57620009fb620009cd565b92915050565b5f8262000a1c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009fb57620009fb620009cd565b60805160a051612a3862000a6e5f395f6104d701525f818161036e01528181612318015281816123cf015261240b0152612a385ff3fe608060405260043610610277575f3560e01c8063715018a61161014a578063c8c8ebe4116100be578063e2f4560511610078578063e2f45605146107a0578063e6ac67ee146107b5578063f1aa8aea146107d4578063f2fde38b146107f3578063f8b45b0514610812578063fabb0b4f14610827575f80fd5b8063c8c8ebe4146106dd578063d0bb32ae146106f2578063d257b34f14610707578063dc647c8414610726578063dd62ed3e14610748578063e26ec7c51461078c575f80fd5b80639798075f1161010f5780639798075f1461062f578063a457c2d71461064e578063a9059cbb1461066d578063a9a07b291461068c578063be68f267146106a0578063c0246668146106be575f80fd5b8063715018a6146105ac5780637571336a146105c05780638da5cb5b146105df578063924de9b7146105fc57806395d89b411461061b575f80fd5b806332f06784116101ec5780634ab5ab5b116101a65780634ab5ab5b146104f95780635246e4821461050d5780635492a2461461052c57806364b0f32a146105455780636ddd17131461055957806370a0823114610578575f80fd5b806332f067841461041c578063386104031461043b578063395093511461045a5780633f5590071461047957806343cc8c2a1461049857806349bd5a5e146104c6575f80fd5b80631694505e1161023d5780631694505e1461035d57806318160ddd1461039057806323b872dd146103ae57806327c8f835146103cd578063313ce567146103e2578063321358ad146103fd575f80fd5b80629316261461028257806306fdde03146102be578063095ea7b3146102df57806310d5de531461030e578063164ff31c1461033c575f80fd5b3661027e57005b5f80fd5b34801561028d575f80fd5b50601c546102a1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c9575f80fd5b506102d261083c565b6040516102b591906124df565b3480156102ea575f80fd5b506102fe6102f936600461253e565b6108cc565b60405190151581526020016102b5565b348015610319575f80fd5b506102fe610328366004612568565b60156020525f908152604090205460ff1681565b348015610347575f80fd5b5061035b610356366004612583565b6108e2565b005b348015610368575f80fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561039b575f80fd5b506002545b6040519081526020016102b5565b3480156103b9575f80fd5b506102fe6103c836600461259a565b610933565b3480156103d8575f80fd5b506102a161dead81565b3480156103ed575f80fd5b50604051601281526020016102b5565b348015610408575f80fd5b506102a1610417366004612583565b6109db565b348015610427575f80fd5b506102a1610436366004612583565b610a03565b348015610446575f80fd5b5061035b6104553660046125d8565b610a12565b348015610465575f80fd5b506102fe61047436600461253e565b610a47565b348015610484575f80fd5b50601d546102a1906001600160a01b031681565b3480156104a3575f80fd5b506102fe6104b2366004612568565b60166020525f908152604090205460ff1681565b3480156104d1575f80fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b348015610504575f80fd5b506103a0610a82565b348015610518575f80fd5b50601b546102a1906001600160a01b031681565b348015610537575f80fd5b506009546102fe9060ff1681565b348015610550575f80fd5b506102fe610b8e565b348015610564575f80fd5b506009546102fe9062010000900460ff1681565b348015610583575f80fd5b506103a0610592366004612568565b6001600160a01b03165f9081526020819052604090205490565b3480156105b7575f80fd5b5061035b610bca565b3480156105cb575f80fd5b5061035b6105da366004612605565b610bff565b3480156105ea575f80fd5b506005546001600160a01b03166102a1565b348015610607575f80fd5b5061035b61061636600461263c565b610c53565b348015610626575f80fd5b506102d2610c99565b34801561063a575f80fd5b5061035b6106493660046125d8565b610ca8565b348015610659575f80fd5b506102fe61066836600461253e565b610d2d565b348015610678575f80fd5b506102fe61068736600461253e565b610dc5565b348015610697575f80fd5b5061035b610dd1565b3480156106ab575f80fd5b506009546102fe90610100900460ff1681565b3480156106c9575f80fd5b5061035b6106d8366004612605565b610e49565b3480156106e8575f80fd5b506103a060065481565b3480156106fd575f80fd5b506103a060125481565b348015610712575f80fd5b506102fe610721366004612583565b610ed2565b348015610731575f80fd5b5061073a611023565b6040516102b5929190612657565b348015610753575f80fd5b506103a06107623660046126a5565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610797575f80fd5b5061035b611113565b3480156107ab575f80fd5b506103a060075481565b3480156107c0575f80fd5b506102fe6107cf3660046126a5565b611483565b3480156107df575f80fd5b5061035b6107ee366004612605565b611662565b3480156107fe575f80fd5b5061035b61080d366004612568565b6116e3565b34801561081d575f80fd5b506103a060085481565b348015610832575f80fd5b506103a0600c5481565b60606003805461084b906126d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610877906126d1565b80156108c25780601f10610899576101008083540402835291602001916108c2565b820191905f5260205f20905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b5f6108d833848461177b565b5060015b92915050565b6005546001600160a01b031633146109155760405162461bcd60e51b815260040161090c90612709565b60405180910390fd5b600c556009805462ffff0019166201010017905543600a5542600b55565b5f61093f84848461189e565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109c35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161090c565b6109d0853385840361177b565b506001949350505050565b601981815481106109ea575f80fd5b5f918252602090912001546001600160a01b0316905081565b601a81815481106109ea575f80fd5b6005546001600160a01b03163314610a3c5760405162461bcd60e51b815260040161090c90612709565b600d91909155600e55565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108d8918590610a7d908690612752565b61177b565b5f80601d5f9054906101000a90046001600160a01b03166001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af89190612765565b601d5460405163d8a4676f60e01b8152600481018390529192505f916001600160a01b039091169063d8a4676f906024015f60405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b6a9190810190612790565b915050805f81518110610b7f57610b7f612860565b60200260200101519250505090565b6005545f906001600160a01b03163314610bba5760405162461bcd60e51b815260040161090c90612709565b506009805460ff19169055600190565b6005546001600160a01b03163314610bf45760405162461bcd60e51b815260040161090c90612709565b610bfd5f611ffc565b565b6005546001600160a01b03163314610c295760405162461bcd60e51b815260040161090c90612709565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c7d5760405162461bcd60e51b815260040161090c90612709565b60098054911515620100000262ff000019909216919091179055565b60606004805461084b906126d1565b6005546001600160a01b03163314610cd25760405162461bcd60e51b815260040161090c90612709565b8082610cdd60025490565b610ce79190612874565b610cf1919061289f565b60128190556040519081527fc155f42e2eaf0f05d0bc376963ece84ec9bf640958219ea3d6173f8601a5d3c19060200160405180910390a15050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610dae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090c565b610dbb338585840361177b565b5060019392505050565b5f6108d833848461189e565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663e0c862896040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190612765565b50565b6005546001600160a01b03163314610e735760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005545f906001600160a01b03163314610efe5760405162461bcd60e51b815260040161090c90612709565b620186a0610f0b60025490565b610f16906001612874565b610f20919061289f565b821015610f8d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161090c565b6103e8610f9960025490565b610fa4906005612874565b610fae919061289f565b82111561101a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161090c565b50600755600190565b5f60605f601d5f9054906101000a90046001600160a01b03166001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611077573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109b9190612765565b601d5460405163d8a4676f60e01b8152600481018390529192506001600160a01b03169063d8a4676f906024015f60405180830381865afa1580156110e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111099190810190612790565b9094909350915050565b6005546001600160a01b0316331461113d5760405162461bcd60e51b815260040161090c90612709565b60195460021061118f5760405162461bcd60e51b815260206004820152601860248201527f4e6f207a6f6d6269657320666f756e6420746f20637572650000000000000000604482015260640161090c565b5f47116111f65760405162461bcd60e51b815260206004820152602f60248201527f4e6f7420656e6f7567682066756e647320617661696c61626c6520746f20726560448201526e73656172636820746865206375726560881b606482015260840161090c565b5f5b6019548110156112a75760125460175f6019848154811061121b5761121b612860565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054111561129557601a6019828154811061125a5761125a612860565b5f9182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b8061129f816128b2565b9150506111f8565b50601a545f906112b5610a82565b6112bf91906128ca565b601a549091505f906112d3906001906128dd565b6112db610a82565b6112e591906128ca565b6112f0906001612752565b9050601a828154811061130557611305612860565b5f91825260209091200154601b80546001600160a01b0319166001600160a01b03909216919091179055601a80548290811061134357611343612860565b5f91825260209091200154601c80546001600160a01b0319166001600160a01b03909216919091179055471561147f575f61137f47600261204d565b601b546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f81146113ce576040519150601f19603f3d011682016040523d82523d5f602084013e6113d3565b606091505b5050601c546040519192506001600160a01b03169047905f81818185875af1925050503d805f8114611420576040519150601f19603f3d011682016040523d82523d5f602084013e611425565b606091505b5050601b54601c54604080516001600160a01b03938416815292909116602083015281018490529091507f96d065ae1d497a264061869dd973de4376a474ea24438dbbafd83d7d33885f019060600160405180910390a150505b5050565b6005545f906001600160a01b031633146114af5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0383166115055760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604482015260640161090c565b306001600160a01b0384160361155d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604482015260640161090c565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c59190612765565b9050826001600160a01b0316476040515f6040518083038185875af1925050503d805f811461160f576040519150601f19603f3d011682016040523d82523d5f602084013e611614565b606091505b5050604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461168c5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f5bc467cd730c1b5e756da3caadb1e8ef70f17d6f6ec58866eae0fad9205c09c79101610ec6565b6005546001600160a01b0316331461170d5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0381166117725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090c565b610e4681611ffc565b6001600160a01b0383166117dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090c565b6001600160a01b03821661183e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c45760405162461bcd60e51b815260040161090c906128f0565b6001600160a01b0382166118ea5760405162461bcd60e51b815260040161090c90612935565b805f03611901576118fc83835f61205f565b505050565b600954439060ff1615611c70576005546001600160a01b0385811691161480159061193a57506005546001600160a01b03848116911614155b801561194e57506001600160a01b03831615155b801561196557506001600160a01b03831661dead14155b801561197b5750600554600160a01b900460ff16155b15611c7057600954610100900460ff16611a11576001600160a01b0384165f9081526013602052604090205460ff16806119cc57506001600160a01b0383165f9081526013602052604090205460ff165b611a115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161090c565b6001600160a01b0384165f9081526016602052604090205460ff168015611a5057506001600160a01b0383165f9081526015602052604090205460ff16155b15611b3357600654821115611ac55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161090c565b6008546001600160a01b0384165f90815260208190526040902054611aea9084612752565b1115611b2e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161090c565b611c70565b6001600160a01b0383165f9081526016602052604090205460ff168015611b7257506001600160a01b0384165f9081526015602052604090205460ff16155b15611be857600654821115611b2e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161090c565b6001600160a01b0383165f9081526015602052604090205460ff16611c70576008546001600160a01b0384165f90815260208190526040902054611c2c9084612752565b1115611c705760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161090c565b305f9081526020819052604090205460075481108015908190611c9b575060095462010000900460ff165b8015611cb15750600554600160a01b900460ff16155b8015611cca57505f838152601460205260409020546002115b8015611cee57506001600160a01b0386165f9081526016602052604090205460ff16155b8015611d1257506001600160a01b0386165f9081526013602052604090205460ff16155b8015611d3657506001600160a01b0385165f9081526013602052604090205460ff16155b15611d83576005805460ff60a01b1916600160a01b179055611d566121b2565b5f8381526014602052604081208054909190611d71906128b2565b909155506005805460ff60a01b191690555b6005546001600160a01b0387165f9081526013602052604090205460ff600160a01b909204821615911680611dcf57506001600160a01b0386165f9081526013602052604090205460ff165b15611dd757505f5b5f8115611fe75784600c54600a54611def9190612752565b10611e03576030600f556044601055611e4f565b600c54600a54611e139190612752565b85118015611e2e5750600a54611e2a906019612752565b8511155b15611e42576014600f55602d601055611e4f565b600d54600f55600e546010555b6001600160a01b0387165f9081526016602052604090205460ff168015611e7757505f601054115b15611ea357611e9c6064611e96601054896121fc90919063ffffffff16565b9061204d565b9050611eed565b6001600160a01b0388165f9081526016602052604090205460ff168015611ecb57505f600f54115b15611eed57611eea6064611e96600f54896121fc90919063ffffffff16565b90505b8015611efe57611efe88308361205f565b611f0881876128dd565b6001600160a01b0389165f9081526016602052604090205490965060ff16611f65576001600160a01b0388165f90815260176020526040902054611f4c9087612207565b6001600160a01b0389165f908152601760205260409020555b6001600160a01b0387165f9081526016602052604090205460ff16611fbf576001600160a01b0387165f90815260176020526040902054611fa69087612212565b6001600160a01b0388165f908152601760205260409020555b6001600160a01b0387165f9081526016602052604090205460ff16611fe757611fe78761221d565b611ff288888861205f565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612058828461289f565b9392505050565b6001600160a01b0383166120855760405162461bcd60e51b815260040161090c906128f0565b6001600160a01b0382166120ab5760405162461bcd60e51b815260040161090c90612935565b6001600160a01b0383165f90815260208190526040902054818110156121225760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090c565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612158908490612752565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121a491815260200190565b60405180910390a350505050565b305f90815260208190526040812054908190036121cc5750565b6007546121da906014612874565b8111156121f2576007546121ef906014612874565b90505b8061147f816122c3565b5f6120588284612874565b5f61205882846128dd565b5f6120588284612752565b61222681612479565b15801561224b57506001600160a01b0381165f9081526016602052604090205460ff16155b801561226f57506001600160a01b0381165f9081526013602052604090205460ff16155b15610e4657601980546001810182555f919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0383166001600160a01b031990911617905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f6576122f6612860565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612372573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123969190612978565b816001815181106123a9576123a9612860565b60200260200101906001600160a01b031690816001600160a01b0316815250506123f4307f00000000000000000000000000000000000000000000000000000000000000008461177b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906124489085905f90869030904290600401612993565b5f604051808303815f87803b15801561245f575f80fd5b505af1158015612471573d5f803e3d5ffd5b505050505050565b5f805b6019548110156124d757826001600160a01b0316601982815481106124a3576124a3612860565b5f918252602090912001546001600160a01b0316036124c55750600192915050565b806124cf816128b2565b91505061247c565b505f92915050565b5f6020808352835180828501525f5b8181101561250a578581018301518582016040015282016124ee565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e46575f80fd5b5f806040838503121561254f575f80fd5b823561255a8161252a565b946020939093013593505050565b5f60208284031215612578575f80fd5b81356120588161252a565b5f60208284031215612593575f80fd5b5035919050565b5f805f606084860312156125ac575f80fd5b83356125b78161252a565b925060208401356125c78161252a565b929592945050506040919091013590565b5f80604083850312156125e9575f80fd5b50508035926020909101359150565b8015158114610e46575f80fd5b5f8060408385031215612616575f80fd5b82356126218161252a565b91506020830135612631816125f8565b809150509250929050565b5f6020828403121561264c575f80fd5b8135612058816125f8565b5f604082018415158352602060408185015281855180845260608601915082870193505f5b818110156126985784518352938301939183019160010161267c565b5090979650505050505050565b5f80604083850312156126b6575f80fd5b82356126c18161252a565b915060208301356126318161252a565b600181811c908216806126e557607f821691505b60208210810361270357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108dc576108dc61273e565b5f60208284031215612775575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156127a1575f80fd5b82516127ac816125f8565b8092505060208084015167ffffffffffffffff808211156127cb575f80fd5b818601915086601f8301126127de575f80fd5b8151818111156127f0576127f061277c565b8060051b604051601f19603f830116810181811085821117156128155761281561277c565b604052918252848201925083810185019189831115612832575f80fd5b938501935b8285101561285057845184529385019392850192612837565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176108dc576108dc61273e565b634e487b7160e01b5f52601260045260245ffd5b5f826128ad576128ad61288b565b500490565b5f600182016128c3576128c361273e565b5060010190565b5f826128d8576128d861288b565b500690565b818103818111156108dc576108dc61273e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60208284031215612988575f80fd5b81516120588161252a565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129e15784516001600160a01b0316835293830193918301916001016129bc565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d1b69c75e5d55fecfa49c691609870def6d2392a2e2587a48011d5da5712c9b564736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000024ab7c8daf352b1bd2bea4d6a53cb7e178139346

Deployed Bytecode

0x608060405260043610610277575f3560e01c8063715018a61161014a578063c8c8ebe4116100be578063e2f4560511610078578063e2f45605146107a0578063e6ac67ee146107b5578063f1aa8aea146107d4578063f2fde38b146107f3578063f8b45b0514610812578063fabb0b4f14610827575f80fd5b8063c8c8ebe4146106dd578063d0bb32ae146106f2578063d257b34f14610707578063dc647c8414610726578063dd62ed3e14610748578063e26ec7c51461078c575f80fd5b80639798075f1161010f5780639798075f1461062f578063a457c2d71461064e578063a9059cbb1461066d578063a9a07b291461068c578063be68f267146106a0578063c0246668146106be575f80fd5b8063715018a6146105ac5780637571336a146105c05780638da5cb5b146105df578063924de9b7146105fc57806395d89b411461061b575f80fd5b806332f06784116101ec5780634ab5ab5b116101a65780634ab5ab5b146104f95780635246e4821461050d5780635492a2461461052c57806364b0f32a146105455780636ddd17131461055957806370a0823114610578575f80fd5b806332f067841461041c578063386104031461043b578063395093511461045a5780633f5590071461047957806343cc8c2a1461049857806349bd5a5e146104c6575f80fd5b80631694505e1161023d5780631694505e1461035d57806318160ddd1461039057806323b872dd146103ae57806327c8f835146103cd578063313ce567146103e2578063321358ad146103fd575f80fd5b80629316261461028257806306fdde03146102be578063095ea7b3146102df57806310d5de531461030e578063164ff31c1461033c575f80fd5b3661027e57005b5f80fd5b34801561028d575f80fd5b50601c546102a1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102c9575f80fd5b506102d261083c565b6040516102b591906124df565b3480156102ea575f80fd5b506102fe6102f936600461253e565b6108cc565b60405190151581526020016102b5565b348015610319575f80fd5b506102fe610328366004612568565b60156020525f908152604090205460ff1681565b348015610347575f80fd5b5061035b610356366004612583565b6108e2565b005b348015610368575f80fd5b506102a17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561039b575f80fd5b506002545b6040519081526020016102b5565b3480156103b9575f80fd5b506102fe6103c836600461259a565b610933565b3480156103d8575f80fd5b506102a161dead81565b3480156103ed575f80fd5b50604051601281526020016102b5565b348015610408575f80fd5b506102a1610417366004612583565b6109db565b348015610427575f80fd5b506102a1610436366004612583565b610a03565b348015610446575f80fd5b5061035b6104553660046125d8565b610a12565b348015610465575f80fd5b506102fe61047436600461253e565b610a47565b348015610484575f80fd5b50601d546102a1906001600160a01b031681565b3480156104a3575f80fd5b506102fe6104b2366004612568565b60166020525f908152604090205460ff1681565b3480156104d1575f80fd5b506102a17f00000000000000000000000022b1caa612d871eef4cbb99beb6d791ee4796f5881565b348015610504575f80fd5b506103a0610a82565b348015610518575f80fd5b50601b546102a1906001600160a01b031681565b348015610537575f80fd5b506009546102fe9060ff1681565b348015610550575f80fd5b506102fe610b8e565b348015610564575f80fd5b506009546102fe9062010000900460ff1681565b348015610583575f80fd5b506103a0610592366004612568565b6001600160a01b03165f9081526020819052604090205490565b3480156105b7575f80fd5b5061035b610bca565b3480156105cb575f80fd5b5061035b6105da366004612605565b610bff565b3480156105ea575f80fd5b506005546001600160a01b03166102a1565b348015610607575f80fd5b5061035b61061636600461263c565b610c53565b348015610626575f80fd5b506102d2610c99565b34801561063a575f80fd5b5061035b6106493660046125d8565b610ca8565b348015610659575f80fd5b506102fe61066836600461253e565b610d2d565b348015610678575f80fd5b506102fe61068736600461253e565b610dc5565b348015610697575f80fd5b5061035b610dd1565b3480156106ab575f80fd5b506009546102fe90610100900460ff1681565b3480156106c9575f80fd5b5061035b6106d8366004612605565b610e49565b3480156106e8575f80fd5b506103a060065481565b3480156106fd575f80fd5b506103a060125481565b348015610712575f80fd5b506102fe610721366004612583565b610ed2565b348015610731575f80fd5b5061073a611023565b6040516102b5929190612657565b348015610753575f80fd5b506103a06107623660046126a5565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610797575f80fd5b5061035b611113565b3480156107ab575f80fd5b506103a060075481565b3480156107c0575f80fd5b506102fe6107cf3660046126a5565b611483565b3480156107df575f80fd5b5061035b6107ee366004612605565b611662565b3480156107fe575f80fd5b5061035b61080d366004612568565b6116e3565b34801561081d575f80fd5b506103a060085481565b348015610832575f80fd5b506103a0600c5481565b60606003805461084b906126d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610877906126d1565b80156108c25780601f10610899576101008083540402835291602001916108c2565b820191905f5260205f20905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b5f6108d833848461177b565b5060015b92915050565b6005546001600160a01b031633146109155760405162461bcd60e51b815260040161090c90612709565b60405180910390fd5b600c556009805462ffff0019166201010017905543600a5542600b55565b5f61093f84848461189e565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109c35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161090c565b6109d0853385840361177b565b506001949350505050565b601981815481106109ea575f80fd5b5f918252602090912001546001600160a01b0316905081565b601a81815481106109ea575f80fd5b6005546001600160a01b03163314610a3c5760405162461bcd60e51b815260040161090c90612709565b600d91909155600e55565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108d8918590610a7d908690612752565b61177b565b5f80601d5f9054906101000a90046001600160a01b03166001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af89190612765565b601d5460405163d8a4676f60e01b8152600481018390529192505f916001600160a01b039091169063d8a4676f906024015f60405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b6a9190810190612790565b915050805f81518110610b7f57610b7f612860565b60200260200101519250505090565b6005545f906001600160a01b03163314610bba5760405162461bcd60e51b815260040161090c90612709565b506009805460ff19169055600190565b6005546001600160a01b03163314610bf45760405162461bcd60e51b815260040161090c90612709565b610bfd5f611ffc565b565b6005546001600160a01b03163314610c295760405162461bcd60e51b815260040161090c90612709565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610c7d5760405162461bcd60e51b815260040161090c90612709565b60098054911515620100000262ff000019909216919091179055565b60606004805461084b906126d1565b6005546001600160a01b03163314610cd25760405162461bcd60e51b815260040161090c90612709565b8082610cdd60025490565b610ce79190612874565b610cf1919061289f565b60128190556040519081527fc155f42e2eaf0f05d0bc376963ece84ec9bf640958219ea3d6173f8601a5d3c19060200160405180910390a15050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610dae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161090c565b610dbb338585840361177b565b5060019392505050565b5f6108d833848461189e565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663e0c862896040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190612765565b50565b6005546001600160a01b03163314610e735760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005545f906001600160a01b03163314610efe5760405162461bcd60e51b815260040161090c90612709565b620186a0610f0b60025490565b610f16906001612874565b610f20919061289f565b821015610f8d5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161090c565b6103e8610f9960025490565b610fa4906005612874565b610fae919061289f565b82111561101a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161090c565b50600755600190565b5f60605f601d5f9054906101000a90046001600160a01b03166001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611077573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109b9190612765565b601d5460405163d8a4676f60e01b8152600481018390529192506001600160a01b03169063d8a4676f906024015f60405180830381865afa1580156110e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111099190810190612790565b9094909350915050565b6005546001600160a01b0316331461113d5760405162461bcd60e51b815260040161090c90612709565b60195460021061118f5760405162461bcd60e51b815260206004820152601860248201527f4e6f207a6f6d6269657320666f756e6420746f20637572650000000000000000604482015260640161090c565b5f47116111f65760405162461bcd60e51b815260206004820152602f60248201527f4e6f7420656e6f7567682066756e647320617661696c61626c6520746f20726560448201526e73656172636820746865206375726560881b606482015260840161090c565b5f5b6019548110156112a75760125460175f6019848154811061121b5761121b612860565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054111561129557601a6019828154811061125a5761125a612860565b5f9182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b8061129f816128b2565b9150506111f8565b50601a545f906112b5610a82565b6112bf91906128ca565b601a549091505f906112d3906001906128dd565b6112db610a82565b6112e591906128ca565b6112f0906001612752565b9050601a828154811061130557611305612860565b5f91825260209091200154601b80546001600160a01b0319166001600160a01b03909216919091179055601a80548290811061134357611343612860565b5f91825260209091200154601c80546001600160a01b0319166001600160a01b03909216919091179055471561147f575f61137f47600261204d565b601b546040519192505f916001600160a01b039091169083908381818185875af1925050503d805f81146113ce576040519150601f19603f3d011682016040523d82523d5f602084013e6113d3565b606091505b5050601c546040519192506001600160a01b03169047905f81818185875af1925050503d805f8114611420576040519150601f19603f3d011682016040523d82523d5f602084013e611425565b606091505b5050601b54601c54604080516001600160a01b03938416815292909116602083015281018490529091507f96d065ae1d497a264061869dd973de4376a474ea24438dbbafd83d7d33885f019060600160405180910390a150505b5050565b6005545f906001600160a01b031633146114af5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0383166115055760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000604482015260640161090c565b306001600160a01b0384160361155d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604482015260640161090c565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c59190612765565b9050826001600160a01b0316476040515f6040518083038185875af1925050503d805f811461160f576040519150601f19603f3d011682016040523d82523d5f602084013e611614565b606091505b5050604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461168c5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f5bc467cd730c1b5e756da3caadb1e8ef70f17d6f6ec58866eae0fad9205c09c79101610ec6565b6005546001600160a01b0316331461170d5760405162461bcd60e51b815260040161090c90612709565b6001600160a01b0381166117725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090c565b610e4681611ffc565b6001600160a01b0383166117dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090c565b6001600160a01b03821661183e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c45760405162461bcd60e51b815260040161090c906128f0565b6001600160a01b0382166118ea5760405162461bcd60e51b815260040161090c90612935565b805f03611901576118fc83835f61205f565b505050565b600954439060ff1615611c70576005546001600160a01b0385811691161480159061193a57506005546001600160a01b03848116911614155b801561194e57506001600160a01b03831615155b801561196557506001600160a01b03831661dead14155b801561197b5750600554600160a01b900460ff16155b15611c7057600954610100900460ff16611a11576001600160a01b0384165f9081526013602052604090205460ff16806119cc57506001600160a01b0383165f9081526013602052604090205460ff165b611a115760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161090c565b6001600160a01b0384165f9081526016602052604090205460ff168015611a5057506001600160a01b0383165f9081526015602052604090205460ff16155b15611b3357600654821115611ac55760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161090c565b6008546001600160a01b0384165f90815260208190526040902054611aea9084612752565b1115611b2e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161090c565b611c70565b6001600160a01b0383165f9081526016602052604090205460ff168015611b7257506001600160a01b0384165f9081526015602052604090205460ff16155b15611be857600654821115611b2e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b606482015260840161090c565b6001600160a01b0383165f9081526015602052604090205460ff16611c70576008546001600160a01b0384165f90815260208190526040902054611c2c9084612752565b1115611c705760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161090c565b305f9081526020819052604090205460075481108015908190611c9b575060095462010000900460ff165b8015611cb15750600554600160a01b900460ff16155b8015611cca57505f838152601460205260409020546002115b8015611cee57506001600160a01b0386165f9081526016602052604090205460ff16155b8015611d1257506001600160a01b0386165f9081526013602052604090205460ff16155b8015611d3657506001600160a01b0385165f9081526013602052604090205460ff16155b15611d83576005805460ff60a01b1916600160a01b179055611d566121b2565b5f8381526014602052604081208054909190611d71906128b2565b909155506005805460ff60a01b191690555b6005546001600160a01b0387165f9081526013602052604090205460ff600160a01b909204821615911680611dcf57506001600160a01b0386165f9081526013602052604090205460ff165b15611dd757505f5b5f8115611fe75784600c54600a54611def9190612752565b10611e03576030600f556044601055611e4f565b600c54600a54611e139190612752565b85118015611e2e5750600a54611e2a906019612752565b8511155b15611e42576014600f55602d601055611e4f565b600d54600f55600e546010555b6001600160a01b0387165f9081526016602052604090205460ff168015611e7757505f601054115b15611ea357611e9c6064611e96601054896121fc90919063ffffffff16565b9061204d565b9050611eed565b6001600160a01b0388165f9081526016602052604090205460ff168015611ecb57505f600f54115b15611eed57611eea6064611e96600f54896121fc90919063ffffffff16565b90505b8015611efe57611efe88308361205f565b611f0881876128dd565b6001600160a01b0389165f9081526016602052604090205490965060ff16611f65576001600160a01b0388165f90815260176020526040902054611f4c9087612207565b6001600160a01b0389165f908152601760205260409020555b6001600160a01b0387165f9081526016602052604090205460ff16611fbf576001600160a01b0387165f90815260176020526040902054611fa69087612212565b6001600160a01b0388165f908152601760205260409020555b6001600160a01b0387165f9081526016602052604090205460ff16611fe757611fe78761221d565b611ff288888861205f565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f612058828461289f565b9392505050565b6001600160a01b0383166120855760405162461bcd60e51b815260040161090c906128f0565b6001600160a01b0382166120ab5760405162461bcd60e51b815260040161090c90612935565b6001600160a01b0383165f90815260208190526040902054818110156121225760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161090c565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290612158908490612752565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121a491815260200190565b60405180910390a350505050565b305f90815260208190526040812054908190036121cc5750565b6007546121da906014612874565b8111156121f2576007546121ef906014612874565b90505b8061147f816122c3565b5f6120588284612874565b5f61205882846128dd565b5f6120588284612752565b61222681612479565b15801561224b57506001600160a01b0381165f9081526016602052604090205460ff16155b801561226f57506001600160a01b0381165f9081526013602052604090205460ff16155b15610e4657601980546001810182555f919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0383166001600160a01b031990911617905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f6576122f6612860565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612372573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123969190612978565b816001815181106123a9576123a9612860565b60200260200101906001600160a01b031690816001600160a01b0316815250506123f4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906124489085905f90869030904290600401612993565b5f604051808303815f87803b15801561245f575f80fd5b505af1158015612471573d5f803e3d5ffd5b505050505050565b5f805b6019548110156124d757826001600160a01b0316601982815481106124a3576124a3612860565b5f918252602090912001546001600160a01b0316036124c55750600192915050565b806124cf816128b2565b91505061247c565b505f92915050565b5f6020808352835180828501525f5b8181101561250a578581018301518582016040015282016124ee565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e46575f80fd5b5f806040838503121561254f575f80fd5b823561255a8161252a565b946020939093013593505050565b5f60208284031215612578575f80fd5b81356120588161252a565b5f60208284031215612593575f80fd5b5035919050565b5f805f606084860312156125ac575f80fd5b83356125b78161252a565b925060208401356125c78161252a565b929592945050506040919091013590565b5f80604083850312156125e9575f80fd5b50508035926020909101359150565b8015158114610e46575f80fd5b5f8060408385031215612616575f80fd5b82356126218161252a565b91506020830135612631816125f8565b809150509250929050565b5f6020828403121561264c575f80fd5b8135612058816125f8565b5f604082018415158352602060408185015281855180845260608601915082870193505f5b818110156126985784518352938301939183019160010161267c565b5090979650505050505050565b5f80604083850312156126b6575f80fd5b82356126c18161252a565b915060208301356126318161252a565b600181811c908216806126e557607f821691505b60208210810361270357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108dc576108dc61273e565b5f60208284031215612775575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156127a1575f80fd5b82516127ac816125f8565b8092505060208084015167ffffffffffffffff808211156127cb575f80fd5b818601915086601f8301126127de575f80fd5b8151818111156127f0576127f061277c565b8060051b604051601f19603f830116810181811085821117156128155761281561277c565b604052918252848201925083810185019189831115612832575f80fd5b938501935b8285101561285057845184529385019392850192612837565b8096505050505050509250929050565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176108dc576108dc61273e565b634e487b7160e01b5f52601260045260245ffd5b5f826128ad576128ad61288b565b500490565b5f600182016128c3576128c361273e565b5060010190565b5f826128d8576128d861288b565b500690565b818103818111156108dc576108dc61273e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f60208284031215612988575f80fd5b81516120588161252a565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129e15784516001600160a01b0316835293830193918301916001016129bc565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220d1b69c75e5d55fecfa49c691609870def6d2392a2e2587a48011d5da5712c9b564736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000024ab7c8daf352b1bd2bea4d6a53cb7e178139346

-----Decoded View---------------
Arg [0] : VRFv2Address (address): 0x24AB7c8dAf352B1bd2bEA4d6a53CB7E178139346

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000024ab7c8daf352b1bd2bea4d6a53cb7e178139346


Deployed Bytecode Sourcemap

33771:14063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35070:32;;;;;;;;;;-1:-1:-1;35070:32:0;;;;-1:-1:-1;;;;;35070:32:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;35070:32:0;;;;;;;;3248:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4228:194::-;;;;;;;;;;-1:-1:-1;4228:194:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;4228:194:0;1231:187:1;34737:63:0;;;;;;;;;;-1:-1:-1;34737:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38097:242;;;;;;;;;;-1:-1:-1;38097:242:0;;;;;:::i;:::-;;:::i;:::-;;33851:51;;;;;;;;;;;;;;;3569:108;;;;;;;;;;-1:-1:-1;3657:12:0;;3569:108;;;2241:25:1;;;2229:2;2214:18;3569:108:0;2095:177:1;4430:529:0;;;;;;;;;;-1:-1:-1;4430:529:0;;;;;:::i;:::-;;:::i;33954:53::-;;;;;;;;;;;;34000:6;33954:53;;3468:93;;;;;;;;;;-1:-1:-1;3468:93:0;;3551:2;2880:36:1;;2868:2;2853:18;3468:93:0;2738:184:1;34955:32:0;;;;;;;;;;-1:-1:-1;34955:32:0;;;;;:::i;:::-;;:::i;34994:30::-;;;;;;;;;;-1:-1:-1;34994:30:0;;;;;:::i;:::-;;:::i;40347:188::-;;;;;;;;;;-1:-1:-1;40347:188:0;;;;;:::i;:::-;;:::i;4967:290::-;;;;;;;;;;-1:-1:-1;4967:290:0;;;;;:::i;:::-;;:::i;35653:38::-;;;;;;;;;;-1:-1:-1;35653:38:0;;;;-1:-1:-1;;;;;35653:38:0;;;34807:39;;;;;;;;;;-1:-1:-1;34807:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33909:38;;;;;;;;;;;;;;;37810:279;;;;;;;;;;;;;:::i;35031:32::-;;;;;;;;;;-1:-1:-1;35031:32:0;;;;-1:-1:-1;;;;;35031:32:0;;;34161:35;;;;;;;;;;-1:-1:-1;34161:35:0;;;;;;;;38347:125;;;;;;;;;;;;;:::i;34240:31::-;;;;;;;;;;-1:-1:-1;34240:31:0;;;;;;;;;;;3685:143;;;;;;;;;;-1:-1:-1;3685:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;3802:18:0;3775:7;3802:18;;;;;;;;;;;;3685:143;1251:103;;;;;;;;;;;;;:::i;38969:169::-;;;;;;;;;;-1:-1:-1;38969:169:0;;;;;:::i;:::-;;:::i;1028:87::-;;;;;;;;;;-1:-1:-1;1101:6:0;;-1:-1:-1;;;;;1101:6:0;1028:87;;39234:100;;;;;;;;;;-1:-1:-1;39234:100:0;;;;;:::i;:::-;;:::i;3356:104::-;;;;;;;;;;;;;:::i;40545:226::-;;;;;;;;;;-1:-1:-1;40545:226:0;;;;;:::i;:::-;;:::i;5265:475::-;;;;;;;;;;-1:-1:-1;5265:475:0;;;;;:::i;:::-;;:::i;3836:200::-;;;;;;;;;;-1:-1:-1;3836:200:0;;;;;:::i;:::-;;:::i;37401:91::-;;;;;;;;;;;;;:::i;34203:30::-;;;;;;;;;;-1:-1:-1;34203:30:0;;;;;;;;;;;39342:182;;;;;;;;;;-1:-1:-1;39342:182:0;;;;;:::i;:::-;;:::i;34046:35::-;;;;;;;;;;;;;;;;34578:37;;;;;;;;;;;;;;;;38480:481;;;;;;;;;;-1:-1:-1;38480:481:0;;;;;:::i;:::-;;:::i;37500:302::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;4044:176::-;;;;;;;;;;-1:-1:-1;4044:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;4185:18:0;;;4158:7;4185:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4044:176;46615:1214;;;;;;;;;;;;;:::i;34088:33::-;;;;;;;;;;;;;;;;39700:495;;;;;;;;;;-1:-1:-1;39700:495:0;;;;;:::i;:::-;;:::i;39533:159::-;;;;;;;;;;-1:-1:-1;39533:159:0;;;;;:::i;:::-;;:::i;1362:238::-;;;;;;;;;;-1:-1:-1;1362:238:0;;;;;:::i;:::-;;:::i;34128:24::-;;;;;;;;;;;;;;;;34348:25;;;;;;;;;;;;;;;;3248:100;3302:13;3335:5;3328:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3248:100;:::o;4228:194::-;4336:4;4353:39;629:10;4376:7;4385:6;4353:8;:39::i;:::-;-1:-1:-1;4410:4:0;4228:194;;;;;:::o;38097:242::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;;;;;;;;;38173:10:::1;:24:::0;38208:10:::1;:17:::0;;-1:-1:-1;;38236:18:0;;;;;38278:12:::1;38265:10;:25:::0;38316:15:::1;38301:12;:30:::0;38097:242::o;4430:529::-;4570:4;4587:36;4597:6;4605:9;4616:6;4587:9;:36::i;:::-;-1:-1:-1;;;;;4663:19:0;;4636:24;4663:19;;;:11;:19;;;;;;;;629:10;4663:33;;;;;;;;4729:26;;;;4707:116;;;;-1:-1:-1;;;4707:116:0;;6225:2:1;4707:116:0;;;6207:21:1;6264:2;6244:18;;;6237:30;6303:34;6283:18;;;6276:62;-1:-1:-1;;;6354:18:1;;;6347:38;6402:19;;4707:116:0;6023:404:1;4707:116:0;4859:57;4868:6;629:10;4909:6;4890:16;:25;4859:8;:57::i;:::-;-1:-1:-1;4947:4:0;;4430:529;-1:-1:-1;;;;4430:529:0:o;34955:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34955:32:0;;-1:-1:-1;34955:32:0;:::o;34994:30::-;;;;;;;;;;;;40347:188;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;40451:15:::1;:32:::0;;;;40494:16:::1;:33:::0;40347:188::o;4967:290::-;629:10;5080:4;5169:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5169:34:0;;;;;;;;;;5080:4;;5097:130;;5147:7;;5169:47;;5206:10;;5169:47;:::i;:::-;5097:8;:130::i;37810:279::-;37861:7;37881:17;37901;;;;;;;;;-1:-1:-1;;;;;37901:17:0;-1:-1:-1;;;;;37901:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37980:17;;:69;;-1:-1:-1;;;37980:69:0;;;;;2241:25:1;;;37881:53:0;;-1:-1:-1;37948:28:0;;-1:-1:-1;;;;;37980:17:0;;;;:34;;2214:18:1;;37980:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37980:69:0;;;;;;;;;;;;:::i;:::-;37945:104;;;38067:11;38079:1;38067:14;;;;;;;;:::i;:::-;;;;;;;38060:21;;;;37810:279;:::o;38347:125::-;1101:6;;38401:4;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;38418:16:0::1;:24:::0;;-1:-1:-1;;38418:24:0::1;::::0;;;38347:125;:::o;1251:103::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;1316:30:::1;1343:1;1316:18;:30::i;:::-;1251:103::o:0;38969:169::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39084:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;39084:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38969:169::o;39234:100::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;39305:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;39305:21:0;;::::1;::::0;;;::::1;::::0;;39234:100::o;3356:104::-;3412:13;3445:7;3438:14;;;;;:::i;40545:226::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;40696:8:::1;40682:10;40666:13;3657:12:::0;;;3569:108;40666:13:::1;:26;;;;:::i;:::-;40665:39;;;;:::i;:::-;40640:22;:64:::0;;;40720:43:::1;::::0;2241:25:1;;;40720:43:0::1;::::0;2229:2:1;2214:18;40720:43:0::1;;;;;;;40545:226:::0;;:::o;5265:475::-;629:10;5383:4;5427:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5427:34:0;;;;;;;;;;5494:35;;;;5472:122;;;;-1:-1:-1;;;5472:122:0;;9011:2:1;5472:122:0;;;8993:21:1;9050:2;9030:18;;;9023:30;9089:34;9069:18;;;9062:62;-1:-1:-1;;;9140:18:1;;;9133:35;9185:19;;5472:122:0;8809:401:1;5472:122:0;5630:67;629:10;5653:7;5681:15;5662:16;:34;5630:8;:67::i;:::-;-1:-1:-1;5728:4:0;;5265:475;-1:-1:-1;;;5265:475:0:o;3836:200::-;3947:4;3964:42;629:10;3988:9;3999:6;3964:9;:42::i;37401:91::-;37446:17;;;;;;;;;-1:-1:-1;;;;;37446:17:0;-1:-1:-1;;;;;37446:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37401:91::o;39342:182::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39427:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;39427:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39482:34;;1371:41:1;;;39482:34:0::1;::::0;1344:18:1;39482:34:0::1;;;;;;;;39342:182:::0;;:::o;38480:481::-;1101:6;;38577:4;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;38651:6:::1;38630:13;3657:12:::0;;;3569:108;38630:13:::1;:17;::::0;38646:1:::1;38630:17;:::i;:::-;38629:28;;;;:::i;:::-;38616:9;:41;;38594:144;;;::::0;-1:-1:-1;;;38594:144:0;;9417:2:1;38594:144:0::1;::::0;::::1;9399:21:1::0;9456:2;9436:18;;;9429:30;9495:34;9475:18;;;9468:62;-1:-1:-1;;;9546:18:1;;;9539:51;9607:19;;38594:144:0::1;9215:417:1::0;38594:144:0::1;38806:4;38785:13;3657:12:::0;;;3569:108;38785:13:::1;:17;::::0;38801:1:::1;38785:17;:::i;:::-;38784:26;;;;:::i;:::-;38771:9;:39;;38749:141;;;::::0;-1:-1:-1;;;38749:141:0;;9839:2:1;38749:141:0::1;::::0;::::1;9821:21:1::0;9878:2;9858:18;;;9851:30;9917:34;9897:18;;;9890:62;-1:-1:-1;;;9968:18:1;;;9961:50;10028:19;;38749:141:0::1;9637:416:1::0;38749:141:0::1;-1:-1:-1::0;38901:18:0::1;:30:::0;38949:4:::1;::::0;38480:481::o;37500:302::-;37572:14;37588:28;37634:17;37654;;;;;;;;;-1:-1:-1;;;;;37654:17:0;-1:-1:-1;;;;;37654:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37725:17;;:69;;-1:-1:-1;;;37725:69:0;;;;;2241:25:1;;;37634:53:0;;-1:-1:-1;;;;;;37725:17:0;;:34;;2214:18:1;;37725:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37725:69:0;;;;;;;;;;;;:::i;:::-;37698:96;;;;-1:-1:-1;37500:302:0;-1:-1:-1;;37500:302:0:o;46615:1214::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;46674:15:::1;:22:::0;46699:1:::1;-1:-1:-1::0;46666:63:0::1;;;::::0;-1:-1:-1;;;46666:63:0;;10260:2:1;46666:63:0::1;::::0;::::1;10242:21:1::0;10299:2;10279:18;;;10272:30;10338:26;10318:18;;;10311:54;10382:18;;46666:63:0::1;10058:348:1::0;46666:63:0::1;46772:1;46748:21;:25;46740:85;;;::::0;-1:-1:-1;;;46740:85:0;;10613:2:1;46740:85:0::1;::::0;::::1;10595:21:1::0;10652:2;10632:18;;;10625:30;10691:34;10671:18;;;10664:62;-1:-1:-1;;;10742:18:1;;;10735:45;10797:19;;46740:85:0::1;10411:411:1::0;46740:85:0::1;46965:6;46960:201;46975:15;:22:::0;46973:24;::::1;46960:201;;;47053:22;;47021:9;:29;47031:15;47047:1;47031:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;47031:18:0::1;47021:29:::0;;;::::1;::::0;;;;;;;;;:54:::1;47017:133;;;47096:13;47115:15;47131:1;47115:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;47096:38;;47115:18;47096:38;::::1;::::0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;47096:38:0::1;-1:-1:-1::0;;;;;47115:18:0;;::::1;47096:38:::0;;;::::1;::::0;;47017:133:::1;46998:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46960:201;;;-1:-1:-1::0;47213:13:0::1;:20:::0;47171:16:::1;::::0;47190:20:::1;:18;:20::i;:::-;:43;;;;:::i;:::-;47288:13;:20:::0;47171:62;;-1:-1:-1;47244:16:0::1;::::0;47288:22:::1;::::0;47309:1:::1;::::0;47288:22:::1;:::i;:::-;47264:20;:18;:20::i;:::-;:47;;;;:::i;:::-;:49;::::0;47312:1:::1;47264:49;:::i;:::-;47244:70;;47345:13;47359:8;47345:23;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;47325:17:::1;:43:::0;;-1:-1:-1;;;;;;47325:43:0::1;-1:-1:-1::0;;;;;47345:23:0;;::::1;47325:43:::0;;;::::1;::::0;;47399:13:::1;:23:::0;;47413:8;;47399:23;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;47379:17:::1;:43:::0;;-1:-1:-1;;;;;;47379:43:0::1;-1:-1:-1::0;;;;;47399:23:0;;::::1;47379:43:::0;;;::::1;::::0;;47439:21:::1;:25:::0;47435:387:::1;;47481:19;47503:28;:21;47529:1;47503:25;:28::i;:::-;47595:17;::::0;47587:55:::1;::::0;47481:50;;-1:-1:-1;47546:12:0::1;::::0;-1:-1:-1;;;;;47595:17:0;;::::1;::::0;47481:50;;47546:12;47587:55;47546:12;47587:55;47481:50;47595:17;47587:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;47679:17:0::1;::::0;47671:65:::1;::::0;47573:69;;-1:-1:-1;;;;;;47679:17:0::1;::::0;47710:21:::1;::::0;47671:65:::1;::::0;;;47710:21;47679:17;47671:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;47762:17:0::1;::::0;47780::::1;::::0;47756:54:::1;::::0;;-1:-1:-1;;;;;47762:17:0;;::::1;11667:34:1::0;;47780:17:0;;;::::1;11732:2:1::0;11717:18;;11710:43;11769:18;;11762:34;;;47657:79:0;;-1:-1:-1;47756:54:0::1;::::0;11617:2:1;11602:18;47756:54:0::1;;;;;;;47466:356;;47435:387;46655:1174;;46615:1214::o:0;39700:495::-;1101:6;;39812:10;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39848:20:0;::::1;39840:59;;;::::0;-1:-1:-1;;;39840:59:0;;12009:2:1;39840:59:0::1;::::0;::::1;11991:21:1::0;12048:2;12028:18;;;12021:30;12087:28;12067:18;;;12060:56;12133:18;;39840:59:0::1;11807:350:1::0;39840:59:0::1;39936:4;-1:-1:-1::0;;;;;39918:23:0;::::1;::::0;39910:64:::1;;;::::0;-1:-1:-1;;;39910:64:0;;12364:2:1;39910:64:0::1;::::0;::::1;12346:21:1::0;12403:2;12383:18;;;12376:30;12442;12422:18;;;12415:58;12490:18;;39910:64:0::1;12162:352:1::0;39910:64:0::1;40012:39;::::0;-1:-1:-1;;;40012:39:0;;40045:4:::1;40012:39;::::0;::::1;160:51:1::0;39985:24:0::1;::::0;-1:-1:-1;;;;;40012:24:0;::::1;::::0;::::1;::::0;133:18:1;;40012:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39985:66;;40082:3;-1:-1:-1::0;;;;;40074:17:0::1;40099:21;40074:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;40141:46:0::1;::::0;;-1:-1:-1;;;;;12711:32:1;;12693:51;;12775:2;12760:18;;12753:34;;;40062:63:0;;-1:-1:-1;40141:46:0::1;::::0;12666:18:1;40141:46:0::1;;;;;;;39829:366;39700:495:::0;;;;:::o;39533:159::-;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39611:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;;:29;;-1:-1:-1;;39611:29:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39656:28;;1371:41:1;;;39656:28:0::1;::::0;1344:18:1;39656:28:0::1;1231:187:1::0;1362:238:0;1101:6;;-1:-1:-1;;;;;1101:6:0;629:10;1163:23;1155:68;;;;-1:-1:-1;;;1155:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1465:22:0;::::1;1443:110;;;::::0;-1:-1:-1;;;1443:110:0;;13000:2:1;1443:110:0::1;::::0;::::1;12982:21:1::0;13039:2;13019:18;;;13012:30;13078:34;13058:18;;;13051:62;-1:-1:-1;;;13129:18:1;;;13122:36;13175:19;;1443:110:0::1;12798:402:1::0;1443:110:0::1;1564:28;1583:8;1564:18;:28::i;7532:380::-:0;-1:-1:-1;;;;;7668:19:0;;7660:68;;;;-1:-1:-1;;;7660:68:0;;13407:2:1;7660:68:0;;;13389:21:1;13446:2;13426:18;;;13419:30;13485:34;13465:18;;;13458:62;-1:-1:-1;;;13536:18:1;;;13529:34;13580:19;;7660:68:0;13205:400:1;7660:68:0;-1:-1:-1;;;;;7747:21:0;;7739:68;;;;-1:-1:-1;;;7739:68:0;;13812:2:1;7739:68:0;;;13794:21:1;13851:2;13831:18;;;13824:30;13890:34;13870:18;;;13863:62;-1:-1:-1;;;13941:18:1;;;13934:32;13983:19;;7739:68:0;13610:398:1;7739:68:0;-1:-1:-1;;;;;7820:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7872:32;;2241:25:1;;;7872:32:0;;2214:18:1;7872:32:0;;;;;;;7532:380;;;:::o;40781:4352::-;-1:-1:-1;;;;;40913:18:0;;40905:68;;;;-1:-1:-1;;;40905:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40992:16:0;;40984:64;;;;-1:-1:-1;;;40984:64:0;;;;;;;:::i;:::-;41065:6;41075:1;41065:11;41061:93;;41093:28;41109:4;41115:2;41119:1;41093:15;:28::i;:::-;40781:4352;;;:::o;41061:93::-;41214:16;;41185:12;;41214:16;;41210:1676;;;1101:6;;-1:-1:-1;;;;;41269:15:0;;;1101:6;;41269:15;;;;:49;;-1:-1:-1;1101:6:0;;-1:-1:-1;;;;;41305:13:0;;;1101:6;;41305:13;;41269:49;:86;;;;-1:-1:-1;;;;;;41339:16:0;;;;41269:86;:128;;;;-1:-1:-1;;;;;;41376:21:0;;41390:6;41376:21;;41269:128;:158;;;;-1:-1:-1;41419:8:0;;-1:-1:-1;;;41419:8:0;;;;41418:9;41269:158;41247:1628;;;41486:10;;;;;;;41481:220;;-1:-1:-1;;;;;41555:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;41584:23:0;;;;;;:19;:23;;;;;;;;41555:52;41521:160;;;;-1:-1:-1;;;41521:160:0;;15025:2:1;41521:160:0;;;15007:21:1;15064:2;15044:18;;;15037:30;-1:-1:-1;;;15083:18:1;;;15076:52;15145:18;;41521:160:0;14823:346:1;41521:160:0;-1:-1:-1;;;;;41775:13:0;;;;;;:7;:13;;;;;;;;:74;;;;-1:-1:-1;;;;;;41814:35:0;;;;;;:31;:35;;;;;;;;41813:36;41775:74;41749:1111;;;41936:20;;41926:6;:30;;41892:169;;;;-1:-1:-1;;;41892:169:0;;15376:2:1;41892:169:0;;;15358:21:1;15415:2;15395:18;;;15388:30;15454:34;15434:18;;;15427:62;-1:-1:-1;;;15505:18:1;;;15498:51;15566:19;;41892:169:0;15174:417:1;41892:169:0;42144:9;;-1:-1:-1;;;;;3802:18:0;;3775:7;3802:18;;;;;;;;;;;42118:22;;:6;:22;:::i;:::-;:35;;42084:140;;;;-1:-1:-1;;;42084:140:0;;15798:2:1;42084:140:0;;;15780:21:1;15837:2;15817:18;;;15810:30;-1:-1:-1;;;15856:18:1;;;15849:49;15915:18;;42084:140:0;15596:343:1;42084:140:0;41749:1111;;;-1:-1:-1;;;;;42322:11:0;;;;;;:7;:11;;;;;;;;:74;;;;-1:-1:-1;;;;;;42359:37:0;;;;;;:31;:37;;;;;;;;42358:38;42322:74;42296:564;;;42483:20;;42473:6;:30;;42439:170;;;;-1:-1:-1;;;42439:170:0;;16146:2:1;42439:170:0;;;16128:21:1;16185:2;16165:18;;;16158:30;16224:34;16204:18;;;16197:62;-1:-1:-1;;;16275:18:1;;;16268:52;16337:19;;42439:170:0;15944:418:1;42296:564:0;-1:-1:-1;;;;;42640:35:0;;;;;;:31;:35;;;;;;;;42635:225;;42760:9;;-1:-1:-1;;;;;3802:18:0;;3775:7;3802:18;;;;;;;;;;;42734:22;;:6;:22;:::i;:::-;:35;;42700:140;;;;-1:-1:-1;;;42700:140:0;;15798:2:1;42700:140:0;;;15780:21:1;15837:2;15817:18;;;15810:30;-1:-1:-1;;;15856:18:1;;;15849:49;15915:18;;42700:140:0;15596:343:1;42700:140:0;42947:4;42898:28;3802:18;;;;;;;;;;;43003;;42979:42;;;;;;;43052:35;;-1:-1:-1;43076:11:0;;;;;;;43052:35;:61;;;;-1:-1:-1;43105:8:0;;-1:-1:-1;;;43105:8:0;;;;43104:9;43052:61;:105;;;;-1:-1:-1;43131:21:0;;;;:11;:21;;;;;;43155:1;-1:-1:-1;43052:105:0;:136;;;;-1:-1:-1;;;;;;43175:13:0;;;;;;:7;:13;;;;;;;;43174:14;43052:136;:179;;;;-1:-1:-1;;;;;;43206:25:0;;;;;;:19;:25;;;;;;;;43205:26;43052:179;:220;;;;-1:-1:-1;;;;;;43249:23:0;;;;;;:19;:23;;;;;;;;43248:24;43052:220;43034:397;;;43299:8;:15;;-1:-1:-1;;;;43299:15:0;-1:-1:-1;;;43299:15:0;;;43329:21;:19;:21::i;:::-;43367;;;;:11;:21;;;;;43365:23;;43367:21;;;43365:23;;;:::i;:::-;;;;-1:-1:-1;43403:8:0;:16;;-1:-1:-1;;;;43403:16:0;;;43034:397;43459:8;;-1:-1:-1;;;;;43569:25:0;;43443:12;43569:25;;;:19;:25;;;;;;43459:8;-1:-1:-1;;;43459:8:0;;;;;43458:9;;43569:25;;:52;;-1:-1:-1;;;;;;43598:23:0;;;;;;:19;:23;;;;;;;;43569:52;43565:100;;;-1:-1:-1;43648:5:0;43565:100;43677:12;43782:7;43778:1304;;;43839:8;43824:10;;43811;;:23;;;;:::i;:::-;43810:37;43806:495;;43887:2;43868:16;:21;43928:2;43908:17;:22;43806:495;;;43999:10;;43986;;:23;;;;:::i;:::-;43974:8;:36;:84;;;;-1:-1:-1;44043:10:0;;:15;;44056:2;44043:15;:::i;:::-;44031:8;:27;;43974:84;43952:349;;;44112:2;44093:16;:21;44153:2;44133:17;:22;43952:349;;;44215:15;;44196:16;:34;44269:16;;44249:17;:36;43952:349;-1:-1:-1;;;;;44345:11:0;;;;;;:7;:11;;;;;;;;:36;;;;;44380:1;44360:17;;:21;44345:36;44341:286;;;44409:38;44443:3;44409:29;44420:17;;44409:6;:10;;:29;;;;:::i;:::-;:33;;:38::i;:::-;44402:45;;44341:286;;;-1:-1:-1;;;;;44509:13:0;;;;;;:7;:13;;;;;;;;:37;;;;;44545:1;44526:16;;:20;44509:37;44505:122;;;44574:37;44607:3;44574:28;44585:16;;44574:6;:10;;:28;;;;:::i;:37::-;44567:44;;44505:122;44647:8;;44643:91;;44676:42;44692:4;44706;44713;44676:15;:42::i;:::-;44750:14;44760:4;44750:14;;:::i;:::-;-1:-1:-1;;;;;44784:13:0;;;;;;:7;:13;;;;;;44750:14;;-1:-1:-1;44784:13:0;;44779:100;;-1:-1:-1;;;;;44836:15:0;;;;;;:9;:15;;;;;;:27;;44856:6;44836:19;:27::i;:::-;-1:-1:-1;;;;;44818:15:0;;;;;;:9;:15;;;;;:45;44779:100;-1:-1:-1;;;;;44898:11:0;;;;;;:7;:11;;;;;;;;44893:94;;-1:-1:-1;;;;;44946:13:0;;;;;;:9;:13;;;;;;:25;;44964:6;44946:17;:25::i;:::-;-1:-1:-1;;;;;44930:13:0;;;;;;:9;:13;;;;;:41;44893:94;-1:-1:-1;;;;;45006:11:0;;;;;;:7;:11;;;;;;;;45001:70;;45038:17;45052:2;45038:13;:17::i;:::-;45092:33;45108:4;45114:2;45118:6;45092:15;:33::i;:::-;40894:4239;;;;;40781:4352;;;:::o;1608:191::-;1701:6;;;-1:-1:-1;;;;;1718:17:0;;;-1:-1:-1;;;;;;1718:17:0;;;;;;;1751:40;;1701:6;;;1718:17;1701:6;;1751:40;;1682:16;;1751:40;1671:128;1608:191;:::o;9767:98::-;9825:7;9852:5;9856:1;9852;:5;:::i;:::-;9845:12;9767:98;-1:-1:-1;;;9767:98:0:o;5748:770::-;-1:-1:-1;;;;;5888:20:0;;5880:70;;;;-1:-1:-1;;;5880:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5969:23:0;;5961:71;;;;-1:-1:-1;;;5961:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6129:17:0;;6105:21;6129:17;;;;;;;;;;;6179:23;;;;6157:111;;;;-1:-1:-1;;;6157:111:0;;16569:2:1;6157:111:0;;;16551:21:1;16608:2;16588:18;;;16581:30;16647:34;16627:18;;;16620:62;-1:-1:-1;;;16698:18:1;;;16691:36;16744:19;;6157:111:0;16367:402:1;6157:111:0;-1:-1:-1;;;;;6304:17:0;;;:9;:17;;;;;;;;;;;6324:22;;;6304:42;;6368:20;;;;;;;;:30;;6340:6;;6304:9;6368:30;;6340:6;;6368:30;:::i;:::-;;;;;;;;6433:9;-1:-1:-1;;;;;6416:35:0;6425:6;-1:-1:-1;;;;;6416:35:0;;6444:6;6416:35;;;;2241:25:1;;2229:2;2214:18;;2095:177;6416:35:0;;;;;;;;5869:649;5748:770;;;:::o;45743:409::-;45837:4;45793:23;3802:18;;;;;;;;;;;;45858:20;;;45854:59;;45895:7;45743:409::o;45854:59::-;45945:18;;:23;;45966:2;45945:23;:::i;:::-;45927:15;:41;45923:115;;;46003:18;;:23;;46024:2;46003:23;:::i;:::-;45985:41;;45923:115;46077:15;46103:41;46077:15;46103:21;:41::i;9661:98::-;9719:7;9746:5;9750:1;9746;:5;:::i;9555:98::-;9613:7;9640:5;9644:1;9640;:5;:::i;9449:98::-;9507:7;9534:5;9538:1;9534;:5;:::i;46396:211::-;46460:28;46481:6;46460:20;:28::i;:::-;46459:29;:49;;;;-1:-1:-1;;;;;;46493:15:0;;;;;;:7;:15;;;;;;;;46492:16;46459:49;:81;;;;-1:-1:-1;;;;;;46513:27:0;;;;;;:19;:27;;;;;;;;46512:28;46459:81;46455:144;;;46558:15;:28;;;;;;;-1:-1:-1;46558:28:0;;;;;;;;-1:-1:-1;;;;;46558:28:0;;-1:-1:-1;;;;;;46558:28:0;;;;;;46396:211;:::o;45141:594::-;45296:16;;;45310:1;45296:16;;;;;;;;45272:21;;45296:16;;;;;;;;;;-1:-1:-1;45296:16:0;45272:40;;45341:4;45323;45328:1;45323:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45323:23:0;;;-1:-1:-1;;;;;45323:23:0;;;;;45367:15;-1:-1:-1;;;;;45367:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45357:4;45362:1;45357:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45357:32:0;;;-1:-1:-1;;;;;45357:32:0;;;;;45402:62;45419:4;45434:15;45452:11;45402:8;:62::i;:::-;45503:224;;-1:-1:-1;;;45503:224:0;;-1:-1:-1;;;;;45503:15:0;:66;;;;:224;;45584:11;;45610:1;;45654:4;;45681;;45701:15;;45503:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45201:534;45141:594;:::o;46160:228::-;46228:4;46249:6;46244:113;46260:15;:22;46257:25;;46244:113;;;46326:6;-1:-1:-1;;;;;46306:26:0;:15;46322:1;46306:18;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;46306:18:0;:26;46302:43;;-1:-1:-1;46341:4:0;;46160:228;-1:-1:-1;;46160:228:0:o;46302:43::-;46283:3;;;;:::i;:::-;;;;46244:113;;;-1:-1:-1;46374:5:0;;46160:228;-1:-1:-1;;46160:228:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;1675:180::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;-1:-1:-1;1826:23:1;;1675:180;-1:-1:-1;1675:180:1:o;2277:456::-;2354:6;2362;2370;2423:2;2411:9;2402:7;2398:23;2394:32;2391:52;;;2439:1;2436;2429:12;2391:52;2478:9;2465:23;2497:31;2522:5;2497:31;:::i;:::-;2547:5;-1:-1:-1;2604:2:1;2589:18;;2576:32;2617:33;2576:32;2617:33;:::i;:::-;2277:456;;2669:7;;-1:-1:-1;;;2723:2:1;2708:18;;;;2695:32;;2277:456::o;2927:248::-;2995:6;3003;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;-1:-1:-1;;3095:23:1;;;3165:2;3150:18;;;3137:32;;-1:-1:-1;2927:248:1:o;3410:118::-;3496:5;3489:13;3482:21;3475:5;3472:32;3462:60;;3518:1;3515;3508:12;3533:382;3598:6;3606;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3714:9;3701:23;3733:31;3758:5;3733:31;:::i;:::-;3783:5;-1:-1:-1;3840:2:1;3825:18;;3812:32;3853:30;3812:32;3853:30;:::i;:::-;3902:7;3892:17;;;3533:382;;;;;:::o;3920:241::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:52;;;4045:1;4042;4035:12;3997:52;4084:9;4071:23;4103:28;4125:5;4103:28;:::i;4166:713::-;4330:4;4378:2;4367:9;4363:18;4422:6;4415:14;4408:22;4397:9;4390:41;4450:2;4488;4483;4472:9;4468:18;4461:30;4511:6;4546;4540:13;4577:6;4569;4562:22;4615:2;4604:9;4600:18;4593:25;;4653:2;4645:6;4641:15;4627:29;;4674:1;4684:169;4698:6;4695:1;4692:13;4684:169;;;4759:13;;4747:26;;4828:15;;;;4793:12;;;;4720:1;4713:9;4684:169;;;-1:-1:-1;4870:3:1;;4166:713;-1:-1:-1;;;;;;;4166:713:1:o;4884:388::-;4952:6;4960;5013:2;5001:9;4992:7;4988:23;4984:32;4981:52;;;5029:1;5026;5019:12;4981:52;5068:9;5055:23;5087:31;5112:5;5087:31;:::i;:::-;5137:5;-1:-1:-1;5194:2:1;5179:18;;5166:32;5207:33;5166:32;5207:33;:::i;5277:380::-;5356:1;5352:12;;;;5399;;;5420:61;;5474:4;5466:6;5462:17;5452:27;;5420:61;5527:2;5519:6;5516:14;5496:18;5493:38;5490:161;;5573:10;5568:3;5564:20;5561:1;5554:31;5608:4;5605:1;5598:15;5636:4;5633:1;5626:15;5490:161;;5277:380;;;:::o;5662:356::-;5864:2;5846:21;;;5883:18;;;5876:30;5942:34;5937:2;5922:18;;5915:62;6009:2;5994:18;;5662:356::o;6432:127::-;6493:10;6488:3;6484:20;6481:1;6474:31;6524:4;6521:1;6514:15;6548:4;6545:1;6538:15;6564:125;6629:9;;;6650:10;;;6647:36;;;6663:18;;:::i;6694:184::-;6764:6;6817:2;6805:9;6796:7;6792:23;6788:32;6785:52;;;6833:1;6830;6823:12;6785:52;-1:-1:-1;6856:16:1;;6694:184;-1:-1:-1;6694:184:1:o;6883:127::-;6944:10;6939:3;6935:20;6932:1;6925:31;6975:4;6972:1;6965:15;6999:4;6996:1;6989:15;7015:1227;7116:6;7124;7177:2;7165:9;7156:7;7152:23;7148:32;7145:52;;;7193:1;7190;7183:12;7145:52;7225:9;7219:16;7244:28;7266:5;7244:28;:::i;:::-;7291:5;7281:15;;;7315:2;7361;7350:9;7346:18;7340:25;7384:18;7425:2;7417:6;7414:14;7411:34;;;7441:1;7438;7431:12;7411:34;7479:6;7468:9;7464:22;7454:32;;7524:7;7517:4;7513:2;7509:13;7505:27;7495:55;;7546:1;7543;7536:12;7495:55;7575:2;7569:9;7597:2;7593;7590:10;7587:36;;;7603:18;;:::i;:::-;7649:2;7646:1;7642:10;7681:2;7675:9;7744:2;7740:7;7735:2;7731;7727:11;7723:25;7715:6;7711:38;7799:6;7787:10;7784:22;7779:2;7767:10;7764:18;7761:46;7758:72;;;7810:18;;:::i;:::-;7846:2;7839:22;7896:18;;;7930:15;;;;-1:-1:-1;7972:11:1;;;7968:20;;;8000:19;;;7997:39;;;8032:1;8029;8022:12;7997:39;8056:11;;;;8076:135;8092:6;8087:3;8084:15;8076:135;;;8158:10;;8146:23;;8109:12;;;;8189;;;;8076:135;;;8230:6;8220:16;;;;;;;;7015:1227;;;;;:::o;8247:127::-;8308:10;8303:3;8299:20;8296:1;8289:31;8339:4;8336:1;8329:15;8363:4;8360:1;8353:15;8379:168;8452:9;;;8483;;8500:15;;;8494:22;;8480:37;8470:71;;8521:18;;:::i;8552:127::-;8613:10;8608:3;8604:20;8601:1;8594:31;8644:4;8641:1;8634:15;8668:4;8665:1;8658:15;8684:120;8724:1;8750;8740:35;;8755:18;;:::i;:::-;-1:-1:-1;8789:9:1;;8684:120::o;10827:135::-;10866:3;10887:17;;;10884:43;;10907:18;;:::i;:::-;-1:-1:-1;10954:1:1;10943:13;;10827:135::o;10967:112::-;10999:1;11025;11015:35;;11030:18;;:::i;:::-;-1:-1:-1;11064:9:1;;10967:112::o;11084:128::-;11151:9;;;11172:11;;;11169:37;;;11186:18;;:::i;14013:401::-;14215:2;14197:21;;;14254:2;14234:18;;;14227:30;14293:34;14288:2;14273:18;;14266:62;-1:-1:-1;;;14359:2:1;14344:18;;14337:35;14404:3;14389:19;;14013:401::o;14419:399::-;14621:2;14603:21;;;14660:2;14640:18;;;14633:30;14699:34;14694:2;14679:18;;14672:62;-1:-1:-1;;;14765:2:1;14750:18;;14743:33;14808:3;14793:19;;14419:399::o;16774:251::-;16844:6;16897:2;16885:9;16876:7;16872:23;16868:32;16865:52;;;16913:1;16910;16903:12;16865:52;16945:9;16939:16;16964:31;16989:5;16964:31;:::i;17030:980::-;17292:4;17340:3;17329:9;17325:19;17371:6;17360:9;17353:25;17397:2;17435:6;17430:2;17419:9;17415:18;17408:34;17478:3;17473:2;17462:9;17458:18;17451:31;17502:6;17537;17531:13;17568:6;17560;17553:22;17606:3;17595:9;17591:19;17584:26;;17645:2;17637:6;17633:15;17619:29;;17666:1;17676:195;17690:6;17687:1;17684:13;17676:195;;;17755:13;;-1:-1:-1;;;;;17751:39:1;17739:52;;17846:15;;;;17811:12;;;;17787:1;17705:9;17676:195;;;-1:-1:-1;;;;;;;17927:32:1;;;;17922:2;17907:18;;17900:60;-1:-1:-1;;;17991:3:1;17976:19;17969:35;17888:3;17030:980;-1:-1:-1;;;17030:980:1:o

Swarm Source

ipfs://d1b69c75e5d55fecfa49c691609870def6d2392a2e2587a48011d5da5712c9b5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.