ETH Price: $3,440.92 (+1.45%)
Gas: 3 Gwei

Contract

0xC018FF8c08842151CbfA26E72Fe39fD0A155120D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Sweep185857132023-11-16 16:42:35224 days ago1700152955IN
0xC018FF8c...0A155120D
0 ETH0.0017122546
Take The Last Hi...185855202023-11-16 16:03:47224 days ago1700150627IN
0xC018FF8c...0A155120D
0 ETH0.0163525961.55506377
Pay My Dividend185854712023-11-16 15:53:59224 days ago1700150039IN
0xC018FF8c...0A155120D
0 ETH0.0027812146.36984091
Pay My Dividend185845052023-11-16 12:39:59224 days ago1700138399IN
0xC018FF8c...0A155120D
0 ETH0.0018470830.79553811
Pay My Dividend185825932023-11-16 6:15:59225 days ago1700115359IN
0xC018FF8c...0A155120D
0 ETH0.0014284623.81600323
Pay My Dividend185824972023-11-16 5:56:35225 days ago1700114195IN
0xC018FF8c...0A155120D
0 ETH0.001361622.70135988
Pay My Dividend185813262023-11-16 2:00:59225 days ago1700100059IN
0xC018FF8c...0A155120D
0 ETH0.001629438
Pay My Dividend185813082023-11-16 1:57:23225 days ago1700099843IN
0xC018FF8c...0A155120D
0 ETH0.0013027630.38247086
Pay My Dividend185813042023-11-16 1:56:35225 days ago1700099795IN
0xC018FF8c...0A155120D
0 ETH0.0012445129.02380546
Take A Vape Hit185777292023-11-15 13:57:23225 days ago1700056643IN
0xC018FF8c...0A155120D
0.034 ETH0.0033391130.16391202
Take A Vape Hit185774632023-11-15 13:03:47225 days ago1700053427IN
0xC018FF8c...0A155120D
0.033 ETH0.0034790231.42778667
Pay My Dividend185742662023-11-15 2:18:11226 days ago1700014691IN
0xC018FF8c...0A155120D
0 ETH0.0011267226.27680015
Take A Vape Hit185739662023-11-15 1:17:47226 days ago1700011067IN
0xC018FF8c...0A155120D
0.032 ETH0.0034330.98494705
Take A Vape Hit185704012023-11-14 13:20:23226 days ago1699968023IN
0xC018FF8c...0A155120D
0.031 ETH0.0053135548
Pay My Dividend185699922023-11-14 11:58:23226 days ago1699963103IN
0xC018FF8c...0A155120D
0 ETH0.0012863730
Pay My Dividend185697412023-11-14 11:07:11227 days ago1699960031IN
0xC018FF8c...0A155120D
0 ETH0.0014686934.25215275
Pay My Dividend185678542023-11-14 4:48:23227 days ago1699937303IN
0xC018FF8c...0A155120D
0 ETH0.0012432120.72743015
Pay My Dividend185678472023-11-14 4:46:59227 days ago1699937219IN
0xC018FF8c...0A155120D
0 ETH0.0014238523.73920054
Take A Vape Hit185669382023-11-14 1:44:35227 days ago1699926275IN
0xC018FF8c...0A155120D
0.03 ETH0.0035166531.76769612
Take A Vape Hit185642732023-11-13 16:48:47227 days ago1699894127IN
0xC018FF8c...0A155120D
0.029 ETH0.0105019789.97348298
Take A Vape Hit185607632023-11-13 5:00:23228 days ago1699851623IN
0xC018FF8c...0A155120D
0.028 ETH0.003851332.99527392
Take A Vape Hit185583302023-11-12 20:50:59228 days ago1699822259IN
0xC018FF8c...0A155120D
0.027 ETH0.0035717630.60039443
Take A Vape Hit185566922023-11-12 15:21:59228 days ago1699802519IN
0xC018FF8c...0A155120D
0.026 ETH0.0048538641.58447768
Pay My Dividend185566902023-11-12 15:21:35228 days ago1699802495IN
0xC018FF8c...0A155120D
0 ETH0.0024432640.73528961
Take A Vape Hit185566242023-11-12 15:08:23228 days ago1699801703IN
0xC018FF8c...0A155120D
0.025 ETH0.0054110440.4343792
View all transactions

Latest 18 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
185857132023-11-16 16:42:35224 days ago1700152955
0xC018FF8c...0A155120D
0.14587679 ETH
185855242023-11-16 16:04:35224 days ago1700150675
0xC018FF8c...0A155120D
0.103875 ETH
185855202023-11-16 16:03:47224 days ago1700150627
0xC018FF8c...0A155120D
0.242375 ETH
185854712023-11-16 15:53:59224 days ago1700150039
0xC018FF8c...0A155120D
0.0077601 ETH
185845052023-11-16 12:39:59224 days ago1700138399
0xC018FF8c...0A155120D
0.00714746 ETH
185825932023-11-16 6:15:59225 days ago1700115359
0xC018FF8c...0A155120D
0.00670986 ETH
185824972023-11-16 5:56:35225 days ago1700114195
0xC018FF8c...0A155120D
0.00653482 ETH
185813262023-11-16 2:00:59225 days ago1700100059
0xC018FF8c...0A155120D
0.00850873 ETH
185813082023-11-16 1:57:23225 days ago1700099843
0xC018FF8c...0A155120D
0.00720517 ETH
185813042023-11-16 1:56:35225 days ago1700099795
0xC018FF8c...0A155120D
0.00832787 ETH
185742662023-11-15 2:18:11226 days ago1700014691
0xC018FF8c...0A155120D
0.00775638 ETH
185699922023-11-14 11:58:23226 days ago1699963103
0xC018FF8c...0A155120D
0.01558666 ETH
185697412023-11-14 11:07:11227 days ago1699960031
0xC018FF8c...0A155120D
0.01481854 ETH
185678542023-11-14 4:48:23227 days ago1699937303
0xC018FF8c...0A155120D
0.01189118 ETH
185678472023-11-14 4:46:59227 days ago1699937219
0xC018FF8c...0A155120D
0.01366833 ETH
185566902023-11-12 15:21:35228 days ago1699802495
0xC018FF8c...0A155120D
0.02686819 ETH
185564642023-11-12 14:35:59228 days ago1699799759
0xC018FF8c...0A155120D
0.01459329 ETH
185564462023-11-12 14:32:11228 days ago1699799531
0xC018FF8c...0A155120D
0.04299657 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VapeGame

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 13 : VapeGame.sol
// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.19;

import "openzeppelin/token/ERC20/ERC20.sol";
import "openzeppelin/token/ERC721/IERC721.sol";
import "@chainlink/shared/access/ConfirmedOwner.sol";
import "@chainlink/vrf/VRFV2WrapperConsumerBase.sol";

contract VapeGame is ERC20, VRFV2WrapperConsumerBase, ConfirmedOwner {
    // game config params
    uint256 public immutable MIN_INVEST_TICK = 0.001 ether;
    uint256 public immutable VAPE_PRICE_TICK = 0.0005 ether;
    uint256 public immutable DIVIDEND_CONTRIBUTION = 35; // 35%
    uint256 public immutable POT_CONTRIBUTION = 35; // 35%
    uint256 public immutable TREASURY_CONTRIBUTION = 15; // 15%
    uint256 public immutable LOTTO_CONTRIBUTION = 15; // 15%
    uint256 public minInvest = 0.01 ether;
    uint256 public vapeTokenPrice = 0.0005 ether;
    uint256 public immutable ZOOMER_HITS = 20;
    uint256 public immutable MIN_ZOOMER = 10000000 ether;
    uint256 public immutable GAME_TIME;

    // game state
    uint256 public potValueETH = 0;
    uint256 public lottoValueETH = 0;
    uint256 public totalDividendsValueETH = 0;
    uint256 public finalPotValueETH = 0;
    uint256 public finalLottoValueETH = 0;
    address public finalLottoWinner;
    uint256 public collectedFee = 0; // accumulated eth fee
    uint256 public lastPurchasedTime;
    address payable public lastPurchasedAddress;
    mapping(uint256 => address) public hitters;
    mapping(address => uint256) paidDividends;
    uint256 public numHits = 0;
    bool public isPaused = true;

    // whitelisted tokens/nfts
    ERC20 public zoomer;
    address[] public nfts;

    // chainlink stuff
    uint32 callbackGasLimit = 100000;
    uint32 numWords = 1;
    uint16 requestConfirmations = 3;
    address public linkAddress;

    event TookAHit(
        address indexed user,
        uint256 amount,
        uint256 vapeTokenValue,
        uint256 potValueETH,
        uint256 lottoValueETH,
        uint256 totalDividendsValueETH,
        uint256 nextHitPrice
    );
    event GotDividend(address indexed user, uint256 amount, uint256 totalDividendsValueETH);
    event TookTheLastHit(address indexed user, uint256 amount);
    event LottoWon(address indexed user, uint256 amount);

    modifier notPaused() {
        require(!isPaused, "Contract is paused.");
        _;
    }

    constructor(uint256 _gameTime, address _zoomer, address[] memory _nfts, address _linkAddress, address _vrfV2Wrapper)
        ERC20("Vape", "VAPE")
        ConfirmedOwner(msg.sender)
        VRFV2WrapperConsumerBase(_linkAddress, _vrfV2Wrapper)
    {
        GAME_TIME = _gameTime;
        zoomer = ERC20(_zoomer);

        nfts = _nfts;

        lastPurchasedTime = block.timestamp;
        linkAddress = _linkAddress;
    }

    function withdrawLink() external onlyOwner {
        LinkTokenInterface link = LinkTokenInterface(linkAddress);
        require(link.transfer(msg.sender, link.balanceOf(address(this))), "Unable to transfer");
    }

    function sweep() external onlyOwner {
        require(isPaused, "Can only sweep when paused.");
        potValueETH = 0;
        lottoValueETH = 0;
        totalDividendsValueETH = 0;
        payable(owner()).transfer(address(this).balance);
    }

    function startGame() external onlyOwner {
        isPaused = false;
        lastPurchasedTime = block.timestamp;
    }

    function hasEnoughZoomer(address user) public view returns (bool) {
        return zoomer.balanceOf(user) >= MIN_ZOOMER;
    }

    function hasNft(address user) public view returns (bool) {
        for (uint256 i = 0; i < nfts.length; i++) {
            if (IERC721(nfts[i]).balanceOf(user) > 0) {
                return true;
            }
        }
        return false;
    }

    function takeAVapeHit() public payable notPaused {
        require(msg.value >= minInvest, "ETH value below min invest");
        require((block.timestamp - lastPurchasedTime) <= GAME_TIME, "Time is over, pot can be claimed by winner.");
        if (numHits < ZOOMER_HITS) {
            require(
                hasEnoughZoomer(msg.sender) || hasNft(msg.sender),
                "You need at least MIN_ZOOMER or a whitelisted NFT to play the game."
            );
        }

        hitters[numHits] = msg.sender;
        numHits++;

        uint256 amount = _processEtherReceived(msg.value);

        uint256 vapetokenvalue = (amount * 1e18) / vapeTokenPrice;

        lastPurchasedTime = block.timestamp;
        lastPurchasedAddress = payable(msg.sender);

        minInvest = minInvest + MIN_INVEST_TICK;
        vapeTokenPrice = vapeTokenPrice + VAPE_PRICE_TICK;

        _mint(msg.sender, vapetokenvalue);
        emit TookAHit(msg.sender, amount, vapetokenvalue, potValueETH, lottoValueETH, totalDividendsValueETH, minInvest);
    }

    function getMyDividend(address useraddress) public view returns (uint256) {
        uint256 userbalance = balanceOf(useraddress);

        uint256 share = (totalDividendsValueETH * userbalance) / totalSupply() - paidDividends[useraddress];
        return share;
    }

    function payMyDividend() public {
        require(getMyDividend(msg.sender) > 0, "No dividend for payout");
        uint256 remainingDividend = getMyDividend(msg.sender);
        paidDividends[msg.sender] += remainingDividend;
        payable(msg.sender).transfer(remainingDividend);
        emit GotDividend(msg.sender, remainingDividend, totalDividendsValueETH);
    }

    function paydDevFee() public onlyOwner {
        payable(owner()).transfer(collectedFee);
        collectedFee = 0;
    }

    function takeTheLastHit() public onlyOwner notPaused {
        require((block.timestamp >= lastPurchasedTime), "No.");
        require((block.timestamp - lastPurchasedTime) > GAME_TIME, "Time is not over yet, countdown still running.");
        lastPurchasedAddress.transfer(potValueETH);
        emit TookTheLastHit(lastPurchasedAddress, potValueETH);
        finalPotValueETH = potValueETH;
        potValueETH = 0;
        isPaused = true;
        requestRandomness(callbackGasLimit, requestConfirmations, numWords);
    }

    function _processEtherReceived(uint256 _amountIn) internal returns (uint256 amountOut) {
        uint256 _dividend = (_amountIn * DIVIDEND_CONTRIBUTION * 1000) / 100000;
        uint256 _pot = (_amountIn * POT_CONTRIBUTION * 1000) / 100000;
        uint256 _treasury = (_amountIn * TREASURY_CONTRIBUTION * 1000) / 100000;
        uint256 _lotto = _amountIn - _dividend - _pot - _treasury;

        // amountOut is dividend and pot together
        amountOut = _dividend + _pot;

        collectedFee += _treasury;
        lottoValueETH += _lotto;
        potValueETH += _pot;
        totalDividendsValueETH += _dividend;
    }

    function fulfillRandomWords(uint256, /*_requestId*/ uint256[] memory _randomWords) internal override {
        uint256 randomnumber = _randomWords[0] % numHits;
        address winner = hitters[randomnumber];
        payable(winner).transfer(lottoValueETH);
        emit LottoWon(winner, lottoValueETH);
        finalLottoValueETH = lottoValueETH;
        lottoValueETH = 0;
        finalLottoWinner = winner;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
        require((msg.sender == owner() || from == address(0)), "You are not the owner, only owner can transfer tokens.");
    }

    receive() external payable {
        _processEtherReceived(msg.value);
    }
}

File 2 of 13 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

File 3 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 4 of 13 : ConfirmedOwner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ConfirmedOwnerWithProposal.sol";

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

File 5 of 13 : VRFV2WrapperConsumerBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../shared/interfaces/LinkTokenInterface.sol";
import "../interfaces/VRFV2WrapperInterface.sol";

/** *******************************************************************************
 * @notice Interface for contracts using VRF randomness through the VRF V2 wrapper
 * ********************************************************************************
 * @dev PURPOSE
 *
 * @dev Create VRF V2 requests without the need for subscription management. Rather than creating
 * @dev and funding a VRF V2 subscription, a user can use this wrapper to create one off requests,
 * @dev paying up front rather than at fulfillment.
 *
 * @dev Since the price is determined using the gas price of the request transaction rather than
 * @dev the fulfillment transaction, the wrapper charges an additional premium on callback gas
 * @dev usage, in addition to some extra overhead costs associated with the VRFV2Wrapper contract.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFV2WrapperConsumerBase. The consumer must be funded
 * @dev with enough LINK to make the request, otherwise requests will revert. To request randomness,
 * @dev call the 'requestRandomness' function with the desired VRF parameters. This function handles
 * @dev paying for the request based on the current pricing.
 *
 * @dev Consumers must implement the fullfillRandomWords function, which will be called during
 * @dev fulfillment with the randomness result.
 */
abstract contract VRFV2WrapperConsumerBase {
  LinkTokenInterface internal immutable LINK;
  VRFV2WrapperInterface internal immutable VRF_V2_WRAPPER;

  /**
   * @param _link is the address of LinkToken
   * @param _vrfV2Wrapper is the address of the VRFV2Wrapper contract
   */
  constructor(address _link, address _vrfV2Wrapper) {
    LINK = LinkTokenInterface(_link);
    VRF_V2_WRAPPER = VRFV2WrapperInterface(_vrfV2Wrapper);
  }

  /**
   * @dev Requests randomness from the VRF V2 wrapper.
   *
   * @param _callbackGasLimit is the gas limit that should be used when calling the consumer's
   *        fulfillRandomWords function.
   * @param _requestConfirmations is the number of confirmations to wait before fulfilling the
   *        request. A higher number of confirmations increases security by reducing the likelihood
   *        that a chain re-org changes a published randomness outcome.
   * @param _numWords is the number of random words to request.
   *
   * @return requestId is the VRF V2 request ID of the newly created randomness request.
   */
  function requestRandomness(
    uint32 _callbackGasLimit,
    uint16 _requestConfirmations,
    uint32 _numWords
  ) internal returns (uint256 requestId) {
    LINK.transferAndCall(
      address(VRF_V2_WRAPPER),
      VRF_V2_WRAPPER.calculateRequestPrice(_callbackGasLimit),
      abi.encode(_callbackGasLimit, _requestConfirmations, _numWords)
    );
    return VRF_V2_WRAPPER.lastRequestId();
  }

  /**
   * @notice fulfillRandomWords handles the VRF V2 wrapper response. The consuming contract must
   * @notice implement it.
   *
   * @param _requestId is the VRF V2 request ID.
   * @param _randomWords is the randomness result.
   */
  function fulfillRandomWords(uint256 _requestId, uint256[] memory _randomWords) internal virtual;

  function rawFulfillRandomWords(uint256 _requestId, uint256[] memory _randomWords) external {
    require(msg.sender == address(VRF_V2_WRAPPER), "only VRF V2 wrapper can fulfill");
    fulfillRandomWords(_requestId, _randomWords);
  }
}

File 6 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

File 7 of 13 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 8 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 9 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 10 of 13 : ConfirmedOwnerWithProposal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "../interfaces/IOwnable.sol";

/**
 * @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();
    _;
  }
}

File 11 of 13 : LinkTokenInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

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

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

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

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

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

  function totalSupply() external view returns (uint256 totalTokensIssued);

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

  function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success);

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

File 12 of 13 : VRFV2WrapperInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface VRFV2WrapperInterface {
  /**
   * @return the request ID of the most recent VRF V2 request made by this wrapper. This should only
   * be relied option within the same transaction that the request was made.
   */
  function lastRequestId() external view returns (uint256);

  /**
   * @notice Calculates the price of a VRF request with the given callbackGasLimit at the current
   * @notice block.
   *
   * @dev This function relies on the transaction gas price which is not automatically set during
   * @dev simulation. To estimate the price at a specific gas price, use the estimatePrice function.
   *
   * @param _callbackGasLimit is the gas limit used to estimate the price.
   */
  function calculateRequestPrice(uint32 _callbackGasLimit) external view returns (uint256);

  /**
   * @notice Estimates the price of a VRF request with a specific gas limit and gas price.
   *
   * @dev This is a convenience function that can be called in simulation to better understand
   * @dev pricing.
   *
   * @param _callbackGasLimit is the gas limit used to estimate the price.
   * @param _requestGasPriceWei is the gas price in wei used for the estimation.
   */
  function estimateRequestPrice(uint32 _callbackGasLimit, uint256 _requestGasPriceWei) external view returns (uint256);
}

File 13 of 13 : IOwnable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

  function transferOwnership(address recipient) external;

  function acceptOwnership() external;
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "@chainlink/=lib/chainlink/contracts/src/v0.8/",
    "chainlink/=lib/chainlink/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_gameTime","type":"uint256"},{"internalType":"address","name":"_zoomer","type":"address"},{"internalType":"address[]","name":"_nfts","type":"address[]"},{"internalType":"address","name":"_linkAddress","type":"address"},{"internalType":"address","name":"_vrfV2Wrapper","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalDividendsValueETH","type":"uint256"}],"name":"GotDividend","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LottoWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vapeTokenValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"potValueETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lottoValueETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalDividendsValueETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextHitPrice","type":"uint256"}],"name":"TookAHit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TookTheLastHit","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"},{"inputs":[],"name":"DIVIDEND_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOTTO_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_INVEST_TICK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_ZOOMER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POT_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TREASURY_CONTRIBUTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAPE_PRICE_TICK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZOOMER_HITS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","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":"collectedFee","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":"finalLottoValueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalLottoWinner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalPotValueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"useraddress","type":"address"}],"name":"getMyDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"hasEnoughZoomer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"hasNft","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hitters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPurchasedAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPurchasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lottoValueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minInvest","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":"","type":"uint256"}],"name":"nfts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numHits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payMyDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paydDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"potValueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestId","type":"uint256"},{"internalType":"uint256[]","name":"_randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeAVapeHit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"takeTheLastHit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDividendsValueETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vapeTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zoomer","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101e060405266038d7ea4c6800060c0526601c6bf5263400060e0819052602361010081905261012052600f610140819052610160819052662386f26fc1000060075560089190915560146101808190526a084595161401484a0000006101a05260006009819055600a819055600b819055600c819055600d81905591829055556015805460ff1916600117905560178054680300000001000186a06001600160501b0319909116179055348015620000b757600080fd5b5060405162002b7f38038062002b7f833981016040819052620000da91620003b6565b338060008484604051806040016040528060048152602001635661706560e01b815250604051806040016040528060048152602001635641504560e01b81525081600390816200012b91906200055c565b5060046200013a82826200055c565b5050506001600160a01b03918216608052811660a0528216620001a45760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600580546001600160a01b0319166001600160a01b0384811691909117909155811615620001d757620001d78162000256565b5050506101c085905260158054610100600160a81b0319166101006001600160a01b0387160217905582516200021590601690602086019062000302565b505042601055601780546001600160a01b039092166a010000000000000000000002600160501b600160f01b03199092169190911790555062000628915050565b336001600160a01b03821603620002b05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200019b565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b8280548282559060005260206000209081019282156200035a579160200282015b828111156200035a57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000323565b50620003689291506200036c565b5090565b5b808211156200036857600081556001016200036d565b80516001600160a01b03811681146200039b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215620003cf57600080fd5b855194506020620003e281880162000383565b60408801519095506001600160401b03808211156200040057600080fd5b818901915089601f8301126200041557600080fd5b8151818111156200042a576200042a620003a0565b8060051b604051601f19603f83011681018181108582111715620004525762000452620003a0565b60405291825284820192508381018501918c8311156200047157600080fd5b938501935b828510156200049a576200048a8562000383565b8452938501939285019262000476565b809850505050505050620004b16060870162000383565b9150620004c16080870162000383565b90509295509295909350565b600181811c90821680620004e257607f821691505b6020821081036200050357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055757600081815260208120601f850160051c81016020861015620005325750805b601f850160051c820191505b8181101562000553578281556001016200053e565b5050505b505050565b81516001600160401b03811115620005785762000578620003a0565b6200059081620005898454620004cd565b8462000509565b602080601f831160018114620005c85760008415620005af5750858301515b600019600386901b1c1916600185901b17855562000553565b600085815260208120601f198616915b82811015620005f957888601518255948401946001909101908401620005d8565b5085821015620006185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612483620006fc600039600081816108ae015281816111e201526116e901526000818161064901526115e20152600081816105df01526112730152600061040801526000818161030f0152610a3701526000818161087a01526109ef0152600081816106e601526109a701526000818161077801526113e801526000818161067d01526113b7015260008181610c1301528181611dfc0152611f0501526000611dd201526124836000f3fe6080604052600436106102e85760003560e01c806379ba509711610190578063b187bd26116100dc578063d914221d11610095578063e7fcf03c1161006f578063e7fcf03c1461093a578063e811f50a14610950578063e96317ad14610966578063f2fde38b1461097b57600080fd5b8063d914221d146108e5578063dd62ed3e146108fa578063e071082b1461091a57600080fd5b8063b187bd2614610830578063b5ff29c71461084a578063bcbccd8214610860578063d357763714610868578063d575c06d1461089c578063d65ab5f2146108d057600080fd5b806395d89b4111610149578063a4847dec11610123578063a4847dec146107ba578063a89c223e146107da578063a9059cbb146107fa578063ae4ba0d51461081a57600080fd5b806395d89b41146107515780639c7119a814610766578063a457c2d71461079a57600080fd5b806379ba50971461069f57806381299120146106b4578063845f4c97146106d45780638da5cb5b146107085780638dc654a214610726578063902f6dc21461073b57600080fd5b8063313ce5671161024f578063629e8a371161020857806370807489116101e257806370807489146105cd57806370a082311461060157806375f741a71461063757806378c115631461066b57600080fd5b8063629e8a371461056b57806362c629dc1461058157806363fd9e38146105b757600080fd5b8063313ce567146104bf57806335faa416146104db57806339509351146104f05780633ce37c5b1461051057806347541b53146105355780634ed7ff631461054b57600080fd5b80631fe543e3116102a15780631fe543e3146103d657806320421162146103f6578063235cea981461042a57806323b872dd14610469578063265aa621146104895780632fa39ba6146104a957600080fd5b806302b86d11146102fd5780630532bc4a1461034457806306fdde0314610359578063095ea7b31461037b5780630c155321146103ab57806318160ddd146103c157600080fd5b366102f8576102f63461099b565b005b600080fd5b34801561030957600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561035057600080fd5b506102f6610b10565b34801561036557600080fd5b5061036e610b5c565b60405161033b9190612105565b34801561038757600080fd5b5061039b61039636600461213b565b610bee565b604051901515815260200161033b565b3480156103b757600080fd5b50610331600c5481565b3480156103cd57600080fd5b50600254610331565b3480156103e257600080fd5b506102f66103f136600461217b565b610c08565b34801561040257600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b34801561043657600080fd5b5060175461045190600160501b90046001600160a01b031681565b6040516001600160a01b03909116815260200161033b565b34801561047557600080fd5b5061039b610484366004612245565b610c93565b34801561049557600080fd5b506104516104a4366004612281565b610cb7565b3480156104b557600080fd5b50610331600b5481565b3480156104cb57600080fd5b506040516012815260200161033b565b3480156104e757600080fd5b506102f6610ce1565b3480156104fc57600080fd5b5061039b61050b36600461213b565b610d91565b34801561051c57600080fd5b506015546104519061010090046001600160a01b031681565b34801561054157600080fd5b5061033160145481565b34801561055757600080fd5b5061039b61056636600461229a565b610db3565b34801561057757600080fd5b5061033160105481565b34801561058d57600080fd5b5061045161059c366004612281565b6012602052600090815260409020546001600160a01b031681565b3480156105c357600080fd5b5061033160075481565b3480156105d957600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b34801561060d57600080fd5b5061033161061c36600461229a565b6001600160a01b031660009081526020819052604090205490565b34801561064357600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ab57600080fd5b506102f6610e77565b3480156106c057600080fd5b50600e54610451906001600160a01b031681565b3480156106e057600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b34801561071457600080fd5b506005546001600160a01b0316610451565b34801561073257600080fd5b506102f6610f25565b34801561074757600080fd5b50610331600a5481565b34801561075d57600080fd5b5061036e61105b565b34801561077257600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a657600080fd5b5061039b6107b536600461213b565b61106a565b3480156107c657600080fd5b506103316107d536600461229a565b6110e5565b3480156107e657600080fd5b50601154610451906001600160a01b031681565b34801561080657600080fd5b5061039b61081536600461213b565b611137565b34801561082657600080fd5b5061033160085481565b34801561083c57600080fd5b5060155461039b9060ff1681565b34801561085657600080fd5b50610331600d5481565b6102f6611145565b34801561087457600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a857600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000081565b3480156108dc57600080fd5b506102f6611480565b3480156108f157600080fd5b506102f6611498565b34801561090657600080fd5b506103316109153660046122b5565b611592565b34801561092657600080fd5b5061039b61093536600461229a565b6115bd565b34801561094657600080fd5b5061033160095481565b34801561095c57600080fd5b50610331600f5481565b34801561097257600080fd5b506102f661165e565b34801561098757600080fd5b506102f661099636600461229a565b611844565b600080620186a06109cc7f0000000000000000000000000000000000000000000000000000000000000000856122fe565b6109d8906103e86122fe565b6109e2919061232b565b90506000620186a0610a147f0000000000000000000000000000000000000000000000000000000000000000866122fe565b610a20906103e86122fe565b610a2a919061232b565b90506000620186a0610a5c7f0000000000000000000000000000000000000000000000000000000000000000876122fe565b610a68906103e86122fe565b610a72919061232b565b905060008183610a82868961233f565b610a8c919061233f565b610a96919061233f565b9050610aa28385612352565b945081600f6000828254610ab69190612352565b9250508190555080600a6000828254610acf9190612352565b925050819055508260096000828254610ae89190612352565b9250508190555083600b6000828254610b019190612352565b90915550949695505050505050565b610b18611855565b600554600f546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610b54573d6000803e3d6000fd5b506000600f55565b606060038054610b6b90612365565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9790612365565b8015610be45780601f10610bb957610100808354040283529160200191610be4565b820191906000526020600020905b815481529060010190602001808311610bc757829003601f168201915b5050505050905090565b600033610bfc8185856118aa565b60019150505b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c855760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c0060448201526064015b60405180910390fd5b610c8f82826119ce565b5050565b600033610ca1858285611ab8565b610cac858585611b32565b506001949350505050565b60168181548110610cc757600080fd5b6000918252602090912001546001600160a01b0316905081565b610ce9611855565b60155460ff16610d3b5760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c79207377656570207768656e207061757365642e00000000006044820152606401610c7c565b60006009819055600a819055600b556005546001600160a01b03166001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610d8e573d6000803e3d6000fd5b50565b600033610bfc818585610da48383611592565b610dae9190612352565b6118aa565b6000805b601654811015610e6e57600060168281548110610dd657610dd661239f565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d91906123b5565b1115610e5c5750600192915050565b80610e66816123ce565b915050610db7565b50600092915050565b6006546001600160a01b03163314610eca5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610c7c565b600580546001600160a01b0319808216339081179093556006805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b610f2d611855565b6017546040516370a0823160e01b8152306004820152600160501b9091046001600160a01b031690819063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab91906123b5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101a91906123e7565b610d8e5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610c7c565b606060048054610b6b90612365565b600033816110788286611592565b9050838110156110d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c7c565b610cac82868684036118aa565b6001600160a01b03811660009081526020818152604080832054601390925282205460025483919083600b5461111b91906122fe565b611125919061232b565b61112f919061233f565b949350505050565b600033610bfc818585611b32565b60155460ff161561118e5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b6044820152606401610c7c565b6007543410156111e05760405162461bcd60e51b815260206004820152601a60248201527f4554482076616c75652062656c6f77206d696e20696e766573740000000000006044820152606401610c7c565b7f00000000000000000000000000000000000000000000000000000000000000006010544261120f919061233f565b11156112715760405162461bcd60e51b815260206004820152602b60248201527f54696d65206973206f7665722c20706f742063616e20626520636c61696d656460448201526a10313c903bb4b73732b91760a91b6064820152608401610c7c565b7f00000000000000000000000000000000000000000000000000000000000000006014541015611331576112a4336115bd565b806112b357506112b333610db3565b6113315760405162461bcd60e51b815260206004820152604360248201527f596f75206e656564206174206c65617374204d494e5f5a4f4f4d4552206f722060448201527f612077686974656c6973746564204e465420746f20706c61792074686520676160648201526236b29760e91b608482015260a401610c7c565b60148054600090815260126020526040812080546001600160a01b0319163317905581549190611360836123ce565b919050555060006113703461099b565b9050600060085482670de0b6b3a764000061138b91906122fe565b611395919061232b565b42601055601180546001600160a01b031916331790556007549091506113dc907f000000000000000000000000000000000000000000000000000000000000000090612352565b60075560085461140d907f000000000000000000000000000000000000000000000000000000000000000090612352565b60085561141a3382611ce1565b600954600a54600b546007546040805187815260208101879052908101949094526060840192909252608083015260a082015233907f8ba1656c325a14f30253080e90c36bc81768d8e6e4ef29d9d91c255a662eca479060c00160405180910390a25050565b611488611855565b6015805460ff1916905542601055565b60006114a3336110e5565b116114e95760405162461bcd60e51b8152602060048201526016602482015275139bc8191a5d9a59195b9908199bdc881c185e5bdd5d60521b6044820152606401610c7c565b60006114f4336110e5565b33600090815260136020526040812080549293508392909190611518908490612352565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561154a573d6000803e3d6000fd5b50600b5460405133917fbf9a7c73f2065a274d28fa0b44faeb27659be93eedefedd95a8cb2fa16f83da69161158791858252602082015260400190565b60405180910390a250565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6015546040516370a0823160e01b81526001600160a01b0383811660048301526000927f000000000000000000000000000000000000000000000000000000000000000092610100909104909116906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165691906123b5565b101592915050565b611666611855565b60155460ff16156116af5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b6044820152606401610c7c565b6010544210156116e75760405162461bcd60e51b815260206004820152600360248201526227379760e91b6044820152606401610c7c565b7f000000000000000000000000000000000000000000000000000000000000000060105442611716919061233f565b1161177a5760405162461bcd60e51b815260206004820152602e60248201527f54696d65206973206e6f74206f766572207965742c20636f756e74646f776e2060448201526d39ba34b63610393ab73734b7339760911b6064820152608401610c7c565b6011546009546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156117b6573d6000803e3d6000fd5b506011546009546040519081526001600160a01b03909116907fae29b17cdc8185857c2e9da966baf879e54a5b6ed9fe1b40abba585110d99b399060200160405180910390a260098054600c55600090556015805460ff19166001179055601754610d8e9063ffffffff8082169161ffff680100000000000000008204169164010000000090910416611dac565b61184c611855565b610d8e81611f85565b6005546001600160a01b031633146118a85760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610c7c565b565b6001600160a01b03831661190c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7c565b6001600160a01b03821661196d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000601454826000815181106119e6576119e661239f565b60200260200101516119f89190612409565b60008181526012602052604080822054600a5491519394506001600160a01b031692839282156108fc02929190818181858888f19350505050158015611a42573d6000803e3d6000fd5b50806001600160a01b03167fc877d2a6c36bc8b2142f64847aa748d503babf9abfc1889fb06e782ba7c837d0600a54604051611a8091815260200190565b60405180910390a2600a8054600d5560009055600e80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6000611ac48484611592565b90506000198114611b2c5781811015611b1f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c7c565b611b2c84848484036118aa565b50505050565b6001600160a01b038316611b965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7c565b6001600160a01b038216611bf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7c565b611c0383838361202f565b6001600160a01b03831660009081526020819052604090205481811015611c7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c7c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611b2c565b6001600160a01b038216611d375760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c7c565b611d436000838361202f565b8060026000828254611d559190612352565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691634000aea0917f00000000000000000000000000000000000000000000000000000000000000009190821690634306d35490602401602060405180830381865afa158015611e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6a91906123b5565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b8152600401611ebf9392919061241d565b6020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0291906123e7565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112f91906123b5565b336001600160a01b03821603611fdd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c7c565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6005546001600160a01b031633148061204f57506001600160a01b038316155b6120ba5760405162461bcd60e51b815260206004820152603660248201527f596f7520617265206e6f7420746865206f776e65722c206f6e6c79206f776e65604482015275391031b0b7103a3930b739b332b9103a37b5b2b7399760511b6064820152608401610c7c565b505050565b6000815180845260005b818110156120e5576020818501810151868301820152016120c9565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061211860208301846120bf565b9392505050565b80356001600160a01b038116811461213657600080fd5b919050565b6000806040838503121561214e57600080fd5b6121578361211f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561218e57600080fd5b8235915060208084013567ffffffffffffffff808211156121ae57600080fd5b818601915086601f8301126121c257600080fd5b8135818111156121d4576121d4612165565b8060051b604051601f19603f830116810181811085821117156121f9576121f9612165565b60405291825284820192508381018501918983111561221757600080fd5b938501935b828510156122355784358452938501939285019261221c565b8096505050505050509250929050565b60008060006060848603121561225a57600080fd5b6122638461211f565b92506122716020850161211f565b9150604084013590509250925092565b60006020828403121561229357600080fd5b5035919050565b6000602082840312156122ac57600080fd5b6121188261211f565b600080604083850312156122c857600080fd5b6122d18361211f565b91506122df6020840161211f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0257610c026122e8565b634e487b7160e01b600052601260045260246000fd5b60008261233a5761233a612315565b500490565b81810381811115610c0257610c026122e8565b80820180821115610c0257610c026122e8565b600181811c9082168061237957607f821691505b60208210810361239957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156123c757600080fd5b5051919050565b6000600182016123e0576123e06122e8565b5060010190565b6000602082840312156123f957600080fd5b8151801515811461211857600080fd5b60008261241857612418612315565b500690565b60018060a01b038416815282602082015260606040820152600061244460608301846120bf565b9594505050505056fea2646970667358221220743553944856be53dc360f1b44c0dc3f1bf5e0f035c27aa9a36c003b91a078e164736f6c63430008150033000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000d505c03d30e65f6e9b4ef88855a47a89e4b767600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000005a861794b927983406fce1d062e00b9368d97df60000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806379ba509711610190578063b187bd26116100dc578063d914221d11610095578063e7fcf03c1161006f578063e7fcf03c1461093a578063e811f50a14610950578063e96317ad14610966578063f2fde38b1461097b57600080fd5b8063d914221d146108e5578063dd62ed3e146108fa578063e071082b1461091a57600080fd5b8063b187bd2614610830578063b5ff29c71461084a578063bcbccd8214610860578063d357763714610868578063d575c06d1461089c578063d65ab5f2146108d057600080fd5b806395d89b4111610149578063a4847dec11610123578063a4847dec146107ba578063a89c223e146107da578063a9059cbb146107fa578063ae4ba0d51461081a57600080fd5b806395d89b41146107515780639c7119a814610766578063a457c2d71461079a57600080fd5b806379ba50971461069f57806381299120146106b4578063845f4c97146106d45780638da5cb5b146107085780638dc654a214610726578063902f6dc21461073b57600080fd5b8063313ce5671161024f578063629e8a371161020857806370807489116101e257806370807489146105cd57806370a082311461060157806375f741a71461063757806378c115631461066b57600080fd5b8063629e8a371461056b57806362c629dc1461058157806363fd9e38146105b757600080fd5b8063313ce567146104bf57806335faa416146104db57806339509351146104f05780633ce37c5b1461051057806347541b53146105355780634ed7ff631461054b57600080fd5b80631fe543e3116102a15780631fe543e3146103d657806320421162146103f6578063235cea981461042a57806323b872dd14610469578063265aa621146104895780632fa39ba6146104a957600080fd5b806302b86d11146102fd5780630532bc4a1461034457806306fdde0314610359578063095ea7b31461037b5780630c155321146103ab57806318160ddd146103c157600080fd5b366102f8576102f63461099b565b005b600080fd5b34801561030957600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000f81565b6040519081526020015b60405180910390f35b34801561035057600080fd5b506102f6610b10565b34801561036557600080fd5b5061036e610b5c565b60405161033b9190612105565b34801561038757600080fd5b5061039b61039636600461213b565b610bee565b604051901515815260200161033b565b3480156103b757600080fd5b50610331600c5481565b3480156103cd57600080fd5b50600254610331565b3480156103e257600080fd5b506102f66103f136600461217b565b610c08565b34801561040257600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000000f81565b34801561043657600080fd5b5060175461045190600160501b90046001600160a01b031681565b6040516001600160a01b03909116815260200161033b565b34801561047557600080fd5b5061039b610484366004612245565b610c93565b34801561049557600080fd5b506104516104a4366004612281565b610cb7565b3480156104b557600080fd5b50610331600b5481565b3480156104cb57600080fd5b506040516012815260200161033b565b3480156104e757600080fd5b506102f6610ce1565b3480156104fc57600080fd5b5061039b61050b36600461213b565b610d91565b34801561051c57600080fd5b506015546104519061010090046001600160a01b031681565b34801561054157600080fd5b5061033160145481565b34801561055757600080fd5b5061039b61056636600461229a565b610db3565b34801561057757600080fd5b5061033160105481565b34801561058d57600080fd5b5061045161059c366004612281565b6012602052600090815260409020546001600160a01b031681565b3480156105c357600080fd5b5061033160075481565b3480156105d957600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000001481565b34801561060d57600080fd5b5061033161061c36600461229a565b6001600160a01b031660009081526020819052604090205490565b34801561064357600080fd5b506103317f000000000000000000000000000000000000000000084595161401484a00000081565b34801561067757600080fd5b506103317f00000000000000000000000000000000000000000000000000038d7ea4c6800081565b3480156106ab57600080fd5b506102f6610e77565b3480156106c057600080fd5b50600e54610451906001600160a01b031681565b3480156106e057600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000002381565b34801561071457600080fd5b506005546001600160a01b0316610451565b34801561073257600080fd5b506102f6610f25565b34801561074757600080fd5b50610331600a5481565b34801561075d57600080fd5b5061036e61105b565b34801561077257600080fd5b506103317f0000000000000000000000000000000000000000000000000001c6bf5263400081565b3480156107a657600080fd5b5061039b6107b536600461213b565b61106a565b3480156107c657600080fd5b506103316107d536600461229a565b6110e5565b3480156107e657600080fd5b50601154610451906001600160a01b031681565b34801561080657600080fd5b5061039b61081536600461213b565b611137565b34801561082657600080fd5b5061033160085481565b34801561083c57600080fd5b5060155461039b9060ff1681565b34801561085657600080fd5b50610331600d5481565b6102f6611145565b34801561087457600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000002381565b3480156108a857600080fd5b506103317f000000000000000000000000000000000000000000000000000000000000a8c081565b3480156108dc57600080fd5b506102f6611480565b3480156108f157600080fd5b506102f6611498565b34801561090657600080fd5b506103316109153660046122b5565b611592565b34801561092657600080fd5b5061039b61093536600461229a565b6115bd565b34801561094657600080fd5b5061033160095481565b34801561095c57600080fd5b50610331600f5481565b34801561097257600080fd5b506102f661165e565b34801561098757600080fd5b506102f661099636600461229a565b611844565b600080620186a06109cc7f0000000000000000000000000000000000000000000000000000000000000023856122fe565b6109d8906103e86122fe565b6109e2919061232b565b90506000620186a0610a147f0000000000000000000000000000000000000000000000000000000000000023866122fe565b610a20906103e86122fe565b610a2a919061232b565b90506000620186a0610a5c7f000000000000000000000000000000000000000000000000000000000000000f876122fe565b610a68906103e86122fe565b610a72919061232b565b905060008183610a82868961233f565b610a8c919061233f565b610a96919061233f565b9050610aa28385612352565b945081600f6000828254610ab69190612352565b9250508190555080600a6000828254610acf9190612352565b925050819055508260096000828254610ae89190612352565b9250508190555083600b6000828254610b019190612352565b90915550949695505050505050565b610b18611855565b600554600f546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610b54573d6000803e3d6000fd5b506000600f55565b606060038054610b6b90612365565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9790612365565b8015610be45780601f10610bb957610100808354040283529160200191610be4565b820191906000526020600020905b815481529060010190602001808311610bc757829003601f168201915b5050505050905090565b600033610bfc8185856118aa565b60019150505b92915050565b336001600160a01b037f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df61614610c855760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c0060448201526064015b60405180910390fd5b610c8f82826119ce565b5050565b600033610ca1858285611ab8565b610cac858585611b32565b506001949350505050565b60168181548110610cc757600080fd5b6000918252602090912001546001600160a01b0316905081565b610ce9611855565b60155460ff16610d3b5760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c79207377656570207768656e207061757365642e00000000006044820152606401610c7c565b60006009819055600a819055600b556005546001600160a01b03166001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610d8e573d6000803e3d6000fd5b50565b600033610bfc818585610da48383611592565b610dae9190612352565b6118aa565b6000805b601654811015610e6e57600060168281548110610dd657610dd661239f565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d91906123b5565b1115610e5c5750600192915050565b80610e66816123ce565b915050610db7565b50600092915050565b6006546001600160a01b03163314610eca5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610c7c565b600580546001600160a01b0319808216339081179093556006805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b610f2d611855565b6017546040516370a0823160e01b8152306004820152600160501b9091046001600160a01b031690819063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab91906123b5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610ff6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101a91906123e7565b610d8e5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610c7c565b606060048054610b6b90612365565b600033816110788286611592565b9050838110156110d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c7c565b610cac82868684036118aa565b6001600160a01b03811660009081526020818152604080832054601390925282205460025483919083600b5461111b91906122fe565b611125919061232b565b61112f919061233f565b949350505050565b600033610bfc818585611b32565b60155460ff161561118e5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b6044820152606401610c7c565b6007543410156111e05760405162461bcd60e51b815260206004820152601a60248201527f4554482076616c75652062656c6f77206d696e20696e766573740000000000006044820152606401610c7c565b7f000000000000000000000000000000000000000000000000000000000000a8c06010544261120f919061233f565b11156112715760405162461bcd60e51b815260206004820152602b60248201527f54696d65206973206f7665722c20706f742063616e20626520636c61696d656460448201526a10313c903bb4b73732b91760a91b6064820152608401610c7c565b7f00000000000000000000000000000000000000000000000000000000000000146014541015611331576112a4336115bd565b806112b357506112b333610db3565b6113315760405162461bcd60e51b815260206004820152604360248201527f596f75206e656564206174206c65617374204d494e5f5a4f4f4d4552206f722060448201527f612077686974656c6973746564204e465420746f20706c61792074686520676160648201526236b29760e91b608482015260a401610c7c565b60148054600090815260126020526040812080546001600160a01b0319163317905581549190611360836123ce565b919050555060006113703461099b565b9050600060085482670de0b6b3a764000061138b91906122fe565b611395919061232b565b42601055601180546001600160a01b031916331790556007549091506113dc907f00000000000000000000000000000000000000000000000000038d7ea4c6800090612352565b60075560085461140d907f0000000000000000000000000000000000000000000000000001c6bf5263400090612352565b60085561141a3382611ce1565b600954600a54600b546007546040805187815260208101879052908101949094526060840192909252608083015260a082015233907f8ba1656c325a14f30253080e90c36bc81768d8e6e4ef29d9d91c255a662eca479060c00160405180910390a25050565b611488611855565b6015805460ff1916905542601055565b60006114a3336110e5565b116114e95760405162461bcd60e51b8152602060048201526016602482015275139bc8191a5d9a59195b9908199bdc881c185e5bdd5d60521b6044820152606401610c7c565b60006114f4336110e5565b33600090815260136020526040812080549293508392909190611518908490612352565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561154a573d6000803e3d6000fd5b50600b5460405133917fbf9a7c73f2065a274d28fa0b44faeb27659be93eedefedd95a8cb2fa16f83da69161158791858252602082015260400190565b60405180910390a250565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6015546040516370a0823160e01b81526001600160a01b0383811660048301526000927f000000000000000000000000000000000000000000084595161401484a00000092610100909104909116906370a0823190602401602060405180830381865afa158015611632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165691906123b5565b101592915050565b611666611855565b60155460ff16156116af5760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b6044820152606401610c7c565b6010544210156116e75760405162461bcd60e51b815260206004820152600360248201526227379760e91b6044820152606401610c7c565b7f000000000000000000000000000000000000000000000000000000000000a8c060105442611716919061233f565b1161177a5760405162461bcd60e51b815260206004820152602e60248201527f54696d65206973206e6f74206f766572207965742c20636f756e74646f776e2060448201526d39ba34b63610393ab73734b7339760911b6064820152608401610c7c565b6011546009546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156117b6573d6000803e3d6000fd5b506011546009546040519081526001600160a01b03909116907fae29b17cdc8185857c2e9da966baf879e54a5b6ed9fe1b40abba585110d99b399060200160405180910390a260098054600c55600090556015805460ff19166001179055601754610d8e9063ffffffff8082169161ffff680100000000000000008204169164010000000090910416611dac565b61184c611855565b610d8e81611f85565b6005546001600160a01b031633146118a85760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610c7c565b565b6001600160a01b03831661190c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7c565b6001600160a01b03821661196d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c7c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000601454826000815181106119e6576119e661239f565b60200260200101516119f89190612409565b60008181526012602052604080822054600a5491519394506001600160a01b031692839282156108fc02929190818181858888f19350505050158015611a42573d6000803e3d6000fd5b50806001600160a01b03167fc877d2a6c36bc8b2142f64847aa748d503babf9abfc1889fb06e782ba7c837d0600a54604051611a8091815260200190565b60405180910390a2600a8054600d5560009055600e80546001600160a01b0319166001600160a01b0392909216919091179055505050565b6000611ac48484611592565b90506000198114611b2c5781811015611b1f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c7c565b611b2c84848484036118aa565b50505050565b6001600160a01b038316611b965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c7c565b6001600160a01b038216611bf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c7c565b611c0383838361202f565b6001600160a01b03831660009081526020819052604090205481811015611c7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c7c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611b2c565b6001600160a01b038216611d375760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610c7c565b611d436000838361202f565b8060026000828254611d559190612352565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca811691634000aea0917f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df69190821690634306d35490602401602060405180830381865afa158015611e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6a91906123b5565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b8152600401611ebf9392919061241d565b6020604051808303816000875af1158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0291906123e7565b507f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df66001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112f91906123b5565b336001600160a01b03821603611fdd5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c7c565b600680546001600160a01b0319166001600160a01b03838116918217909255600554604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6005546001600160a01b031633148061204f57506001600160a01b038316155b6120ba5760405162461bcd60e51b815260206004820152603660248201527f596f7520617265206e6f7420746865206f776e65722c206f6e6c79206f776e65604482015275391031b0b7103a3930b739b332b9103a37b5b2b7399760511b6064820152608401610c7c565b505050565b6000815180845260005b818110156120e5576020818501810151868301820152016120c9565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061211860208301846120bf565b9392505050565b80356001600160a01b038116811461213657600080fd5b919050565b6000806040838503121561214e57600080fd5b6121578361211f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561218e57600080fd5b8235915060208084013567ffffffffffffffff808211156121ae57600080fd5b818601915086601f8301126121c257600080fd5b8135818111156121d4576121d4612165565b8060051b604051601f19603f830116810181811085821117156121f9576121f9612165565b60405291825284820192508381018501918983111561221757600080fd5b938501935b828510156122355784358452938501939285019261221c565b8096505050505050509250929050565b60008060006060848603121561225a57600080fd5b6122638461211f565b92506122716020850161211f565b9150604084013590509250925092565b60006020828403121561229357600080fd5b5035919050565b6000602082840312156122ac57600080fd5b6121188261211f565b600080604083850312156122c857600080fd5b6122d18361211f565b91506122df6020840161211f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c0257610c026122e8565b634e487b7160e01b600052601260045260246000fd5b60008261233a5761233a612315565b500490565b81810381811115610c0257610c026122e8565b80820180821115610c0257610c026122e8565b600181811c9082168061237957607f821691505b60208210810361239957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156123c757600080fd5b5051919050565b6000600182016123e0576123e06122e8565b5060010190565b6000602082840312156123f957600080fd5b8151801515811461211857600080fd5b60008261241857612418612315565b500690565b60018060a01b038416815282602082015260606040820152600061244460608301846120bf565b9594505050505056fea2646970667358221220743553944856be53dc360f1b44c0dc3f1bf5e0f035c27aa9a36c003b91a078e164736f6c63430008150033

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

000000000000000000000000000000000000000000000000000000000000a8c00000000000000000000000000d505c03d30e65f6e9b4ef88855a47a89e4b767600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000005a861794b927983406fce1d062e00b9368d97df60000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _gameTime (uint256): 43200
Arg [1] : _zoomer (address): 0x0D505C03d30e65f6e9b4Ef88855a47a89e4b7676

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000a8c0
Arg [1] : 0000000000000000000000000d505c03d30e65f6e9b4ef88855a47a89e4b7676
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [4] : 0000000000000000000000005a861794b927983406fce1d062e00b9368d97df6
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.