Contract 0x1af39b291fcd158ade7b85d83f1044d02ab8d6c2

 

Contract Overview

Zootoken.Club: ZOO Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash
Block
From
To
Value
0x160916e2437c0a2482481edc1bd33cdf74b50fcc24bfd86a9064abbc308c74a2119581022021-03-02 9:45:073 days 3 hrs ago0x439001e00378ee142489f56c04895fac01dc0bb5 IN  Zootoken.Club: ZOO Token0 Ether0.00385087575
0x0288cfc2773cb0445fff05273be564ea90be7c63dd0c04d0f59a175d134aa313114930562020-12-20 22:53:1474 days 14 hrs ago0xd6f64c02c14ac390bf5f772de6cd590f9412bd1c IN  Zootoken.Club: ZOO Token0 Ether0.00244920555
0xe3580f4ddef5b2c7efabc8a640fb7fbb91c4db34fa8efc42232825f4217f956a114694752020-12-17 8:13:3478 days 5 hrs ago0xc17a00e8d3c6b91a9d49abf9c463ff0b014f14f3 IN  Zootoken.Club: ZOO Token0 Ether0.005562621153
0x6cb7a451ef0a9aad031a7c320866a7f9ea7ae8caeb212c72d43ac3b0cb3c8f0c114583112020-12-15 14:58:2279 days 22 hrs ago0x949a97e87779bb339667a33b66c0ce9d9a6402f0 IN  Zootoken.Club: ZOO Token0 Ether0.004653696128
0xa63cfb1fc29fe7dc29764a2276471f7bfa61a892bde3f14ce528b94633a952eb114568042020-12-15 9:22:3980 days 3 hrs ago0x5fa2aa9fc9020eb208b3704cbc9ae3b80e1f3d90 IN  Zootoken.Club: ZOO Token0 Ether0.004041577191.3
0x0c0912e01bde082d8ac88584962bbec72e275901bf9f9439526746b37fadd04a114567912020-12-15 9:21:0380 days 4 hrs ago0x60db24be4c9c70c934450c393d2f6711fbf108de IN  Zootoken.Club: ZOO Token0 Ether0.003085998369.3
0x0095b0eab5355a7f182811f158c824154a8acf89f6eb0113b860cda4ce4eca17114506302020-12-14 10:35:5181 days 2 hrs ago0x41af363578d38f6093a2b877fb08ac7f3d7bc578 IN  Zootoken.Club: ZOO Token0 Ether0.00218201906449.000001459
0xc6e3bc68bf2f5f89d9f348fbd0675929fa969d796331a868252b25b46790752b113719312020-12-02 8:24:3493 days 4 hrs ago0x581b3d2cdcd3911d9bbf503550c3f6c1f3c997b1 IN  Zootoken.Club: ZOO Token0 Ether0.00106874424
0x3e7744e80faac9ff3ebf69eafe363914ae2284366c75412a807f7bbb76fe2237112372322020-11-11 15:48:21113 days 21 hrs ago0xb6582d048c1d2e781f018ffc8e54c3f30ceaae88 IN  Zootoken.Club: ZOO Token0 Ether0.0013359330
0xfbb027f684346783544e67668c22ddee7f8d485c4b60baa4e3bae054f9a91f2e111897742020-11-04 9:05:18121 days 4 hrs ago0x7d56867ae0fd8de19f8caa03e62fc8d95d0c065b IN  Zootoken.Club: ZOO Token0 Ether0.00069123919
0x9de0fa951bd1ca780888aa9ba1d244f34cf1e8adbd976333649bd2b98a3ea3eb110700992020-10-17 0:09:20139 days 13 hrs ago0x8a333a18b924554d6e83ef9e9944de6260f61d3b IN  Zootoken.Club: ZOO Token0 Ether0.00179707535
0xb63226d0e05e8a2a64e8063766d1840a895b3c7d0e02bb60f4bc4ff0225acdee110562112020-10-14 21:19:30141 days 16 hrs ago0x1f3370c7891c2a976652dcb2f6e563098dff87e1 IN  Zootoken.Club: ZOO Token0 Ether0.00374060484
0x71b826b34280c9ef3ac48254af7d85c3d4bcd52156875dc28c8e3a057b8bce47110060432020-10-07 2:50:04149 days 10 hrs ago0x28b24e7accd949c2aa4b531120db6454a3bb95fe IN  Zootoken.Club: ZOO Token0 Ether0.00440856999
0xf8746e44dbd5459976375f2d54c57e550ad0bf6a40dd9a6eac91200590ff7767110032562020-10-06 16:33:32149 days 20 hrs ago0x865c2f85c9fea1c6ac7f53de07554d68cb92ed88 IN  Zootoken.Club: ZOO Token0 Ether0.005388251121
0x3102ca796b676aa438c48a5a1dea4af83d4287d4a52a9896d8493fca827764f5109984662020-10-05 22:36:40150 days 14 hrs ago0xfd13ee3b4df54967dcdcb7fa6448642da2ed4222 IN  Zootoken.Club: ZOO Token0 Ether0.00227108151
0xb704dc90cc5af53400c1751a9ccd934df17c1a441af6136d77d84e036c7e9fee109909162020-10-04 18:17:32151 days 19 hrs ago0x8f93e4c39ff6dbb616c0c435b0e51bc0ef013445 IN  Zootoken.Club: ZOO Token0 Ether0.00391872888
0x525eae9d1edc51c70d30458502078fef69923d2b98432ea1d4c021ff14746100109908812020-10-04 18:09:11151 days 19 hrs ago0x8f93e4c39ff6dbb616c0c435b0e51bc0ef013445 IN  Zootoken.Club: ZOO Token0 Ether0.00446805987
0x81980825785cedcf899dba35bc47abd4ab149e39c545ca5bb3e33ee15b3c3d0c109885912020-10-04 9:33:54152 days 3 hrs ago0xe4fc3e607df4b2983a46738f5e81fc1faf611000 IN  Zootoken.Club: ZOO Token0 Ether0.00160311636
0xcbce9472990bd1698347676eab5d573c60cda496f4c849656ae4ca0501aa68ba109734742020-10-02 0:38:07154 days 12 hrs ago0x38bb52fe6724ba25c0974b560007503aae1c6310 IN  Zootoken.Club: ZOO Token0 Ether0.0030814260
0x3a3d4c0af1fbfa672ff075547b111bc00b48d28e9513f99b57675fc5b8beed27109734732020-10-02 0:38:02154 days 12 hrs ago0x38bb52fe6724ba25c0974b560007503aae1c6310 IN  Zootoken.Club: ZOO Token0 Ether0.0030814260
0xd617707d6e721f3199bbcf8a5bdc0d9557a9ec16dbd134bff332944a5cfa2c2a109734732020-10-02 0:38:02154 days 12 hrs ago0x38bb52fe6724ba25c0974b560007503aae1c6310 IN  Zootoken.Club: ZOO Token0 Ether0.0030814260
0xb9b1559a8eba1e7cf20d479b7a0b270cb4aa51646f5c0b7358623d9e66dae5ce109623372020-09-30 7:07:26156 days 6 hrs ago0xf9263986be319e0444b600a73501ef7689cdb022 IN  Zootoken.Club: ZOO Token0 Ether0.00554989853124.63
0x34b8bcfb404a2108b79a64930ff9f70c1914fdcbcba25f572e80bcf7b353a8a4109592342020-09-29 19:30:42156 days 17 hrs ago0x422af24a3e8fec634e78ae575971af3c0048092e IN  Zootoken.Club: ZOO Token0 Ether0.00316170171
0x0d5686489761b68e5be42cbef3e53b74e7b5040222b92f303ba25ae40f0a1178109523552020-09-28 17:42:57157 days 19 hrs ago0x46a73be41cec11b6e34b92d08c01c226395018d6 IN  Zootoken.Club: ZOO Token0 Ether0.00347341878
0x7a347702a5f2f9e33f290c7bfb3c0c0b8444940c5d28f2a4885c4f9dcd1aff06109521542020-09-28 16:58:26157 days 20 hrs ago0x2c897c7f4b3b6a4664c46672b31189b7a0316e26 IN  Zootoken.Club: ZOO Token0 Ether0.00440856999
[ Download CSV Export 

OVERVIEW

The ZOO token represents fractional ownership of a virtual zoo parcel in The Bronx neighborhood of Cryptovoxels, a virtual world built on Ethereum.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZooToken

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-22
*/

// SPDX-License-Identifier: UNLICENSED AND MIT


// File: @openzeppelin/contracts/GSN/Context.sol


pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/introspection/IERC165.sol


pragma solidity ^0.6.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: @openzeppelin/contracts/token/ERC721/IERC721.sol


pragma solidity ^0.6.2;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transfered 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`, 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);

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

// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


pragma solidity ^0.6.0;





/**
 * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 value {ERC20} uses, unless {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 { }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol


pragma solidity ^0.6.0;

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

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

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: contracts/ZooToken.sol


pragma solidity ^0.6.0;







contract ZooToken is Ownable, ReentrancyGuard, ERC20("ZooToken", "ZOO") {
    using SafeMath for uint256;

    event WithdrawEth(
        address to,
        uint256 amountSent,
        uint256 tokenBalance,
        uint256 initialSupply,
        uint256 purchasePrice
    );

    event AuctionComplete(uint256 amountPayed);

    IERC721 internal _cryptoVoxelsContract;
    uint256 internal _cryptoVoxelsParcelId;
    uint256 internal _auctionStartPrice;
    uint256 internal _auctionEndPrice;
    uint256 internal _auctionStartTime;
    uint256 internal _auctionEndTime;
    uint256 internal _initialSupply;
    bool internal _hasBeenMinted;
    bool internal _hasParcelBeenPurchased;
    uint256 internal _parcelPurchasedPrice;

    constructor(
        address cryptoVoxelsContractAddress,
        uint256 cryptoVoxelsParcelId,
        uint256 auctionStartPrice,
        uint256 auctionEndPrice,
        uint256 auctionStartTime,
        uint256 auctionEndTime,
        uint256 initialSupply
    ) public {
        require(initialSupply > 0, "token supply cannot be 0");
        require(
            block.timestamp < auctionStartTime,
            "Auction start time passed"
        );
        require(
            auctionStartTime < auctionEndTime,
            "Auction end time is earlier than auction start time"
        );
        require(auctionStartPrice > 0, "Start price is zero");
        require(
            auctionStartPrice > auctionEndPrice,
            "start price is less than end price"
        );
        _cryptoVoxelsContract = IERC721(cryptoVoxelsContractAddress);
        _cryptoVoxelsParcelId = cryptoVoxelsParcelId;
        _auctionStartPrice = auctionStartPrice;
        _auctionEndPrice = auctionEndPrice;
        _auctionStartTime = auctionStartTime;
        _auctionEndTime = auctionEndTime;
        _initialSupply = initialSupply;
        _hasBeenMinted = false;
        _hasParcelBeenPurchased = false;
    }

    // ------ Modifiers ------
    modifier duringAuction() {
        require(_hasBeenMinted == true, "Tokens have yet to be minted");
        require(
            _hasParcelBeenPurchased == false,
            "Parcel has already been purchased"
        );
        require(
            block.timestamp >= _auctionStartTime,
            "Auction has not started yet"
        );
        _;
    }

    // Escape hatch that allows owner to withdraw ETH and NFTs
    // in the rare case that something goes really wrong.
    // Only available 1 year after the auction ends.
    modifier escapeHatchAvailable() {
        uint256 escapeHatchAvailableTime = _auctionEndTime + (1 days * 365);

        require(
            block.timestamp >= escapeHatchAvailableTime,
            "not enough time has passed for escape hatch to be available"
        );
        _;
    }

    // ------ Public functions ------
    function getMetadata()
        public
        view
        returns (
            IERC721,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            bool,
            bool,
            uint256
        )
    {
        return (
            _cryptoVoxelsContract,
            _cryptoVoxelsParcelId,
            _auctionStartPrice,
            _auctionEndPrice,
            _auctionStartTime,
            _auctionEndTime,
            _initialSupply,
            _hasBeenMinted,
            _hasParcelBeenPurchased,
            _parcelPurchasedPrice
        );
    }

    function getPrice() public view duringAuction() returns (uint256) {
        return _getPrice(block.timestamp);
    }

    // If someone deposited the wrong NFT prior to minting tokens
    // let the admin withdraw it.  To protect buyers, this cannot be done once tokens are actually minted, to protect buyers.
    function withdrawPriorToMint(address nftAddress, uint256 tokenId)
        public
        onlyOwner
    {
        // can only withdraw via safety hatch if tokens have not yet been minted
        require(!_hasBeenMinted, "cannot withdraw if tokens already minted");

        IERC721 erc721Contract = IERC721(nftAddress);
        erc721Contract.safeTransferFrom(address(this), owner(), tokenId);
    }

    // Mints tokens if correct parcel is deposited
    function mintTokens() public onlyOwner {
        // Sanity check auction times
        require(
            block.timestamp < _auctionStartTime,
            "Auction start time passed"
        );

        // Ensure we own the NFT we expect
        require(
            _cryptoVoxelsContract.ownerOf(_cryptoVoxelsParcelId) ==
                address(this),
            "must own expected nft"
        );
        require(!_hasBeenMinted, "cant mint more than once");

        // Mint tokens
        _mint(owner(), _initialSupply);
        // Mark tokens as minted
        _hasBeenMinted = true;
    }

    // Allows buyer to buy parcel during auction
    function buy() external payable duringAuction() nonReentrant() {
        uint256 currentPrice = getPrice();
        require(msg.value >= currentPrice, "ETH amount insufficient");

        _parcelPurchasedPrice = currentPrice;
        _hasParcelBeenPurchased = true;

        // Transfer parcel to new owner
        _cryptoVoxelsContract.safeTransferFrom(
            address(this),
            msg.sender,
            _cryptoVoxelsParcelId
        );
        emit AuctionComplete(currentPrice);

        // If new owner has over-purchased, refund
        if (msg.value > currentPrice) {
            uint256 delta = msg.value.sub(currentPrice);
            Address.sendValue(msg.sender, delta);
        }
    }

    // Once the auction is complete, allows token holders
    // to withdraw their portion of the purchase price
    // proportional to their token holdings.
    // Burns tokens afterwards after redeeming ETH
    function burnAndRedeem() external nonReentrant() {
        require(_hasParcelBeenPurchased, "parcel must have been purchased");
        require(
            _parcelPurchasedPrice > 0,
            "parcel purchase price must be positive"
        );
        uint256 contractBalance = address(this).balance;
        require(contractBalance > 0, "contract must hold ETH");

        uint256 senderBalance = balanceOf(msg.sender);

        // Require that user has tokens
        require(senderBalance > 0, "sender must have balance");
        _burn(msg.sender, senderBalance);

        // Figure out what we owe them
        uint256 amountOwed = (_parcelPurchasedPrice.mul(senderBalance)).div(
            _initialSupply
        );
        // Handle rounding error where we owe more than what we have
        uint256 amountToSend = amountOwed > contractBalance
            ? contractBalance
            : amountOwed;
        emit WithdrawEth(
            msg.sender,
            amountToSend,
            senderBalance,
            _initialSupply,
            _parcelPurchasedPrice
        );
        Address.sendValue(msg.sender, amountToSend);
    }

    // in the case of the escape hatch being available, allow ETH withdrawal
    function ethEscapeHatch() public onlyOwner() escapeHatchAvailable() {
        // sender should be owner
        Address.sendValue(msg.sender, address(this).balance);
    }

    // in the case of the escape hatch being available, allow NFT withdrawal
    function nftEscapeHatch(address nftAddress, uint256 tokenId)
        public
        onlyOwner()
        escapeHatchAvailable()
    {
        IERC721 erc721Contract = IERC721(nftAddress);
        erc721Contract.safeTransferFrom(address(this), owner(), tokenId);
    }

    // ------ Non public functions ------
    function _getPrice(uint256 timestamp)
        private
        view
        duringAuction()
        returns (uint256)
    {
        // If auction is ended, then return minAmount;
        if (timestamp >= _auctionEndTime) {
            return _auctionEndPrice;
        }

        // Compute price delta
        uint256 minAmount = _auctionEndPrice;
        uint256 amountDelta = _auctionStartPrice.sub(minAmount);
        require(amountDelta > 0, "Price must be decreasing");

        // Compute time delta
        uint256 auctionDurationSeconds = _auctionEndTime.sub(_auctionStartTime);
        require(auctionDurationSeconds > 0, "Time is negative");
        uint256 remainingDurationSeconds = _auctionEndTime.sub(timestamp);

        // inspired by https://github.com/0xProject/0x-monorepo/blob/2.1/contracts/extensions/contracts/src/DutchAuction/DutchAuction.sol#L193
        return
            minAmount.add(
                remainingDurationSeconds.mul(amountDelta).div(
                    auctionDurationSeconds
                )
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"cryptoVoxelsContractAddress","type":"address"},{"internalType":"uint256","name":"cryptoVoxelsParcelId","type":"uint256"},{"internalType":"uint256","name":"auctionStartPrice","type":"uint256"},{"internalType":"uint256","name":"auctionEndPrice","type":"uint256"},{"internalType":"uint256","name":"auctionStartTime","type":"uint256"},{"internalType":"uint256","name":"auctionEndTime","type":"uint256"},{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountPayed","type":"uint256"}],"name":"AuctionComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"initialSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"purchasePrice","type":"uint256"}],"name":"WithdrawEth","type":"event"},{"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":"burnAndRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buy","outputs":[],"stateMutability":"payable","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":"ethEscapeHatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMetadata","outputs":[{"internalType":"contract IERC721","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"mintTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nftEscapeHatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawPriorToMint","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003b3438038062003b34833981810160405260e08110156200003757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050506040518060400160405280600881526020017f5a6f6f546f6b656e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a4f4f0000000000000000000000000000000000000000000000000000000000815250600062000102620004bd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055508160059080519060200190620001bf929190620004c5565b508060069080519060200190620001d8929190620004c5565b506012600760006101000a81548160ff021916908360ff1602179055505050600081116200026e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f746f6b656e20737570706c792063616e6e6f742062652030000000000000000081525060200191505060405180910390fd5b824210620002e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f41756374696f6e2073746172742074696d65207061737365640000000000000081525060200191505060405180910390fd5b8183106200033e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018062003b016033913960400191505060405180910390fd5b60008511620003b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5374617274207072696365206973207a65726f0000000000000000000000000081525060200191505060405180910390fd5b8385116200040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062003adf6022913960400191505060405180910390fd5b86600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856008819055508460098190555083600a8190555082600b8190555081600c8190555080600d819055506000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055505050505050505062000574565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050857805160ff191683800117855562000539565b8280016001018555821562000539579182015b82811115620005385782518255916020019190600101906200051b565b5b5090506200054891906200054c565b5090565b6200057191905b808211156200056d57600081600090555060010162000553565b5090565b90565b61355b80620005846000396000f3fe6080604052600436106101355760003560e01c80637a5b4f59116100ab578063a457c2d71161006f578063a457c2d7146106af578063a6f2ae3a14610722578063a9059cbb1461072c578063dd62ed3e1461079f578063eeb9635c14610824578063f2fde38b1461083b57610135565b80637a5b4f59146104a45780638da5cb5b1461054257806395d89b411461059957806398d5fdca1461062957806398e61ae21461065457610135565b806323b872dd116100fd57806323b872dd146102da5780632bb8f90c1461036d578063313ce5671461038457806339509351146103b557806370a0823114610428578063715018a61461048d57610135565b806306fdde031461013a578063082795e1146101ca578063095ea7b3146102255780630d6e40301461029857806318160ddd146102af575b600080fd5b34801561014657600080fd5b5061014f61088c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561018f578082015181840152602081019050610174565b50505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101d657600080fd5b50610223600480360360408110156101ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092e565b005b34801561023157600080fd5b5061027e6004803603604081101561024857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b41565b604051808215151515815260200191505060405180910390f35b3480156102a457600080fd5b506102ad610b5f565b005b3480156102bb57600080fd5b506102c4610c9b565b6040518082815260200191505060405180910390f35b3480156102e657600080fd5b50610353600480360360608110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ca5565b604051808215151515815260200191505060405180910390f35b34801561037957600080fd5b50610382610d7e565b005b34801561039057600080fd5b506103996110c2565b604051808260ff1660ff16815260200191505060405180910390f35b3480156103c157600080fd5b5061040e600480360360408110156103d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110d9565b604051808215151515815260200191505060405180910390f35b34801561043457600080fd5b506104776004803603602081101561044b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061118c565b6040518082815260200191505060405180910390f35b34801561049957600080fd5b506104a26111d5565b005b3480156104b057600080fd5b506104b961135d565b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188815260200187815260200186815260200185815260200184151515158152602001831515151581526020018281526020019a505050505050505050505060405180910390f35b34801561054e57600080fd5b506105576113e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105a557600080fd5b506105ae61140d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105ee5780820151818401526020810190506105d3565b50505050905090810190601f16801561061b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561063557600080fd5b5061063e6114af565b6040518082815260200191505060405180910390f35b34801561066057600080fd5b506106ad6004803603604081101561067757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061162c565b005b3480156106bb57600080fd5b50610708600480360360408110156106d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611840565b604051808215151515815260200191505060405180910390f35b61072a61190d565b005b34801561073857600080fd5b506107856004803603604081101561074f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d02565b604051808215151515815260200191505060405180910390f35b3480156107ab57600080fd5b5061080e600480360360408110156107c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d20565b6040518082815260200191505060405180910390f35b34801561083057600080fd5b50610839611da7565b005b34801561084757600080fd5b5061088a6004803603602081101561085e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120ea565b005b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b5050505050905090565b6109366122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600e60009054906101000a900460ff1615610a5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806133eb6028913960400191505060405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff166342842e0e30610a876113e4565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610b2457600080fd5b505af1158015610b38573d6000803e3d6000fd5b50505050505050565b6000610b55610b4e6122f7565b84846122ff565b6001905092915050565b610b676122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c28576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006301e13380600c5401905080421015610c8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806134c6603b913960400191505060405180910390fd5b610c9833476124f6565b50565b6000600454905090565b6000610cb2848484612630565b610d7384610cbe6122f7565b610d6e8560405180606001604052806028815260200161343460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d246122f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6122ff565b600190509392505050565b60026001541415610df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600e60019054906101000a900460ff16610e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f70617263656c206d7573742068617665206265656e207075726368617365640081525060200191505060405180910390fd5b6000600f5411610edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806132da6026913960400191505060405180910390fd5b600047905060008111610f57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f636f6e7472616374206d75737420686f6c64204554480000000000000000000081525060200191505060405180910390fd5b6000610f623361118c565b905060008111610fda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f73656e646572206d75737420686176652062616c616e6365000000000000000081525060200191505060405180910390fd5b610fe433826129b5565b600061100f600d5461100184600f54612b7b90919063ffffffff16565b612c0190919063ffffffff16565b905060008382116110205781611022565b835b90507febbb74ed44232b9922b269fafa9d7856bc3c1c8efeedb022b98c18d70ef2afb7338285600d54600f54604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a16110b533826124f6565b5050505060018081905550565b6000600760009054906101000a900460ff16905090565b60006111826110e66122f7565b8461117d85600360006110f76122f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c4b90919063ffffffff16565b6122ff565b6001905092915050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111dd6122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080600080600080600080600080600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600854600954600a54600b54600c54600d54600e60009054906101000a900460ff16600e60019054906101000a900460ff16600f54995099509950995099509950995099509950995090919293949596979899565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114a55780601f1061147a576101008083540402835291602001916114a5565b820191906000526020600020905b81548152906001019060200180831161148857829003601f168201915b5050505050905090565b600060011515600e60009054906101000a900460ff1615151461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e7320686176652079657420746f206265206d696e7465640000000081525060200191505060405180910390fd5b60001515600e60019054906101000a900460ff161515146115a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133906021913960400191505060405180910390fd5b600b5442101561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f41756374696f6e20686173206e6f74207374617274656420796574000000000081525060200191505060405180910390fd5b61162742612cd3565b905090565b6116346122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006301e13380600c540190508042101561175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806134c6603b913960400191505060405180910390fd5b60008390508073ffffffffffffffffffffffffffffffffffffffff166342842e0e306117856113e4565b866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561182257600080fd5b505af1158015611836573d6000803e3d6000fd5b5050505050505050565b600061190361184d6122f7565b846118fe8560405180606001604052806025815260200161350160259139600360006118776122f7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b6122ff565b6001905092915050565b60011515600e60009054906101000a900460ff16151514611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e7320686176652079657420746f206265206d696e7465640000000081525060200191505060405180910390fd5b60001515600e60019054906101000a900460ff16151514611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133906021913960400191505060405180910390fd5b600b54421015611a7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f41756374696f6e20686173206e6f74207374617274656420796574000000000081525060200191505060405180910390fd5b60026001541415611af3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000611b056114af565b905080341015611b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f45544820616d6f756e7420696e73756666696369656e7400000000000000000081525060200191505060405180910390fd5b80600f819055506001600e60016101000a81548160ff021916908315150217905550600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e30336008546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c7e57600080fd5b505af1158015611c92573d6000803e3d6000fd5b505050507f2b5c9d25d5512006dd890e8bc670fc8415cb265ef5cbabacb565f2a5a49999e5816040518082815260200191505060405180910390a180341115611cf8576000611cea8234612fd890919063ffffffff16565b9050611cf633826124f6565b505b5060018081905550565b6000611d16611d0f6122f7565b8484612630565b6001905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611daf6122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b544210611ee7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f41756374696f6e2073746172742074696d65207061737365640000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6008546040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611f7357600080fd5b505afa158015611f87573d6000803e3d6000fd5b505050506040513d6020811015611f9d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6d757374206f776e206578706563746564206e6674000000000000000000000081525060200191505060405180910390fd5b600e60009054906101000a900460ff16156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f63616e74206d696e74206d6f7265207468616e206f6e6365000000000000000081525060200191505060405180910390fd5b6120cd6120c56113e4565b600d54613022565b6001600e60006101000a81548160ff021916908315150217905550565b6120f26122f7565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806133226026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806134a26024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806133486022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b8047101561256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d80600081146125cc576040519150601f19603f3d011682016040523d82523d6000602084013e6125d1565b606091505b505090508061262b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806133b1603a913960400191505060405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061347d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806132b76023913960400191505060405180910390fd5b6127478383836131eb565b6127b38160405180606001604052806026815260200161336a60269139600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061284881600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c4b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008383111582906129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561296757808201518184015260208101905061294c565b50505050905090810190601f1680156129945780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061345c6021913960400191505060405180910390fd5b612a47826000836131eb565b612ab38160405180606001604052806022815260200161330060229139600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f59092919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b0b81600454612fd890919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080831415612b8e5760009050612bfb565b6000828402905082848281612b9f57fe5b0414612bf6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806134136021913960400191505060405180910390fd5b809150505b92915050565b6000612c4383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131f0565b905092915050565b600080828401905083811015612cc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600060011515600e60009054906101000a900460ff16151514612d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e7320686176652079657420746f206265206d696e7465640000000081525060200191505060405180910390fd5b60001515600e60019054906101000a900460ff16151514612dca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133906021913960400191505060405180910390fd5b600b54421015612e42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f41756374696f6e20686173206e6f74207374617274656420796574000000000081525060200191505060405180910390fd5b600c548210612e5557600a549050612fd3565b6000600a5490506000612e7382600954612fd890919063ffffffff16565b905060008111612eeb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5072696365206d7573742062652064656372656173696e67000000000000000081525060200191505060405180910390fd5b6000612f04600b54600c54612fd890919063ffffffff16565b905060008111612f7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f54696d65206973206e656761746976650000000000000000000000000000000081525060200191505060405180910390fd5b6000612f9386600c54612fd890919063ffffffff16565b9050612fcc612fbd83612faf8685612b7b90919063ffffffff16565b612c0190919063ffffffff16565b85612c4b90919063ffffffff16565b9450505050505b919050565b600061301a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128f5565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6130d1600083836131eb565b6130e681600454612c4b90919063ffffffff16565b60048190555061313e81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c4b90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b505050565b6000808311829061329c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613261578082015181840152602081019050613246565b50505050905090810190601f16801561328e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816132a857fe5b04905080915050939250505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737370617263656c207075726368617365207072696365206d75737420626520706f73697469766545524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636550617263656c2068617320616c7265616479206265656e20707572636861736564416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656463616e6e6f7420776974686472617720696620746f6b656e7320616c7265616479206d696e746564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e6f7420656e6f7567682074696d65206861732070617373656420666f722065736361706520686174636820746f20626520617661696c61626c6545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206eb5577d705c13652e6049201391153d4130c18d9c0ca06e129d451bf82a550c64736f6c634300060b00337374617274207072696365206973206c657373207468616e20656e6420707269636541756374696f6e20656e642074696d65206973206561726c696572207468616e2061756374696f6e2073746172742074696d6500000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c0000000000000000000000000000000000000000000000000000000000000cd70000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000607f61a000000000000000000000000000000000000000000000000000000000608c90a000000000000000000000000000000000000000000000021e19e0c9bab2400000

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

00000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c0000000000000000000000000000000000000000000000000000000000000cd70000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000607f61a000000000000000000000000000000000000000000000000000000000608c90a000000000000000000000000000000000000000000000021e19e0c9bab2400000

-----Decoded View---------------
Arg [0] : cryptoVoxelsContractAddress (address): 0x79986af15539de2db9a5086382daeda917a9cf0c
Arg [1] : cryptoVoxelsParcelId (uint256): 3287
Arg [2] : auctionStartPrice (uint256): 100000000000000000000
Arg [3] : auctionEndPrice (uint256): 10000000000000000
Arg [4] : auctionStartTime (uint256): 1618960800
Arg [5] : auctionEndTime (uint256): 1619824800
Arg [6] : initialSupply (uint256): 10000000000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000cd7
Arg [2] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 00000000000000000000000000000000000000000000000000000000607f61a0
Arg [5] : 00000000000000000000000000000000000000000000000000000000608c90a0
Arg [6] : 00000000000000000000000000000000000000000000021e19e0c9bab2400000


Deployed ByteCode Sourcemap

37051:8956:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25470:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40981:407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27576:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;44336:174;;;;;;;;;;;;;:::i;:::-;;26545:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28219:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43073:1177;;;;;;;;;;;;;:::i;:::-;;26397:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28949:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26708:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2764:148;;;;;;;;;;;;;:::i;:::-;;39985:668;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2122:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25672:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40661:118;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44596:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29670:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;42123:729;;;:::i;:::-;;27040:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;27278:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41448:617;;;;;;;;;;;;;:::i;:::-;;3067:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25470:83;25507:13;25540:5;25533:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25470:83;:::o;40981:407::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41189:14:::1;;;;;;;;;;;41188:15;41180:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41261:22;41294:10;41261:44;;41316:14;:31;;;41356:4;41363:7;:5;:7::i;:::-;41372;41316:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2404:1;40981:407:::0;;:::o;27576:169::-;27659:4;27676:39;27685:12;:10;:12::i;:::-;27699:7;27708:6;27676:8;:39::i;:::-;27733:4;27726:11;;27576:169;;;;:::o;44336:174::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39686:32:::1;39740:12;39721:15;;:32;39686:67;;39807:24;39788:15;:43;;39766:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44450:52:::2;44468:10;44480:21;44450:17;:52::i;:::-;2404:1:::1;44336:174::o:0;26545:100::-;26598:7;26625:12;;26618:19;;26545:100;:::o;28219:321::-;28325:4;28342:36;28352:6;28360:9;28371:6;28342:9;:36::i;:::-;28389:121;28398:6;28406:12;:10;:12::i;:::-;28420:89;28458:6;28420:89;;;;;;;;;;;;;;;;;:11;:19;28432:6;28420:19;;;;;;;;;;;;;;;:33;28440:12;:10;:12::i;:::-;28420:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28389:8;:121::i;:::-;28528:4;28521:11;;28219:321;;;;;:::o;43073:1177::-;36020:1;36626:7;;:19;;36618:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36020:1;36759:7;:18;;;;43141:23:::1;;;;;;;;;;;43133:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43257:1;43233:21;;:25;43211:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43335:23;43361:21;43335:47;;43419:1;43401:15;:19;43393:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43460:21;43484;43494:10;43484:9;:21::i;:::-;43460:45;;43583:1;43567:13;:17;43559:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;43624:32;43630:10;43642:13;43624:5;:32::i;:::-;43709:18;43730:86;43791:14;;43731:40;43757:13;43731:21;;:25;;:40;;;;:::i;:::-;43730:46;;:86;;;;:::i;:::-;43709:107;;43897:20;43933:15;43920:10;:28;:85;;43995:10;43920:85;;;43964:15;43920:85;43897:108;;44021:167;44047:10;44072:12;44099:13;44127:14;;44156:21;;44021:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44199:43;44217:10;44229:12;44199:17;:43::i;:::-;36790:1;;;;35976::::0;36938:7;:22;;;;43073:1177::o;26397:83::-;26438:5;26463:9;;;;;;;;;;;26456:16;;26397:83;:::o;28949:218::-;29037:4;29054:83;29063:12;:10;:12::i;:::-;29077:7;29086:50;29125:10;29086:11;:25;29098:12;:10;:12::i;:::-;29086:25;;;;;;;;;;;;;;;:34;29112:7;29086:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29054:8;:83::i;:::-;29155:4;29148:11;;28949:218;;;;:::o;26708:119::-;26774:7;26801:9;:18;26811:7;26801:18;;;;;;;;;;;;;;;;26794:25;;26708:119;;;:::o;2764:148::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2871:1:::1;2834:40;;2855:6;::::0;::::1;;;;;;;;;2834:40;;;;;;;;;;;;2902:1;2885:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2764:148::o:0;39985:668::-;40070:7;40092;40114;40136;40158;40180;40202;40224:4;40243;40262:7;40319:21;;;;;;;;;;;40355;;40391:18;;40424:16;;40455:17;;40487:15;;40517:14;;40546;;;;;;;;;;;40575:23;;;;;;;;;;;40613:21;;40297:348;;;;;;;;;;;;;;;;;;;;39985:668;;;;;;;;;;:::o;2122:79::-;2160:7;2187:6;;;;;;;;;;;2180:13;;2122:79;:::o;25672:87::-;25711:13;25744:7;25737:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25672:87;:::o;40661:118::-;40718:7;39151:4;39133:22;;:14;;;;;;;;;;;:22;;;39125:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39248:5;39221:32;;:23;;;;;;;;;;;:32;;;39199:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39366:17;;39347:15;:36;;39325:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40745:26:::1;40755:15;40745:9;:26::i;:::-;40738:33;;40661:118:::0;:::o;44596:273::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39686:32:::1;39740:12;39721:15;;:32;39686:67;;39807:24;39788:15;:43;;39766:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44742:22:::2;44775:10;44742:44;;44797:14;:31;;;44837:4;44844:7;:5;:7::i;:::-;44853;44797:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;39929:1;2404::::1;44596:273:::0;;:::o;29670:269::-;29763:4;29780:129;29789:12;:10;:12::i;:::-;29803:7;29812:96;29851:15;29812:96;;;;;;;;;;;;;;;;;:11;:25;29824:12;:10;:12::i;:::-;29812:25;;;;;;;;;;;;;;;:34;29838:7;29812:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29780:8;:129::i;:::-;29927:4;29920:11;;29670:269;;;;:::o;42123:729::-;39151:4;39133:22;;:14;;;;;;;;;;;:22;;;39125:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39248:5;39221:32;;:23;;;;;;;;;;;:32;;;39199:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39366:17;;39347:15;:36;;39325:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36020:1:::1;36626:7;;:19;;36618:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36020:1;36759:7;:18;;;;42197:20:::2;42220:10;:8;:10::i;:::-;42197:33;;42262:12;42249:9;:25;;42241:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;42339:12;42315:21;:36;;;;42388:4;42362:23;;:30;;;;;;;;;;;;;;;;;;42446:21;;;;;;;;;;;:38;;;42507:4;42527:10;42552:21;;42446:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42600:29;42616:12;42600:29;;;;;;;;;;;;;;;;;;42710:12;42698:9;:24;42694:151;;;42739:13;42755:27;42769:12;42755:9;:13;;:27;;;;:::i;:::-;42739:43;;42797:36;42815:10;42827:5;42797:17;:36::i;:::-;42694:151;;36790:1;35976::::1;36938:7:::0;:22:::1;;;;42123:729::o:0;27040:175::-;27126:4;27143:42;27153:12;:10;:12::i;:::-;27167:9;27178:6;27143:9;:42::i;:::-;27203:4;27196:11;;27040:175;;;;:::o;27278:151::-;27367:7;27394:11;:18;27406:5;27394:18;;;;;;;;;;;;;;;:27;27413:7;27394:27;;;;;;;;;;;;;;;;27387:34;;27278:151;;;;:::o;41448:617::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41577:17:::1;;41559:15;:35;41537:110;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41807:4;41726:86;;:21;;;;;;;;;;;:29;;;41756:21;;41726:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:86;;;41704:157;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41881:14;;;;;;;;;;;41880:15;41872:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41961:30;41967:7;:5;:7::i;:::-;41976:14;;41961:5;:30::i;:::-;42053:4;42036:14;;:21;;;;;;;;;;;;;;;;;;41448:617::o:0;3067:244::-;2344:12;:10;:12::i;:::-;2334:22;;:6;;;;;;;;;;;:22;;;2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3176:1:::1;3156:22;;:8;:22;;;;3148:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3266:8;3237:38;;3258:6;::::0;::::1;;;;;;;;;3237:38;;;;;;;;;;;;3295:8;3286:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3067:244:::0;:::o;676:106::-;729:15;764:10;757:17;;676:106;:::o;32817:346::-;32936:1;32919:19;;:5;:19;;;;32911:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33017:1;32998:21;;:7;:21;;;;32990:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33101:6;33071:11;:18;33083:5;33071:18;;;;;;;;;;;;;;;:27;33090:7;33071:27;;;;;;;;;;;;;;;:36;;;;33139:7;33123:32;;33132:5;33123:32;;;33148:6;33123:32;;;;;;;;;;;;;;;;;;32817:346;;;:::o;19358:397::-;19473:6;19448:21;:31;;19440:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19605:12;19623:9;:14;;19646:6;19623:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19604:54;;;19677:7;19669:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19358:397;;;:::o;30429:539::-;30553:1;30535:20;;:6;:20;;;;30527:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30637:1;30616:23;;:9;:23;;;;30608:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30692:47;30713:6;30721:9;30732:6;30692:20;:47::i;:::-;30772:71;30794:6;30772:71;;;;;;;;;;;;;;;;;:9;:17;30782:6;30772:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;30752:9;:17;30762:6;30752:17;;;;;;;;;;;;;;;:91;;;;30877:32;30902:6;30877:9;:20;30887:9;30877:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;30854:9;:20;30864:9;30854:20;;;;;;;;;;;;;;;:55;;;;30942:9;30925:35;;30934:6;30925:35;;;30953:6;30925:35;;;;;;;;;;;;;;;;;;30429:539;;;:::o;13483:192::-;13569:7;13602:1;13597;:6;;13605:12;13589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13629:9;13645:1;13641;:5;13629:17;;13666:1;13659:8;;;13483:192;;;;;:::o;31959:418::-;32062:1;32043:21;;:7;:21;;;;32035:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32115:49;32136:7;32153:1;32157:6;32115:20;:49::i;:::-;32198:68;32221:6;32198:68;;;;;;;;;;;;;;;;;:9;:18;32208:7;32198:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;32177:9;:18;32187:7;32177:18;;;;;;;;;;;;;;;:89;;;;32292:24;32309:6;32292:12;;:16;;:24;;;;:::i;:::-;32277:12;:39;;;;32358:1;32332:37;;32341:7;32332:37;;;32362:6;32332:37;;;;;;;;;;;;;;;;;;31959:418;;:::o;13934:471::-;13992:7;14242:1;14237;:6;14233:47;;;14267:1;14260:8;;;;14233:47;14292:9;14308:1;14304;:5;14292:17;;14337:1;14332;14328;:5;;;;;;:10;14320:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14396:1;14389:8;;;13934:471;;;;;:::o;14881:132::-;14939:7;14966:39;14970:1;14973;14966:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14959:46;;14881:132;;;;:::o;12580:181::-;12638:7;12658:9;12674:1;12670;:5;12658:17;;12699:1;12694;:6;;12686:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12752:1;12745:8;;;12580:181;;;;:::o;44920:1084::-;45032:7;39151:4;39133:22;;:14;;;;;;;;;;;:22;;;39125:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39248:5;39221:32;;:23;;;;;;;;;;;:32;;;39199:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39366:17;;39347:15;:36;;39325:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45130:15:::1;;45117:9;:28;45113:84;;45169:16;;45162:23;;;;45113:84;45241:17;45261:16;;45241:36;;45288:19;45310:33;45333:9;45310:18;;:22;;:33;;;;:::i;:::-;45288:55;;45376:1;45362:11;:15;45354:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45450:30;45483:38;45503:17;;45483:15;;:19;;:38;;;;:::i;:::-;45450:71;;45565:1;45540:22;:26;45532:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45598:32;45633:30;45653:9;45633:15;;:19;;:30;;;;:::i;:::-;45598:65;;45840:156;45872:109;45940:22;45872:41;45901:11;45872:24;:28;;:41;;;;:::i;:::-;:45;;:109;;;;:::i;:::-;45840:9;:13;;:156;;;;:::i;:::-;45820:176;;;;;;39449:1;44920:1084:::0;;;:::o;13044:136::-;13102:7;13129:43;13133:1;13136;13129:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13122:50;;13044:136;;;;:::o;31249:378::-;31352:1;31333:21;;:7;:21;;;;31325:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31403:49;31432:1;31436:7;31445:6;31403:20;:49::i;:::-;31480:24;31497:6;31480:12;;:16;;:24;;;;:::i;:::-;31465:12;:39;;;;31536:30;31559:6;31536:9;:18;31546:7;31536:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31515:9;:18;31525:7;31515:18;;;;;;;;;;;;;;;:51;;;;31603:7;31582:37;;31599:1;31582:37;;;31612:6;31582:37;;;;;;;;;;;;;;;;;;31249:378;;:::o;34188:92::-;;;;:::o;15509:278::-;15595:7;15627:1;15623;:5;15630:12;15615:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15654:9;15670:1;15666;:5;;;;;;15654:17;;15778:1;15771:8;;;15509:278;;;;;:::o

Swarm Source

ipfs://6eb5577d705c13652e6049201391153d4130c18d9c0ca06e129d451bf82a550c
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.