ETH Price: $3,259.55 (-2.98%)

Token

CryptoAgainstSociety (CAS)
 

Overview

Max Total Supply

49 CAS

Holders

7

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jinandtonix.eth
Balance
1 CAS
0xf376eae57e7a22908b23d27c1a103ab237396e15
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:
CryptoAgainstSociety

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT



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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @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;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;
/**
 * @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;
    }
}

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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "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] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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



pragma solidity ^0.8.0;

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

        (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");

        (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");

        (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");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol



pragma solidity ^0.8.0;

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

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

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


// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
 * @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}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. 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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    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` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


contract ProxyRegistry {
    mapping(address => address) public proxies;
}


// Crypto Against Society is a collection of 10,000 cryto, wallstreetbets, and gamestop themed prompt and answer combinations inspired by games like Cards Against Humanity.
// Each NFT is a completely unique algorithmically generated card combination from out of 50 black card prompts and 250 white card respones. 
// White cards come in three rarities (common, rare, mythic) and are visually represented by the logos in the lower left hand corner (silver, gold, orange/red).


pragma solidity >=0.7.0 <0.9.0;



contract CryptoAgainstSociety is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.08 ether;
  uint256 public maxSupply = 10000;
  uint256 public maxMintAmount = 20;
  uint256 public ownerReserveMints = 100;  
  uint256 public reservedClaimed;
  bool public saleNotStarted = true;
  bool public revealed = false;
  string public notRevealedUri;
  address public immutable proxyRegistryAddress;
  address private constant teamaddress = 0x24aB30ac424fbc76fFE94E8e9d84C13a899549F4;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri,
    address _proxyRegistryAddress
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    proxyRegistryAddress = _proxyRegistryAddress;
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

    // Anti-bot functions
    // ------------------------------------------------------------------------

  function isDelegatedCall () internal view returns (bool) {
        return address (this) != 0x399104C5d8E98E62349716eeED1AE521d602bD4A;
  }


  function isContractCall(address addr) internal view returns (bool) {
        uint size;
        assembly { size := extcodesize(addr) }
        return size > 0;
  }

  // public
  
    /**
   * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
   */
  function isApprovedForAll(address owner, address operator) public view override returns (bool) {

      ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);

      // Whitelist OpenSea proxy contract for easy trading.
      if (proxyRegistry.proxies(owner) == operator) {
          return true;
      }
      return super.isApprovedForAll(owner, operator);
  }
  
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(tx.origin == msg.sender, "Go away bot.");
    require(!isDelegatedCall(), "Go away bot.");
    require(!isContractCall(msg.sender), "Go away bot.");
    require(!saleNotStarted, 'The sale has not started.');
    require(_mintAmount > 0, 'Must mint at least 1 token at a time.');
    require(_mintAmount <= maxMintAmount, 'This many tokens can not be minted in the same transaction.');
    require(supply + _mintAmount <= maxSupply, 'Minting would exceed the total allowable supply.');
    require(msg.value == cost * _mintAmount, 'Eth amount sent is incorrect for number of desired mints.');

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner() {
      revealed = true;
  }
 
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function startSale(bool _state) public onlyOwner {
    saleNotStarted = _state;
  }
 
  function reserveMint(uint256 _mintAmount) public onlyOwner {
    uint256 supply = totalSupply();
    require(reservedClaimed + _mintAmount <= ownerReserveMints, "Minting would exceed max owner reserve.");
    require(_mintAmount > 0, 'Must mint at least 1 token at a time.');
    require(_mintAmount <= maxMintAmount, 'This many tokens can not be minted in the same transaction.');
    require(supply + _mintAmount <= maxSupply, 'Minting would exceed the total allowable supply.');

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }
    reservedClaimed += _mintAmount;
  }
 
  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(teamaddress).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":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":[{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"ownerReserveMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"reserveMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"saleNotStarted","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"startSale","outputs":[],"stateMutability":"nonpayable","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60e0604052600560a081905264173539b7b760d91b60c09081526200002891600c919062000219565b5067011c37937e080000600d55612710600e556014600f5560646010556012805461ffff191660011790553480156200006057600080fd5b5060405162002e2238038062002e22833981016040819052620000839162000376565b8451859085906200009c90600090602085019062000219565b508051620000b290600190602084019062000219565b505050620000cf620000c96200010060201b60201c565b62000104565b620000da8362000156565b620000e582620001be565b60601b6001600160601b03191660805250620004a692505050565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001a55760405162461bcd60e51b8152602060048201819052602482015260008051602062002e0283398151915260448201526064015b60405180910390fd5b8051620001ba90600b90602084019062000219565b5050565b600a546001600160a01b03163314620002095760405162461bcd60e51b8152602060048201819052602482015260008051602062002e0283398151915260448201526064016200019c565b8051620001ba9060139060208401905b828054620002279062000453565b90600052602060002090601f0160209004810192826200024b576000855562000296565b82601f106200026657805160ff191683800117855562000296565b8280016001018555821562000296579182015b828111156200029657825182559160200191906001019062000279565b50620002a4929150620002a8565b5090565b5b80821115620002a45760008155600101620002a9565b600082601f830112620002d157600080fd5b81516001600160401b0380821115620002ee57620002ee62000490565b604051601f8301601f19908116603f0116810190828211818310171562000319576200031962000490565b816040528381526020925086838588010111156200033657600080fd5b600091505b838210156200035a57858201830151818301840152908201906200033b565b838211156200036c5760008385830101525b9695505050505050565b600080600080600060a086880312156200038f57600080fd5b85516001600160401b0380821115620003a757600080fd5b620003b589838a01620002bf565b96506020880151915080821115620003cc57600080fd5b620003da89838a01620002bf565b95506040880151915080821115620003f157600080fd5b620003ff89838a01620002bf565b945060608801519150808211156200041657600080fd5b506200042588828901620002bf565b608088015190935090506001600160a01b03811681146200044557600080fd5b809150509295509295909350565b600181811c908216806200046857607f821691505b602082108114156200048a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160601c612936620004cc60003960008181610646015261153001526129366000f3fe60806040526004361061023b5760003560e01c80636352211e1161012e578063ab69a0b4116100ab578063d5abeb011161006f578063d5abeb0114610668578063da3ef23f1461067e578063e985e9c51461069e578063f2c4ce1e146106be578063f2fde38b146106de57600080fd5b8063ab69a0b4146105c9578063b88d4fde146105df578063c6682862146105ff578063c87b56dd14610614578063cd7c03261461063457600080fd5b806395d89b41116100f257806395d89b411461054c5780639c4c557c14610561578063a0712d6814610581578063a22cb46514610594578063a475b5dd146105b457600080fd5b80636352211e146104b957806370a08231146104d9578063715018a6146104f95780637f00c7a61461050e5780638da5cb5b1461052e57600080fd5b806323b872dd116101bc578063438b630011610180578063438b63001461040d57806344a0d68a1461043a5780634f6ccce71461045a578063518302271461047a57806355f804b31461049957600080fd5b806323b872dd1461038f57806324510043146103af5780632f745c59146103c55780633ccfd60b146103e557806342842e0e146103ed57600080fd5b80631342ff4c116102035780631342ff4c1461030657806313faede61461032657806318160ddd1461034a57806321b51d1b1461035f578063239c70ae1461037957600080fd5b806301ffc9a71461024057806306fdde0314610275578063081812fc14610297578063081c8c44146102cf578063095ea7b3146102e4575b600080fd5b34801561024c57600080fd5b5061026061025b36600461235f565b6106fe565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a610729565b60405161026c919061256c565b3480156102a357600080fd5b506102b76102b23660046123e2565b6107bb565b6040516001600160a01b03909116815260200161026c565b3480156102db57600080fd5b5061028a610855565b3480156102f057600080fd5b506103046102ff366004612318565b6108e3565b005b34801561031257600080fd5b506103046103213660046123e2565b6109f9565b34801561033257600080fd5b5061033c600d5481565b60405190815260200161026c565b34801561035657600080fd5b5060085461033c565b34801561036b57600080fd5b506012546102609060ff1681565b34801561038557600080fd5b5061033c600f5481565b34801561039b57600080fd5b506103046103aa366004612222565b610b57565b3480156103bb57600080fd5b5061033c60115481565b3480156103d157600080fd5b5061033c6103e0366004612318565b610b88565b610304610c1e565b3480156103f957600080fd5b50610304610408366004612222565b610cb4565b34801561041957600080fd5b5061042d6104283660046121af565b610ccf565b60405161026c9190612528565b34801561044657600080fd5b506103046104553660046123e2565b610d71565b34801561046657600080fd5b5061033c6104753660046123e2565b610da0565b34801561048657600080fd5b5060125461026090610100900460ff1681565b3480156104a557600080fd5b506103046104b4366004612399565b610e33565b3480156104c557600080fd5b506102b76104d43660046123e2565b610e74565b3480156104e557600080fd5b5061033c6104f43660046121af565b610eeb565b34801561050557600080fd5b50610304610f72565b34801561051a57600080fd5b506103046105293660046123e2565b610fa8565b34801561053a57600080fd5b50600a546001600160a01b03166102b7565b34801561055857600080fd5b5061028a610fd7565b34801561056d57600080fd5b5061030461057c366004612344565b610fe6565b61030461058f3660046123e2565b611023565b3480156105a057600080fd5b506103046105af3660046122e3565b61120d565b3480156105c057600080fd5b506103046112d2565b3480156105d557600080fd5b5061033c60105481565b3480156105eb57600080fd5b506103046105fa366004612263565b61130d565b34801561060b57600080fd5b5061028a611345565b34801561062057600080fd5b5061028a61062f3660046123e2565b611352565b34801561064057600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b34801561067457600080fd5b5061033c600e5481565b34801561068a57600080fd5b50610304610699366004612399565b6114d1565b3480156106aa57600080fd5b506102606106b93660046121e9565b61150e565b3480156106ca57600080fd5b506103046106d9366004612399565b6115fc565b3480156106ea57600080fd5b506103046106f93660046121af565b611639565b60006001600160e01b0319821663780e9d6360e01b14806107235750610723826116d1565b92915050565b606060008054610738906127fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610764906127fd565b80156107b15780601f10610786576101008083540402835291602001916107b1565b820191906000526020600020905b81548152906001019060200180831161079457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60138054610862906127fd565b80601f016020809104026020016040519081016040528092919081815260200182805461088e906127fd565b80156108db5780601f106108b0576101008083540402835291602001916108db565b820191906000526020600020905b8154815290600101906020018083116108be57829003601f168201915b505050505081565b60006108ee82610e74565b9050806001600160a01b0316836001600160a01b0316141561095c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610830565b336001600160a01b03821614806109785750610978813361150e565b6109ea5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610830565b6109f48383611721565b505050565b600a546001600160a01b03163314610a235760405162461bcd60e51b815260040161083090612666565b6000610a2e60085490565b905060105482601154610a41919061276f565b1115610a9f5760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178206f776e6572207260448201526632b9b2b93b329760c91b6064820152608401610830565b60008211610abf5760405162461bcd60e51b81526004016108309061257f565b600f54821115610ae15760405162461bcd60e51b815260040161083090612712565b600e54610aee838361276f565b1115610b0c5760405162461bcd60e51b815260040161083090612616565b60015b828111610b3b57610b2933610b24838561276f565b61178f565b80610b3381612838565b915050610b0f565b508160116000828254610b4e919061276f565b90915550505050565b610b6133826117a9565b610b7d5760405162461bcd60e51b81526004016108309061269b565b6109f4838383611878565b6000610b9383610eeb565b8210610bf55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610830565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c485760405162461bcd60e51b815260040161083090612666565b6040516000907324ab30ac424fbc76ffe94e8e9d84c13a899549f49047908381818185875af1925050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b5050905080610cb157600080fd5b50565b6109f48383836040518060200160405280600081525061130d565b60606000610cdc83610eeb565b905060008167ffffffffffffffff811115610cf957610cf96128bf565b604051908082528060200260200182016040528015610d22578160200160208202803683370190505b50905060005b82811015610d6957610d3a8582610b88565b828281518110610d4c57610d4c6128a9565b602090810291909101015280610d6181612838565b915050610d28565b509392505050565b600a546001600160a01b03163314610d9b5760405162461bcd60e51b815260040161083090612666565b600d55565b6000610dab60085490565b8210610e0e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610830565b60088281548110610e2157610e216128a9565b90600052602060002001549050919050565b600a546001600160a01b03163314610e5d5760405162461bcd60e51b815260040161083090612666565b8051610e7090600b90602084019061208b565b5050565b6000818152600260205260408120546001600160a01b0316806107235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610830565b60006001600160a01b038216610f565760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610830565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f9c5760405162461bcd60e51b815260040161083090612666565b610fa66000611a23565b565b600a546001600160a01b03163314610fd25760405162461bcd60e51b815260040161083090612666565b600f55565b606060018054610738906127fd565b600a546001600160a01b031633146110105760405162461bcd60e51b815260040161083090612666565b6012805460ff1916911515919091179055565b600061102e60085490565b905032331461104f5760405162461bcd60e51b8152600401610830906126ec565b3073399104c5d8e98e62349716eeed1ae521d602bd4a146110825760405162461bcd60e51b8152600401610830906126ec565b333b156110a15760405162461bcd60e51b8152600401610830906126ec565b60125460ff16156110f45760405162461bcd60e51b815260206004820152601960248201527f5468652073616c6520686173206e6f7420737461727465642e000000000000006044820152606401610830565b600082116111145760405162461bcd60e51b81526004016108309061257f565b600f548211156111365760405162461bcd60e51b815260040161083090612712565b600e54611143838361276f565b11156111615760405162461bcd60e51b815260040161083090612616565b81600d5461116f919061279b565b34146111e35760405162461bcd60e51b815260206004820152603960248201527f45746820616d6f756e742073656e7420697320696e636f727265637420666f7260448201527f206e756d626572206f662064657369726564206d696e74732e000000000000006064820152608401610830565b60015b8281116109f4576111fb33610b24838561276f565b8061120581612838565b9150506111e6565b6001600160a01b0382163314156112665760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610830565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146112fc5760405162461bcd60e51b815260040161083090612666565b6012805461ff001916610100179055565b61131733836117a9565b6113335760405162461bcd60e51b81526004016108309061269b565b61133f84848484611a75565b50505050565b600c8054610862906127fd565b6000818152600260205260409020546060906001600160a01b03166113d15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610830565b601254610100900460ff1661147257601380546113ed906127fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611419906127fd565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b50505050509050919050565b600061147c611aa8565b9050600081511161149c57604051806020016040528060008152506114ca565b806114a684611ab7565b600c6040516020016114ba93929190612427565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114fb5760405162461bcd60e51b815260040161083090612666565b8051610e7090600c90602084019061208b565b60405163c455279160e01b81526001600160a01b0383811660048301526000917f000000000000000000000000000000000000000000000000000000000000000091848116919083169063c45527919060240160206040518083038186803b15801561157957600080fd5b505afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906121cc565b6001600160a01b031614156115ca576001915050610723565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b600a546001600160a01b031633146116265760405162461bcd60e51b815260040161083090612666565b8051610e7090601390602084019061208b565b600a546001600160a01b031633146116635760405162461bcd60e51b815260040161083090612666565b6001600160a01b0381166116c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610830565b610cb181611a23565b60006001600160e01b031982166380ac58cd60e01b148061170257506001600160e01b03198216635b5e139f60e01b145b8061072357506301ffc9a760e01b6001600160e01b0319831614610723565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061175682610e74565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610e70828260405180602001604052806000815250611bb5565b6000818152600260205260408120546001600160a01b03166118225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b600061182d83610e74565b9050806001600160a01b0316846001600160a01b031614806118685750836001600160a01b031661185d846107bb565b6001600160a01b0316145b806115f457506115f4818561150e565b826001600160a01b031661188b82610e74565b6001600160a01b0316146118f35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610830565b6001600160a01b0382166119555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610830565b611960838383611be8565b61196b600082611721565b6001600160a01b03831660009081526003602052604081208054600192906119949084906127ba565b90915550506001600160a01b03821660009081526003602052604081208054600192906119c290849061276f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a80848484611878565b611a8c84848484611ca0565b61133f5760405162461bcd60e51b8152600401610830906125c4565b6060600b8054610738906127fd565b606081611adb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b055780611aef81612838565b9150611afe9050600a83612787565b9150611adf565b60008167ffffffffffffffff811115611b2057611b206128bf565b6040519080825280601f01601f191660200182016040528015611b4a576020820181803683370190505b5090505b84156115f457611b5f6001836127ba565b9150611b6c600a86612853565b611b7790603061276f565b60f81b818381518110611b8c57611b8c6128a9565b60200101906001600160f81b031916908160001a905350611bae600a86612787565b9450611b4e565b611bbf8383611dad565b611bcc6000848484611ca0565b6109f45760405162461bcd60e51b8152600401610830906125c4565b6001600160a01b038316611c4357611c3e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c66565b816001600160a01b0316836001600160a01b031614611c6657611c668382611efb565b6001600160a01b038216611c7d576109f481611f98565b826001600160a01b0316826001600160a01b0316146109f4576109f48282612047565b60006001600160a01b0384163b15611da257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ce49033908990889088906004016124eb565b602060405180830381600087803b158015611cfe57600080fd5b505af1925050508015611d2e575060408051601f3d908101601f19168201909252611d2b9181019061237c565b60015b611d88573d808015611d5c576040519150601f19603f3d011682016040523d82523d6000602084013e611d61565b606091505b508051611d805760405162461bcd60e51b8152600401610830906125c4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115f4565b506001949350505050565b6001600160a01b038216611e035760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610830565b6000818152600260205260409020546001600160a01b031615611e685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610830565b611e7460008383611be8565b6001600160a01b0382166000908152600360205260408120805460019290611e9d90849061276f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611f0884610eeb565b611f1291906127ba565b600083815260076020526040902054909150808214611f65576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611faa906001906127ba565b60008381526009602052604081205460088054939450909284908110611fd257611fd26128a9565b906000526020600020015490508060088381548110611ff357611ff36128a9565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061202b5761202b612893565b6001900381819060005260206000200160009055905550505050565b600061205283610eeb565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612097906127fd565b90600052602060002090601f0160209004810192826120b957600085556120ff565b82601f106120d257805160ff19168380011785556120ff565b828001600101855582156120ff579182015b828111156120ff5782518255916020019190600101906120e4565b5061210b92915061210f565b5090565b5b8082111561210b5760008155600101612110565b600067ffffffffffffffff8084111561213f5761213f6128bf565b604051601f8501601f19908116603f01168101908282118183101715612167576121676128bf565b8160405280935085815286868601111561218057600080fd5b858560208301376000602087830101525050509392505050565b803580151581146121aa57600080fd5b919050565b6000602082840312156121c157600080fd5b81356114ca816128d5565b6000602082840312156121de57600080fd5b81516114ca816128d5565b600080604083850312156121fc57600080fd5b8235612207816128d5565b91506020830135612217816128d5565b809150509250929050565b60008060006060848603121561223757600080fd5b8335612242816128d5565b92506020840135612252816128d5565b929592945050506040919091013590565b6000806000806080858703121561227957600080fd5b8435612284816128d5565b93506020850135612294816128d5565b925060408501359150606085013567ffffffffffffffff8111156122b757600080fd5b8501601f810187136122c857600080fd5b6122d787823560208401612124565b91505092959194509250565b600080604083850312156122f657600080fd5b8235612301816128d5565b915061230f6020840161219a565b90509250929050565b6000806040838503121561232b57600080fd5b8235612336816128d5565b946020939093013593505050565b60006020828403121561235657600080fd5b6114ca8261219a565b60006020828403121561237157600080fd5b81356114ca816128ea565b60006020828403121561238e57600080fd5b81516114ca816128ea565b6000602082840312156123ab57600080fd5b813567ffffffffffffffff8111156123c257600080fd5b8201601f810184136123d357600080fd5b6115f484823560208401612124565b6000602082840312156123f457600080fd5b5035919050565b600081518084526124138160208601602086016127d1565b601f01601f19169290920160200192915050565b60008451602061243a8285838a016127d1565b85519184019161244d8184848a016127d1565b8554920191600090600181811c908083168061246a57607f831692505b85831081141561248857634e487b7160e01b85526022600452602485fd5b80801561249c57600181146124ad576124da565b60ff198516885283880195506124da565b60008b81526020902060005b858110156124d25781548a8201529084019088016124b9565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061251e908301846123fb565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561256057835183529284019291840191600101612544565b50909695505050505050565b6020815260006114ca60208301846123fb565b60208082526025908201527f4d757374206d696e74206174206c65617374203120746f6b656e2061742061206040820152643a34b6b29760d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526030908201527f4d696e74696e6720776f756c64206578636565642074686520746f74616c206160408201526f363637bbb0b136329039bab838363c9760811b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600c908201526b23b79030bbb0bc903137ba1760a11b604082015260600190565b6020808252603b908201527f54686973206d616e7920746f6b656e732063616e206e6f74206265206d696e7460408201527f656420696e207468652073616d65207472616e73616374696f6e2e0000000000606082015260800190565b6000821982111561278257612782612867565b500190565b6000826127965761279661287d565b500490565b60008160001904831182151516156127b5576127b5612867565b500290565b6000828210156127cc576127cc612867565b500390565b60005b838110156127ec5781810151838201526020016127d4565b8381111561133f5750506000910152565b600181811c9082168061281157607f821691505b6020821081141561283257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561284c5761284c612867565b5060010190565b6000826128625761286261287d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cb157600080fd5b6001600160e01b031981168114610cb157600080fdfea2646970667358221220e11c7c3f5c2cb9f103498fd71cdfe8c841eb431255740128ab340dd1412fa1c464736f6c634300080700334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001443727970746f416761696e7374536f636965747900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034341530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c546f426552657665616c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047697066733a2f2f516d537470646e7345586f45593658484156637a4d5855314a42566442735a51316f5537474477726866794274782f546f426552657665616c65642e6a736f6e00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80636352211e1161012e578063ab69a0b4116100ab578063d5abeb011161006f578063d5abeb0114610668578063da3ef23f1461067e578063e985e9c51461069e578063f2c4ce1e146106be578063f2fde38b146106de57600080fd5b8063ab69a0b4146105c9578063b88d4fde146105df578063c6682862146105ff578063c87b56dd14610614578063cd7c03261461063457600080fd5b806395d89b41116100f257806395d89b411461054c5780639c4c557c14610561578063a0712d6814610581578063a22cb46514610594578063a475b5dd146105b457600080fd5b80636352211e146104b957806370a08231146104d9578063715018a6146104f95780637f00c7a61461050e5780638da5cb5b1461052e57600080fd5b806323b872dd116101bc578063438b630011610180578063438b63001461040d57806344a0d68a1461043a5780634f6ccce71461045a578063518302271461047a57806355f804b31461049957600080fd5b806323b872dd1461038f57806324510043146103af5780632f745c59146103c55780633ccfd60b146103e557806342842e0e146103ed57600080fd5b80631342ff4c116102035780631342ff4c1461030657806313faede61461032657806318160ddd1461034a57806321b51d1b1461035f578063239c70ae1461037957600080fd5b806301ffc9a71461024057806306fdde0314610275578063081812fc14610297578063081c8c44146102cf578063095ea7b3146102e4575b600080fd5b34801561024c57600080fd5b5061026061025b36600461235f565b6106fe565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061028a610729565b60405161026c919061256c565b3480156102a357600080fd5b506102b76102b23660046123e2565b6107bb565b6040516001600160a01b03909116815260200161026c565b3480156102db57600080fd5b5061028a610855565b3480156102f057600080fd5b506103046102ff366004612318565b6108e3565b005b34801561031257600080fd5b506103046103213660046123e2565b6109f9565b34801561033257600080fd5b5061033c600d5481565b60405190815260200161026c565b34801561035657600080fd5b5060085461033c565b34801561036b57600080fd5b506012546102609060ff1681565b34801561038557600080fd5b5061033c600f5481565b34801561039b57600080fd5b506103046103aa366004612222565b610b57565b3480156103bb57600080fd5b5061033c60115481565b3480156103d157600080fd5b5061033c6103e0366004612318565b610b88565b610304610c1e565b3480156103f957600080fd5b50610304610408366004612222565b610cb4565b34801561041957600080fd5b5061042d6104283660046121af565b610ccf565b60405161026c9190612528565b34801561044657600080fd5b506103046104553660046123e2565b610d71565b34801561046657600080fd5b5061033c6104753660046123e2565b610da0565b34801561048657600080fd5b5060125461026090610100900460ff1681565b3480156104a557600080fd5b506103046104b4366004612399565b610e33565b3480156104c557600080fd5b506102b76104d43660046123e2565b610e74565b3480156104e557600080fd5b5061033c6104f43660046121af565b610eeb565b34801561050557600080fd5b50610304610f72565b34801561051a57600080fd5b506103046105293660046123e2565b610fa8565b34801561053a57600080fd5b50600a546001600160a01b03166102b7565b34801561055857600080fd5b5061028a610fd7565b34801561056d57600080fd5b5061030461057c366004612344565b610fe6565b61030461058f3660046123e2565b611023565b3480156105a057600080fd5b506103046105af3660046122e3565b61120d565b3480156105c057600080fd5b506103046112d2565b3480156105d557600080fd5b5061033c60105481565b3480156105eb57600080fd5b506103046105fa366004612263565b61130d565b34801561060b57600080fd5b5061028a611345565b34801561062057600080fd5b5061028a61062f3660046123e2565b611352565b34801561064057600080fd5b506102b77f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c181565b34801561067457600080fd5b5061033c600e5481565b34801561068a57600080fd5b50610304610699366004612399565b6114d1565b3480156106aa57600080fd5b506102606106b93660046121e9565b61150e565b3480156106ca57600080fd5b506103046106d9366004612399565b6115fc565b3480156106ea57600080fd5b506103046106f93660046121af565b611639565b60006001600160e01b0319821663780e9d6360e01b14806107235750610723826116d1565b92915050565b606060008054610738906127fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610764906127fd565b80156107b15780601f10610786576101008083540402835291602001916107b1565b820191906000526020600020905b81548152906001019060200180831161079457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60138054610862906127fd565b80601f016020809104026020016040519081016040528092919081815260200182805461088e906127fd565b80156108db5780601f106108b0576101008083540402835291602001916108db565b820191906000526020600020905b8154815290600101906020018083116108be57829003601f168201915b505050505081565b60006108ee82610e74565b9050806001600160a01b0316836001600160a01b0316141561095c5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610830565b336001600160a01b03821614806109785750610978813361150e565b6109ea5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610830565b6109f48383611721565b505050565b600a546001600160a01b03163314610a235760405162461bcd60e51b815260040161083090612666565b6000610a2e60085490565b905060105482601154610a41919061276f565b1115610a9f5760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178206f776e6572207260448201526632b9b2b93b329760c91b6064820152608401610830565b60008211610abf5760405162461bcd60e51b81526004016108309061257f565b600f54821115610ae15760405162461bcd60e51b815260040161083090612712565b600e54610aee838361276f565b1115610b0c5760405162461bcd60e51b815260040161083090612616565b60015b828111610b3b57610b2933610b24838561276f565b61178f565b80610b3381612838565b915050610b0f565b508160116000828254610b4e919061276f565b90915550505050565b610b6133826117a9565b610b7d5760405162461bcd60e51b81526004016108309061269b565b6109f4838383611878565b6000610b9383610eeb565b8210610bf55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610830565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c485760405162461bcd60e51b815260040161083090612666565b6040516000907324ab30ac424fbc76ffe94e8e9d84c13a899549f49047908381818185875af1925050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b5050905080610cb157600080fd5b50565b6109f48383836040518060200160405280600081525061130d565b60606000610cdc83610eeb565b905060008167ffffffffffffffff811115610cf957610cf96128bf565b604051908082528060200260200182016040528015610d22578160200160208202803683370190505b50905060005b82811015610d6957610d3a8582610b88565b828281518110610d4c57610d4c6128a9565b602090810291909101015280610d6181612838565b915050610d28565b509392505050565b600a546001600160a01b03163314610d9b5760405162461bcd60e51b815260040161083090612666565b600d55565b6000610dab60085490565b8210610e0e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610830565b60088281548110610e2157610e216128a9565b90600052602060002001549050919050565b600a546001600160a01b03163314610e5d5760405162461bcd60e51b815260040161083090612666565b8051610e7090600b90602084019061208b565b5050565b6000818152600260205260408120546001600160a01b0316806107235760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610830565b60006001600160a01b038216610f565760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610830565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610f9c5760405162461bcd60e51b815260040161083090612666565b610fa66000611a23565b565b600a546001600160a01b03163314610fd25760405162461bcd60e51b815260040161083090612666565b600f55565b606060018054610738906127fd565b600a546001600160a01b031633146110105760405162461bcd60e51b815260040161083090612666565b6012805460ff1916911515919091179055565b600061102e60085490565b905032331461104f5760405162461bcd60e51b8152600401610830906126ec565b3073399104c5d8e98e62349716eeed1ae521d602bd4a146110825760405162461bcd60e51b8152600401610830906126ec565b333b156110a15760405162461bcd60e51b8152600401610830906126ec565b60125460ff16156110f45760405162461bcd60e51b815260206004820152601960248201527f5468652073616c6520686173206e6f7420737461727465642e000000000000006044820152606401610830565b600082116111145760405162461bcd60e51b81526004016108309061257f565b600f548211156111365760405162461bcd60e51b815260040161083090612712565b600e54611143838361276f565b11156111615760405162461bcd60e51b815260040161083090612616565b81600d5461116f919061279b565b34146111e35760405162461bcd60e51b815260206004820152603960248201527f45746820616d6f756e742073656e7420697320696e636f727265637420666f7260448201527f206e756d626572206f662064657369726564206d696e74732e000000000000006064820152608401610830565b60015b8281116109f4576111fb33610b24838561276f565b8061120581612838565b9150506111e6565b6001600160a01b0382163314156112665760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610830565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146112fc5760405162461bcd60e51b815260040161083090612666565b6012805461ff001916610100179055565b61131733836117a9565b6113335760405162461bcd60e51b81526004016108309061269b565b61133f84848484611a75565b50505050565b600c8054610862906127fd565b6000818152600260205260409020546060906001600160a01b03166113d15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610830565b601254610100900460ff1661147257601380546113ed906127fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611419906127fd565b80156114665780601f1061143b57610100808354040283529160200191611466565b820191906000526020600020905b81548152906001019060200180831161144957829003601f168201915b50505050509050919050565b600061147c611aa8565b9050600081511161149c57604051806020016040528060008152506114ca565b806114a684611ab7565b600c6040516020016114ba93929190612427565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146114fb5760405162461bcd60e51b815260040161083090612666565b8051610e7090600c90602084019061208b565b60405163c455279160e01b81526001600160a01b0383811660048301526000917f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c191848116919083169063c45527919060240160206040518083038186803b15801561157957600080fd5b505afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b191906121cc565b6001600160a01b031614156115ca576001915050610723565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b600a546001600160a01b031633146116265760405162461bcd60e51b815260040161083090612666565b8051610e7090601390602084019061208b565b600a546001600160a01b031633146116635760405162461bcd60e51b815260040161083090612666565b6001600160a01b0381166116c85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610830565b610cb181611a23565b60006001600160e01b031982166380ac58cd60e01b148061170257506001600160e01b03198216635b5e139f60e01b145b8061072357506301ffc9a760e01b6001600160e01b0319831614610723565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061175682610e74565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610e70828260405180602001604052806000815250611bb5565b6000818152600260205260408120546001600160a01b03166118225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610830565b600061182d83610e74565b9050806001600160a01b0316846001600160a01b031614806118685750836001600160a01b031661185d846107bb565b6001600160a01b0316145b806115f457506115f4818561150e565b826001600160a01b031661188b82610e74565b6001600160a01b0316146118f35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610830565b6001600160a01b0382166119555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610830565b611960838383611be8565b61196b600082611721565b6001600160a01b03831660009081526003602052604081208054600192906119949084906127ba565b90915550506001600160a01b03821660009081526003602052604081208054600192906119c290849061276f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611a80848484611878565b611a8c84848484611ca0565b61133f5760405162461bcd60e51b8152600401610830906125c4565b6060600b8054610738906127fd565b606081611adb5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b055780611aef81612838565b9150611afe9050600a83612787565b9150611adf565b60008167ffffffffffffffff811115611b2057611b206128bf565b6040519080825280601f01601f191660200182016040528015611b4a576020820181803683370190505b5090505b84156115f457611b5f6001836127ba565b9150611b6c600a86612853565b611b7790603061276f565b60f81b818381518110611b8c57611b8c6128a9565b60200101906001600160f81b031916908160001a905350611bae600a86612787565b9450611b4e565b611bbf8383611dad565b611bcc6000848484611ca0565b6109f45760405162461bcd60e51b8152600401610830906125c4565b6001600160a01b038316611c4357611c3e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c66565b816001600160a01b0316836001600160a01b031614611c6657611c668382611efb565b6001600160a01b038216611c7d576109f481611f98565b826001600160a01b0316826001600160a01b0316146109f4576109f48282612047565b60006001600160a01b0384163b15611da257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ce49033908990889088906004016124eb565b602060405180830381600087803b158015611cfe57600080fd5b505af1925050508015611d2e575060408051601f3d908101601f19168201909252611d2b9181019061237c565b60015b611d88573d808015611d5c576040519150601f19603f3d011682016040523d82523d6000602084013e611d61565b606091505b508051611d805760405162461bcd60e51b8152600401610830906125c4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115f4565b506001949350505050565b6001600160a01b038216611e035760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610830565b6000818152600260205260409020546001600160a01b031615611e685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610830565b611e7460008383611be8565b6001600160a01b0382166000908152600360205260408120805460019290611e9d90849061276f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611f0884610eeb565b611f1291906127ba565b600083815260076020526040902054909150808214611f65576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611faa906001906127ba565b60008381526009602052604081205460088054939450909284908110611fd257611fd26128a9565b906000526020600020015490508060088381548110611ff357611ff36128a9565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061202b5761202b612893565b6001900381819060005260206000200160009055905550505050565b600061205283610eeb565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612097906127fd565b90600052602060002090601f0160209004810192826120b957600085556120ff565b82601f106120d257805160ff19168380011785556120ff565b828001600101855582156120ff579182015b828111156120ff5782518255916020019190600101906120e4565b5061210b92915061210f565b5090565b5b8082111561210b5760008155600101612110565b600067ffffffffffffffff8084111561213f5761213f6128bf565b604051601f8501601f19908116603f01168101908282118183101715612167576121676128bf565b8160405280935085815286868601111561218057600080fd5b858560208301376000602087830101525050509392505050565b803580151581146121aa57600080fd5b919050565b6000602082840312156121c157600080fd5b81356114ca816128d5565b6000602082840312156121de57600080fd5b81516114ca816128d5565b600080604083850312156121fc57600080fd5b8235612207816128d5565b91506020830135612217816128d5565b809150509250929050565b60008060006060848603121561223757600080fd5b8335612242816128d5565b92506020840135612252816128d5565b929592945050506040919091013590565b6000806000806080858703121561227957600080fd5b8435612284816128d5565b93506020850135612294816128d5565b925060408501359150606085013567ffffffffffffffff8111156122b757600080fd5b8501601f810187136122c857600080fd5b6122d787823560208401612124565b91505092959194509250565b600080604083850312156122f657600080fd5b8235612301816128d5565b915061230f6020840161219a565b90509250929050565b6000806040838503121561232b57600080fd5b8235612336816128d5565b946020939093013593505050565b60006020828403121561235657600080fd5b6114ca8261219a565b60006020828403121561237157600080fd5b81356114ca816128ea565b60006020828403121561238e57600080fd5b81516114ca816128ea565b6000602082840312156123ab57600080fd5b813567ffffffffffffffff8111156123c257600080fd5b8201601f810184136123d357600080fd5b6115f484823560208401612124565b6000602082840312156123f457600080fd5b5035919050565b600081518084526124138160208601602086016127d1565b601f01601f19169290920160200192915050565b60008451602061243a8285838a016127d1565b85519184019161244d8184848a016127d1565b8554920191600090600181811c908083168061246a57607f831692505b85831081141561248857634e487b7160e01b85526022600452602485fd5b80801561249c57600181146124ad576124da565b60ff198516885283880195506124da565b60008b81526020902060005b858110156124d25781548a8201529084019088016124b9565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061251e908301846123fb565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561256057835183529284019291840191600101612544565b50909695505050505050565b6020815260006114ca60208301846123fb565b60208082526025908201527f4d757374206d696e74206174206c65617374203120746f6b656e2061742061206040820152643a34b6b29760d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526030908201527f4d696e74696e6720776f756c64206578636565642074686520746f74616c206160408201526f363637bbb0b136329039bab838363c9760811b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600c908201526b23b79030bbb0bc903137ba1760a11b604082015260600190565b6020808252603b908201527f54686973206d616e7920746f6b656e732063616e206e6f74206265206d696e7460408201527f656420696e207468652073616d65207472616e73616374696f6e2e0000000000606082015260800190565b6000821982111561278257612782612867565b500190565b6000826127965761279661287d565b500490565b60008160001904831182151516156127b5576127b5612867565b500290565b6000828210156127cc576127cc612867565b500390565b60005b838110156127ec5781810151838201526020016127d4565b8381111561133f5750506000910152565b600181811c9082168061281157607f821691505b6020821081141561283257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561284c5761284c612867565b5060010190565b6000826128625761286261287d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cb157600080fd5b6001600160e01b031981168114610cb157600080fdfea2646970667358221220e11c7c3f5c2cb9f103498fd71cdfe8c841eb431255740128ab340dd1412fa1c464736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000001443727970746f416761696e7374536f636965747900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034341530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c546f426552657665616c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047697066733a2f2f516d537470646e7345586f45593658484156637a4d5855314a42566442735a51316f5537474477726866794274782f546f426552657665616c65642e6a736f6e00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): CryptoAgainstSociety
Arg [1] : _symbol (string): CAS
Arg [2] : _initBaseURI (string): ToBeRevealed
Arg [3] : _initNotRevealedUri (string): ipfs://QmStpdnsEXoEY6XHAVczMXU1JBVdBsZQ1oU7GDwrhfyBtx/ToBeRevealed.json
Arg [4] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 43727970746f416761696e7374536f6369657479000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4341530000000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [10] : 546f426552657665616c65640000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000047
Arg [12] : 697066733a2f2f516d537470646e7345586f45593658484156637a4d5855314a
Arg [13] : 42566442735a51316f5537474477726866794274782f546f426552657665616c
Arg [14] : 65642e6a736f6e00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43690:5237:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34666:224;;;;;;;;;;-1:-1:-1;34666:224:0;;;;;:::i;:::-;;:::i;:::-;;;8452:14:1;;8445:22;8427:41;;8415:2;8400:18;34666:224:0;;;;;;;;22558:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24117:221::-;;;;;;;;;;-1:-1:-1;24117:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7113:32:1;;;7095:51;;7083:2;7068:18;24117:221:0;6949:203:1;44110:28:0;;;;;;;;;;;;;:::i;23640:411::-;;;;;;;;;;-1:-1:-1;23640:411:0;;;;;:::i;:::-;;:::i;:::-;;48129:629;;;;;;;;;;-1:-1:-1;48129:629:0;;;;;:::i;:::-;;:::i;43847:32::-;;;;;;;;;;;;;;;;;;;18836:25:1;;;18824:2;18809:18;43847:32:0;18690:177:1;35306:113:0;;;;;;;;;;-1:-1:-1;35394:10:0;:17;35306:113;;44039:33;;;;;;;;;;-1:-1:-1;44039:33:0;;;;;;;;43921;;;;;;;;;;;;;;;;25007:339;;;;;;;;;;-1:-1:-1;25007:339:0;;;;;:::i;:::-;;:::i;44004:30::-;;;;;;;;;;;;;;;;34974:256;;;;;;;;;;-1:-1:-1;34974:256:0;;;;;:::i;:::-;;:::i;48765:159::-;;;:::i;25417:185::-;;;;;;;;;;-1:-1:-1;25417:185:0;;;;;:::i;:::-;;:::i;46518:348::-;;;;;;;;;;-1:-1:-1;46518:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47465:82::-;;;;;;;;;;-1:-1:-1;47465:82:0;;;;;:::i;:::-;;:::i;35496:233::-;;;;;;;;;;-1:-1:-1;35496:233:0;;;;;:::i;:::-;;:::i;44077:28::-;;;;;;;;;;-1:-1:-1;44077:28:0;;;;;;;;;;;47805:98;;;;;;;;;;-1:-1:-1;47805:98:0;;;;;:::i;:::-;;:::i;22252:239::-;;;;;;;;;;-1:-1:-1;22252:239:0;;;;;:::i;:::-;;:::i;21982:208::-;;;;;;;;;;-1:-1:-1;21982:208:0;;;;;:::i;:::-;;:::i;42455:94::-;;;;;;;;;;;;;:::i;47553:118::-;;;;;;;;;;-1:-1:-1;47553:118:0;;;;;:::i;:::-;;:::i;41804:87::-;;;;;;;;;;-1:-1:-1;41877:6:0;;-1:-1:-1;;;;;41877:6:0;41804:87;;22727:104;;;;;;;;;;;;;:::i;48037:85::-;;;;;;;;;;-1:-1:-1;48037:85:0;;;;;:::i;:::-;;:::i;45706:806::-;;;;;;:::i;:::-;;:::i;24410:295::-;;;;;;;;;;-1:-1:-1;24410:295:0;;;;;:::i;:::-;;:::i;47391:67::-;;;;;;;;;;;;;:::i;43959:38::-;;;;;;;;;;;;;;;;25673:328;;;;;;;;;;-1:-1:-1;25673:328:0;;;;;:::i;:::-;;:::i;43805:37::-;;;;;;;;;;;;;:::i;46872:497::-;;;;;;;;;;-1:-1:-1;46872:497:0;;;;;:::i;:::-;;:::i;44143:45::-;;;;;;;;;;;;;;;43884:32;;;;;;;;;;;;;;;;47909:122;;;;;;;;;;-1:-1:-1;47909:122:0;;;;;:::i;:::-;;:::i;45315:383::-;;;;;;;;;;-1:-1:-1;45315:383:0;;;;;:::i;:::-;;:::i;47679:120::-;;;;;;;;;;-1:-1:-1;47679:120:0;;;;;:::i;:::-;;:::i;42704:192::-;;;;;;;;;;-1:-1:-1;42704:192:0;;;;;:::i;:::-;;:::i;34666:224::-;34768:4;-1:-1:-1;;;;;;34792:50:0;;-1:-1:-1;;;34792:50:0;;:90;;;34846:36;34870:11;34846:23;:36::i;:::-;34785:97;34666:224;-1:-1:-1;;34666:224:0:o;22558:100::-;22612:13;22645:5;22638:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:100;:::o;24117:221::-;24193:7;27600:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27600:16:0;24213:73;;;;-1:-1:-1;;;24213:73:0;;14456:2:1;24213:73:0;;;14438:21:1;14495:2;14475:18;;;14468:30;14534:34;14514:18;;;14507:62;-1:-1:-1;;;14585:18:1;;;14578:42;14637:19;;24213:73:0;;;;;;;;;-1:-1:-1;24306:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24306:24:0;;24117:221::o;44110:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23640:411::-;23721:13;23737:23;23752:7;23737:14;:23::i;:::-;23721:39;;23785:5;-1:-1:-1;;;;;23779:11:0;:2;-1:-1:-1;;;;;23779:11:0;;;23771:57;;;;-1:-1:-1;;;23771:57:0;;16056:2:1;23771:57:0;;;16038:21:1;16095:2;16075:18;;;16068:30;16134:34;16114:18;;;16107:62;-1:-1:-1;;;16185:18:1;;;16178:31;16226:19;;23771:57:0;15854:397:1;23771:57:0;20167:10;-1:-1:-1;;;;;23863:21:0;;;;:62;;-1:-1:-1;23888:37:0;23905:5;20167:10;45315:383;:::i;23888:37::-;23841:168;;;;-1:-1:-1;;;23841:168:0;;12849:2:1;23841:168:0;;;12831:21:1;12888:2;12868:18;;;12861:30;12927:34;12907:18;;;12900:62;12998:26;12978:18;;;12971:54;13042:19;;23841:168:0;12647:420:1;23841:168:0;24022:21;24031:2;24035:7;24022:8;:21::i;:::-;23710:341;23640:411;;:::o;48129:629::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;48195:14:::1;48212:13;35394:10:::0;:17;;35306:113;48212:13:::1;48195:30;;48273:17;;48258:11;48240:15;;:29;;;;:::i;:::-;:50;;48232:102;;;::::0;-1:-1:-1;;;48232:102:0;;17289:2:1;48232:102:0::1;::::0;::::1;17271:21:1::0;17328:2;17308:18;;;17301:30;17367:34;17347:18;;;17340:62;-1:-1:-1;;;17418:18:1;;;17411:37;17465:19;;48232:102:0::1;17087:403:1::0;48232:102:0::1;48363:1;48349:11;:15;48341:65;;;;-1:-1:-1::0;;;48341:65:0::1;;;;;;;:::i;:::-;48436:13;;48421:11;:28;;48413:100;;;;-1:-1:-1::0;;;48413:100:0::1;;;;;;;:::i;:::-;48552:9;::::0;48528:20:::1;48537:11:::0;48528:6;:20:::1;:::i;:::-;:33;;48520:94;;;;-1:-1:-1::0;;;48520:94:0::1;;;;;;;:::i;:::-;48640:1;48623:93;48648:11;48643:1;:16;48623:93;;48675:33;48685:10;48697;48706:1:::0;48697:6;:10:::1;:::i;:::-;48675:9;:33::i;:::-;48661:3:::0;::::1;::::0;::::1;:::i;:::-;;;;48623:93;;;;48741:11;48722:15;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;48129:629:0:o;25007:339::-;25202:41;20167:10;25235:7;25202:18;:41::i;:::-;25194:103;;;;-1:-1:-1;;;25194:103:0;;;;;;;:::i;:::-;25310:28;25320:4;25326:2;25330:7;25310:9;:28::i;34974:256::-;35071:7;35107:23;35124:5;35107:16;:23::i;:::-;35099:5;:31;35091:87;;;;-1:-1:-1;;;35091:87:0;;9665:2:1;35091:87:0;;;9647:21:1;9704:2;9684:18;;;9677:30;9743:34;9723:18;;;9716:62;-1:-1:-1;;;9794:18:1;;;9787:41;9845:19;;35091:87:0;9463:407:1;35091:87:0;-1:-1:-1;;;;;;35196:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34974:256::o;48765:159::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;48836:59:::1;::::0;48818:12:::1;::::0;44232:42:::1;::::0;48869:21:::1;::::0;48818:12;48836:59;48818:12;48836:59;48869:21;44232:42;48836:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48817:78;;;48910:7;48902:16;;;::::0;::::1;;48810:114;48765:159::o:0;25417:185::-;25555:39;25572:4;25578:2;25582:7;25555:39;;;;;;;;;;;;:16;:39::i;46518:348::-;46593:16;46621:23;46647:17;46657:6;46647:9;:17::i;:::-;46621:43;;46671:25;46713:15;46699:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46699:30:0;;46671:58;;46741:9;46736:103;46756:15;46752:1;:19;46736:103;;;46801:30;46821:6;46829:1;46801:19;:30::i;:::-;46787:8;46796:1;46787:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;46773:3;;;;:::i;:::-;;;;46736:103;;;-1:-1:-1;46852:8:0;46518:348;-1:-1:-1;;;46518:348:0:o;47465:82::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47526:4:::1;:15:::0;47465:82::o;35496:233::-;35571:7;35607:30;35394:10;:17;;35306:113;35607:30;35599:5;:38;35591:95;;;;-1:-1:-1;;;35591:95:0;;16876:2:1;35591:95:0;;;16858:21:1;16915:2;16895:18;;;16888:30;16954:34;16934:18;;;16927:62;-1:-1:-1;;;17005:18:1;;;16998:42;17057:19;;35591:95:0;16674:408:1;35591:95:0;35704:10;35715:5;35704:17;;;;;;;;:::i;:::-;;;;;;;;;35697:24;;35496:233;;;:::o;47805:98::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47876:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;47805:98:::0;:::o;22252:239::-;22324:7;22360:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22360:16:0;22395:19;22387:73;;;;-1:-1:-1;;;22387:73:0;;13685:2:1;22387:73:0;;;13667:21:1;13724:2;13704:18;;;13697:30;13763:34;13743:18;;;13736:62;-1:-1:-1;;;13814:18:1;;;13807:39;13863:19;;22387:73:0;13483:405:1;21982:208:0;22054:7;-1:-1:-1;;;;;22082:19:0;;22074:74;;;;-1:-1:-1;;;22074:74:0;;13274:2:1;22074:74:0;;;13256:21:1;13313:2;13293:18;;;13286:30;13352:34;13332:18;;;13325:62;-1:-1:-1;;;13403:18:1;;;13396:40;13453:19;;22074:74:0;13072:406:1;22074:74:0;-1:-1:-1;;;;;;22166:16:0;;;;;:9;:16;;;;;;;21982:208::o;42455:94::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;42520:21:::1;42538:1;42520:9;:21::i;:::-;42455:94::o:0;47553:118::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47632:13:::1;:33:::0;47553:118::o;22727:104::-;22783:13;22816:7;22809:14;;;;;:::i;48037:85::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;48093:14:::1;:23:::0;;-1:-1:-1;;48093:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48037:85::o;45706:806::-;45763:14;45780:13;35394:10;:17;;35306:113;45780:13;45763:30;-1:-1:-1;45808:9:0;45821:10;45808:23;45800:48;;;;-1:-1:-1;;;45800:48:0;;;;;;;:::i;:::-;44940:4;44949:42;44931:60;45855:43;;;;-1:-1:-1;;;45855:43:0;;;;;;;:::i;:::-;45929:10;45122:17;45158:8;45905:52;;;;-1:-1:-1;;;45905:52:0;;;;;;;:::i;:::-;45973:14;;;;45972:15;45964:53;;;;-1:-1:-1;;;45964:53:0;;8905:2:1;45964:53:0;;;8887:21:1;8944:2;8924:18;;;8917:30;8983:27;8963:18;;;8956:55;9028:18;;45964:53:0;8703:349:1;45964:53:0;46046:1;46032:11;:15;46024:65;;;;-1:-1:-1;;;46024:65:0;;;;;;;:::i;:::-;46119:13;;46104:11;:28;;46096:100;;;;-1:-1:-1;;;46096:100:0;;;;;;;:::i;:::-;46235:9;;46211:20;46220:11;46211:6;:20;:::i;:::-;:33;;46203:94;;;;-1:-1:-1;;;46203:94:0;;;;;;;:::i;:::-;46332:11;46325:4;;:18;;;;:::i;:::-;46312:9;:31;46304:101;;;;-1:-1:-1;;;46304:101:0;;18038:2:1;46304:101:0;;;18020:21:1;18077:2;18057:18;;;18050:30;18116:34;18096:18;;;18089:62;18187:27;18167:18;;;18160:55;18232:19;;46304:101:0;17836:421:1;46304:101:0;46431:1;46414:93;46439:11;46434:1;:16;46414:93;;46466:33;46476:10;46488;46497:1;46488:6;:10;:::i;46466:33::-;46452:3;;;;:::i;:::-;;;;46414:93;;24410:295;-1:-1:-1;;;;;24513:24:0;;20167:10;24513:24;;24505:62;;;;-1:-1:-1;;;24505:62:0;;12082:2:1;24505:62:0;;;12064:21:1;12121:2;12101:18;;;12094:30;12160:27;12140:18;;;12133:55;12205:18;;24505:62:0;11880:349:1;24505:62:0;20167:10;24580:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24580:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24580:53:0;;;;;;;;;;24649:48;;8427:41:1;;;24580:42:0;;20167:10;24649:48;;8400:18:1;24649:48:0;;;;;;;24410:295;;:::o;47391:67::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47437:8:::1;:15:::0;;-1:-1:-1;;47437:15:0::1;;;::::0;;47391:67::o;25673:328::-;25848:41;20167:10;25881:7;25848:18;:41::i;:::-;25840:103;;;;-1:-1:-1;;;25840:103:0;;;;;;;:::i;:::-;25954:39;25968:4;25974:2;25978:7;25987:5;25954:13;:39::i;:::-;25673:328;;;;:::o;43805:37::-;;;;;;;:::i;46872:497::-;27576:4;27600:16;;;:7;:16;;;;;;46970:13;;-1:-1:-1;;;;;27600:16:0;46995:97;;;;-1:-1:-1;;;46995:97:0;;15640:2:1;46995:97:0;;;15622:21:1;15679:2;15659:18;;;15652:30;15718:34;15698:18;;;15691:62;-1:-1:-1;;;15769:18:1;;;15762:45;15824:19;;46995:97:0;15438:411:1;46995:97:0;47108:8;;;;;;;47105:62;;47145:14;47138:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46872:497;;;:::o;47105:62::-;47175:28;47206:10;:8;:10::i;:::-;47175:41;;47261:1;47236:14;47230:28;:32;:133;;;;;;;;;;;;;;;;;47298:14;47314:18;:7;:16;:18::i;:::-;47334:13;47281:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47230:133;47223:140;46872:497;-1:-1:-1;;;46872:497:0:o;47909:122::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47992:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;45315:383::-:0;45562:28;;-1:-1:-1;;;45562:28:0;;-1:-1:-1;;;;;7113:32:1;;;45562:28:0;;;7095:51:1;45404:4:0;;45465:20;;45562:40;;;;:21;;;;;;7068:18:1;;45562:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45562:40:0;;45558:80;;;45624:4;45617:11;;;;;45558:80;-1:-1:-1;;;;;24897:25:0;;;24873:4;24897:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;45653:39;45646:46;45315:383;-1:-1:-1;;;;45315:383:0:o;47679:120::-;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;47761:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;42704:192::-:0;41877:6;;-1:-1:-1;;;;;41877:6:0;20167:10;42024:23;42016:68;;;;-1:-1:-1;;;42016:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42793:22:0;::::1;42785:73;;;::::0;-1:-1:-1;;;42785:73:0;;10496:2:1;42785:73:0::1;::::0;::::1;10478:21:1::0;10535:2;10515:18;;;10508:30;10574:34;10554:18;;;10547:62;-1:-1:-1;;;10625:18:1;;;10618:36;10671:19;;42785:73:0::1;10294:402:1::0;42785:73:0::1;42869:19;42879:8;42869:9;:19::i;21613:305::-:0;21715:4;-1:-1:-1;;;;;;21752:40:0;;-1:-1:-1;;;21752:40:0;;:105;;-1:-1:-1;;;;;;;21809:48:0;;-1:-1:-1;;;21809:48:0;21752:105;:158;;;-1:-1:-1;;;;;;;;;;7553:40:0;;;21874:36;7444:157;31493:174;31568:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31568:29:0;-1:-1:-1;;;;;31568:29:0;;;;;;;;:24;;31622:23;31568:24;31622:14;:23::i;:::-;-1:-1:-1;;;;;31613:46:0;;;;;;;;;;;31493:174;;:::o;28495:110::-;28571:26;28581:2;28585:7;28571:26;;;;;;;;;;;;:9;:26::i;27805:348::-;27898:4;27600:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27600:16:0;27915:73;;;;-1:-1:-1;;;27915:73:0;;12436:2:1;27915:73:0;;;12418:21:1;12475:2;12455:18;;;12448:30;12514:34;12494:18;;;12487:62;-1:-1:-1;;;12565:18:1;;;12558:42;12617:19;;27915:73:0;12234:408:1;27915:73:0;27999:13;28015:23;28030:7;28015:14;:23::i;:::-;27999:39;;28068:5;-1:-1:-1;;;;;28057:16:0;:7;-1:-1:-1;;;;;28057:16:0;;:51;;;;28101:7;-1:-1:-1;;;;;28077:31:0;:20;28089:7;28077:11;:20::i;:::-;-1:-1:-1;;;;;28077:31:0;;28057:51;:87;;;;28112:32;28129:5;28136:7;28112:16;:32::i;30797:578::-;30956:4;-1:-1:-1;;;;;30929:31:0;:23;30944:7;30929:14;:23::i;:::-;-1:-1:-1;;;;;30929:31:0;;30921:85;;;;-1:-1:-1;;;30921:85:0;;15230:2:1;30921:85:0;;;15212:21:1;15269:2;15249:18;;;15242:30;15308:34;15288:18;;;15281:62;-1:-1:-1;;;15359:18:1;;;15352:39;15408:19;;30921:85:0;15028:405:1;30921:85:0;-1:-1:-1;;;;;31025:16:0;;31017:65;;;;-1:-1:-1;;;31017:65:0;;11677:2:1;31017:65:0;;;11659:21:1;11716:2;11696:18;;;11689:30;11755:34;11735:18;;;11728:62;-1:-1:-1;;;11806:18:1;;;11799:34;11850:19;;31017:65:0;11475:400:1;31017:65:0;31095:39;31116:4;31122:2;31126:7;31095:20;:39::i;:::-;31199:29;31216:1;31220:7;31199:8;:29::i;:::-;-1:-1:-1;;;;;31241:15:0;;;;;;:9;:15;;;;;:20;;31260:1;;31241:15;:20;;31260:1;;31241:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31272:13:0;;;;;;:9;:13;;;;;:18;;31289:1;;31272:13;:18;;31289:1;;31272:18;:::i;:::-;;;;-1:-1:-1;;31301:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31301:21:0;-1:-1:-1;;;;;31301:21:0;;;;;;;;;31340:27;;31301:16;;31340:27;;;;;;;30797:578;;;:::o;42904:173::-;42979:6;;;-1:-1:-1;;;;;42996:17:0;;;-1:-1:-1;;;;;;42996:17:0;;;;;;;43029:40;;42979:6;;;42996:17;42979:6;;43029:40;;42960:16;;43029:40;42949:128;42904:173;:::o;26883:315::-;27040:28;27050:4;27056:2;27060:7;27040:9;:28::i;:::-;27087:48;27110:4;27116:2;27120:7;27129:5;27087:22;:48::i;:::-;27079:111;;;;-1:-1:-1;;;27079:111:0;;;;;;;:::i;44638:102::-;44698:13;44727:7;44720:14;;;;;:::i;7919:723::-;7975:13;8196:10;8192:53;;-1:-1:-1;;8223:10:0;;;;;;;;;;;;-1:-1:-1;;;8223:10:0;;;;;7919:723::o;8192:53::-;8270:5;8255:12;8311:78;8318:9;;8311:78;;8344:8;;;;:::i;:::-;;-1:-1:-1;8367:10:0;;-1:-1:-1;8375:2:0;8367:10;;:::i;:::-;;;8311:78;;;8399:19;8431:6;8421:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8421:17:0;;8399:39;;8449:154;8456:10;;8449:154;;8483:11;8493:1;8483:11;;:::i;:::-;;-1:-1:-1;8552:10:0;8560:2;8552:5;:10;:::i;:::-;8539:24;;:2;:24;:::i;:::-;8526:39;;8509:6;8516;8509:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8509:56:0;;;;;;;;-1:-1:-1;8580:11:0;8589:2;8580:11;;:::i;:::-;;;8449:154;;28832:321;28962:18;28968:2;28972:7;28962:5;:18::i;:::-;29013:54;29044:1;29048:2;29052:7;29061:5;29013:22;:54::i;:::-;28991:154;;;;-1:-1:-1;;;28991:154:0;;;;;;;:::i;36342:589::-;-1:-1:-1;;;;;36548:18:0;;36544:187;;36583:40;36615:7;37758:10;:17;;37731:24;;;;:15;:24;;;;;:44;;;37786:24;;;;;;;;;;;;37654:164;36583:40;36544:187;;;36653:2;-1:-1:-1;;;;;36645:10:0;:4;-1:-1:-1;;;;;36645:10:0;;36641:90;;36672:47;36705:4;36711:7;36672:32;:47::i;:::-;-1:-1:-1;;;;;36745:16:0;;36741:183;;36778:45;36815:7;36778:36;:45::i;36741:183::-;36851:4;-1:-1:-1;;;;;36845:10:0;:2;-1:-1:-1;;;;;36845:10:0;;36841:83;;36872:40;36900:2;36904:7;36872:27;:40::i;32232:799::-;32387:4;-1:-1:-1;;;;;32408:13:0;;45122:17;45158:8;32404:620;;32444:72;;-1:-1:-1;;;32444:72:0;;-1:-1:-1;;;;;32444:36:0;;;;;:72;;20167:10;;32495:4;;32501:7;;32510:5;;32444:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32444:72:0;;;;;;;;-1:-1:-1;;32444:72:0;;;;;;;;;;;;:::i;:::-;;;32440:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32686:13:0;;32682:272;;32729:60;;-1:-1:-1;;;32729:60:0;;;;;;;:::i;32682:272::-;32904:6;32898:13;32889:6;32885:2;32881:15;32874:38;32440:529;-1:-1:-1;;;;;;32567:51:0;-1:-1:-1;;;32567:51:0;;-1:-1:-1;32560:58:0;;32404:620;-1:-1:-1;33008:4:0;32232:799;;;;;;:::o;29489:382::-;-1:-1:-1;;;;;29569:16:0;;29561:61;;;;-1:-1:-1;;;29561:61:0;;14095:2:1;29561:61:0;;;14077:21:1;;;14114:18;;;14107:30;14173:34;14153:18;;;14146:62;14225:18;;29561:61:0;13893:356:1;29561:61:0;27576:4;27600:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27600:16:0;:30;29633:58;;;;-1:-1:-1;;;29633:58:0;;10903:2:1;29633:58:0;;;10885:21:1;10942:2;10922:18;;;10915:30;10981;10961:18;;;10954:58;11029:18;;29633:58:0;10701:352:1;29633:58:0;29704:45;29733:1;29737:2;29741:7;29704:20;:45::i;:::-;-1:-1:-1;;;;;29762:13:0;;;;;;:9;:13;;;;;:18;;29779:1;;29762:13;:18;;29779:1;;29762:18;:::i;:::-;;;;-1:-1:-1;;29791:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29791:21:0;-1:-1:-1;;;;;29791:21:0;;;;;;;;29830:33;;29791:16;;;29830:33;;29791:16;;29830:33;29489:382;;:::o;38445:988::-;38711:22;38761:1;38736:22;38753:4;38736:16;:22::i;:::-;:26;;;;:::i;:::-;38773:18;38794:26;;;:17;:26;;;;;;38711:51;;-1:-1:-1;38927:28:0;;;38923:328;;-1:-1:-1;;;;;38994:18:0;;38972:19;38994:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39045:30;;;;;;:44;;;39162:30;;:17;:30;;;;;:43;;;38923:328;-1:-1:-1;39347:26:0;;;;:17;:26;;;;;;;;39340:33;;;-1:-1:-1;;;;;39391:18:0;;;;;:12;:18;;;;;:34;;;;;;;39384:41;38445:988::o;39728:1079::-;40006:10;:17;39981:22;;40006:21;;40026:1;;40006:21;:::i;:::-;40038:18;40059:24;;;:15;:24;;;;;;40432:10;:26;;39981:46;;-1:-1:-1;40059:24:0;;39981:46;;40432:26;;;;;;:::i;:::-;;;;;;;;;40410:48;;40496:11;40471:10;40482;40471:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40576:28;;;:15;:28;;;;;;;:41;;;40748:24;;;;;40741:31;40783:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39799:1008;;;39728:1079;:::o;37232:221::-;37317:14;37334:20;37351:2;37334:16;:20::i;:::-;-1:-1:-1;;;;;37365:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37410:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37232:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;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:72;;;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:45;;;532:1;529;522:12;491:45;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;;;;14:631;;;;;:::o;650:160::-;715:20;;771:13;;764:21;754:32;;744:60;;800:1;797;790:12;744:60;650:160;;;:::o;815:247::-;874:6;927:2;915:9;906:7;902:23;898:32;895:52;;;943:1;940;933:12;895:52;982:9;969:23;1001:31;1026:5;1001:31;:::i;1067:251::-;1137:6;1190:2;1178:9;1169:7;1165:23;1161:32;1158:52;;;1206:1;1203;1196:12;1158:52;1238:9;1232:16;1257:31;1282:5;1257:31;:::i;1323:388::-;1391:6;1399;1452:2;1440:9;1431:7;1427:23;1423:32;1420:52;;;1468:1;1465;1458:12;1420:52;1507:9;1494:23;1526:31;1551:5;1526:31;:::i;:::-;1576:5;-1:-1:-1;1633:2:1;1618:18;;1605:32;1646:33;1605:32;1646:33;:::i;:::-;1698:7;1688:17;;;1323:388;;;;;:::o;1716:456::-;1793:6;1801;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:52;;;1878:1;1875;1868:12;1830:52;1917:9;1904:23;1936:31;1961:5;1936:31;:::i;:::-;1986:5;-1:-1:-1;2043:2:1;2028:18;;2015:32;2056:33;2015:32;2056:33;:::i;:::-;1716:456;;2108:7;;-1:-1:-1;;;2162:2:1;2147:18;;;;2134:32;;1716:456::o;2177:794::-;2272:6;2280;2288;2296;2349:3;2337:9;2328:7;2324:23;2320:33;2317:53;;;2366:1;2363;2356:12;2317:53;2405:9;2392:23;2424:31;2449:5;2424:31;:::i;:::-;2474:5;-1:-1:-1;2531:2:1;2516:18;;2503:32;2544:33;2503:32;2544:33;:::i;:::-;2596:7;-1:-1:-1;2650:2:1;2635:18;;2622:32;;-1:-1:-1;2705:2:1;2690:18;;2677:32;2732:18;2721:30;;2718:50;;;2764:1;2761;2754:12;2718:50;2787:22;;2840:4;2832:13;;2828:27;-1:-1:-1;2818:55:1;;2869:1;2866;2859:12;2818:55;2892:73;2957:7;2952:2;2939:16;2934:2;2930;2926:11;2892:73;:::i;:::-;2882:83;;;2177:794;;;;;;;:::o;2976:315::-;3041:6;3049;3102:2;3090:9;3081:7;3077:23;3073:32;3070:52;;;3118:1;3115;3108:12;3070:52;3157:9;3144:23;3176:31;3201:5;3176:31;:::i;:::-;3226:5;-1:-1:-1;3250:35:1;3281:2;3266:18;;3250:35;:::i;:::-;3240:45;;2976:315;;;;;:::o;3296:::-;3364:6;3372;3425:2;3413:9;3404:7;3400:23;3396:32;3393:52;;;3441:1;3438;3431:12;3393:52;3480:9;3467:23;3499:31;3524:5;3499:31;:::i;:::-;3549:5;3601:2;3586:18;;;;3573:32;;-1:-1:-1;;;3296:315:1:o;3616:180::-;3672:6;3725:2;3713:9;3704:7;3700:23;3696:32;3693:52;;;3741:1;3738;3731:12;3693:52;3764:26;3780:9;3764:26;:::i;3801:245::-;3859:6;3912:2;3900:9;3891:7;3887:23;3883:32;3880:52;;;3928:1;3925;3918:12;3880:52;3967:9;3954:23;3986:30;4010:5;3986:30;:::i;4051:249::-;4120:6;4173:2;4161:9;4152:7;4148:23;4144:32;4141:52;;;4189:1;4186;4179:12;4141:52;4221:9;4215:16;4240:30;4264:5;4240:30;:::i;4305:450::-;4374:6;4427:2;4415:9;4406:7;4402:23;4398:32;4395:52;;;4443:1;4440;4433:12;4395:52;4483:9;4470:23;4516:18;4508:6;4505:30;4502:50;;;4548:1;4545;4538:12;4502:50;4571:22;;4624:4;4616:13;;4612:27;-1:-1:-1;4602:55:1;;4653:1;4650;4643:12;4602:55;4676:73;4741:7;4736:2;4723:16;4718:2;4714;4710:11;4676:73;:::i;4760:180::-;4819:6;4872:2;4860:9;4851:7;4847:23;4843:32;4840:52;;;4888:1;4885;4878:12;4840:52;-1:-1:-1;4911:23:1;;4760:180;-1:-1:-1;4760:180:1:o;4945:257::-;4986:3;5024:5;5018:12;5051:6;5046:3;5039:19;5067:63;5123:6;5116:4;5111:3;5107:14;5100:4;5093:5;5089:16;5067:63;:::i;:::-;5184:2;5163:15;-1:-1:-1;;5159:29:1;5150:39;;;;5191:4;5146:50;;4945:257;-1:-1:-1;;4945:257:1:o;5207:1527::-;5431:3;5469:6;5463:13;5495:4;5508:51;5552:6;5547:3;5542:2;5534:6;5530:15;5508:51;:::i;:::-;5622:13;;5581:16;;;;5644:55;5622:13;5581:16;5666:15;;;5644:55;:::i;:::-;5788:13;;5721:20;;;5761:1;;5848;5870:18;;;;5923;;;;5950:93;;6028:4;6018:8;6014:19;6002:31;;5950:93;6091:2;6081:8;6078:16;6058:18;6055:40;6052:167;;;-1:-1:-1;;;6118:33:1;;6174:4;6171:1;6164:15;6204:4;6125:3;6192:17;6052:167;6235:18;6262:110;;;;6386:1;6381:328;;;;6228:481;;6262:110;-1:-1:-1;;6297:24:1;;6283:39;;6342:20;;;;-1:-1:-1;6262:110:1;;6381:328;18945:1;18938:14;;;18982:4;18969:18;;6476:1;6490:169;6504:8;6501:1;6498:15;6490:169;;;6586:14;;6571:13;;;6564:37;6629:16;;;;6521:10;;6490:169;;;6494:3;;6690:8;6683:5;6679:20;6672:27;;6228:481;-1:-1:-1;6725:3:1;;5207:1527;-1:-1:-1;;;;;;;;;;;5207:1527:1:o;7157:488::-;-1:-1:-1;;;;;7426:15:1;;;7408:34;;7478:15;;7473:2;7458:18;;7451:43;7525:2;7510:18;;7503:34;;;7573:3;7568:2;7553:18;;7546:31;;;7351:4;;7594:45;;7619:19;;7611:6;7594:45;:::i;:::-;7586:53;7157:488;-1:-1:-1;;;;;;7157:488:1:o;7650:632::-;7821:2;7873:21;;;7943:13;;7846:18;;;7965:22;;;7792:4;;7821:2;8044:15;;;;8018:2;8003:18;;;7792:4;8087:169;8101:6;8098:1;8095:13;8087:169;;;8162:13;;8150:26;;8231:15;;;;8196:12;;;;8123:1;8116:9;8087:169;;;-1:-1:-1;8273:3:1;;7650:632;-1:-1:-1;;;;;;7650:632:1:o;8479:219::-;8628:2;8617:9;8610:21;8591:4;8648:44;8688:2;8677:9;8673:18;8665:6;8648:44;:::i;9057:401::-;9259:2;9241:21;;;9298:2;9278:18;;;9271:30;9337:34;9332:2;9317:18;;9310:62;-1:-1:-1;;;9403:2:1;9388:18;;9381:35;9448:3;9433:19;;9057:401::o;9875:414::-;10077:2;10059:21;;;10116:2;10096:18;;;10089:30;10155:34;10150:2;10135:18;;10128:62;-1:-1:-1;;;10221:2:1;10206:18;;10199:48;10279:3;10264:19;;9875:414::o;11058:412::-;11260:2;11242:21;;;11299:2;11279:18;;;11272:30;11338:34;11333:2;11318:18;;11311:62;-1:-1:-1;;;11404:2:1;11389:18;;11382:46;11460:3;11445:19;;11058:412::o;14667:356::-;14869:2;14851:21;;;14888:18;;;14881:30;14947:34;14942:2;14927:18;;14920:62;15014:2;14999:18;;14667:356::o;16256:413::-;16458:2;16440:21;;;16497:2;16477:18;;;16470:30;16536:34;16531:2;16516:18;;16509:62;-1:-1:-1;;;16602:2:1;16587:18;;16580:47;16659:3;16644:19;;16256:413::o;17495:336::-;17697:2;17679:21;;;17736:2;17716:18;;;17709:30;-1:-1:-1;;;17770:2:1;17755:18;;17748:42;17822:2;17807:18;;17495:336::o;18262:423::-;18464:2;18446:21;;;18503:2;18483:18;;;18476:30;18542:34;18537:2;18522:18;;18515:62;18613:29;18608:2;18593:18;;18586:57;18675:3;18660:19;;18262:423::o;18998:128::-;19038:3;19069:1;19065:6;19062:1;19059:13;19056:39;;;19075:18;;:::i;:::-;-1:-1:-1;19111:9:1;;18998:128::o;19131:120::-;19171:1;19197;19187:35;;19202:18;;:::i;:::-;-1:-1:-1;19236:9:1;;19131:120::o;19256:168::-;19296:7;19362:1;19358;19354:6;19350:14;19347:1;19344:21;19339:1;19332:9;19325:17;19321:45;19318:71;;;19369:18;;:::i;:::-;-1:-1:-1;19409:9:1;;19256:168::o;19429:125::-;19469:4;19497:1;19494;19491:8;19488:34;;;19502:18;;:::i;:::-;-1:-1:-1;19539:9:1;;19429:125::o;19559:258::-;19631:1;19641:113;19655:6;19652:1;19649:13;19641:113;;;19731:11;;;19725:18;19712:11;;;19705:39;19677:2;19670:10;19641:113;;;19772:6;19769:1;19766:13;19763:48;;;-1:-1:-1;;19807:1:1;19789:16;;19782:27;19559:258::o;19822:380::-;19901:1;19897:12;;;;19944;;;19965:61;;20019:4;20011:6;20007:17;19997:27;;19965:61;20072:2;20064:6;20061:14;20041:18;20038:38;20035:161;;;20118:10;20113:3;20109:20;20106:1;20099:31;20153:4;20150:1;20143:15;20181:4;20178:1;20171:15;20035:161;;19822:380;;;:::o;20207:135::-;20246:3;-1:-1:-1;;20267:17:1;;20264:43;;;20287:18;;:::i;:::-;-1:-1:-1;20334:1:1;20323:13;;20207:135::o;20347:112::-;20379:1;20405;20395:35;;20410:18;;:::i;:::-;-1:-1:-1;20444:9:1;;20347:112::o;20464:127::-;20525:10;20520:3;20516:20;20513:1;20506:31;20556:4;20553:1;20546:15;20580:4;20577:1;20570:15;20596:127;20657:10;20652:3;20648:20;20645:1;20638:31;20688:4;20685:1;20678:15;20712:4;20709:1;20702:15;20728:127;20789:10;20784:3;20780:20;20777:1;20770:31;20820:4;20817:1;20810:15;20844:4;20841:1;20834:15;20860:127;20921:10;20916:3;20912:20;20909:1;20902:31;20952:4;20949:1;20942:15;20976:4;20973:1;20966:15;20992:127;21053:10;21048:3;21044:20;21041:1;21034:31;21084:4;21081:1;21074:15;21108:4;21105:1;21098:15;21124:131;-1:-1:-1;;;;;21199:31:1;;21189:42;;21179:70;;21245:1;21242;21235:12;21260:131;-1:-1:-1;;;;;;21334:32:1;;21324:43;;21314:71;;21381:1;21378;21371:12

Swarm Source

ipfs://e11c7c3f5c2cb9f103498fd71cdfe8c841eb431255740128ab340dd1412fa1c4
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.