ETH Price: $3,411.79 (-0.79%)
Gas: 20 Gwei

Token

Dog (RabidDog)
 

Overview

Max Total Supply

5,000 RabidDog

Holders

16

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 RabidDog
0xa7b0bb4dc3d1cbf2baea9208fc65b87ead28dbd5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RabidDog

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 20 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-07
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, 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;
}




/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}





/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

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

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




/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping (address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
        || interfaceId == type(IERC721Metadata).interfaceId
        || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
    private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

/**
 * @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.
 */
abstract 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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;


    }
}

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        // 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 (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
    unchecked {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    unchecked {
        require(b <= a, errorMessage);
        return a - b;
    }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards 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).
     *
     * 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) {
    unchecked {
        require(b > 0, errorMessage);
        return a / b;
    }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
    unchecked {
        require(b > 0, errorMessage);
        return a % b;
    }
    }
}

contract RabidDog is ERC721, Ownable {
    using SafeMath for uint256;

    string public PROVENANCE;

    uint256 public startingIndexBlock;

    uint256 public startingIndex;

    uint256 public TOTAL_SUPPLY = 5000;

    uint256 public STARTING_INDEX;

    uint256 public constant dogPrice = 70000000000000000;

    uint256 public constant MAX_PURCHASE = 20;

    bool public saleIsActive = true;

    uint256 public REVEAL_TIMESTAMP;

    string private tURI;

    uint256 private _currentTokenId = 0;

    event TokenMinted(uint tokenId, address sender);

    constructor(
        string memory _name,
        string memory _symbol,
        uint256 saleStart,
        string memory bTokenURI
    ) ERC721(_name, _symbol) {
        REVEAL_TIMESTAMP = saleStart + (86400 * 9);
        tURI = bTokenURI;
    }

    function reserveDogs() public onlyOwner {
        uint supply = _currentTokenId;
        for (uint i = 0; i < 30; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function mintDogs(uint numberOfTokens) public payable {
        require(saleIsActive, "Mint is not available right now");
        require(numberOfTokens <= MAX_PURCHASE, "Can only mint 20 tokens at a time");
        require(_currentTokenId.add(numberOfTokens) <= TOTAL_SUPPLY, "Purchase would exceed max supply of Dogs");
        require(dogPrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct");

        for (uint i = 0; i < numberOfTokens; i++) {
            uint256 newTokenId = _nextTokenId();

            if (newTokenId <= TOTAL_SUPPLY) {
                _safeMint(msg.sender, newTokenId);
                _incrementTokenId();
                emit TokenMinted(newTokenId, msg.sender);
            }
        }
    }

    // F4CK I F0UND IT!
    function whatsLeft() public view returns (uint256) {
        if (supplyReached()) {
            return 0;
        }

        return TOTAL_SUPPLY - _currentTokenId;
    }

    function _nextTokenId() private view returns (uint256) {
        return _currentTokenId.add(1);
    }

    function _incrementTokenId() private {
        _currentTokenId++;
    }

    function supplyReached() public view returns (bool) {
        return _currentTokenId > TOTAL_SUPPLY;
    }

    function totalSupply() public view returns (uint256) {
        return TOTAL_SUPPLY;
    }

    function setProvenanceHash(string memory provenanceHash) public onlyOwner {
        PROVENANCE = provenanceHash;
    }

    function setRevealTimestamp(uint256 revealTimeStamp) public onlyOwner {
        REVEAL_TIMESTAMP = revealTimeStamp;
    }

    function setSaleIsActive() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function baseTokenURI() private view returns(string memory) {
        return tURI;
    }

    function tokenURI(uint256 _tokenId) override public view returns (string memory) {
        return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId), "/metadata.json"));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"saleStart","type":"uint256"},{"internalType":"string","name":"bTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PURCHASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STARTING_INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dogPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintDogs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveDogs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyReached","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whatsLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052611388600a55600c805460ff191660011790556000600f553480156200002957600080fd5b506040516200214f3803806200214f8339810160408190526200004c9162000271565b8351849084906200006590600090602085019062000114565b5080516200007b90600190602084019062000114565b5050506000620000906200011060201b60201c565b600680546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000ed82620bdd806200030c565b600d5580516200010590600e90602084019062000114565b505050505062000386565b3390565b828054620001229062000333565b90600052602060002090601f01602090048101928262000146576000855562000191565b82601f106200016157805160ff191683800117855562000191565b8280016001018555821562000191579182015b828111156200019157825182559160200191906001019062000174565b506200019f929150620001a3565b5090565b5b808211156200019f5760008155600101620001a4565b600082601f830112620001cc57600080fd5b81516001600160401b0380821115620001e957620001e962000370565b604051601f8301601f19908116603f0116810190828211818310171562000214576200021462000370565b816040528381526020925086838588010111156200023157600080fd5b600091505b8382101562000255578582018301518183018401529082019062000236565b83821115620002675760008385830101525b9695505050505050565b600080600080608085870312156200028857600080fd5b84516001600160401b0380821115620002a057600080fd5b620002ae88838901620001ba565b95506020870151915080821115620002c557600080fd5b620002d388838901620001ba565b9450604087015193506060870151915080821115620002f157600080fd5b506200030087828801620001ba565b91505092959194509250565b600082198211156200032e57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200034857607f821691505b602082108114156200036a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611db980620003966000396000f3fe6080604052600436106101995760003560e01c8063715018a6116100dd578063715018a6146103b357806386050607146103c85780638da5cb5b146103db578063902d55a5146103f057806395d89b4114610406578063a22cb4651461041b578063ae5b022a1461043b578063b1a8168014610450578063b88d4fde14610469578063c87b56dd14610489578063cb774d47146104a9578063dee4adc1146104bf578063e36d6498146104d4578063e985e9c5146104ea578063eb8d24441461050a578063f2fde38b14610524578063f7de95e41461054457600080fd5b8063018a2c371461019e57806301ffc9a7146101c057806306fdde03146101f5578063081812fc14610217578063095ea7b31461024f578063109695231461026f57806318160ddd1461028f57806318e20a38146102ae57806323b872dd146102c45780632bb7eff0146102e45780633ccfd60b146102f957806342842e0e1461030e5780636352211e1461032e5780636373a6b11461034e57806364b33c4d1461036357806370a082311461037e5780637146bd081461039e575b600080fd5b3480156101aa57600080fd5b506101be6101b9366004611a65565b61055a565b005b3480156101cc57600080fd5b506101e06101db3660046119e3565b610597565b60405190151581526020015b60405180910390f35b34801561020157600080fd5b5061020a6105e9565b6040516101ec9190611b2f565b34801561022357600080fd5b50610237610232366004611a65565b61067b565b6040516001600160a01b0390911681526020016101ec565b34801561025b57600080fd5b506101be61026a3660046119b9565b610703565b34801561027b57600080fd5b506101be61028a366004611a1d565b610814565b34801561029b57600080fd5b50600a545b6040519081526020016101ec565b3480156102ba57600080fd5b506102a0600d5481565b3480156102d057600080fd5b506101be6102df3660046118c6565b61085a565b3480156102f057600080fd5b506101be61088b565b34801561030557600080fd5b506101be6108ce565b34801561031a57600080fd5b506101be6103293660046118c6565b61092c565b34801561033a57600080fd5b50610237610349366004611a65565b610947565b34801561035a57600080fd5b5061020a6109be565b34801561036f57600080fd5b506102a066f8b0a10e47000081565b34801561038a57600080fd5b506102a0610399366004611878565b610a4c565b3480156103aa57600080fd5b506102a0601481565b3480156103bf57600080fd5b506101be610ad3565b6101be6103d6366004611a65565b610b4c565b3480156103e757600080fd5b50610237610d46565b3480156103fc57600080fd5b506102a0600a5481565b34801561041257600080fd5b5061020a610d55565b34801561042757600080fd5b506101be61043636600461197d565b610d64565b34801561044757600080fd5b506101be610e25565b34801561045c57600080fd5b50600a54600f54116101e0565b34801561047557600080fd5b506101be610484366004611902565b610e88565b34801561049557600080fd5b5061020a6104a4366004611a65565b610ec0565b3480156104b557600080fd5b506102a060095481565b3480156104cb57600080fd5b506102a0610efa565b3480156104e057600080fd5b506102a060085481565b3480156104f657600080fd5b506101e0610505366004611893565b610f29565b34801561051657600080fd5b50600c546101e09060ff1681565b34801561053057600080fd5b506101be61053f366004611878565b610f57565b34801561055057600080fd5b506102a0600b5481565b33610563610d46565b6001600160a01b0316146105925760405162461bcd60e51b815260040161058990611b94565b60405180910390fd5b600d55565b60006001600160e01b031982166380ac58cd60e01b14806105c857506001600160e01b03198216635b5e139f60e01b145b806105e357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546105f890611ca8565b80601f016020809104026020016040519081016040528092919081815260200182805461062490611ca8565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905090565b600061068682611047565b6106e75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610589565b506000908152600460205260409020546001600160a01b031690565b600061070e82610947565b9050806001600160a01b0316836001600160a01b0316141561077c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610589565b336001600160a01b038216148061079857506107988133610f29565b6108055760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b6064820152608401610589565b61080f8383611064565b505050565b3361081d610d46565b6001600160a01b0316146108435760405162461bcd60e51b815260040161058990611b94565b805161085690600790602084019061174e565b5050565b61086433826110d2565b6108805760405162461bcd60e51b815260040161058990611bc9565b61080f83838361119c565b33610894610d46565b6001600160a01b0316146108ba5760405162461bcd60e51b815260040161058990611b94565b600c805460ff19811660ff90911615179055565b336108d7610d46565b6001600160a01b0316146108fd5760405162461bcd60e51b815260040161058990611b94565b6040514790339082156108fc029083906000818181858888f19350505050158015610856573d6000803e3d6000fd5b61080f83838360405180602001604052806000815250610e88565b6000818152600260205260408120546001600160a01b0316806105e35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610589565b600780546109cb90611ca8565b80601f01602080910402602001604051908101604052809291908181526020018280546109f790611ca8565b8015610a445780601f10610a1957610100808354040283529160200191610a44565b820191906000526020600020905b815481529060010190602001808311610a2757829003601f168201915b505050505081565b60006001600160a01b038216610ab75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610589565b506001600160a01b031660009081526003602052604090205490565b33610adc610d46565b6001600160a01b031614610b025760405162461bcd60e51b815260040161058990611b94565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600c5460ff16610b9e5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74206973206e6f7420617661696c61626c65207269676874206e6f77006044820152606401610589565b6014811115610bf95760405162461bcd60e51b815260206004820152602160248201527f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d6044820152606560f81b6064820152608401610589565b600a54600f54610c09908361133c565b1115610c685760405162461bcd60e51b815260206004820152602860248201527f507572636861736520776f756c6420657863656564206d617820737570706c79604482015267206f6620446f677360c01b6064820152608401610589565b34610c7a66f8b0a10e4700008361134f565b1115610cc85760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610589565b60005b81811015610856576000610cdd61135b565b9050600a548111610d3357610cf2338261136c565b610cfa611386565b604080518281523360208201527f3a5398bda6f1f57d6c96834fa9bf02b5517bdc847d14312015a917ba421c31c9910160405180910390a15b5080610d3e81611ce3565b915050610ccb565b6006546001600160a01b031690565b6060600180546105f890611ca8565b6001600160a01b038216331415610db95760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610589565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b33610e2e610d46565b6001600160a01b031614610e545760405162461bcd60e51b815260040161058990611b94565b600f5460005b601e81101561085657610e7633610e718385611c1a565b61136c565b80610e8081611ce3565b915050610e5a565b610e9233836110d2565b610eae5760405162461bcd60e51b815260040161058990611bc9565b610eba8484848461139d565b50505050565b6060610eca6113d0565b610ed3836113df565b604051602001610ee4929190611aaa565b6040516020818303038152906040529050919050565b6000610f09600a54600f541190565b15610f145750600090565b600f54600a54610f249190611c65565b905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b33610f60610d46565b6001600160a01b031614610f865760405162461bcd60e51b815260040161058990611b94565b6001600160a01b038116610feb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610589565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061109982610947565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110dd82611047565b61113e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610589565b600061114983610947565b9050806001600160a01b0316846001600160a01b031614806111845750836001600160a01b03166111798461067b565b6001600160a01b0316145b8061119457506111948185610f29565b949350505050565b826001600160a01b03166111af82610947565b6001600160a01b0316146112175760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610589565b6001600160a01b0382166112795760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610589565b611284600082611064565b6001600160a01b03831660009081526003602052604081208054600192906112ad908490611c65565b90915550506001600160a01b03821660009081526003602052604081208054600192906112db908490611c1a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006113488284611c1a565b9392505050565b60006113488284611c46565b600f54600090610f2490600161133c565b6108568282604051806020016040528060008152506114dc565b600f805490600061139683611ce3565b9190505550565b6113a884848461119c565b6113b48484848461150f565b610eba5760405162461bcd60e51b815260040161058990611b42565b6060600e80546105f890611ca8565b6060816114035750506040805180820190915260018152600360fc1b602082015290565b8160005b811561142d578061141781611ce3565b91506114269050600a83611c32565b9150611407565b6000816001600160401b0381111561144757611447611d54565b6040519080825280601f01601f191660200182016040528015611471576020820181803683370190505b5090505b841561119457611486600183611c65565b9150611493600a86611cfe565b61149e906030611c1a565b60f81b8183815181106114b3576114b3611d3e565b60200101906001600160f81b031916908160001a9053506114d5600a86611c32565b9450611475565b6114e6838361161c565b6114f3600084848461150f565b61080f5760405162461bcd60e51b815260040161058990611b42565b60006001600160a01b0384163b1561161157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611553903390899088908890600401611af2565b602060405180830381600087803b15801561156d57600080fd5b505af192505050801561159d575060408051601f3d908101601f1916820190925261159a91810190611a00565b60015b6115f7573d8080156115cb576040519150601f19603f3d011682016040523d82523d6000602084013e6115d0565b606091505b5080516115ef5760405162461bcd60e51b815260040161058990611b42565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611194565b506001949350505050565b6001600160a01b0382166116725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610589565b61167b81611047565b156116c75760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b6044820152606401610589565b6001600160a01b03821660009081526003602052604081208054600192906116f0908490611c1a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461175a90611ca8565b90600052602060002090601f01602090048101928261177c57600085556117c2565b82601f1061179557805160ff19168380011785556117c2565b828001600101855582156117c2579182015b828111156117c25782518255916020019190600101906117a7565b506117ce9291506117d2565b5090565b5b808211156117ce57600081556001016117d3565b60006001600160401b038084111561180157611801611d54565b604051601f8501601f19908116603f0116810190828211818310171561182957611829611d54565b8160405280935085815286868601111561184257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461187357600080fd5b919050565b60006020828403121561188a57600080fd5b6113488261185c565b600080604083850312156118a657600080fd5b6118af8361185c565b91506118bd6020840161185c565b90509250929050565b6000806000606084860312156118db57600080fd5b6118e48461185c565b92506118f26020850161185c565b9150604084013590509250925092565b6000806000806080858703121561191857600080fd5b6119218561185c565b935061192f6020860161185c565b92506040850135915060608501356001600160401b0381111561195157600080fd5b8501601f8101871361196257600080fd5b611971878235602084016117e7565b91505092959194509250565b6000806040838503121561199057600080fd5b6119998361185c565b9150602083013580151581146119ae57600080fd5b809150509250929050565b600080604083850312156119cc57600080fd5b6119d58361185c565b946020939093013593505050565b6000602082840312156119f557600080fd5b813561134881611d6a565b600060208284031215611a1257600080fd5b815161134881611d6a565b600060208284031215611a2f57600080fd5b81356001600160401b03811115611a4557600080fd5b8201601f81018413611a5657600080fd5b611194848235602084016117e7565b600060208284031215611a7757600080fd5b5035919050565b60008151808452611a96816020860160208601611c7c565b601f01601f19169290920160200192915050565b60008351611abc818460208801611c7c565b835190830190611ad0818360208801611c7c565b6d17b6b2ba30b230ba30973539b7b760911b9101908152600e01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b2590830184611a7e565b9695505050505050565b6020815260006113486020830184611a7e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611c2d57611c2d611d12565b500190565b600082611c4157611c41611d28565b500490565b6000816000190483118215151615611c6057611c60611d12565b500290565b600082821015611c7757611c77611d12565b500390565b60005b83811015611c97578181015183820152602001611c7f565b83811115610eba5750506000910152565b600181811c90821680611cbc57607f821691505b60208210811415611cdd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cf757611cf7611d12565b5060010190565b600082611d0d57611d0d611d28565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611d8057600080fd5b5056fea26469706673582212208973a6bd2f836b1fbf85ecd34b643a9749aad36c9f7ebf75659bc6abb129b57364736f6c63430008060033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000017a4b5e838100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003446f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085261626964446f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f7261626964646f677061636b2e73332e65752d776573742d322e616d617a6f6e6177732e636f6d2f646f67732f0000000000000000000000

Deployed Bytecode

0x6080604052600436106101995760003560e01c8063715018a6116100dd578063715018a6146103b357806386050607146103c85780638da5cb5b146103db578063902d55a5146103f057806395d89b4114610406578063a22cb4651461041b578063ae5b022a1461043b578063b1a8168014610450578063b88d4fde14610469578063c87b56dd14610489578063cb774d47146104a9578063dee4adc1146104bf578063e36d6498146104d4578063e985e9c5146104ea578063eb8d24441461050a578063f2fde38b14610524578063f7de95e41461054457600080fd5b8063018a2c371461019e57806301ffc9a7146101c057806306fdde03146101f5578063081812fc14610217578063095ea7b31461024f578063109695231461026f57806318160ddd1461028f57806318e20a38146102ae57806323b872dd146102c45780632bb7eff0146102e45780633ccfd60b146102f957806342842e0e1461030e5780636352211e1461032e5780636373a6b11461034e57806364b33c4d1461036357806370a082311461037e5780637146bd081461039e575b600080fd5b3480156101aa57600080fd5b506101be6101b9366004611a65565b61055a565b005b3480156101cc57600080fd5b506101e06101db3660046119e3565b610597565b60405190151581526020015b60405180910390f35b34801561020157600080fd5b5061020a6105e9565b6040516101ec9190611b2f565b34801561022357600080fd5b50610237610232366004611a65565b61067b565b6040516001600160a01b0390911681526020016101ec565b34801561025b57600080fd5b506101be61026a3660046119b9565b610703565b34801561027b57600080fd5b506101be61028a366004611a1d565b610814565b34801561029b57600080fd5b50600a545b6040519081526020016101ec565b3480156102ba57600080fd5b506102a0600d5481565b3480156102d057600080fd5b506101be6102df3660046118c6565b61085a565b3480156102f057600080fd5b506101be61088b565b34801561030557600080fd5b506101be6108ce565b34801561031a57600080fd5b506101be6103293660046118c6565b61092c565b34801561033a57600080fd5b50610237610349366004611a65565b610947565b34801561035a57600080fd5b5061020a6109be565b34801561036f57600080fd5b506102a066f8b0a10e47000081565b34801561038a57600080fd5b506102a0610399366004611878565b610a4c565b3480156103aa57600080fd5b506102a0601481565b3480156103bf57600080fd5b506101be610ad3565b6101be6103d6366004611a65565b610b4c565b3480156103e757600080fd5b50610237610d46565b3480156103fc57600080fd5b506102a0600a5481565b34801561041257600080fd5b5061020a610d55565b34801561042757600080fd5b506101be61043636600461197d565b610d64565b34801561044757600080fd5b506101be610e25565b34801561045c57600080fd5b50600a54600f54116101e0565b34801561047557600080fd5b506101be610484366004611902565b610e88565b34801561049557600080fd5b5061020a6104a4366004611a65565b610ec0565b3480156104b557600080fd5b506102a060095481565b3480156104cb57600080fd5b506102a0610efa565b3480156104e057600080fd5b506102a060085481565b3480156104f657600080fd5b506101e0610505366004611893565b610f29565b34801561051657600080fd5b50600c546101e09060ff1681565b34801561053057600080fd5b506101be61053f366004611878565b610f57565b34801561055057600080fd5b506102a0600b5481565b33610563610d46565b6001600160a01b0316146105925760405162461bcd60e51b815260040161058990611b94565b60405180910390fd5b600d55565b60006001600160e01b031982166380ac58cd60e01b14806105c857506001600160e01b03198216635b5e139f60e01b145b806105e357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546105f890611ca8565b80601f016020809104026020016040519081016040528092919081815260200182805461062490611ca8565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905090565b600061068682611047565b6106e75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610589565b506000908152600460205260409020546001600160a01b031690565b600061070e82610947565b9050806001600160a01b0316836001600160a01b0316141561077c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610589565b336001600160a01b038216148061079857506107988133610f29565b6108055760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b6064820152608401610589565b61080f8383611064565b505050565b3361081d610d46565b6001600160a01b0316146108435760405162461bcd60e51b815260040161058990611b94565b805161085690600790602084019061174e565b5050565b61086433826110d2565b6108805760405162461bcd60e51b815260040161058990611bc9565b61080f83838361119c565b33610894610d46565b6001600160a01b0316146108ba5760405162461bcd60e51b815260040161058990611b94565b600c805460ff19811660ff90911615179055565b336108d7610d46565b6001600160a01b0316146108fd5760405162461bcd60e51b815260040161058990611b94565b6040514790339082156108fc029083906000818181858888f19350505050158015610856573d6000803e3d6000fd5b61080f83838360405180602001604052806000815250610e88565b6000818152600260205260408120546001600160a01b0316806105e35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610589565b600780546109cb90611ca8565b80601f01602080910402602001604051908101604052809291908181526020018280546109f790611ca8565b8015610a445780601f10610a1957610100808354040283529160200191610a44565b820191906000526020600020905b815481529060010190602001808311610a2757829003601f168201915b505050505081565b60006001600160a01b038216610ab75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610589565b506001600160a01b031660009081526003602052604090205490565b33610adc610d46565b6001600160a01b031614610b025760405162461bcd60e51b815260040161058990611b94565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600c5460ff16610b9e5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74206973206e6f7420617661696c61626c65207269676874206e6f77006044820152606401610589565b6014811115610bf95760405162461bcd60e51b815260206004820152602160248201527f43616e206f6e6c79206d696e7420323020746f6b656e7320617420612074696d6044820152606560f81b6064820152608401610589565b600a54600f54610c09908361133c565b1115610c685760405162461bcd60e51b815260206004820152602860248201527f507572636861736520776f756c6420657863656564206d617820737570706c79604482015267206f6620446f677360c01b6064820152608401610589565b34610c7a66f8b0a10e4700008361134f565b1115610cc85760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610589565b60005b81811015610856576000610cdd61135b565b9050600a548111610d3357610cf2338261136c565b610cfa611386565b604080518281523360208201527f3a5398bda6f1f57d6c96834fa9bf02b5517bdc847d14312015a917ba421c31c9910160405180910390a15b5080610d3e81611ce3565b915050610ccb565b6006546001600160a01b031690565b6060600180546105f890611ca8565b6001600160a01b038216331415610db95760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610589565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b33610e2e610d46565b6001600160a01b031614610e545760405162461bcd60e51b815260040161058990611b94565b600f5460005b601e81101561085657610e7633610e718385611c1a565b61136c565b80610e8081611ce3565b915050610e5a565b610e9233836110d2565b610eae5760405162461bcd60e51b815260040161058990611bc9565b610eba8484848461139d565b50505050565b6060610eca6113d0565b610ed3836113df565b604051602001610ee4929190611aaa565b6040516020818303038152906040529050919050565b6000610f09600a54600f541190565b15610f145750600090565b600f54600a54610f249190611c65565b905090565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b33610f60610d46565b6001600160a01b031614610f865760405162461bcd60e51b815260040161058990611b94565b6001600160a01b038116610feb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610589565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061109982610947565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006110dd82611047565b61113e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610589565b600061114983610947565b9050806001600160a01b0316846001600160a01b031614806111845750836001600160a01b03166111798461067b565b6001600160a01b0316145b8061119457506111948185610f29565b949350505050565b826001600160a01b03166111af82610947565b6001600160a01b0316146112175760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610589565b6001600160a01b0382166112795760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610589565b611284600082611064565b6001600160a01b03831660009081526003602052604081208054600192906112ad908490611c65565b90915550506001600160a01b03821660009081526003602052604081208054600192906112db908490611c1a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006113488284611c1a565b9392505050565b60006113488284611c46565b600f54600090610f2490600161133c565b6108568282604051806020016040528060008152506114dc565b600f805490600061139683611ce3565b9190505550565b6113a884848461119c565b6113b48484848461150f565b610eba5760405162461bcd60e51b815260040161058990611b42565b6060600e80546105f890611ca8565b6060816114035750506040805180820190915260018152600360fc1b602082015290565b8160005b811561142d578061141781611ce3565b91506114269050600a83611c32565b9150611407565b6000816001600160401b0381111561144757611447611d54565b6040519080825280601f01601f191660200182016040528015611471576020820181803683370190505b5090505b841561119457611486600183611c65565b9150611493600a86611cfe565b61149e906030611c1a565b60f81b8183815181106114b3576114b3611d3e565b60200101906001600160f81b031916908160001a9053506114d5600a86611c32565b9450611475565b6114e6838361161c565b6114f3600084848461150f565b61080f5760405162461bcd60e51b815260040161058990611b42565b60006001600160a01b0384163b1561161157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611553903390899088908890600401611af2565b602060405180830381600087803b15801561156d57600080fd5b505af192505050801561159d575060408051601f3d908101601f1916820190925261159a91810190611a00565b60015b6115f7573d8080156115cb576040519150601f19603f3d011682016040523d82523d6000602084013e6115d0565b606091505b5080516115ef5760405162461bcd60e51b815260040161058990611b42565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611194565b506001949350505050565b6001600160a01b0382166116725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610589565b61167b81611047565b156116c75760405162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b6044820152606401610589565b6001600160a01b03821660009081526003602052604081208054600192906116f0908490611c1a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461175a90611ca8565b90600052602060002090601f01602090048101928261177c57600085556117c2565b82601f1061179557805160ff19168380011785556117c2565b828001600101855582156117c2579182015b828111156117c25782518255916020019190600101906117a7565b506117ce9291506117d2565b5090565b5b808211156117ce57600081556001016117d3565b60006001600160401b038084111561180157611801611d54565b604051601f8501601f19908116603f0116810190828211818310171561182957611829611d54565b8160405280935085815286868601111561184257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461187357600080fd5b919050565b60006020828403121561188a57600080fd5b6113488261185c565b600080604083850312156118a657600080fd5b6118af8361185c565b91506118bd6020840161185c565b90509250929050565b6000806000606084860312156118db57600080fd5b6118e48461185c565b92506118f26020850161185c565b9150604084013590509250925092565b6000806000806080858703121561191857600080fd5b6119218561185c565b935061192f6020860161185c565b92506040850135915060608501356001600160401b0381111561195157600080fd5b8501601f8101871361196257600080fd5b611971878235602084016117e7565b91505092959194509250565b6000806040838503121561199057600080fd5b6119998361185c565b9150602083013580151581146119ae57600080fd5b809150509250929050565b600080604083850312156119cc57600080fd5b6119d58361185c565b946020939093013593505050565b6000602082840312156119f557600080fd5b813561134881611d6a565b600060208284031215611a1257600080fd5b815161134881611d6a565b600060208284031215611a2f57600080fd5b81356001600160401b03811115611a4557600080fd5b8201601f81018413611a5657600080fd5b611194848235602084016117e7565b600060208284031215611a7757600080fd5b5035919050565b60008151808452611a96816020860160208601611c7c565b601f01601f19169290920160200192915050565b60008351611abc818460208801611c7c565b835190830190611ad0818360208801611c7c565b6d17b6b2ba30b230ba30973539b7b760911b9101908152600e01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b2590830184611a7e565b9695505050505050565b6020815260006113486020830184611a7e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611c2d57611c2d611d12565b500190565b600082611c4157611c41611d28565b500490565b6000816000190483118215151615611c6057611c60611d12565b500290565b600082821015611c7757611c77611d12565b500390565b60005b83811015611c97578181015183820152602001611c7f565b83811115610eba5750506000910152565b600181811c90821680611cbc57607f821691505b60208210811415611cdd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611cf757611cf7611d12565b5060010190565b600082611d0d57611d0d611d28565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611d8057600080fd5b5056fea26469706673582212208973a6bd2f836b1fbf85ecd34b643a9749aad36c9f7ebf75659bc6abb129b57364736f6c63430008060033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000017a4b5e838100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000003446f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085261626964446f67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568747470733a2f2f7261626964646f677061636b2e73332e65752d776573742d322e616d617a6f6e6177732e636f6d2f646f67732f0000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Dog
Arg [1] : _symbol (string): RabidDog
Arg [2] : saleStart (uint256): 1624762123137
Arg [3] : bTokenURI (string): https://rabiddogpack.s3.eu-west-2.amazonaws.com/dogs/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000017a4b5e8381
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 446f670000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 5261626964446f67000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [9] : 68747470733a2f2f7261626964646f677061636b2e73332e65752d776573742d
Arg [10] : 322e616d617a6f6e6177732e636f6d2f646f67732f0000000000000000000000


Deployed Bytecode Sourcemap

40651:3228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43355:123;;;;;;;;;;-1:-1:-1;43355:123:0;;;;;:::i;:::-;;:::i;:::-;;19784:284;;;;;;;;;;-1:-1:-1;19784:284:0;;;;;:::i;:::-;;:::i;:::-;;;5823:14:1;;5816:22;5798:41;;5786:2;5771:18;19784:284:0;;;;;;;;20708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22160:221::-;;;;;;;;;;-1:-1:-1;22160:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5121:32:1;;;5103:51;;5091:2;5076:18;22160:221:0;5058:102:1;21697:397:0;;;;;;;;;;-1:-1:-1;21697:397:0;;;;;:::i;:::-;;:::i;43227:120::-;;;;;;;;;;-1:-1:-1;43227:120:0;;;;;:::i;:::-;;:::i;43128:91::-;;;;;;;;;;-1:-1:-1;43199:12:0;;43128:91;;;13717:25:1;;;13705:2;13690:18;43128:91:0;13672:76:1;41074:31:0;;;;;;;;;;;;;;;;23050:305;;;;;;;;;;-1:-1:-1;23050:305:0;;;;;:::i;:::-;;:::i;43486:91::-;;;;;;;;;;;;;:::i;41700:140::-;;;;;;;;;;;;;:::i;23426:151::-;;;;;;;;;;-1:-1:-1;23426:151:0;;;;;:::i;:::-;;:::i;20402:239::-;;;;;;;;;;-1:-1:-1;20402:239:0;;;;;:::i;:::-;;:::i;40730:24::-;;;;;;;;;;;;;:::i;40923:52::-;;;;;;;;;;;;40958:17;40923:52;;20132:208;;;;;;;;;;-1:-1:-1;20132:208:0;;;;;:::i;:::-;;:::i;40984:41::-;;;;;;;;;;;;41023:2;40984:41;;33227:148;;;;;;;;;;;;;:::i;41848:756::-;;;;;;:::i;:::-;;:::i;32576:87::-;;;;;;;;;;;;;:::i;40842:34::-;;;;;;;;;;;;;;;;20877:104;;;;;;;;;;;;;:::i;22453:295::-;;;;;;;;;;-1:-1:-1;22453:295:0;;;;;:::i;:::-;;:::i;41504:188::-;;;;;;;;;;;;;:::i;43012:108::-;;;;;;;;;;-1:-1:-1;43100:12:0;;43082:15;;:30;43012:108;;23648:285;;;;;;;;;;-1:-1:-1;23648:285:0;;;;;:::i;:::-;;:::i;43683:193::-;;;;;;;;;;-1:-1:-1;43683:193:0;;;;;:::i;:::-;;:::i;40805:28::-;;;;;;;;;;;;;;;;42637:175;;;;;;;;;;;;;:::i;40763:33::-;;;;;;;;;;;;;;;;22819:164;;;;;;;;;;-1:-1:-1;22819:164:0;;;;;:::i;:::-;;:::i;41034:31::-;;;;;;;;;;-1:-1:-1;41034:31:0;;;;;;;;33530:248;;;;;;;;;;-1:-1:-1;33530:248:0;;;;;:::i;:::-;;:::i;40885:29::-;;;;;;;;;;;;;;;;43355:123;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;;;;;;;;;43436:16:::1;:34:::0;43355:123::o;19784:284::-;19886:4;-1:-1:-1;;;;;;19910:40:0;;-1:-1:-1;;;19910:40:0;;:101;;-1:-1:-1;;;;;;;19963:48:0;;-1:-1:-1;;;19963:48:0;19910:101;:150;;;-1:-1:-1;;;;;;;;;;18496:40:0;;;20024:36;19903:157;19784:284;-1:-1:-1;;19784:284:0:o;20708:100::-;20762:13;20795:5;20788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20708:100;:::o;22160:221::-;22236:7;22264:16;22272:7;22264;:16::i;:::-;22256:73;;;;-1:-1:-1;;;22256:73:0;;11769:2:1;22256:73:0;;;11751:21:1;11808:2;11788:18;;;11781:30;11847:34;11827:18;;;11820:62;-1:-1:-1;;;11898:18:1;;;11891:42;11950:19;;22256:73:0;11741:234:1;22256:73:0;-1:-1:-1;22349:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22349:24:0;;22160:221::o;21697:397::-;21778:13;21794:23;21809:7;21794:14;:23::i;:::-;21778:39;;21842:5;-1:-1:-1;;;;;21836:11:0;:2;-1:-1:-1;;;;;21836:11:0;;;21828:57;;;;-1:-1:-1;;;21828:57:0;;12953:2:1;21828:57:0;;;12935:21:1;12992:2;12972:18;;;12965:30;13031:34;13011:18;;;13004:62;-1:-1:-1;;;13082:18:1;;;13075:31;13123:19;;21828:57:0;12925:223:1;21828:57:0;15436:10;-1:-1:-1;;;;;21906:21:0;;;;:62;;-1:-1:-1;21931:37:0;21948:5;15436:10;22819:164;:::i;21931:37::-;21898:154;;;;-1:-1:-1;;;21898:154:0;;10162:2:1;21898:154:0;;;10144:21:1;10201:2;10181:18;;;10174:30;10240:34;10220:18;;;10213:62;-1:-1:-1;;;10291:18:1;;;10284:54;10355:19;;21898:154:0;10134:246:1;21898:154:0;22065:21;22074:2;22078:7;22065:8;:21::i;:::-;21767:327;21697:397;;:::o;43227:120::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;43312:27;;::::1;::::0;:10:::1;::::0;:27:::1;::::0;::::1;::::0;::::1;:::i;:::-;;43227:120:::0;:::o;23050:305::-;23211:41;15436:10;23244:7;23211:18;:41::i;:::-;23203:103;;;;-1:-1:-1;;;23203:103:0;;;;;;;:::i;:::-;23319:28;23329:4;23335:2;23339:7;23319:9;:28::i;43486:91::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;43557:12:::1;::::0;;-1:-1:-1;;43541:28:0;::::1;43557:12;::::0;;::::1;43556:13;43541:28;::::0;;43486:91::o;41700:140::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;41795:37:::1;::::0;41763:21:::1;::::0;41803:10:::1;::::0;41795:37;::::1;;;::::0;41763:21;;41748:12:::1;41795:37:::0;41748:12;41795:37;41763:21;41803:10;41795:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;23426:151:::0;23530:39;23547:4;23553:2;23557:7;23530:39;;;;;;;;;;;;:16;:39::i;20402:239::-;20474:7;20510:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20510:16:0;20545:19;20537:73;;;;-1:-1:-1;;;20537:73:0;;10998:2:1;20537:73:0;;;10980:21:1;11037:2;11017:18;;;11010:30;11076:34;11056:18;;;11049:62;-1:-1:-1;;;11127:18:1;;;11120:39;11176:19;;20537:73:0;10970:231:1;40730:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20132:208::-;20204:7;-1:-1:-1;;;;;20232:19:0;;20224:74;;;;-1:-1:-1;;;20224:74:0;;10587:2:1;20224:74:0;;;10569:21:1;10626:2;10606:18;;;10599:30;10665:34;10645:18;;;10638:62;-1:-1:-1;;;10716:18:1;;;10709:40;10766:19;;20224:74:0;10559:232:1;20224:74:0;-1:-1:-1;;;;;;20316:16:0;;;;;:9;:16;;;;;;;20132:208::o;33227:148::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;33318:6:::1;::::0;33297:40:::1;::::0;33334:1:::1;::::0;-1:-1:-1;;;;;33318:6:0::1;::::0;33297:40:::1;::::0;33334:1;;33297:40:::1;33348:6;:19:::0;;-1:-1:-1;;;;;;33348:19:0::1;::::0;;33227:148::o;41848:756::-;41921:12;;;;41913:56;;;;-1:-1:-1;;;41913:56:0;;8578:2:1;41913:56:0;;;8560:21:1;8617:2;8597:18;;;8590:30;8656:33;8636:18;;;8629:61;8707:18;;41913:56:0;8550:181:1;41913:56:0;41023:2;41988:14;:30;;41980:76;;;;-1:-1:-1;;;41980:76:0;;9351:2:1;41980:76:0;;;9333:21:1;9390:2;9370:18;;;9363:30;9429:34;9409:18;;;9402:62;-1:-1:-1;;;9480:18:1;;;9473:31;9521:19;;41980:76:0;9323:223:1;41980:76:0;42114:12;;42075:15;;:35;;42095:14;42075:19;:35::i;:::-;:51;;42067:104;;;;-1:-1:-1;;;42067:104:0;;9753:2:1;42067:104:0;;;9735:21:1;9792:2;9772:18;;;9765:30;9831:34;9811:18;;;9804:62;-1:-1:-1;;;9882:18:1;;;9875:38;9930:19;;42067:104:0;9725:230:1;42067:104:0;42222:9;42190:28;40958:17;42203:14;42190:12;:28::i;:::-;:41;;42182:85;;;;-1:-1:-1;;;42182:85:0;;8218:2:1;42182:85:0;;;8200:21:1;8257:2;8237:18;;;8230:30;8296:33;8276:18;;;8269:61;8347:18;;42182:85:0;8190:181:1;42182:85:0;42285:6;42280:317;42301:14;42297:1;:18;42280:317;;;42337:18;42358:14;:12;:14::i;:::-;42337:35;;42407:12;;42393:10;:26;42389:197;;42440:33;42450:10;42462;42440:9;:33::i;:::-;42492:19;:17;:19::i;:::-;42535:35;;;13927:25:1;;;42559:10:0;13983:2:1;13968:18;;13961:60;42535:35:0;;13900:18:1;42535:35:0;;;;;;;42389:197;-1:-1:-1;42317:3:0;;;;:::i;:::-;;;;42280:317;;32576:87;32649:6;;-1:-1:-1;;;;;32649:6:0;;32576:87::o;20877:104::-;20933:13;20966:7;20959:14;;;;;:::i;22453:295::-;-1:-1:-1;;;;;22556:24:0;;15436:10;22556:24;;22548:62;;;;-1:-1:-1;;;22548:62:0;;7864:2:1;22548:62:0;;;7846:21:1;7903:2;7883:18;;;7876:30;-1:-1:-1;;;7922:18:1;;;7915:55;7987:18;;22548:62:0;7836:175:1;22548:62:0;15436:10;22623:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22623:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22623:53:0;;;;;;;;;;22692:48;;5798:41:1;;;22623:42:0;;15436:10;22692:48;;5771:18:1;22692:48:0;;;;;;;22453:295;;:::o;41504:188::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;41569:15:::1;::::0;41555:11:::1;41595:90;41616:2;41612:1;:6;41595:90;;;41640:33;41650:10;41662;41671:1:::0;41662:6;:10:::1;:::i;:::-;41640:9;:33::i;:::-;41620:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41595:90;;23648:285:::0;23780:41;15436:10;23813:7;23780:18;:41::i;:::-;23772:103;;;;-1:-1:-1;;;23772:103:0;;;;;;;:::i;:::-;23886:39;23900:4;23906:2;23910:7;23919:5;23886:13;:39::i;:::-;23648:285;;;;:::o;43683:193::-;43749:13;43806:14;:12;:14::i;:::-;43822:26;43839:8;43822:16;:26::i;:::-;43789:78;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43775:93;;43683:193;;;:::o;42637:175::-;42679:7;42703:15;43100:12;;43082:15;;:30;;43012:108;42703:15;42699:56;;;-1:-1:-1;42742:1:0;;42637:175::o;42699:56::-;42789:15;;42774:12;;:30;;;;:::i;:::-;42767:37;;42637:175;:::o;22819:164::-;-1:-1:-1;;;;;22940:25:0;;;22916:4;22940:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22819:164::o;33530:248::-;15436:10;32796:7;:5;:7::i;:::-;-1:-1:-1;;;;;32796:23:0;;32788:68;;;;-1:-1:-1;;;32788:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33619:22:0;::::1;33611:73;;;::::0;-1:-1:-1;;;33611:73:0;;6695:2:1;33611:73:0::1;::::0;::::1;6677:21:1::0;6734:2;6714:18;;;6707:30;6773:34;6753:18;;;6746:62;-1:-1:-1;;;6824:18:1;;;6817:36;6870:19;;33611:73:0::1;6667:228:1::0;33611:73:0::1;33721:6;::::0;33700:38:::1;::::0;-1:-1:-1;;;;;33700:38:0;;::::1;::::0;33721:6:::1;::::0;33700:38:::1;::::0;33721:6:::1;::::0;33700:38:::1;33749:6;:17:::0;;-1:-1:-1;;;;;;33749:17:0::1;-1:-1:-1::0;;;;;33749:17:0;;;::::1;::::0;;;::::1;::::0;;33530:248::o;25400:127::-;25465:4;25489:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25489:16:0;:30;;;25400:127::o;29277:174::-;29352:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29352:29:0;-1:-1:-1;;;;;29352:29:0;;;;;;;;:24;;29406:23;29352:24;29406:14;:23::i;:::-;-1:-1:-1;;;;;29397:46:0;;;;;;;;;;;29277:174;;:::o;25694:348::-;25787:4;25812:16;25820:7;25812;:16::i;:::-;25804:73;;;;-1:-1:-1;;;25804:73:0;;8938:2:1;25804:73:0;;;8920:21:1;8977:2;8957:18;;;8950:30;9016:34;8996:18;;;8989:62;-1:-1:-1;;;9067:18:1;;;9060:42;9119:19;;25804:73:0;8910:234:1;25804:73:0;25888:13;25904:23;25919:7;25904:14;:23::i;:::-;25888:39;;25957:5;-1:-1:-1;;;;;25946:16:0;:7;-1:-1:-1;;;;;25946:16:0;;:51;;;;25990:7;-1:-1:-1;;;;;25966:31:0;:20;25978:7;25966:11;:20::i;:::-;-1:-1:-1;;;;;25966:31:0;;25946:51;:87;;;;26001:32;26018:5;26025:7;26001:16;:32::i;:::-;25938:96;25694:348;-1:-1:-1;;;;25694:348:0:o;28615:544::-;28740:4;-1:-1:-1;;;;;28713:31:0;:23;28728:7;28713:14;:23::i;:::-;-1:-1:-1;;;;;28713:31:0;;28705:85;;;;-1:-1:-1;;;28705:85:0;;12543:2:1;28705:85:0;;;12525:21:1;12582:2;12562:18;;;12555:30;12621:34;12601:18;;;12594:62;-1:-1:-1;;;12672:18:1;;;12665:39;12721:19;;28705:85:0;12515:231:1;28705:85:0;-1:-1:-1;;;;;28809:16:0;;28801:65;;;;-1:-1:-1;;;28801:65:0;;7459:2:1;28801:65:0;;;7441:21:1;7498:2;7478:18;;;7471:30;7537:34;7517:18;;;7510:62;-1:-1:-1;;;7588:18:1;;;7581:34;7632:19;;28801:65:0;7431:226:1;28801:65:0;28983:29;29000:1;29004:7;28983:8;:29::i;:::-;-1:-1:-1;;;;;29025:15:0;;;;;;:9;:15;;;;;:20;;29044:1;;29025:15;:20;;29044:1;;29025:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29056:13:0;;;;;;:9;:13;;;;;:18;;29073:1;;29056:13;:18;;29073:1;;29056:18;:::i;:::-;;;;-1:-1:-1;;29085:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29085:21:0;-1:-1:-1;;;;;29085:21:0;;;;;;;;;29124:27;;29085:16;;29124:27;;;;;;;28615:544;;;:::o;36409:98::-;36467:7;36494:5;36498:1;36494;:5;:::i;:::-;36487:12;36409:98;-1:-1:-1;;;36409:98:0:o;37147:::-;37205:7;37232:5;37236:1;37232;:5;:::i;42820:103::-;42893:15;;42866:7;;42893:22;;42913:1;42893:19;:22::i;26384:110::-;26460:26;26470:2;26474:7;26460:26;;;;;;;;;;;;:9;:26::i;42931:73::-;42979:15;:17;;;:15;:17;;;:::i;:::-;;;;;;42931:73::o;24815:272::-;24929:28;24939:4;24945:2;24949:7;24929:9;:28::i;:::-;24976:48;24999:4;25005:2;25009:7;25018:5;24976:22;:48::i;:::-;24968:111;;;;-1:-1:-1;;;24968:111:0;;;;;;;:::i;43585:90::-;43630:13;43663:4;43656:11;;;;;:::i;15932:723::-;15988:13;16209:10;16205:53;;-1:-1:-1;;16236:10:0;;;;;;;;;;;;-1:-1:-1;;;16236:10:0;;;;;15932:723::o;16205:53::-;16283:5;16268:12;16324:78;16331:9;;16324:78;;16357:8;;;;:::i;:::-;;-1:-1:-1;16380:10:0;;-1:-1:-1;16388:2:0;16380:10;;:::i;:::-;;;16324:78;;;16412:19;16444:6;-1:-1:-1;;;;;16434:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16434:17:0;;16412:39;;16462:154;16469:10;;16462:154;;16496:11;16506:1;16496:11;;:::i;:::-;;-1:-1:-1;16565:10:0;16573:2;16565:5;:10;:::i;:::-;16552:24;;:2;:24;:::i;:::-;16539:39;;16522:6;16529;16522:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16522:56:0;;;;;;;;-1:-1:-1;16593:11:0;16602:2;16593:11;;:::i;:::-;;;16462:154;;26721:250;26817:18;26823:2;26827:7;26817:5;:18::i;:::-;26854:54;26885:1;26889:2;26893:7;26902:5;26854:22;:54::i;:::-;26846:117;;;;-1:-1:-1;;;26846:117:0;;;;;;;:::i;30016:839::-;30133:4;-1:-1:-1;;;;;30159:13:0;;7923:20;7962:8;30155:693;;30195:72;;-1:-1:-1;;;30195:72:0;;-1:-1:-1;;;;;30195:36:0;;;;;:72;;15436:10;;30246:4;;30252:7;;30261:5;;30195:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30195:72:0;;;;;;;;-1:-1:-1;;30195:72:0;;;;;;;;;;;;:::i;:::-;;;30191:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30441:13:0;;30437:341;;30484:60;;-1:-1:-1;;;30484:60:0;;;;;;;:::i;30437:341::-;30728:6;30722:13;30713:6;30709:2;30705:15;30698:38;30191:602;-1:-1:-1;;;;;;30318:55:0;-1:-1:-1;;;30318:55:0;;-1:-1:-1;30311:62:0;;30155:693;-1:-1:-1;30832:4:0;30016:839;;;;;;:::o;27307:382::-;-1:-1:-1;;;;;27387:16:0;;27379:61;;;;-1:-1:-1;;;27379:61:0;;11408:2:1;27379:61:0;;;11390:21:1;;;11427:18;;;11420:30;11486:34;11466:18;;;11459:62;11538:18;;27379:61:0;11380:182:1;27379:61:0;27460:16;27468:7;27460;:16::i;:::-;27459:17;27451:58;;;;-1:-1:-1;;;27451:58:0;;7102:2:1;27451:58:0;;;7084:21:1;7141:2;7121:18;;;7114:30;-1:-1:-1;;;7160:18:1;;;7153:58;7228:18;;27451:58:0;7074:178:1;27451:58:0;-1:-1:-1;;;;;27580:13:0;;;;;;:9;:13;;;;;:18;;27597:1;;27580:13;:18;;27597:1;;27580:18;:::i;:::-;;;;-1:-1:-1;;27609:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;27609:21:0;-1:-1:-1;;;;;27609:21:0;;;;;;;;27648:33;;27609:16;;;27648:33;;27609:16;;27648:33;27307:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:2;;;956:1;953;946:12;908:2;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:2;;;1164:1;1161;1154:12;1116:2;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1106:173;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:2;;;1446:1;1443;1436:12;1398:2;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1388:224;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:2;;;1806:1;1803;1796:12;1757:2;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;-1:-1:-1;;;;;2036:6:1;2033:30;2030:2;;;2076:1;2073;2066:12;2030:2;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:2:1;;2181:1;2178;2171:12;2130:2;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1747:536;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:2;;;2430:1;2427;2420:12;2382:2;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:2;;2601:1;2598;2591:12;2545:2;2624:5;2614:15;;;2372:263;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:2;;;2785:1;2782;2775:12;2737:2;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2727:167:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:2;;;3026:1;3023;3016:12;2978:2;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:2;;;3287:1;3284;3277:12;3239:2;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:2;;;3541:1;3538;3531:12;3493:2;3581:9;3568:23;-1:-1:-1;;;;;3606:6:1;3603:30;3600:2;;;3646:1;3643;3636:12;3600:2;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:2:1;;3751:1;3748;3741:12;3700:2;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:2;;;3986:1;3983;3976:12;3938:2;-1:-1:-1;4009:23:1;;3928:110;-1:-1:-1;3928:110:1:o;4043:257::-;4084:3;4122:5;4116:12;4149:6;4144:3;4137:19;4165:63;4221:6;4214:4;4209:3;4205:14;4198:4;4191:5;4187:16;4165:63;:::i;:::-;4282:2;4261:15;-1:-1:-1;;4257:29:1;4248:39;;;;4289:4;4244:50;;4092:208;-1:-1:-1;;4092:208:1:o;4305:647::-;4585:3;4623:6;4617:13;4639:53;4685:6;4680:3;4673:4;4665:6;4661:17;4639:53;:::i;:::-;4755:13;;4714:16;;;;4777:57;4755:13;4714:16;4811:4;4799:17;;4777:57;:::i;:::-;-1:-1:-1;;;4856:20:1;;4885:31;;;4943:2;4932:14;;4593:359;-1:-1:-1;;;;4593:359:1:o;5165:488::-;-1:-1:-1;;;;;5434:15:1;;;5416:34;;5486:15;;5481:2;5466:18;;5459:43;5533:2;5518:18;;5511:34;;;5581:3;5576:2;5561:18;;5554:31;;;5359:4;;5602:45;;5627:19;;5619:6;5602:45;:::i;:::-;5594:53;5368:285;-1:-1:-1;;;;;;5368:285:1:o;5850:219::-;5999:2;5988:9;5981:21;5962:4;6019:44;6059:2;6048:9;6044:18;6036:6;6019:44;:::i;6074:414::-;6276:2;6258:21;;;6315:2;6295:18;;;6288:30;6354:34;6349:2;6334:18;;6327:62;-1:-1:-1;;;6420:2:1;6405:18;;6398:48;6478:3;6463:19;;6248:240::o;11980:356::-;12182:2;12164:21;;;12201:18;;;12194:30;12260:34;12255:2;12240:18;;12233:62;12327:2;12312:18;;12154:182::o;13153:413::-;13355:2;13337:21;;;13394:2;13374:18;;;13367:30;13433:34;13428:2;13413:18;;13406:62;-1:-1:-1;;;13499:2:1;13484:18;;13477:47;13556:3;13541:19;;13327:239::o;14032:128::-;14072:3;14103:1;14099:6;14096:1;14093:13;14090:2;;;14109:18;;:::i;:::-;-1:-1:-1;14145:9:1;;14080:80::o;14165:120::-;14205:1;14231;14221:2;;14236:18;;:::i;:::-;-1:-1:-1;14270:9:1;;14211:74::o;14290:168::-;14330:7;14396:1;14392;14388:6;14384:14;14381:1;14378:21;14373:1;14366:9;14359:17;14355:45;14352:2;;;14403:18;;:::i;:::-;-1:-1:-1;14443:9:1;;14342:116::o;14463:125::-;14503:4;14531:1;14528;14525:8;14522:2;;;14536:18;;:::i;:::-;-1:-1:-1;14573:9:1;;14512:76::o;14593:258::-;14665:1;14675:113;14689:6;14686:1;14683:13;14675:113;;;14765:11;;;14759:18;14746:11;;;14739:39;14711:2;14704:10;14675:113;;;14806:6;14803:1;14800:13;14797:2;;;-1:-1:-1;;14841:1:1;14823:16;;14816:27;14646:205::o;14856:380::-;14935:1;14931:12;;;;14978;;;14999:2;;15053:4;15045:6;15041:17;15031:27;;14999:2;15106;15098:6;15095:14;15075:18;15072:38;15069:2;;;15152:10;15147:3;15143:20;15140:1;15133:31;15187:4;15184:1;15177:15;15215:4;15212:1;15205:15;15069:2;;14911:325;;;:::o;15241:135::-;15280:3;-1:-1:-1;;15301:17:1;;15298:2;;;15321:18;;:::i;:::-;-1:-1:-1;15368:1:1;15357:13;;15288:88::o;15381:112::-;15413:1;15439;15429:2;;15444:18;;:::i;:::-;-1:-1:-1;15478:9:1;;15419:74::o;15498:127::-;15559:10;15554:3;15550:20;15547:1;15540:31;15590:4;15587:1;15580:15;15614:4;15611:1;15604:15;15630:127;15691:10;15686:3;15682:20;15679:1;15672:31;15722:4;15719:1;15712:15;15746:4;15743:1;15736:15;15762:127;15823:10;15818:3;15814:20;15811:1;15804:31;15854:4;15851:1;15844:15;15878:4;15875:1;15868:15;15894:127;15955:10;15950:3;15946:20;15943:1;15936:31;15986:4;15983:1;15976:15;16010:4;16007:1;16000:15;16026:131;-1:-1:-1;;;;;;16100:32:1;;16090:43;;16080:2;;16147:1;16144;16137:12;16080:2;16070:87;:::o

Swarm Source

ipfs://8973a6bd2f836b1fbf85ecd34b643a9749aad36c9f7ebf75659bc6abb129b573
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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