ETH Price: $3,296.04 (-9.38%)

Token

Wicked Witch World (WW)
 

Overview

Max Total Supply

278 WW

Holders

93

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 WW
0x2546cf80eb6fb4ee0f22e1a9803Fb268FF7B591D
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:
WickedWitchWorld

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File @openzeppelin/contracts/security/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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


// File @openzeppelin/contracts/utils/introspection/[email protected]

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/[email protected]


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/[email protected]

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/token/ERC721/extensions/[email protected]

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/utils/[email protected]

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/utils/[email protected]


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/utils/[email protected]

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/introspection/[email protected]

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/token/ERC721/[email protected]


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/[email protected]

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/token/ERC721/extensions/[email protected]


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/[email protected]

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);
    }
}


// File @openzeppelin/contracts/utils/math/[email protected]

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}



pragma solidity ^0.8.0;


contract WickedWitchWorld is ERC721Enumerable, Ownable, ReentrancyGuard {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;

  uint256 public constant price = 0.0666 ether;
  uint256 public constant maxSupply = 10000;

  uint256 public maxMintAmount = 25;
  uint256 public nftPerAddressLimit = 11; // for whitlist
  uint256 public goldMintAmount = 25; //for goldWhitlist

  bool public paused = true;
  bool public revealed = false;
  bool public onlyWhitelisted = true;

  address payable public witcher = payable(0x9eecd6d36f016f66E27a8d823F3D8D8720eda2f4);
  address payable commissions = payable(0x30fd1B812FA699E8e18305E9139A6638b572ebFc);

  address[] public whitelistedAddresses;
  address[] public goldWhitelistedAddresses;

  mapping(address => uint256) public addressMintedBalance;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri,
    uint preMintedTokensCount
  ) ERC721(_name, _symbol) {
      setBaseURI(_initBaseURI);
      setNotRevealedURI(_initNotRevealedUri);
      _preMint(preMintedTokensCount);
    }

  // internal functions
  function _baseURI() internal view virtual override returns(string memory) {
    return baseURI;
  }
  
  function _preMint(uint256 _mintAmount) internal {
    uint256 supply = totalSupply();
    for (uint256 i = 1; i <= _mintAmount; i++) {
        addressMintedBalance[msg.sender]++;
        _safeMint(msg.sender, supply + i);
    }
  }

  // public functions
  function mintWitch(uint256 _mintAmount) public payable nonReentrant {
    require(!paused, "The contract is paused");
    uint256 supply = totalSupply();
    require(_mintAmount > 0, "Need to mint atleast 1 Witch");
    require(_mintAmount <= maxMintAmount, "Can only mint 20 per Transaction");
    require(supply + _mintAmount <= maxSupply, "Max supply reached!");

    if (msg.sender != owner()) {
      if(onlyWhitelisted == true) {
        require(isWhitelisted(msg.sender) || isGoldWhitelisted(msg.sender), "user not whitelisted");
        uint256 ownerMintedCount = addressMintedBalance[msg.sender];
        if(isGoldWhitelisted(msg.sender)) {
          require(ownerMintedCount + _mintAmount <= goldMintAmount, "max Witches per address for presale");
        } else {
          require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max Witches per address for presale");
        }

      }

      require(msg.value >= price * _mintAmount, "insufficient funds");
    }

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

    (bool success, ) = payable(commissions).call{value: (price * _mintAmount) * 5 / 100}("");
    require(success);

    (bool transferToWitcher, ) = payable(witcher).call{value: (price * _mintAmount) * 95 / 100}("");
    require(
      transferToWitcher,
      "Address: unable to send value, recipient may have reverted"
    );

    uint256 excessAmount = msg.value - (price * _mintAmount);
    if (excessAmount > 0) {
      (bool returnExcessStatus, ) = _msgSender().call{value: excessAmount}("");
      require(returnExcessStatus, "Failed to return excess.");
    }
  }

  // whitelist check
  function isWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < whitelistedAddresses.length; i++) {
      if (whitelistedAddresses[i] == _user) {
        return true;
      }
    }    
    return false;
  }

  function isGoldWhitelisted(address _user) public view returns (bool) {
    for (uint i = 0; i < goldWhitelistedAddresses.length; i++) {
      if (goldWhitelistedAddresses[i] == _user) {
        return true;
      }
    }
    return false;
  }

  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 functions

  function reveal() public onlyOwner() {
    revealed = true;
  }

  function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner() {
    maxMintAmount = _newMaxMintAmount;
  }

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

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

  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }

  function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }

  function goldWhitelistUsers(address[] calldata _users) public onlyOwner {
    delete goldWhitelistedAddresses;
    goldWhitelistedAddresses = _users;
  }

  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).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":"uint256","name":"preMintedTokensCount","type":"uint256"}],"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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"goldWhitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"goldWhitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isGoldWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","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":"mintWitch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"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":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","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":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"witcher","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600d919062000899565b506019600f819055600b6010556011556012805462010000600160ff199092169190911762ffff001916176301000000600160b81b031916769eecd6d36f016f66e27a8d823f3d8d8720eda2f4000000179055601380547330fd1b812fa699e8e18305e9139a6638b572ebfc6001600160a01b0319909116179055348015620000b057600080fd5b5060405162003de838038062003de8833981016040819052620000d391620009f9565b845185908590620000ec90600090602085019062000899565b5080516200010290600190602084019062000899565b5050506200011f620001196200015060201b60201c565b62000154565b6001600b556200012f83620001a6565b6200013a826200020e565b620001458162000269565b505050505062000d39565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001b062000150565b6001600160a01b0316620001c3620002d6565b6001600160a01b031614620001f55760405162461bcd60e51b8152600401620001ec9062000c15565b60405180910390fd5b80516200020a90600c90602084019062000899565b5050565b6200021862000150565b6001600160a01b03166200022b620002d6565b6001600160a01b031614620002545760405162461bcd60e51b8152600401620001ec9062000c15565b80516200020a90600e90602084019062000899565b600062000275620002e5565b905060015b828111620002d1573360009081526016602052604081208054916200029f8362000cef565b90915550620002bc905033620002b6838562000c4a565b620002eb565b80620002c88162000cef565b9150506200027a565b505050565b600a546001600160a01b031690565b60085490565b6200020a8282604051806020016040528060008152506200030d60201b60201c565b62000319838362000347565b62000328600084848462000432565b620002d15760405162461bcd60e51b8152600401620001ec9062000b0d565b6001600160a01b038216620003705760405162461bcd60e51b8152600401620001ec9062000be0565b6200037b816200056b565b156200039b5760405162461bcd60e51b8152600401620001ec9062000b5f565b620003a96000838362000588565b6001600160a01b0382166000908152600360205260408120805460019290620003d490849062000c4a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000453846001600160a01b03166200062c60201b620019031760201c565b156200055f576001600160a01b03841663150b7a026200047262000150565b8786866040518563ffffffff1660e01b815260040162000496949392919062000ab7565b602060405180830381600087803b158015620004b157600080fd5b505af1925050508015620004e4575060408051601f3d908101601f19168201909252620004e191810190620009c8565b60015b62000544573d80801562000515576040519150601f19603f3d011682016040523d82523d6000602084013e6200051a565b606091505b5080516200053c5760405162461bcd60e51b8152600401620001ec9062000b0d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000563565b5060015b949350505050565b6000908152600260205260409020546001600160a01b0316151590565b620005a0838383620002d160201b62000abb1760201c565b6001600160a01b038316620005c057620005ba8162000632565b620005e6565b816001600160a01b0316836001600160a01b031614620005e657620005e6838262000676565b6001600160a01b0382166200060657620006008162000723565b620002d1565b826001600160a01b0316826001600160a01b031614620002d157620002d1828262000801565b3b151590565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6000600162000690846200085260201b62000f401760201c565b6200069c919062000c65565b600083815260076020526040902054909150808214620006f0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090620007379060019062000c65565b600083815260096020526040812054600880549394509092849081106200076e57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600883815481106200079e57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480620007e557634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000819836200085260201b62000f401760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b0382166200087d5760405162461bcd60e51b8152600401620001ec9062000b96565b506001600160a01b031660009081526003602052604090205490565b828054620008a79062000cb2565b90600052602060002090601f016020900481019282620008cb576000855562000916565b82601f10620008e657805160ff191683800117855562000916565b8280016001018555821562000916579182015b8281111562000916578251825591602001919060010190620008f9565b506200092492915062000928565b5090565b5b8082111562000924576000815560010162000929565b600082601f83011262000950578081fd5b81516001600160401b03808211156200096d576200096d62000d23565b604051601f8301601f19168101602001828111828210171562000994576200099462000d23565b604052828152848301602001861015620009ac578384fd5b620009bf83602083016020880162000c7f565b95945050505050565b600060208284031215620009da578081fd5b81516001600160e01b031981168114620009f2578182fd5b9392505050565b600080600080600060a0868803121562000a11578081fd5b85516001600160401b038082111562000a28578283fd5b62000a3689838a016200093f565b9650602088015191508082111562000a4c578283fd5b62000a5a89838a016200093f565b9550604088015191508082111562000a70578283fd5b62000a7e89838a016200093f565b9450606088015191508082111562000a94578283fd5b5062000aa3888289016200093f565b925050608086015190509295509295909350565b600060018060a01b03808716835280861660208401525083604083015260806060830152825180608084015262000af68160a085016020870162000c7f565b601f01601f19169190910160a00195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111562000c605762000c6062000d0d565b500190565b60008282101562000c7a5762000c7a62000d0d565b500390565b60005b8381101562000c9c57818101518382015260200162000c82565b8381111562000cac576000848401525b50505050565b60028104600182168062000cc757607f821691505b6020821081141562000ce957634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000d065762000d0662000d0d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61309f8062000d496000396000f3fe6080604052600436106102935760003560e01c80636c0360eb1161015a578063ba7d2c76116100c1578063da3ef23f1161007a578063da3ef23f14610746578063e47b6c5b14610766578063e985e9c514610779578063edec5f2714610799578063f2c4ce1e146107b9578063f2fde38b146107d957610293565b8063ba7d2c76146106a7578063c61f67c7146106bc578063c6682862146106dc578063c87b56dd146106f1578063d00eac1c14610711578063d5abeb011461073157610293565b8063a035b1fe11610113578063a035b1fe14610608578063a22cb4651461061d578063a475b5dd1461063d578063b4025fcf14610652578063b88d4fde14610667578063ba4e5c491461068757610293565b80636c0360eb1461057f57806370a0823114610594578063715018a6146105b45780638da5cb5b146105c957806395d89b41146105de5780639c70b512146105f357610293565b80633af32abf116101fe5780634fe935e1116101b75780634fe935e1146104e057806350e27578146104f5578063518302271461051557806355f804b31461052a5780635c975abb1461054a5780636352211e1461055f57610293565b80633af32abf1461042b5780633c9527641461044b5780633ccfd60b1461046b57806342842e0e14610473578063438b6300146104935780634f6ccce7146104c057610293565b8063095ea7b311610250578063095ea7b31461037457806318160ddd1461039457806318cae269146103b6578063239c70ae146103d657806323b872dd146103eb5780632f745c591461040b57610293565b806301ffc9a71461029857806302329a29146102ce57806306fdde03146102f0578063081812fc14610312578063081c8c441461033f578063088a4ed014610354575b600080fd5b3480156102a457600080fd5b506102b86102b336600461259c565b6107f9565b6040516102c591906127b8565b60405180910390f35b3480156102da57600080fd5b506102ee6102e9366004612582565b610826565b005b3480156102fc57600080fd5b50610305610881565b6040516102c591906127c3565b34801561031e57600080fd5b5061033261032d36600461261a565b610913565b6040516102c59190612723565b34801561034b57600080fd5b50610305610956565b34801561036057600080fd5b506102ee61036f36600461261a565b6109e4565b34801561038057600080fd5b506102ee61038f3660046124ea565b610a28565b3480156103a057600080fd5b506103a9610ac0565b6040516102c59190612f04565b3480156103c257600080fd5b506103a96103d13660046123c1565b610ac6565b3480156103e257600080fd5b506103a9610ad8565b3480156103f757600080fd5b506102ee61040636600461240d565b610ade565b34801561041757600080fd5b506103a96104263660046124ea565b610b16565b34801561043757600080fd5b506102b86104463660046123c1565b610b68565b34801561045757600080fd5b506102ee610466366004612582565b610be1565b6102ee610c3c565b34801561047f57600080fd5b506102ee61048e36600461240d565b610ce7565b34801561049f57600080fd5b506104b36104ae3660046123c1565b610d02565b6040516102c59190612774565b3480156104cc57600080fd5b506103a96104db36600461261a565b610dc0565b3480156104ec57600080fd5b506103a9610e1b565b34801561050157600080fd5b506102b86105103660046123c1565b610e21565b34801561052157600080fd5b506102b8610e91565b34801561053657600080fd5b506102ee6105453660046125d4565b610e9f565b34801561055657600080fd5b506102b8610ef5565b34801561056b57600080fd5b5061033261057a36600461261a565b610efe565b34801561058b57600080fd5b50610305610f33565b3480156105a057600080fd5b506103a96105af3660046123c1565b610f40565b3480156105c057600080fd5b506102ee610f84565b3480156105d557600080fd5b50610332610fcf565b3480156105ea57600080fd5b50610305610fde565b3480156105ff57600080fd5b506102b8610fed565b34801561061457600080fd5b506103a9610ffc565b34801561062957600080fd5b506102ee6106383660046124c1565b611007565b34801561064957600080fd5b506102ee6110d5565b34801561065e57600080fd5b50610332611125565b34801561067357600080fd5b506102ee610682366004612448565b61113b565b34801561069357600080fd5b506103326106a236600461261a565b61117a565b3480156106b357600080fd5b506103a96111a4565b3480156106c857600080fd5b506103326106d736600461261a565b6111aa565b3480156106e857600080fd5b506103056111ba565b3480156106fd57600080fd5b5061030561070c36600461261a565b6111c7565b34801561071d57600080fd5b506102ee61072c366004612513565b6112ee565b34801561073d57600080fd5b506103a9611345565b34801561075257600080fd5b506102ee6107613660046125d4565b61134b565b6102ee61077436600461261a565b61139d565b34801561078557600080fd5b506102b86107943660046123db565b6117be565b3480156107a557600080fd5b506102ee6107b4366004612513565b6117ec565b3480156107c557600080fd5b506102ee6107d43660046125d4565b611843565b3480156107e557600080fd5b506102ee6107f43660046123c1565b611895565b60006001600160e01b0319821663780e9d6360e01b148061081e575061081e82611909565b90505b919050565b61082e611949565b6001600160a01b031661083f610fcf565b6001600160a01b03161461086e5760405162461bcd60e51b815260040161086590612c66565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461089090612fa7565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90612fa7565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e8261194d565b61093a5760405162461bcd60e51b815260040161086590612c1a565b506000908152600460205260409020546001600160a01b031690565b600e805461096390612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461098f90612fa7565b80156109dc5780601f106109b1576101008083540402835291602001916109dc565b820191906000526020600020905b8154815290600101906020018083116109bf57829003601f168201915b505050505081565b6109ec611949565b6001600160a01b03166109fd610fcf565b6001600160a01b031614610a235760405162461bcd60e51b815260040161086590612c66565b600f55565b6000610a3382610efe565b9050806001600160a01b0316836001600160a01b03161415610a675760405162461bcd60e51b815260040161086590612d33565b806001600160a01b0316610a79611949565b6001600160a01b03161480610a955750610a9581610794611949565b610ab15760405162461bcd60e51b815260040161086590612af5565b610abb838361196a565b505050565b60085490565b60166020526000908152604090205481565b600f5481565b610aef610ae9611949565b826119d8565b610b0b5760405162461bcd60e51b815260040161086590612dd5565b610abb838383611a5d565b6000610b2183610f40565b8210610b3f5760405162461bcd60e51b81526004016108659061280d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b601454811015610bd857826001600160a01b031660148281548110610ba157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610bc6576001915050610821565b80610bd081612fe2565b915050610b6c565b50600092915050565b610be9611949565b6001600160a01b0316610bfa610fcf565b6001600160a01b031614610c205760405162461bcd60e51b815260040161086590612c66565b60128054911515620100000262ff000019909216919091179055565b610c44611949565b6001600160a01b0316610c55610fcf565b6001600160a01b031614610c7b5760405162461bcd60e51b815260040161086590612c66565b6000336001600160a01b031647604051610c9490612720565b60006040518083038185875af1925050503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5050905080610ce457600080fd5b50565b610abb8383836040518060200160405280600081525061113b565b60606000610d0f83610f40565b905060008167ffffffffffffffff811115610d3a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d63578160200160208202803683370190505b50905060005b82811015610db857610d7b8582610b16565b828281518110610d9b57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610db081612fe2565b915050610d69565b509392505050565b6000610dca610ac0565b8210610de85760405162461bcd60e51b815260040161086590612e53565b60088281548110610e0957634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60115481565b6000805b601554811015610bd857826001600160a01b031660158281548110610e5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e7f576001915050610821565b80610e8981612fe2565b915050610e25565b601254610100900460ff1681565b610ea7611949565b6001600160a01b0316610eb8610fcf565b6001600160a01b031614610ede5760405162461bcd60e51b815260040161086590612c66565b8051610ef190600c906020840190612220565b5050565b60125460ff1681565b6000818152600260205260408120546001600160a01b03168061081e5760405162461bcd60e51b815260040161086590612b9c565b600c805461096390612fa7565b60006001600160a01b038216610f685760405162461bcd60e51b815260040161086590612b52565b506001600160a01b031660009081526003602052604090205490565b610f8c611949565b6001600160a01b0316610f9d610fcf565b6001600160a01b031614610fc35760405162461bcd60e51b815260040161086590612c66565b610fcd6000611b8a565b565b600a546001600160a01b031690565b60606001805461089090612fa7565b60125462010000900460ff1681565b66ec9c58de0a800081565b61100f611949565b6001600160a01b0316826001600160a01b031614156110405760405162461bcd60e51b8152600401610865906129de565b806005600061104d611949565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611091611949565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110c991906127b8565b60405180910390a35050565b6110dd611949565b6001600160a01b03166110ee610fcf565b6001600160a01b0316146111145760405162461bcd60e51b815260040161086590612c66565b6012805461ff001916610100179055565b601254630100000090046001600160a01b031681565b61114c611146611949565b836119d8565b6111685760405162461bcd60e51b815260040161086590612dd5565b61117484848484611bdc565b50505050565b6014818154811061118a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60105481565b6015818154811061118a57600080fd5b600d805461096390612fa7565b60606111d28261194d565b6111ee5760405162461bcd60e51b815260040161086590612ce4565b601254610100900460ff1661128f57600e805461120a90612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461123690612fa7565b80156112835780601f1061125857610100808354040283529160200191611283565b820191906000526020600020905b81548152906001019060200180831161126657829003601f168201915b50505050509050610821565b6000611299611c0f565b905060008151116112b957604051806020016040528060008152506112e7565b806112c384611c1e565b600d6040516020016112d79392919061265e565b6040516020818303038152906040525b9392505050565b6112f6611949565b6001600160a01b0316611307610fcf565b6001600160a01b03161461132d5760405162461bcd60e51b815260040161086590612c66565b611339601560006122a4565b610abb601583836122c2565b61271081565b611353611949565b6001600160a01b0316611364610fcf565b6001600160a01b03161461138a5760405162461bcd60e51b815260040161086590612c66565b8051610ef190600d906020840190612220565b6002600b5414156113c05760405162461bcd60e51b815260040161086590612e9f565b6002600b5560125460ff16156113e85760405162461bcd60e51b8152600401610865906128aa565b60006113f2610ac0565b9050600082116114145760405162461bcd60e51b815260040161086590612a15565b600f548211156114365760405162461bcd60e51b815260040161086590612d74565b6127106114438383612f19565b11156114615760405162461bcd60e51b815260040161086590612e26565b611469610fcf565b6001600160a01b0316336001600160a01b0316146115775760125462010000900460ff16151560011415611547576114a033610b68565b806114af57506114af33610e21565b6114cb5760405162461bcd60e51b815260040161086590612ed6565b33600081815260166020526040902054906114e590610e21565b1561151a576011546114f78483612f19565b11156115155760405162461bcd60e51b815260040161086590612957565b611545565b6010546115278483612f19565b11156115455760405162461bcd60e51b815260040161086590612957565b505b6115588266ec9c58de0a8000612f45565b3410156115775760405162461bcd60e51b815260040161086590612da9565b60015b8281116115c75733600090815260166020526040812080549161159c83612fe2565b909155506115b59050336115b08385612f19565b611d39565b806115bf81612fe2565b91505061157a565b506013546000906001600160a01b031660646115ea8566ec9c58de0a8000612f45565b6115f5906005612f45565b6115ff9190612f31565b60405161160b90612720565b60006040518083038185875af1925050503d8060008114611648576040519150601f19603f3d011682016040523d82523d6000602084013e61164d565b606091505b505090508061165b57600080fd5b601254600090630100000090046001600160a01b031660646116848666ec9c58de0a8000612f45565b61168f90605f612f45565b6116999190612f31565b6040516116a590612720565b60006040518083038185875af1925050503d80600081146116e2576040519150601f19603f3d011682016040523d82523d6000602084013e6116e7565b606091505b50509050806117085760405162461bcd60e51b815260040161086590612a4c565b600061171b8566ec9c58de0a8000612f45565b6117259034612f64565b905080156117b2576000611737611949565b6001600160a01b03168260405161174d90612720565b60006040518083038185875af1925050503d806000811461178a576040519150601f19603f3d011682016040523d82523d6000602084013e61178f565b606091505b50509050806117b05760405162461bcd60e51b8152600401610865906127d6565b505b50506001600b55505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6117f4611949565b6001600160a01b0316611805610fcf565b6001600160a01b03161461182b5760405162461bcd60e51b815260040161086590612c66565b611837601460006122a4565b610abb601483836122c2565b61184b611949565b6001600160a01b031661185c610fcf565b6001600160a01b0316146118825760405162461bcd60e51b815260040161086590612c66565b8051610ef190600e906020840190612220565b61189d611949565b6001600160a01b03166118ae610fcf565b6001600160a01b0316146118d45760405162461bcd60e51b815260040161086590612c66565b6001600160a01b0381166118fa5760405162461bcd60e51b8152600401610865906128da565b610ce481611b8a565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061193a57506001600160e01b03198216635b5e139f60e01b145b8061081e575061081e82611d53565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061199f82610efe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119e38261194d565b6119ff5760405162461bcd60e51b815260040161086590612aa9565b6000611a0a83610efe565b9050806001600160a01b0316846001600160a01b03161480611a455750836001600160a01b0316611a3a84610913565b6001600160a01b0316145b80611a555750611a5581856117be565b949350505050565b826001600160a01b0316611a7082610efe565b6001600160a01b031614611a965760405162461bcd60e51b815260040161086590612c9b565b6001600160a01b038216611abc5760405162461bcd60e51b81526004016108659061299a565b611ac7838383611d6c565b611ad260008261196a565b6001600160a01b0383166000908152600360205260408120805460019290611afb908490612f64565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b29908490612f19565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611be7848484611a5d565b611bf384848484611df5565b6111745760405162461bcd60e51b815260040161086590612858565b6060600c805461089090612fa7565b606081611c4357506040805180820190915260018152600360fc1b6020820152610821565b8160005b8115611c6d5780611c5781612fe2565b9150611c669050600a83612f31565b9150611c47565b60008167ffffffffffffffff811115611c9657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cc0576020820181803683370190505b5090505b8415611a5557611cd5600183612f64565b9150611ce2600a86612ffd565b611ced906030612f19565b60f81b818381518110611d1057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d32600a86612f31565b9450611cc4565b610ef1828260405180602001604052806000815250611f10565b6001600160e01b031981166301ffc9a760e01b14919050565b611d77838383610abb565b6001600160a01b038316611d9357611d8e81611f43565b611db6565b816001600160a01b0316836001600160a01b031614611db657611db68382611f87565b6001600160a01b038216611dd257611dcd81612024565b610abb565b826001600160a01b0316826001600160a01b031614610abb57610abb82826120fd565b6000611e09846001600160a01b0316611903565b15611f0557836001600160a01b031663150b7a02611e25611949565b8786866040518563ffffffff1660e01b8152600401611e479493929190612737565b602060405180830381600087803b158015611e6157600080fd5b505af1925050508015611e91575060408051601f3d908101601f19168201909252611e8e918101906125b8565b60015b611eeb573d808015611ebf576040519150601f19603f3d011682016040523d82523d6000602084013e611ec4565b606091505b508051611ee35760405162461bcd60e51b815260040161086590612858565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a55565b506001949350505050565b611f1a8383612141565b611f276000848484611df5565b610abb5760405162461bcd60e51b815260040161086590612858565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b60006001611f9484610f40565b611f9e9190612f64565b600083815260076020526040902054909150808214611ff1576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061203690600190612f64565b6000838152600960205260408120546008805493945090928490811061206c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061209b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120e157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061210883610f40565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166121675760405162461bcd60e51b815260040161086590612be5565b6121708161194d565b1561218d5760405162461bcd60e51b815260040161086590612920565b61219960008383611d6c565b6001600160a01b03821660009081526003602052604081208054600192906121c2908490612f19565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461222c90612fa7565b90600052602060002090601f01602090048101928261224e5760008555612294565b82601f1061226757805160ff1916838001178555612294565b82800160010185558215612294579182015b82811115612294578251825591602001919060010190612279565b506122a0929150612315565b5090565b5080546000825590600052602060002090810190610ce49190612315565b828054828255906000526020600020908101928215612294579160200282015b828111156122945781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906122e2565b5b808211156122a05760008155600101612316565b600067ffffffffffffffff808411156123455761234561303d565b604051601f8501601f1916810160200182811182821017156123695761236961303d565b60405284815291508183850186101561238157600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461082157600080fd5b8035801515811461082157600080fd5b6000602082840312156123d2578081fd5b6112e78261239a565b600080604083850312156123ed578081fd5b6123f68361239a565b91506124046020840161239a565b90509250929050565b600080600060608486031215612421578081fd5b61242a8461239a565b92506124386020850161239a565b9150604084013590509250925092565b6000806000806080858703121561245d578081fd5b6124668561239a565b93506124746020860161239a565b925060408501359150606085013567ffffffffffffffff811115612496578182fd5b8501601f810187136124a6578182fd5b6124b58782356020840161232a565b91505092959194509250565b600080604083850312156124d3578182fd5b6124dc8361239a565b9150612404602084016123b1565b600080604083850312156124fc578182fd5b6125058361239a565b946020939093013593505050565b60008060208385031215612525578182fd5b823567ffffffffffffffff8082111561253c578384fd5b818501915085601f83011261254f578384fd5b81358181111561255d578485fd5b8660208083028501011115612570578485fd5b60209290920196919550909350505050565b600060208284031215612593578081fd5b6112e7826123b1565b6000602082840312156125ad578081fd5b81356112e781613053565b6000602082840312156125c9578081fd5b81516112e781613053565b6000602082840312156125e5578081fd5b813567ffffffffffffffff8111156125fb578182fd5b8201601f8101841361260b578182fd5b611a558482356020840161232a565b60006020828403121561262b578081fd5b5035919050565b6000815180845261264a816020860160208601612f7b565b601f01601f19169290920160200192915050565b6000845160206126718285838a01612f7b565b8551918401916126848184848a01612f7b565b85549201918390600281046001808316806126a057607f831692505b8583108114156126be57634e487b7160e01b88526022600452602488fd5b8080156126d257600181146126e35761270f565b60ff1985168852838801955061270f565b6126ec8b612f0d565b895b858110156127075781548a8201529084019088016126ee565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061276a90830184612632565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156127ac57835183529284019291840191600101612790565b50909695505050505050565b901515815260200190565b6000602082526112e76020830184612632565b60208082526018908201527f4661696c656420746f2072657475726e206578636573732e0000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260169082015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526023908201527f6d6178205769746368657320706572206164647265737320666f722070726573604082015262616c6560e81b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601c908201527f4e65656420746f206d696e742061746c65617374203120576974636800000000604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252818101527f43616e206f6e6c79206d696e7420323020706572205472616e73616374696f6e604082015260600190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601390820152724d617820737570706c7920726561636865642160681b604082015260600190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b90815260200190565b60009081526020902090565b60008219821115612f2c57612f2c613011565b500190565b600082612f4057612f40613027565b500490565b6000816000190483118215151615612f5f57612f5f613011565b500290565b600082821015612f7657612f76613011565b500390565b60005b83811015612f96578181015183820152602001612f7e565b838111156111745750506000910152565b600281046001821680612fbb57607f821691505b60208210811415612fdc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ff657612ff6613011565b5060010190565b60008261300c5761300c613027565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ce457600080fdfea2646970667358221220734a7cbb14180b4b073d997dcc22158db2e3997f3995b4a4eedaae8946f2009564736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000125769636b656420576974636820576f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000257570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503764786865633341566f476a72586e32326a55747571575969624e7a625462373961345876734b567a65432f000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d503764786865633341566f476a72586e32326a55747571575969624e7a625462373961345876734b567a65432f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102935760003560e01c80636c0360eb1161015a578063ba7d2c76116100c1578063da3ef23f1161007a578063da3ef23f14610746578063e47b6c5b14610766578063e985e9c514610779578063edec5f2714610799578063f2c4ce1e146107b9578063f2fde38b146107d957610293565b8063ba7d2c76146106a7578063c61f67c7146106bc578063c6682862146106dc578063c87b56dd146106f1578063d00eac1c14610711578063d5abeb011461073157610293565b8063a035b1fe11610113578063a035b1fe14610608578063a22cb4651461061d578063a475b5dd1461063d578063b4025fcf14610652578063b88d4fde14610667578063ba4e5c491461068757610293565b80636c0360eb1461057f57806370a0823114610594578063715018a6146105b45780638da5cb5b146105c957806395d89b41146105de5780639c70b512146105f357610293565b80633af32abf116101fe5780634fe935e1116101b75780634fe935e1146104e057806350e27578146104f5578063518302271461051557806355f804b31461052a5780635c975abb1461054a5780636352211e1461055f57610293565b80633af32abf1461042b5780633c9527641461044b5780633ccfd60b1461046b57806342842e0e14610473578063438b6300146104935780634f6ccce7146104c057610293565b8063095ea7b311610250578063095ea7b31461037457806318160ddd1461039457806318cae269146103b6578063239c70ae146103d657806323b872dd146103eb5780632f745c591461040b57610293565b806301ffc9a71461029857806302329a29146102ce57806306fdde03146102f0578063081812fc14610312578063081c8c441461033f578063088a4ed014610354575b600080fd5b3480156102a457600080fd5b506102b86102b336600461259c565b6107f9565b6040516102c591906127b8565b60405180910390f35b3480156102da57600080fd5b506102ee6102e9366004612582565b610826565b005b3480156102fc57600080fd5b50610305610881565b6040516102c591906127c3565b34801561031e57600080fd5b5061033261032d36600461261a565b610913565b6040516102c59190612723565b34801561034b57600080fd5b50610305610956565b34801561036057600080fd5b506102ee61036f36600461261a565b6109e4565b34801561038057600080fd5b506102ee61038f3660046124ea565b610a28565b3480156103a057600080fd5b506103a9610ac0565b6040516102c59190612f04565b3480156103c257600080fd5b506103a96103d13660046123c1565b610ac6565b3480156103e257600080fd5b506103a9610ad8565b3480156103f757600080fd5b506102ee61040636600461240d565b610ade565b34801561041757600080fd5b506103a96104263660046124ea565b610b16565b34801561043757600080fd5b506102b86104463660046123c1565b610b68565b34801561045757600080fd5b506102ee610466366004612582565b610be1565b6102ee610c3c565b34801561047f57600080fd5b506102ee61048e36600461240d565b610ce7565b34801561049f57600080fd5b506104b36104ae3660046123c1565b610d02565b6040516102c59190612774565b3480156104cc57600080fd5b506103a96104db36600461261a565b610dc0565b3480156104ec57600080fd5b506103a9610e1b565b34801561050157600080fd5b506102b86105103660046123c1565b610e21565b34801561052157600080fd5b506102b8610e91565b34801561053657600080fd5b506102ee6105453660046125d4565b610e9f565b34801561055657600080fd5b506102b8610ef5565b34801561056b57600080fd5b5061033261057a36600461261a565b610efe565b34801561058b57600080fd5b50610305610f33565b3480156105a057600080fd5b506103a96105af3660046123c1565b610f40565b3480156105c057600080fd5b506102ee610f84565b3480156105d557600080fd5b50610332610fcf565b3480156105ea57600080fd5b50610305610fde565b3480156105ff57600080fd5b506102b8610fed565b34801561061457600080fd5b506103a9610ffc565b34801561062957600080fd5b506102ee6106383660046124c1565b611007565b34801561064957600080fd5b506102ee6110d5565b34801561065e57600080fd5b50610332611125565b34801561067357600080fd5b506102ee610682366004612448565b61113b565b34801561069357600080fd5b506103326106a236600461261a565b61117a565b3480156106b357600080fd5b506103a96111a4565b3480156106c857600080fd5b506103326106d736600461261a565b6111aa565b3480156106e857600080fd5b506103056111ba565b3480156106fd57600080fd5b5061030561070c36600461261a565b6111c7565b34801561071d57600080fd5b506102ee61072c366004612513565b6112ee565b34801561073d57600080fd5b506103a9611345565b34801561075257600080fd5b506102ee6107613660046125d4565b61134b565b6102ee61077436600461261a565b61139d565b34801561078557600080fd5b506102b86107943660046123db565b6117be565b3480156107a557600080fd5b506102ee6107b4366004612513565b6117ec565b3480156107c557600080fd5b506102ee6107d43660046125d4565b611843565b3480156107e557600080fd5b506102ee6107f43660046123c1565b611895565b60006001600160e01b0319821663780e9d6360e01b148061081e575061081e82611909565b90505b919050565b61082e611949565b6001600160a01b031661083f610fcf565b6001600160a01b03161461086e5760405162461bcd60e51b815260040161086590612c66565b60405180910390fd5b6012805460ff1916911515919091179055565b60606000805461089090612fa7565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90612fa7565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b5050505050905090565b600061091e8261194d565b61093a5760405162461bcd60e51b815260040161086590612c1a565b506000908152600460205260409020546001600160a01b031690565b600e805461096390612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461098f90612fa7565b80156109dc5780601f106109b1576101008083540402835291602001916109dc565b820191906000526020600020905b8154815290600101906020018083116109bf57829003601f168201915b505050505081565b6109ec611949565b6001600160a01b03166109fd610fcf565b6001600160a01b031614610a235760405162461bcd60e51b815260040161086590612c66565b600f55565b6000610a3382610efe565b9050806001600160a01b0316836001600160a01b03161415610a675760405162461bcd60e51b815260040161086590612d33565b806001600160a01b0316610a79611949565b6001600160a01b03161480610a955750610a9581610794611949565b610ab15760405162461bcd60e51b815260040161086590612af5565b610abb838361196a565b505050565b60085490565b60166020526000908152604090205481565b600f5481565b610aef610ae9611949565b826119d8565b610b0b5760405162461bcd60e51b815260040161086590612dd5565b610abb838383611a5d565b6000610b2183610f40565b8210610b3f5760405162461bcd60e51b81526004016108659061280d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000805b601454811015610bd857826001600160a01b031660148281548110610ba157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610bc6576001915050610821565b80610bd081612fe2565b915050610b6c565b50600092915050565b610be9611949565b6001600160a01b0316610bfa610fcf565b6001600160a01b031614610c205760405162461bcd60e51b815260040161086590612c66565b60128054911515620100000262ff000019909216919091179055565b610c44611949565b6001600160a01b0316610c55610fcf565b6001600160a01b031614610c7b5760405162461bcd60e51b815260040161086590612c66565b6000336001600160a01b031647604051610c9490612720565b60006040518083038185875af1925050503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5050905080610ce457600080fd5b50565b610abb8383836040518060200160405280600081525061113b565b60606000610d0f83610f40565b905060008167ffffffffffffffff811115610d3a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d63578160200160208202803683370190505b50905060005b82811015610db857610d7b8582610b16565b828281518110610d9b57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610db081612fe2565b915050610d69565b509392505050565b6000610dca610ac0565b8210610de85760405162461bcd60e51b815260040161086590612e53565b60088281548110610e0957634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b60115481565b6000805b601554811015610bd857826001600160a01b031660158281548110610e5a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610e7f576001915050610821565b80610e8981612fe2565b915050610e25565b601254610100900460ff1681565b610ea7611949565b6001600160a01b0316610eb8610fcf565b6001600160a01b031614610ede5760405162461bcd60e51b815260040161086590612c66565b8051610ef190600c906020840190612220565b5050565b60125460ff1681565b6000818152600260205260408120546001600160a01b03168061081e5760405162461bcd60e51b815260040161086590612b9c565b600c805461096390612fa7565b60006001600160a01b038216610f685760405162461bcd60e51b815260040161086590612b52565b506001600160a01b031660009081526003602052604090205490565b610f8c611949565b6001600160a01b0316610f9d610fcf565b6001600160a01b031614610fc35760405162461bcd60e51b815260040161086590612c66565b610fcd6000611b8a565b565b600a546001600160a01b031690565b60606001805461089090612fa7565b60125462010000900460ff1681565b66ec9c58de0a800081565b61100f611949565b6001600160a01b0316826001600160a01b031614156110405760405162461bcd60e51b8152600401610865906129de565b806005600061104d611949565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611091611949565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110c991906127b8565b60405180910390a35050565b6110dd611949565b6001600160a01b03166110ee610fcf565b6001600160a01b0316146111145760405162461bcd60e51b815260040161086590612c66565b6012805461ff001916610100179055565b601254630100000090046001600160a01b031681565b61114c611146611949565b836119d8565b6111685760405162461bcd60e51b815260040161086590612dd5565b61117484848484611bdc565b50505050565b6014818154811061118a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60105481565b6015818154811061118a57600080fd5b600d805461096390612fa7565b60606111d28261194d565b6111ee5760405162461bcd60e51b815260040161086590612ce4565b601254610100900460ff1661128f57600e805461120a90612fa7565b80601f016020809104026020016040519081016040528092919081815260200182805461123690612fa7565b80156112835780601f1061125857610100808354040283529160200191611283565b820191906000526020600020905b81548152906001019060200180831161126657829003601f168201915b50505050509050610821565b6000611299611c0f565b905060008151116112b957604051806020016040528060008152506112e7565b806112c384611c1e565b600d6040516020016112d79392919061265e565b6040516020818303038152906040525b9392505050565b6112f6611949565b6001600160a01b0316611307610fcf565b6001600160a01b03161461132d5760405162461bcd60e51b815260040161086590612c66565b611339601560006122a4565b610abb601583836122c2565b61271081565b611353611949565b6001600160a01b0316611364610fcf565b6001600160a01b03161461138a5760405162461bcd60e51b815260040161086590612c66565b8051610ef190600d906020840190612220565b6002600b5414156113c05760405162461bcd60e51b815260040161086590612e9f565b6002600b5560125460ff16156113e85760405162461bcd60e51b8152600401610865906128aa565b60006113f2610ac0565b9050600082116114145760405162461bcd60e51b815260040161086590612a15565b600f548211156114365760405162461bcd60e51b815260040161086590612d74565b6127106114438383612f19565b11156114615760405162461bcd60e51b815260040161086590612e26565b611469610fcf565b6001600160a01b0316336001600160a01b0316146115775760125462010000900460ff16151560011415611547576114a033610b68565b806114af57506114af33610e21565b6114cb5760405162461bcd60e51b815260040161086590612ed6565b33600081815260166020526040902054906114e590610e21565b1561151a576011546114f78483612f19565b11156115155760405162461bcd60e51b815260040161086590612957565b611545565b6010546115278483612f19565b11156115455760405162461bcd60e51b815260040161086590612957565b505b6115588266ec9c58de0a8000612f45565b3410156115775760405162461bcd60e51b815260040161086590612da9565b60015b8281116115c75733600090815260166020526040812080549161159c83612fe2565b909155506115b59050336115b08385612f19565b611d39565b806115bf81612fe2565b91505061157a565b506013546000906001600160a01b031660646115ea8566ec9c58de0a8000612f45565b6115f5906005612f45565b6115ff9190612f31565b60405161160b90612720565b60006040518083038185875af1925050503d8060008114611648576040519150601f19603f3d011682016040523d82523d6000602084013e61164d565b606091505b505090508061165b57600080fd5b601254600090630100000090046001600160a01b031660646116848666ec9c58de0a8000612f45565b61168f90605f612f45565b6116999190612f31565b6040516116a590612720565b60006040518083038185875af1925050503d80600081146116e2576040519150601f19603f3d011682016040523d82523d6000602084013e6116e7565b606091505b50509050806117085760405162461bcd60e51b815260040161086590612a4c565b600061171b8566ec9c58de0a8000612f45565b6117259034612f64565b905080156117b2576000611737611949565b6001600160a01b03168260405161174d90612720565b60006040518083038185875af1925050503d806000811461178a576040519150601f19603f3d011682016040523d82523d6000602084013e61178f565b606091505b50509050806117b05760405162461bcd60e51b8152600401610865906127d6565b505b50506001600b55505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6117f4611949565b6001600160a01b0316611805610fcf565b6001600160a01b03161461182b5760405162461bcd60e51b815260040161086590612c66565b611837601460006122a4565b610abb601483836122c2565b61184b611949565b6001600160a01b031661185c610fcf565b6001600160a01b0316146118825760405162461bcd60e51b815260040161086590612c66565b8051610ef190600e906020840190612220565b61189d611949565b6001600160a01b03166118ae610fcf565b6001600160a01b0316146118d45760405162461bcd60e51b815260040161086590612c66565b6001600160a01b0381166118fa5760405162461bcd60e51b8152600401610865906128da565b610ce481611b8a565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061193a57506001600160e01b03198216635b5e139f60e01b145b8061081e575061081e82611d53565b3390565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061199f82610efe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119e38261194d565b6119ff5760405162461bcd60e51b815260040161086590612aa9565b6000611a0a83610efe565b9050806001600160a01b0316846001600160a01b03161480611a455750836001600160a01b0316611a3a84610913565b6001600160a01b0316145b80611a555750611a5581856117be565b949350505050565b826001600160a01b0316611a7082610efe565b6001600160a01b031614611a965760405162461bcd60e51b815260040161086590612c9b565b6001600160a01b038216611abc5760405162461bcd60e51b81526004016108659061299a565b611ac7838383611d6c565b611ad260008261196a565b6001600160a01b0383166000908152600360205260408120805460019290611afb908490612f64565b90915550506001600160a01b0382166000908152600360205260408120805460019290611b29908490612f19565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611be7848484611a5d565b611bf384848484611df5565b6111745760405162461bcd60e51b815260040161086590612858565b6060600c805461089090612fa7565b606081611c4357506040805180820190915260018152600360fc1b6020820152610821565b8160005b8115611c6d5780611c5781612fe2565b9150611c669050600a83612f31565b9150611c47565b60008167ffffffffffffffff811115611c9657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cc0576020820181803683370190505b5090505b8415611a5557611cd5600183612f64565b9150611ce2600a86612ffd565b611ced906030612f19565b60f81b818381518110611d1057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d32600a86612f31565b9450611cc4565b610ef1828260405180602001604052806000815250611f10565b6001600160e01b031981166301ffc9a760e01b14919050565b611d77838383610abb565b6001600160a01b038316611d9357611d8e81611f43565b611db6565b816001600160a01b0316836001600160a01b031614611db657611db68382611f87565b6001600160a01b038216611dd257611dcd81612024565b610abb565b826001600160a01b0316826001600160a01b031614610abb57610abb82826120fd565b6000611e09846001600160a01b0316611903565b15611f0557836001600160a01b031663150b7a02611e25611949565b8786866040518563ffffffff1660e01b8152600401611e479493929190612737565b602060405180830381600087803b158015611e6157600080fd5b505af1925050508015611e91575060408051601f3d908101601f19168201909252611e8e918101906125b8565b60015b611eeb573d808015611ebf576040519150601f19603f3d011682016040523d82523d6000602084013e611ec4565b606091505b508051611ee35760405162461bcd60e51b815260040161086590612858565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a55565b506001949350505050565b611f1a8383612141565b611f276000848484611df5565b610abb5760405162461bcd60e51b815260040161086590612858565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b60006001611f9484610f40565b611f9e9190612f64565b600083815260076020526040902054909150808214611ff1576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061203690600190612f64565b6000838152600960205260408120546008805493945090928490811061206c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061209b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806120e157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061210883610f40565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166121675760405162461bcd60e51b815260040161086590612be5565b6121708161194d565b1561218d5760405162461bcd60e51b815260040161086590612920565b61219960008383611d6c565b6001600160a01b03821660009081526003602052604081208054600192906121c2908490612f19565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461222c90612fa7565b90600052602060002090601f01602090048101928261224e5760008555612294565b82601f1061226757805160ff1916838001178555612294565b82800160010185558215612294579182015b82811115612294578251825591602001919060010190612279565b506122a0929150612315565b5090565b5080546000825590600052602060002090810190610ce49190612315565b828054828255906000526020600020908101928215612294579160200282015b828111156122945781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906122e2565b5b808211156122a05760008155600101612316565b600067ffffffffffffffff808411156123455761234561303d565b604051601f8501601f1916810160200182811182821017156123695761236961303d565b60405284815291508183850186101561238157600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461082157600080fd5b8035801515811461082157600080fd5b6000602082840312156123d2578081fd5b6112e78261239a565b600080604083850312156123ed578081fd5b6123f68361239a565b91506124046020840161239a565b90509250929050565b600080600060608486031215612421578081fd5b61242a8461239a565b92506124386020850161239a565b9150604084013590509250925092565b6000806000806080858703121561245d578081fd5b6124668561239a565b93506124746020860161239a565b925060408501359150606085013567ffffffffffffffff811115612496578182fd5b8501601f810187136124a6578182fd5b6124b58782356020840161232a565b91505092959194509250565b600080604083850312156124d3578182fd5b6124dc8361239a565b9150612404602084016123b1565b600080604083850312156124fc578182fd5b6125058361239a565b946020939093013593505050565b60008060208385031215612525578182fd5b823567ffffffffffffffff8082111561253c578384fd5b818501915085601f83011261254f578384fd5b81358181111561255d578485fd5b8660208083028501011115612570578485fd5b60209290920196919550909350505050565b600060208284031215612593578081fd5b6112e7826123b1565b6000602082840312156125ad578081fd5b81356112e781613053565b6000602082840312156125c9578081fd5b81516112e781613053565b6000602082840312156125e5578081fd5b813567ffffffffffffffff8111156125fb578182fd5b8201601f8101841361260b578182fd5b611a558482356020840161232a565b60006020828403121561262b578081fd5b5035919050565b6000815180845261264a816020860160208601612f7b565b601f01601f19169290920160200192915050565b6000845160206126718285838a01612f7b565b8551918401916126848184848a01612f7b565b85549201918390600281046001808316806126a057607f831692505b8583108114156126be57634e487b7160e01b88526022600452602488fd5b8080156126d257600181146126e35761270f565b60ff1985168852838801955061270f565b6126ec8b612f0d565b895b858110156127075781548a8201529084019088016126ee565b505083880195505b50939b9a5050505050505050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061276a90830184612632565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156127ac57835183529284019291840191600101612790565b50909695505050505050565b901515815260200190565b6000602082526112e76020830184612632565b60208082526018908201527f4661696c656420746f2072657475726e206578636573732e0000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260169082015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526023908201527f6d6178205769746368657320706572206164647265737320666f722070726573604082015262616c6560e81b606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252601c908201527f4e65656420746f206d696e742061746c65617374203120576974636800000000604082015260600190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252818101527f43616e206f6e6c79206d696e7420323020706572205472616e73616374696f6e604082015260600190565b602080825260129082015271696e73756666696369656e742066756e647360701b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601390820152724d617820737570706c7920726561636865642160681b604082015260600190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b90815260200190565b60009081526020902090565b60008219821115612f2c57612f2c613011565b500190565b600082612f4057612f40613027565b500490565b6000816000190483118215151615612f5f57612f5f613011565b500290565b600082821015612f7657612f76613011565b500390565b60005b83811015612f96578181015183820152602001612f7e565b838111156111745750506000910152565b600281046001821680612fbb57607f821691505b60208210811415612fdc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ff657612ff6613011565b5060010190565b60008261300c5761300c613027565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610ce457600080fdfea2646970667358221220734a7cbb14180b4b073d997dcc22158db2e3997f3995b4a4eedaae8946f2009564736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000125769636b656420576974636820576f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000257570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503764786865633341566f476a72586e32326a55747571575969624e7a625462373961345876734b567a65432f000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d503764786865633341566f476a72586e32326a55747571575969624e7a625462373961345876734b567a65432f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Wicked Witch World
Arg [1] : _symbol (string): WW
Arg [2] : _initBaseURI (string): ipfs://QmP7dxhec3AVoGjrXn22jUtuqWYibNzbTb79a4XvsKVzeC/
Arg [3] : _initNotRevealedUri (string): ipfs://QmP7dxhec3AVoGjrXn22jUtuqWYibNzbTb79a4XvsKVzeC/unrevealed.json
Arg [4] : preMintedTokensCount (uint256): 100

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [6] : 5769636b656420576974636820576f726c640000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 5757000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d503764786865633341566f476a72586e32326a55747571
Arg [11] : 575969624e7a625462373961345876734b567a65432f00000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [13] : 697066733a2f2f516d503764786865633341566f476a72586e32326a55747571
Arg [14] : 575969624e7a625462373961345876734b567a65432f756e72657665616c6564
Arg [15] : 2e6a736f6e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

54284:5917:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37448:224;;;;;;;;;;-1:-1:-1;37448:224:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59548:73;;;;;;;;;;-1:-1:-1;59548:73:0;;;;;:::i;:::-;;:::i;:::-;;24343:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25902:221::-;;;;;;;;;;-1:-1:-1;25902:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;54461:28::-;;;;;;;;;;;;;:::i;59066:118::-;;;;;;;;;;-1:-1:-1;59066:118:0;;;;;:::i;:::-;;:::i;25425:411::-;;;;;;;;;;-1:-1:-1;25425:411:0;;;;;:::i;:::-;;:::i;38088:113::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;55121:55::-;;;;;;;;;;-1:-1:-1;55121:55:0;;;;;:::i;:::-;;:::i;54593:33::-;;;;;;;;;;;;;:::i;26792:339::-;;;;;;;;;;-1:-1:-1;26792:339:0;;;;;:::i;:::-;;:::i;37756:256::-;;;;;;;;;;-1:-1:-1;37756:256:0;;;;;:::i;:::-;;:::i;57681:241::-;;;;;;;;;;-1:-1:-1;57681:241:0;;;;;:::i;:::-;;:::i;59627:95::-;;;;;;;;;;-1:-1:-1;59627:95:0;;;;;:::i;:::-;;:::i;60040:158::-;;;:::i;27202:185::-;;;;;;;;;;-1:-1:-1;27202:185:0;;;;;:::i;:::-;;:::i;58183:329::-;;;;;;;;;;-1:-1:-1;58183:329:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38278:233::-;;;;;;;;;;-1:-1:-1;38278:233:0;;;;;:::i;:::-;;:::i;54690:34::-;;;;;;;;;;;;;:::i;57928:249::-;;;;;;;;;;-1:-1:-1;57928:249:0;;;;;:::i;:::-;;:::i;54780:28::-;;;;;;;;;;;;;:::i;59190:98::-;;;;;;;;;;-1:-1:-1;59190:98:0;;;;;:::i;:::-;;:::i;54750:25::-;;;;;;;;;;;;;:::i;24037:239::-;;;;;;;;;;-1:-1:-1;24037:239:0;;;;;:::i;:::-;;:::i;54393:21::-;;;;;;;;;;;;;:::i;23767:208::-;;;;;;;;;;-1:-1:-1;23767:208:0;;;;;:::i;:::-;;:::i;45247:94::-;;;;;;;;;;;;;:::i;44596:87::-;;;;;;;;;;;;;:::i;24512:104::-;;;;;;;;;;;;;:::i;54813:34::-;;;;;;;;;;;;;:::i;54496:44::-;;;;;;;;;;;;;:::i;26195:295::-;;;;;;;;;;-1:-1:-1;26195:295:0;;;;;:::i;:::-;;:::i;58995:65::-;;;;;;;;;;;;;:::i;54854:84::-;;;;;;;;;;;;;:::i;27458:328::-;;;;;;;;;;-1:-1:-1;27458:328:0;;;;;:::i;:::-;;:::i;55031:37::-;;;;;;;;;;-1:-1:-1;55031:37:0;;;;;:::i;:::-;;:::i;54631:38::-;;;;;;;;;;;;;:::i;55073:41::-;;;;;;;;;;-1:-1:-1;55073:41:0;;;;;:::i;:::-;;:::i;54419:37::-;;;;;;;;;;;;;:::i;58518:442::-;;;;;;;;;;-1:-1:-1;58518:442:0;;;;;:::i;:::-;;:::i;59878:156::-;;;;;;;;;;-1:-1:-1;59878:156:0;;;;;:::i;:::-;;:::i;54545:41::-;;;;;;;;;;;;;:::i;59294:122::-;;;;;;;;;;-1:-1:-1;59294:122:0;;;;;:::i;:::-;;:::i;55915:1738::-;;;;;;:::i;:::-;;:::i;26561:164::-;;;;;;;;;;-1:-1:-1;26561:164:0;;;;;:::i;:::-;;:::i;59728:144::-;;;;;;;;;;-1:-1:-1;59728:144:0;;;;;:::i;:::-;;:::i;59422:120::-;;;;;;;;;;-1:-1:-1;59422:120:0;;;;;:::i;:::-;;:::i;45496:192::-;;;;;;;;;;-1:-1:-1;45496:192:0;;;;;:::i;:::-;;:::i;37448:224::-;37550:4;-1:-1:-1;;;;;;37574:50:0;;-1:-1:-1;;;37574:50:0;;:90;;;37628:36;37652:11;37628:23;:36::i;:::-;37567:97;;37448:224;;;;:::o;59548:73::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;;;;;;;;;59600:6:::1;:15:::0;;-1:-1:-1;;59600:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59548:73::o;24343:100::-;24397:13;24430:5;24423:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24343:100;:::o;25902:221::-;25978:7;26006:16;26014:7;26006;:16::i;:::-;25998:73;;;;-1:-1:-1;;;25998:73:0;;;;;;;:::i;:::-;-1:-1:-1;26091:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26091:24:0;;25902:221::o;54461:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59066:118::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59145:13:::1;:33:::0;59066:118::o;25425:411::-;25506:13;25522:23;25537:7;25522:14;:23::i;:::-;25506:39;;25570:5;-1:-1:-1;;;;;25564:11:0;:2;-1:-1:-1;;;;;25564:11:0;;;25556:57;;;;-1:-1:-1;;;25556:57:0;;;;;;;:::i;:::-;25664:5;-1:-1:-1;;;;;25648:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;25648:21:0;;:62;;;;25673:37;25690:5;25697:12;:10;:12::i;25673:37::-;25626:168;;;;-1:-1:-1;;;25626:168:0;;;;;;;:::i;:::-;25807:21;25816:2;25820:7;25807:8;:21::i;:::-;25425:411;;;:::o;38088:113::-;38176:10;:17;38088:113;:::o;55121:55::-;;;;;;;;;;;;;:::o;54593:33::-;;;;:::o;26792:339::-;26987:41;27006:12;:10;:12::i;:::-;27020:7;26987:18;:41::i;:::-;26979:103;;;;-1:-1:-1;;;26979:103:0;;;;;;;:::i;:::-;27095:28;27105:4;27111:2;27115:7;27095:9;:28::i;37756:256::-;37853:7;37889:23;37906:5;37889:16;:23::i;:::-;37881:5;:31;37873:87;;;;-1:-1:-1;;;37873:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37978:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37756:256::o;57681:241::-;57740:4;;57753:141;57774:20;:27;57770:31;;57753:141;;;57848:5;-1:-1:-1;;;;;57821:32:0;:20;57842:1;57821:23;;;;;;-1:-1:-1;;;57821:23:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;57821:23:0;:32;57817:70;;;57873:4;57866:11;;;;;57817:70;57803:3;;;;:::i;:::-;;;;57753:141;;;-1:-1:-1;57911:5:0;;57681:241;-1:-1:-1;;57681:241:0:o;59627:95::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59692:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;59692:24:0;;::::1;::::0;;;::::1;::::0;;59627:95::o;60040:158::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;60093:12:::1;60119:10;-1:-1:-1::0;;;;;60111:24:0::1;60143:21;60111:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60092:77;;;60184:7;60176:16;;;::::0;::::1;;44887:1;60040:158::o:0;27202:185::-;27340:39;27357:4;27363:2;27367:7;27340:39;;;;;;;;;;;;:16;:39::i;58183:329::-;58243:16;58268:23;58293:17;58303:6;58293:9;:17::i;:::-;58268:42;;58317:25;58359:15;58345:30;;;;;;-1:-1:-1;;;58345:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58345:30:0;;58317:58;;58387:9;58382:103;58402:15;58398:1;:19;58382:103;;;58447:30;58467:6;58475:1;58447:19;:30::i;:::-;58433:8;58442:1;58433:11;;;;;;-1:-1:-1;;;58433:11:0;;;;;;;;;;;;;;;;;;:44;58419:3;;;;:::i;:::-;;;;58382:103;;;-1:-1:-1;58498:8:0;58183:329;-1:-1:-1;;;58183:329:0:o;38278:233::-;38353:7;38389:30;:28;:30::i;:::-;38381:5;:38;38373:95;;;;-1:-1:-1;;;38373:95:0;;;;;;;:::i;:::-;38486:10;38497:5;38486:17;;;;;;-1:-1:-1;;;38486:17:0;;;;;;;;;;;;;;;;;38479:24;;38278:233;;;:::o;54690:34::-;;;;:::o;57928:249::-;57991:4;;58004:149;58025:24;:31;58021:35;;58004:149;;;58107:5;-1:-1:-1;;;;;58076:36:0;:24;58101:1;58076:27;;;;;;-1:-1:-1;;;58076:27:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58076:27:0;:36;58072:74;;;58132:4;58125:11;;;;;58072:74;58058:3;;;;:::i;:::-;;;;58004:149;;54780:28;;;;;;;;;:::o;59190:98::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59261:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;59190:98:::0;:::o;54750:25::-;;;;;;:::o;24037:239::-;24109:7;24145:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24145:16:0;24180:19;24172:73;;;;-1:-1:-1;;;24172:73:0;;;;;;;:::i;54393:21::-;;;;;;;:::i;23767:208::-;23839:7;-1:-1:-1;;;;;23867:19:0;;23859:74;;;;-1:-1:-1;;;23859:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23951:16:0;;;;;:9;:16;;;;;;;23767:208::o;45247:94::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;45312:21:::1;45330:1;45312:9;:21::i;:::-;45247:94::o:0;44596:87::-;44669:6;;-1:-1:-1;;;;;44669:6:0;44596:87;:::o;24512:104::-;24568:13;24601:7;24594:14;;;;;:::i;54813:34::-;;;;;;;;;:::o;54496:44::-;54528:12;54496:44;:::o;26195:295::-;26310:12;:10;:12::i;:::-;-1:-1:-1;;;;;26298:24:0;:8;-1:-1:-1;;;;;26298:24:0;;;26290:62;;;;-1:-1:-1;;;26290:62:0;;;;;;;:::i;:::-;26410:8;26365:18;:32;26384:12;:10;:12::i;:::-;-1:-1:-1;;;;;26365:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;26365:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;26365:53:0;;;;;;;;;;;26449:12;:10;:12::i;:::-;-1:-1:-1;;;;;26434:48:0;;26473:8;26434:48;;;;;;:::i;:::-;;;;;;;;26195:295;;:::o;58995:65::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59039:8:::1;:15:::0;;-1:-1:-1;;59039:15:0::1;;;::::0;;58995:65::o;54854:84::-;;;;;;-1:-1:-1;;;;;54854:84:0;;:::o;27458:328::-;27633:41;27652:12;:10;:12::i;:::-;27666:7;27633:18;:41::i;:::-;27625:103;;;;-1:-1:-1;;;27625:103:0;;;;;;;:::i;:::-;27739:39;27753:4;27759:2;27763:7;27772:5;27739:13;:39::i;:::-;27458:328;;;;:::o;55031:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55031:37:0;;-1:-1:-1;55031:37:0;:::o;54631:38::-;;;;:::o;55073:41::-;;;;;;;;;;;;54419:37;;;;;;;:::i;58518:442::-;58591:13;58621:16;58629:7;58621;:16::i;:::-;58613:81;;;;-1:-1:-1;;;58613:81:0;;;;;;;:::i;:::-;58706:8;;;;;;;58703:60;;58741:14;58734:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58703:60;58771:28;58802:10;:8;:10::i;:::-;58771:41;;58857:1;58832:14;58826:28;:32;:128;;;;;;;;;;;;;;;;;58892:14;58908:18;:7;:16;:18::i;:::-;58927:13;58875:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58826:128;58819:135;58518:442;-1:-1:-1;;;58518:442:0:o;59878:156::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59957:31:::1;59964:24;;59957:31;:::i;:::-;59995:33;:24;60022:6:::0;;59995:33:::1;:::i;54545:41::-:0;54581:5;54545:41;:::o;59294:122::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59377:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;55915:1738::-:0;1784:1;2380:7;;:19;;2372:63;;;;-1:-1:-1;;;2372:63:0;;;;;;;:::i;:::-;1784:1;2513:7;:18;55999:6:::1;::::0;::::1;;55998:7;55990:42;;;;-1:-1:-1::0;;;55990:42:0::1;;;;;;;:::i;:::-;56039:14;56056:13;:11;:13::i;:::-;56039:30;;56098:1;56084:11;:15;56076:56;;;;-1:-1:-1::0;;;56076:56:0::1;;;;;;;:::i;:::-;56162:13;;56147:11;:28;;56139:73;;;;-1:-1:-1::0;;;56139:73:0::1;;;;;;;:::i;:::-;54581:5;56227:20;56236:11:::0;56227:6;:20:::1;:::i;:::-;:33;;56219:65;;;;-1:-1:-1::0;;;56219:65:0::1;;;;;;;:::i;:::-;56311:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;56297:21:0::1;:10;-1:-1:-1::0;;;;;56297:21:0::1;;56293:625;;56332:15;::::0;;;::::1;;;:23;;56351:4;56332:23;56329:508;;;56376:25;56390:10;56376:13;:25::i;:::-;:58;;;;56405:29;56423:10;56405:17;:29::i;:::-;56368:91;;;;-1:-1:-1::0;;;56368:91:0::1;;;;;;;:::i;:::-;56518:10;56470:24;56497:32:::0;;;:20:::1;:32;::::0;;;;;;56543:29:::1;::::0;:17:::1;:29::i;:::-;56540:286;;;56629:14;::::0;56595:30:::1;56614:11:::0;56595:16;:30:::1;:::i;:::-;:48;;56587:96;;;;-1:-1:-1::0;;;56587:96:0::1;;;;;;;:::i;:::-;56540:286;;;56756:18;::::0;56722:30:::1;56741:11:::0;56722:16;:30:::1;:::i;:::-;:52;;56714:100;;;;-1:-1:-1::0;;;56714:100:0::1;;;;;;;:::i;:::-;56329:508;;56868:19;56876:11:::0;54528:12:::1;56868:19;:::i;:::-;56855:9;:32;;56847:63;;;;-1:-1:-1::0;;;56847:63:0::1;;;;;;;:::i;:::-;56943:1;56926:136;56951:11;56946:1;:16;56926:136;;56999:10;56978:32;::::0;;;:20:::1;:32;::::0;;;;:34;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;57021:33:0::1;::::0;-1:-1:-1;57031:10:0::1;57043;57052:1:::0;57043:6;:10:::1;:::i;:::-;57021:9;:33::i;:::-;56964:3:::0;::::1;::::0;::::1;:::i;:::-;;;;56926:136;;;-1:-1:-1::0;57097:11:0::1;::::0;57071:12:::1;::::0;-1:-1:-1;;;;;57097:11:0::1;57150:3;57123:19;57131:11:::0;54528:12:::1;57123:19;:::i;:::-;57122:25;::::0;57146:1:::1;57122:25;:::i;:::-;:31;;;;:::i;:::-;57089:69;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57070:88;;;57173:7;57165:16;;;::::0;::::1;;57227:7;::::0;57191:22:::1;::::0;57227:7;;::::1;-1:-1:-1::0;;;;;57227:7:0::1;57277:3;57249:19;57257:11:::0;54528:12:::1;57249:19;:::i;:::-;57248:26;::::0;57272:2:::1;57248:26;:::i;:::-;:32;;;;:::i;:::-;57219:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57190:95;;;57308:17;57292:109;;;;-1:-1:-1::0;;;57292:109:0::1;;;;;;;:::i;:::-;57410:20;57446:19;57454:11:::0;54528:12:::1;57446:19;:::i;:::-;57433:33;::::0;:9:::1;:33;:::i;:::-;57410:56:::0;-1:-1:-1;57477:16:0;;57473:175:::1;;57505:23;57534:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;57534:17:0::1;57559:12;57534:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57504:72;;;57593:18;57585:55;;;;-1:-1:-1::0;;;57585:55:0::1;;;;;;;:::i;:::-;57473:175;;-1:-1:-1::0;;1740:1:0;2692:7;:22;-1:-1:-1;;;55915:1738:0:o;26561:164::-;-1:-1:-1;;;;;26682:25:0;;;26658:4;26682:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26561:164::o;59728:144::-;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59803:27:::1;59810:20;;59803:27;:::i;:::-;59837:29;:20;59860:6:::0;;59837:29:::1;:::i;59422:120::-:0;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;59504:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;45496:192::-:0;44827:12;:10;:12::i;:::-;-1:-1:-1;;;;;44816:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;44816:23:0;;44808:68;;;;-1:-1:-1;;;44808:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45585:22:0;::::1;45577:73;;;;-1:-1:-1::0;;;45577:73:0::1;;;;;;;:::i;:::-;45661:19;45671:8;45661:9;:19::i;10858:387::-:0;11181:20;11229:8;;;10858:387::o;23398:305::-;23500:4;-1:-1:-1;;;;;;23537:40:0;;-1:-1:-1;;;23537:40:0;;:105;;-1:-1:-1;;;;;;;23594:48:0;;-1:-1:-1;;;23594:48:0;23537:105;:158;;;;23659:36;23683:11;23659:23;:36::i;18820:98::-;18900:10;18820:98;:::o;29296:127::-;29361:4;29385:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29385:16:0;:30;;;29296:127::o;33278:174::-;33353:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33353:29:0;-1:-1:-1;;;;;33353:29:0;;;;;;;;:24;;33407:23;33353:24;33407:14;:23::i;:::-;-1:-1:-1;;;;;33398:46:0;;;;;;;;;;;33278:174;;:::o;29590:348::-;29683:4;29708:16;29716:7;29708;:16::i;:::-;29700:73;;;;-1:-1:-1;;;29700:73:0;;;;;;;:::i;:::-;29784:13;29800:23;29815:7;29800:14;:23::i;:::-;29784:39;;29853:5;-1:-1:-1;;;;;29842:16:0;:7;-1:-1:-1;;;;;29842:16:0;;:51;;;;29886:7;-1:-1:-1;;;;;29862:31:0;:20;29874:7;29862:11;:20::i;:::-;-1:-1:-1;;;;;29862:31:0;;29842:51;:87;;;;29897:32;29914:5;29921:7;29897:16;:32::i;:::-;29834:96;29590:348;-1:-1:-1;;;;29590:348:0:o;32582:578::-;32741:4;-1:-1:-1;;;;;32714:31:0;:23;32729:7;32714:14;:23::i;:::-;-1:-1:-1;;;;;32714:31:0;;32706:85;;;;-1:-1:-1;;;32706:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32810:16:0;;32802:65;;;;-1:-1:-1;;;32802:65:0;;;;;;;:::i;:::-;32880:39;32901:4;32907:2;32911:7;32880:20;:39::i;:::-;32984:29;33001:1;33005:7;32984:8;:29::i;:::-;-1:-1:-1;;;;;33026:15:0;;;;;;:9;:15;;;;;:20;;33045:1;;33026:15;:20;;33045:1;;33026:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33057:13:0;;;;;;:9;:13;;;;;:18;;33074:1;;33057:13;:18;;33074:1;;33057:18;:::i;:::-;;;;-1:-1:-1;;33086:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33086:21:0;-1:-1:-1;;;;;33086:21:0;;;;;;;;;33125:27;;33086:16;;33125:27;;;;;;;32582:578;;;:::o;45696:173::-;45771:6;;;-1:-1:-1;;;;;45788:17:0;;;-1:-1:-1;;;;;;45788:17:0;;;;;;;45821:40;;45771:6;;;45788:17;45771:6;;45821:40;;45752:16;;45821:40;45696:173;;:::o;28668:315::-;28825:28;28835:4;28841:2;28845:7;28825:9;:28::i;:::-;28872:48;28895:4;28901:2;28905:7;28914:5;28872:22;:48::i;:::-;28864:111;;;;-1:-1:-1;;;28864:111:0;;;;;;;:::i;55540:101::-;55599:13;55628:7;55621:14;;;;;:::i;19349:723::-;19405:13;19626:10;19622:53;;-1:-1:-1;19653:10:0;;;;;;;;;;;;-1:-1:-1;;;19653:10:0;;;;;;19622:53;19700:5;19685:12;19741:78;19748:9;;19741:78;;19774:8;;;;:::i;:::-;;-1:-1:-1;19797:10:0;;-1:-1:-1;19805:2:0;19797:10;;:::i;:::-;;;19741:78;;;19829:19;19861:6;19851:17;;;;;;-1:-1:-1;;;19851:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19851:17:0;;19829:39;;19879:154;19886:10;;19879:154;;19913:11;19923:1;19913:11;;:::i;:::-;;-1:-1:-1;19982:10:0;19990:2;19982:5;:10;:::i;:::-;19969:24;;:2;:24;:::i;:::-;19956:39;;19939:6;19946;19939:14;;;;;;-1:-1:-1;;;19939:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;19939:56:0;;;;;;;;-1:-1:-1;20010:11:0;20019:2;20010:11;;:::i;:::-;;;19879:154;;30280:110;30356:26;30366:2;30370:7;30356:26;;;;;;;;;;;;:9;:26::i;21908:157::-;-1:-1:-1;;;;;;22017:40:0;;-1:-1:-1;;;22017:40:0;21908:157;;;:::o;39124:589::-;39268:45;39295:4;39301:2;39305:7;39268:26;:45::i;:::-;-1:-1:-1;;;;;39330:18:0;;39326:187;;39365:40;39397:7;39365:31;:40::i;:::-;39326:187;;;39435:2;-1:-1:-1;;;;;39427:10:0;:4;-1:-1:-1;;;;;39427:10:0;;39423:90;;39454:47;39487:4;39493:7;39454:32;:47::i;:::-;-1:-1:-1;;;;;39527:16:0;;39523:183;;39560:45;39597:7;39560:36;:45::i;:::-;39523:183;;;39633:4;-1:-1:-1;;;;;39627:10:0;:2;-1:-1:-1;;;;;39627:10:0;;39623:83;;39654:40;39682:2;39686:7;39654:27;:40::i;34017:799::-;34172:4;34193:15;:2;-1:-1:-1;;;;;34193:13:0;;:15::i;:::-;34189:620;;;34245:2;-1:-1:-1;;;;;34229:36:0;;34266:12;:10;:12::i;:::-;34280:4;34286:7;34295:5;34229:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34229:72:0;;;;;;;;-1:-1:-1;;34229:72:0;;;;;;;;;;;;:::i;:::-;;;34225:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34471:13:0;;34467:272;;34514:60;;-1:-1:-1;;;34514:60:0;;;;;;;:::i;34467:272::-;34689:6;34683:13;34674:6;34670:2;34666:15;34659:38;34225:529;-1:-1:-1;;;;;;34352:51:0;-1:-1:-1;;;34352:51:0;;-1:-1:-1;34345:58:0;;34189:620;-1:-1:-1;34793:4:0;34017:799;;;;;;:::o;30617:321::-;30747:18;30753:2;30757:7;30747:5;:18::i;:::-;30798:54;30829:1;30833:2;30837:7;30846:5;30798:22;:54::i;:::-;30776:154;;;;-1:-1:-1;;;30776:154:0;;;;;;;:::i;40436:164::-;40540:10;:17;;40513:24;;;;:15;:24;;;;;:44;;;40568:24;;;;;;;;;;;;40436:164::o;41227:988::-;41493:22;41543:1;41518:22;41535:4;41518:16;:22::i;:::-;:26;;;;:::i;:::-;41555:18;41576:26;;;:17;:26;;;;;;41493:51;;-1:-1:-1;41709:28:0;;;41705:328;;-1:-1:-1;;;;;41776:18:0;;41754:19;41776:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41827:30;;;;;;:44;;;41944:30;;:17;:30;;;;;:43;;;41705:328;-1:-1:-1;42129:26:0;;;;:17;:26;;;;;;;;42122:33;;;-1:-1:-1;;;;;42173:18:0;;;;;:12;:18;;;;;:34;;;;;;;42166:41;41227:988::o;42510:1079::-;42788:10;:17;42763:22;;42788:21;;42808:1;;42788:21;:::i;:::-;42820:18;42841:24;;;:15;:24;;;;;;43214:10;:26;;42763:46;;-1:-1:-1;42841:24:0;;42763:46;;43214:26;;;;-1:-1:-1;;;43214:26:0;;;;;;;;;;;;;;;;;43192:48;;43278:11;43253:10;43264;43253:22;;;;;;-1:-1:-1;;;43253:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;43358:28;;;:15;:28;;;;;;;:41;;;43530:24;;;;;43523:31;43565:10;:16;;;;;-1:-1:-1;;;43565:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;42510:1079;;;;:::o;40014:221::-;40099:14;40116:20;40133:2;40116:16;:20::i;:::-;-1:-1:-1;;;;;40147:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40192:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40014:221:0:o;31274:382::-;-1:-1:-1;;;;;31354:16:0;;31346:61;;;;-1:-1:-1;;;31346:61:0;;;;;;;:::i;:::-;31427:16;31435:7;31427;:16::i;:::-;31426:17;31418:58;;;;-1:-1:-1;;;31418:58:0;;;;;;;:::i;:::-;31489:45;31518:1;31522:2;31526:7;31489:20;:45::i;:::-;-1:-1:-1;;;;;31547:13:0;;;;;;:9;:13;;;;;:18;;31564:1;;31547:13;:18;;31564:1;;31547:18;:::i;:::-;;;;-1:-1:-1;;31576:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31576:21:0;-1:-1:-1;;;;;31576:21:0;;;;;;;;31615:33;;31576:16;;;31615:33;;31576:16;;31615:33;31274:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:162;873:20;;929:13;;922:21;912:32;;902:2;;958:1;955;948:12;973:198;;1085:2;1073:9;1064:7;1060:23;1056:32;1053:2;;;1106:6;1098;1091:22;1053:2;1134:31;1155:9;1134:31;:::i;1176:274::-;;;1305:2;1293:9;1284:7;1280:23;1276:32;1273:2;;;1326:6;1318;1311:22;1273:2;1354:31;1375:9;1354:31;:::i;:::-;1344:41;;1404:40;1440:2;1429:9;1425:18;1404:40;:::i;:::-;1394:50;;1263:187;;;;;:::o;1455:342::-;;;;1601:2;1589:9;1580:7;1576:23;1572:32;1569:2;;;1622:6;1614;1607:22;1569:2;1650:31;1671:9;1650:31;:::i;:::-;1640:41;;1700:40;1736:2;1725:9;1721:18;1700:40;:::i;:::-;1690:50;;1787:2;1776:9;1772:18;1759:32;1749:42;;1559:238;;;;;:::o;1802:702::-;;;;;1974:3;1962:9;1953:7;1949:23;1945:33;1942:2;;;1996:6;1988;1981:22;1942:2;2024:31;2045:9;2024:31;:::i;:::-;2014:41;;2074:40;2110:2;2099:9;2095:18;2074:40;:::i;:::-;2064:50;;2161:2;2150:9;2146:18;2133:32;2123:42;;2216:2;2205:9;2201:18;2188:32;2243:18;2235:6;2232:30;2229:2;;;2280:6;2272;2265:22;2229:2;2308:22;;2361:4;2353:13;;2349:27;-1:-1:-1;2339:2:1;;2395:6;2387;2380:22;2339:2;2423:75;2490:7;2485:2;2472:16;2467:2;2463;2459:11;2423:75;:::i;:::-;2413:85;;;1932:572;;;;;;;:::o;2509:268::-;;;2635:2;2623:9;2614:7;2610:23;2606:32;2603:2;;;2656:6;2648;2641:22;2603:2;2684:31;2705:9;2684:31;:::i;:::-;2674:41;;2734:37;2767:2;2756:9;2752:18;2734:37;:::i;2782:266::-;;;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:31;2981:9;2960:31;:::i;:::-;2950:41;3038:2;3023:18;;;;3010:32;;-1:-1:-1;;;2869:179:1:o;3053:666::-;;;3200:2;3188:9;3179:7;3175:23;3171:32;3168:2;;;3221:6;3213;3206:22;3168:2;3266:9;3253:23;3295:18;3336:2;3328:6;3325:14;3322:2;;;3357:6;3349;3342:22;3322:2;3400:6;3389:9;3385:22;3375:32;;3445:7;3438:4;3434:2;3430:13;3426:27;3416:2;;3472:6;3464;3457:22;3416:2;3517;3504:16;3543:2;3535:6;3532:14;3529:2;;;3564:6;3556;3549:22;3529:2;3623:7;3618:2;3612;3604:6;3600:15;3596:2;3592:24;3588:33;3585:46;3582:2;;;3649:6;3641;3634:22;3582:2;3685;3677:11;;;;;3707:6;;-1:-1:-1;3158:561:1;;-1:-1:-1;;;;3158:561:1:o;3724:192::-;;3833:2;3821:9;3812:7;3808:23;3804:32;3801:2;;;3854:6;3846;3839:22;3801:2;3882:28;3900:9;3882:28;:::i;3921:257::-;;4032:2;4020:9;4011:7;4007:23;4003:32;4000:2;;;4053:6;4045;4038:22;4000:2;4097:9;4084:23;4116:32;4142:5;4116:32;:::i;4183:261::-;;4305:2;4293:9;4284:7;4280:23;4276:32;4273:2;;;4326:6;4318;4311:22;4273:2;4363:9;4357:16;4382:32;4408:5;4382:32;:::i;4449:482::-;;4571:2;4559:9;4550:7;4546:23;4542:32;4539:2;;;4592:6;4584;4577:22;4539:2;4637:9;4624:23;4670:18;4662:6;4659:30;4656:2;;;4707:6;4699;4692:22;4656:2;4735:22;;4788:4;4780:13;;4776:27;-1:-1:-1;4766:2:1;;4822:6;4814;4807:22;4766:2;4850:75;4917:7;4912:2;4899:16;4894:2;4890;4886:11;4850:75;:::i;4936:190::-;;5048:2;5036:9;5027:7;5023:23;5019:32;5016:2;;;5069:6;5061;5054:22;5016:2;-1:-1:-1;5097:23:1;;5006:120;-1:-1:-1;5006:120:1:o;5131:259::-;;5212:5;5206:12;5239:6;5234:3;5227:19;5255:63;5311:6;5304:4;5299:3;5295:14;5288:4;5281:5;5277:16;5255:63;:::i;:::-;5372:2;5351:15;-1:-1:-1;;5347:29:1;5338:39;;;;5379:4;5334:50;;5182:208;-1:-1:-1;;5182:208:1:o;5395:1532::-;;5657:6;5651:13;5683:4;5696:51;5740:6;5735:3;5730:2;5722:6;5718:15;5696:51;:::i;:::-;5810:13;;5769:16;;;;5832:55;5810:13;5769:16;5854:15;;;5832:55;:::i;:::-;5978:13;;5909:20;;;5949:3;;6055:1;6040:17;;6076:1;6112:18;;;;6139:2;;6217:4;6207:8;6203:19;6191:31;;6139:2;6280;6270:8;6267:16;6247:18;6244:40;6241:2;;;-1:-1:-1;;;6307:33:1;;6363:4;6360:1;6353:15;6393:4;6314:3;6381:17;6241:2;6424:18;6451:110;;;;6575:1;6570:332;;;;6417:485;;6451:110;-1:-1:-1;;6486:24:1;;6472:39;;6531:20;;;;-1:-1:-1;6451:110:1;;6570:332;6606:39;6638:6;6606:39;:::i;:::-;6667:3;6683:169;6697:8;6694:1;6691:15;6683:169;;;6779:14;;6764:13;;;6757:37;6822:16;;;;6714:10;;6683:169;;;6687:3;;6883:8;6876:5;6872:20;6865:27;;6417:485;-1:-1:-1;6918:3:1;;5627:1300;-1:-1:-1;;;;;;;;;;;5627:1300:1:o;6932:205::-;7132:3;7123:14::o;7142:203::-;-1:-1:-1;;;;;7306:32:1;;;;7288:51;;7276:2;7261:18;;7243:102::o;7574:490::-;-1:-1:-1;;;;;7843:15:1;;;7825:34;;7895:15;;7890:2;7875:18;;7868:43;7942:2;7927:18;;7920:34;;;7990:3;7985:2;7970:18;;7963:31;;;7574:490;;8011:47;;8038:19;;8030:6;8011:47;:::i;:::-;8003:55;7777:287;-1:-1:-1;;;;;;7777:287:1:o;8069:635::-;8240:2;8292:21;;;8362:13;;8265:18;;;8384:22;;;8069:635;;8240:2;8463:15;;;;8437:2;8422:18;;;8069:635;8509:169;8523:6;8520:1;8517:13;8509:169;;;8584:13;;8572:26;;8653:15;;;;8618:12;;;;8545:1;8538:9;8509:169;;;-1:-1:-1;8695:3:1;;8220:484;-1:-1:-1;;;;;;8220:484:1:o;8709:187::-;8874:14;;8867:22;8849:41;;8837:2;8822:18;;8804:92::o;8901:221::-;;9050:2;9039:9;9032:21;9070:46;9112:2;9101:9;9097:18;9089:6;9070:46;:::i;9127:348::-;9329:2;9311:21;;;9368:2;9348:18;;;9341:30;9407:26;9402:2;9387:18;;9380:54;9466:2;9451:18;;9301:174::o;9480:407::-;9682:2;9664:21;;;9721:2;9701:18;;;9694:30;9760:34;9755:2;9740:18;;9733:62;-1:-1:-1;;;9826:2:1;9811:18;;9804:41;9877:3;9862:19;;9654:233::o;9892:414::-;10094:2;10076:21;;;10133:2;10113:18;;;10106:30;10172:34;10167:2;10152:18;;10145:62;-1:-1:-1;;;10238:2:1;10223:18;;10216:48;10296:3;10281:19;;10066:240::o;10311:346::-;10513:2;10495:21;;;10552:2;10532:18;;;10525:30;-1:-1:-1;;;10586:2:1;10571:18;;10564:52;10648:2;10633:18;;10485:172::o;10662:402::-;10864:2;10846:21;;;10903:2;10883:18;;;10876:30;10942:34;10937:2;10922:18;;10915:62;-1:-1:-1;;;11008:2:1;10993:18;;10986:36;11054:3;11039:19;;10836:228::o;11069:352::-;11271:2;11253:21;;;11310:2;11290:18;;;11283:30;11349;11344:2;11329:18;;11322:58;11412:2;11397:18;;11243:178::o;11426:399::-;11628:2;11610:21;;;11667:2;11647:18;;;11640:30;11706:34;11701:2;11686:18;;11679:62;-1:-1:-1;;;11772:2:1;11757:18;;11750:33;11815:3;11800:19;;11600:225::o;11830:400::-;12032:2;12014:21;;;12071:2;12051:18;;;12044:30;12110:34;12105:2;12090:18;;12083:62;-1:-1:-1;;;12176:2:1;12161:18;;12154:34;12220:3;12205:19;;12004:226::o;12235:349::-;12437:2;12419:21;;;12476:2;12456:18;;;12449:30;12515:27;12510:2;12495:18;;12488:55;12575:2;12560:18;;12409:175::o;12589:352::-;12791:2;12773:21;;;12830:2;12810:18;;;12803:30;12869;12864:2;12849:18;;12842:58;12932:2;12917:18;;12763:178::o;12946:422::-;13148:2;13130:21;;;13187:2;13167:18;;;13160:30;13226:34;13221:2;13206:18;;13199:62;13297:28;13292:2;13277:18;;13270:56;13358:3;13343:19;;13120:248::o;13373:408::-;13575:2;13557:21;;;13614:2;13594:18;;;13587:30;13653:34;13648:2;13633:18;;13626:62;-1:-1:-1;;;13719:2:1;13704:18;;13697:42;13771:3;13756:19;;13547:234::o;13786:420::-;13988:2;13970:21;;;14027:2;14007:18;;;14000:30;14066:34;14061:2;14046:18;;14039:62;14137:26;14132:2;14117:18;;14110:54;14196:3;14181:19;;13960:246::o;14211:406::-;14413:2;14395:21;;;14452:2;14432:18;;;14425:30;14491:34;14486:2;14471:18;;14464:62;-1:-1:-1;;;14557:2:1;14542:18;;14535:40;14607:3;14592:19;;14385:232::o;14622:405::-;14824:2;14806:21;;;14863:2;14843:18;;;14836:30;14902:34;14897:2;14882:18;;14875:62;-1:-1:-1;;;14968:2:1;14953:18;;14946:39;15017:3;15002:19;;14796:231::o;15032:356::-;15234:2;15216:21;;;15253:18;;;15246:30;15312:34;15307:2;15292:18;;15285:62;15379:2;15364:18;;15206:182::o;15393:408::-;15595:2;15577:21;;;15634:2;15614:18;;;15607:30;15673:34;15668:2;15653:18;;15646:62;-1:-1:-1;;;15739:2:1;15724:18;;15717:42;15791:3;15776:19;;15567:234::o;15806:356::-;16008:2;15990:21;;;16027:18;;;16020:30;16086:34;16081:2;16066:18;;16059:62;16153:2;16138:18;;15980:182::o;16167:405::-;16369:2;16351:21;;;16408:2;16388:18;;;16381:30;16447:34;16442:2;16427:18;;16420:62;-1:-1:-1;;;16513:2:1;16498:18;;16491:39;16562:3;16547:19;;16341:231::o;16577:411::-;16779:2;16761:21;;;16818:2;16798:18;;;16791:30;16857:34;16852:2;16837:18;;16830:62;-1:-1:-1;;;16923:2:1;16908:18;;16901:45;16978:3;16963:19;;16751:237::o;16993:397::-;17195:2;17177:21;;;17234:2;17214:18;;;17207:30;17273:34;17268:2;17253:18;;17246:62;-1:-1:-1;;;17339:2:1;17324:18;;17317:31;17380:3;17365:19;;17167:223::o;17395:356::-;17597:2;17579:21;;;17616:18;;;17609:30;17675:34;17670:2;17655:18;;17648:62;17742:2;17727:18;;17569:182::o;17756:342::-;17958:2;17940:21;;;17997:2;17977:18;;;17970:30;-1:-1:-1;;;18031:2:1;18016:18;;18009:48;18089:2;18074:18;;17930:168::o;18103:413::-;18305:2;18287:21;;;18344:2;18324:18;;;18317:30;18383:34;18378:2;18363:18;;18356:62;-1:-1:-1;;;18449:2:1;18434:18;;18427:47;18506:3;18491:19;;18277:239::o;18521:343::-;18723:2;18705:21;;;18762:2;18742:18;;;18735:30;-1:-1:-1;;;18796:2:1;18781:18;;18774:49;18855:2;18840:18;;18695:169::o;18869:408::-;19071:2;19053:21;;;19110:2;19090:18;;;19083:30;19149:34;19144:2;19129:18;;19122:62;-1:-1:-1;;;19215:2:1;19200:18;;19193:42;19267:3;19252:19;;19043:234::o;19282:355::-;19484:2;19466:21;;;19523:2;19503:18;;;19496:30;19562:33;19557:2;19542:18;;19535:61;19628:2;19613:18;;19456:181::o;19642:344::-;19844:2;19826:21;;;19883:2;19863:18;;;19856:30;-1:-1:-1;;;19917:2:1;19902:18;;19895:50;19977:2;19962:18;;19816:170::o;19991:177::-;20137:25;;;20125:2;20110:18;;20092:76::o;20173:129::-;;20241:17;;;20291:4;20275:21;;;20231:71::o;20307:128::-;;20378:1;20374:6;20371:1;20368:13;20365:2;;;20384:18;;:::i;:::-;-1:-1:-1;20420:9:1;;20355:80::o;20440:120::-;;20506:1;20496:2;;20511:18;;:::i;:::-;-1:-1:-1;20545:9:1;;20486:74::o;20565:168::-;;20671:1;20667;20663:6;20659:14;20656:1;20653:21;20648:1;20641:9;20634:17;20630:45;20627:2;;;20678:18;;:::i;:::-;-1:-1:-1;20718:9:1;;20617:116::o;20738:125::-;;20806:1;20803;20800:8;20797:2;;;20811:18;;:::i;:::-;-1:-1:-1;20848:9:1;;20787:76::o;20868:258::-;20940:1;20950:113;20964:6;20961:1;20958:13;20950:113;;;21040:11;;;21034:18;21021:11;;;21014:39;20986:2;20979:10;20950:113;;;21081:6;21078:1;21075:13;21072:2;;;-1:-1:-1;;21116:1:1;21098:16;;21091:27;20921:205::o;21131:380::-;21216:1;21206:12;;21263:1;21253:12;;;21274:2;;21328:4;21320:6;21316:17;21306:27;;21274:2;21381;21373:6;21370:14;21350:18;21347:38;21344:2;;;21427:10;21422:3;21418:20;21415:1;21408:31;21462:4;21459:1;21452:15;21490:4;21487:1;21480:15;21344:2;;21186:325;;;:::o;21516:135::-;;-1:-1:-1;;21576:17:1;;21573:2;;;21596:18;;:::i;:::-;-1:-1:-1;21643:1:1;21632:13;;21563:88::o;21656:112::-;;21714:1;21704:2;;21719:18;;:::i;:::-;-1:-1:-1;21753:9:1;;21694:74::o;21773:127::-;21834:10;21829:3;21825:20;21822:1;21815:31;21865:4;21862:1;21855:15;21889:4;21886:1;21879:15;21905:127;21966:10;21961:3;21957:20;21954:1;21947:31;21997:4;21994:1;21987:15;22021:4;22018:1;22011:15;22037:127;22098:10;22093:3;22089:20;22086:1;22079:31;22129:4;22126:1;22119:15;22153:4;22150:1;22143:15;22169:133;-1:-1:-1;;;;;;22245:32:1;;22235:43;;22225:2;;22292:1;22289;22282:12

Swarm Source

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