ETH Price: $3,914.27 (+2.30%)

Token

Rich Bulls Club (RBC)
 

Overview

Max Total Supply

3,505 RBC

Holders

2,122

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
starkiller.eth
Balance
1 RBC
0x9b536f2e9aaaaaf229d47714b71dee4e4a0b227a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Do you feel the ground rumbling under your feet? Do you hear the bulls roaring upon the field? A massive, angry army of 9999 rich bulls will soon run over the NFT world... Brace yourselves.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RichBulls

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

// File: contracts/RichBullsClub.sol


pragma solidity >=0.7.0 <0.9.0;




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

    string public baseURI;
    string public baseExtension = ".json";
    string public notRevealedUri =
        "https://ipfs.io/ipfs/QmNVj7oV51v3EG8YEWVPy7mcUd1TtUSh7xLJxJfvjVgCj2/classic.json";
    string public whitelistNotRevealedUri =
        "https://ipfs.io/ipfs/QmNVj7oV51v3EG8YEWVPy7mcUd1TtUSh7xLJxJfvjVgCj2/preorder.json";

    // Supply
    uint256 public maxSupply = 9999;
    uint256 public mintedSupply = 0;
    uint256 public mintedPresaleSupply = 0;
    uint256 public maxPresaleSupply = 1000;

    uint256 public maxWhitelistNfts = 2;
    uint256 public maxVipNfts = 2;

    // Settings
    bool public paused = true;
    bool public revealed = false;

    uint256 public presaleCost = 0.1 ether;
    uint256 public publicCost = 0.3 ether;

    // Whitelist
    bool public whitelistMint = false;
    bool public vipMint = false;
    mapping(address => bool) whitelistedAddresses;
    mapping(address => uint256) public addressMintedBalance;
    address whitelistWallet;
    bool public airdropped = false;
    mapping(uint256 => address) public whitelistTokensOwners;
    uint256[] public whitelistTokens;
    mapping(address => bool) vipAddresses;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri,
        string memory _initWhitelistNotRevealedUri,
        address _whitelistWallet
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        whitelistWallet = _whitelistWallet;
        setNotRevealedURI(_initNotRevealedUri);
        setWhitelistNotRevealedURI(_initWhitelistNotRevealedUri);
    }

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

    function presaleMint(uint256 _mintAmount) public payable {
        require(!paused, "The contract is paused");
        require(_mintAmount > 0, "Need to mint at least 1 NFT");
        require(whitelistMint == true || vipMint == true, "Presale is closed.");
        require(
            mintedSupply + _mintAmount <= maxSupply,
            "Max NFT limit exceeded"
        );
        require(
            mintedPresaleSupply + _mintAmount <= maxPresaleSupply,
            "Max Presale NFT limit exceeded"
        );
        bool isUserVip = isVip(msg.sender);
        bool isUserWhitelisted = isWhitelisted(msg.sender);
        require(
            (whitelistMint && isUserWhitelisted) || (vipMint && isUserVip),
            "User is not eligible to the Presale"
        );
        require(msg.value >= presaleCost * _mintAmount, "Insufficient funds");
        uint256 ownerMintedCount = addressMintedBalance[msg.sender];
        require(
            (!isUserVip || (ownerMintedCount + _mintAmount <= maxVipNfts)),
            "Max NFT per address exceeded"
        );
        require(
            (!isUserWhitelisted ||
                (ownerMintedCount + _mintAmount <= maxWhitelistNfts)),
            "Max NFT per address exceeded"
        );
        mintedPresaleSupply += _mintAmount;

        for (uint256 i = 1; i <= _mintAmount; i++) {
            uint256 tokenId = mintedSupply + i;
            if (isUserWhitelisted) {
                _safeMint(whitelistWallet, tokenId);
                whitelistTokensOwners[tokenId] = msg.sender;
                whitelistTokens.push(tokenId);
            } else {
                _safeMint(msg.sender, tokenId);
            }
        }
        addressMintedBalance[msg.sender] += _mintAmount;
        mintedSupply += _mintAmount;
    }

    function mint(uint256 _mintAmount) public payable {
        require(!paused, "The contract is paused");
        require(
            whitelistMint == false && vipMint == false,
            "Public sale is not open yet."
        );
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "Need to mint at least 1 NFT");
        require(supply + _mintAmount <= maxSupply, "Max NFT limit exceeded");

        require(msg.value >= publicCost * _mintAmount, "Insufficient funds");

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

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

    function isWhitelisted(address _user) public view returns (bool) {
        // return whitelistedAddresses[_user];
        return true;
    }

    function isVip(address _user) public view returns (bool) {
        return vipAddresses[_user];
    }

    function isWhitelistToken(uint256 tokenId) public view returns (bool) {
        for (uint256 i = 0; i < whitelistTokens.length; i++) {
            if (whitelistTokens[i] == tokenId) {
                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) {
            if (isWhitelistToken(tokenId)) {
                return whitelistNotRevealedUri;
            }
            return notRevealedUri;
        }

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

    function airdropWhitelistTokens() public onlyOwner {
        require(!airdropped, "Whitelist Tokens have already been airdroped.");
        require(!paused, "The contract is paused");
        require(!whitelistMint, "Whitelist sale is still running");
        require(!vipMint, "VIP sale is still running");
        airdropped = true;
        for (uint256 i; i < whitelistTokens.length; i++) {
            transferFrom(
                whitelistWallet,
                whitelistTokensOwners[whitelistTokens[i]],
                whitelistTokens[i]
            );
        }
    }

    /* 
    Reveal NFTs (careful!)
    */
    function reveal() public onlyOwner {
        revealed = true;
    }

    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 setWhitelistNotRevealedURI(string memory _whitelistNotRevealedURI)
        public
        onlyOwner
    {
        whitelistNotRevealedUri = _whitelistNotRevealedURI;
    }

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

    function toggleWhitelistMint(bool _state) public onlyOwner {
        whitelistMint = _state;
    }

    function toggleVipMint(bool _state) public onlyOwner {
        vipMint = _state;
    }

    function whitelistUsers(address[] memory addresses) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            whitelistedAddresses[addresses[i]] = true;
        }
    }

    function vipUsers(address[] memory addresses) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            vipAddresses[addresses[i]] = true;
        }
    }

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

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":"string","name":"_initWhitelistNotRevealedUri","type":"string"},{"internalType":"address","name":"_whitelistWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropWhitelistTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"isVip","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isWhitelistToken","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":"maxPresaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxVipNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistNfts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintedPresaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicCost","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":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_whitelistNotRevealedURI","type":"string"}],"name":"setWhitelistNotRevealedURI","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":"bool","name":"_state","type":"bool"}],"name":"toggleVipMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"toggleWhitelistMint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"vipMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"vipUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistNotRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistTokensOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000577565b50604051806080016040528060508152602001620068c260509139600d90805190602001906200008392919062000577565b506040518060800160405280605181526020016200691260519139600e9080519060200190620000b592919062000577565b5061270f600f55600060105560006011556103e8601255600260135560026014556001601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff02191690831515021790555067016345785d8a0000601655670429d069189e00006017556000601860006101000a81548160ff0219169083151502179055506000601860016101000a81548160ff0219169083151502179055506000601b60146101000a81548160ff0219169083151502179055503480156200018257600080fd5b5060405162006963380380620069638339818101604052810190620001a89190620006bc565b85858160009080519060200190620001c292919062000577565b508060019080519060200190620001db92919062000577565b505050620001fe620001f26200027e60201b60201c565b6200028660201b60201c565b6200020f846200034c60201b60201c565b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200026183620003f760201b60201c565b6200027282620004a260201b60201c565b50505050505062000a48565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200035c6200027e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003826200054d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d2906200081a565b60405180910390fd5b80600b9080519060200190620003f392919062000577565b5050565b620004076200027e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200042d6200054d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047d906200081a565b60405180910390fd5b80600d90805190602001906200049e92919062000577565b5050565b620004b26200027e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004d86200054d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000528906200081a565b60405180910390fd5b80600e90805190602001906200054992919062000577565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005859062000916565b90600052602060002090601f016020900481019282620005a95760008555620005f5565b82601f10620005c457805160ff1916838001178555620005f5565b82800160010185558215620005f5579182015b82811115620005f4578251825591602001919060010190620005d7565b5b50905062000604919062000608565b5090565b5b808211156200062357600081600090555060010162000609565b5090565b60006200063e620006388462000865565b6200083c565b9050828152602081018484840111156200065d576200065c620009e5565b5b6200066a848285620008e0565b509392505050565b600081519050620006838162000a2e565b92915050565b600082601f830112620006a157620006a0620009e0565b5b8151620006b384826020860162000627565b91505092915050565b60008060008060008060c08789031215620006dc57620006db620009ef565b5b600087015167ffffffffffffffff811115620006fd57620006fc620009ea565b5b6200070b89828a0162000689565b965050602087015167ffffffffffffffff8111156200072f576200072e620009ea565b5b6200073d89828a0162000689565b955050604087015167ffffffffffffffff811115620007615762000760620009ea565b5b6200076f89828a0162000689565b945050606087015167ffffffffffffffff811115620007935762000792620009ea565b5b620007a189828a0162000689565b935050608087015167ffffffffffffffff811115620007c557620007c4620009ea565b5b620007d389828a0162000689565b92505060a0620007e689828a0162000672565b9150509295509295509295565b6000620008026020836200089b565b91506200080f8262000a05565b602082019050919050565b600060208201905081810360008301526200083581620007f3565b9050919050565b6000620008486200085b565b90506200085682826200094c565b919050565b6000604051905090565b600067ffffffffffffffff821115620008835762000882620009b1565b5b6200088e82620009f4565b9050602081019050919050565b600082825260208201905092915050565b6000620008b982620008c0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b8381101562000900578082015181840152602081019050620008e3565b8381111562000910576000848401525b50505050565b600060028204905060018216806200092f57607f821691505b6020821081141562000946576200094562000982565b5b50919050565b6200095782620009f4565b810181811067ffffffffffffffff82111715620009795762000978620009b1565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000a3981620008ac565b811462000a4557600080fd5b50565b615e6a8062000a586000396000f3fe6080604052600436106103765760003560e01c806370a08231116101d1578063c668286211610102578063e985e9c5116100a0578063f2c4ce1e1161006f578063f2c4ce1e14610cea578063f2fde38b14610d13578063f884079514610d3c578063fc5e37ae14610d6557610376565b8063e985e9c514610c44578063edec5f2714610c81578063eea8a0ed14610caa578063ef982c8014610cd357610376565b8063d0ab14fb116100dc578063d0ab14fb14610b9c578063d2f902cf14610bc7578063d5abeb0114610bf0578063da3ef23f14610c1b57610376565b8063c668286214610b18578063c87b56dd14610b43578063c9b298f114610b8057610376565b80639d19e01e1161016f578063a475b5dd11610149578063a475b5dd14610a82578063a6a3d54e14610a99578063b88d4fde14610ac4578063c1bd8cf914610aed57610376565b80639d19e01e14610a00578063a0712d6814610a3d578063a22cb46514610a5957610376565b806384203f4b116101ab57806384203f4b146109425780638693da201461097f5780638da5cb5b146109aa57806395d89b41146109d557610376565b806370a08231146108c3578063715018a614610900578063804f43cd1461091757610376565b80633af32abf116102ab57806355f804b3116102495780636352211e116102235780636352211e1461080757806369c64652146108445780636a2c6dae1461086d5780636c0360eb1461089857610376565b806355f804b3146107765780635c975abb1461079f578063602a70f1146107ca57610376565b806342842e0e1161028557806342842e0e146106a8578063438b6300146106d15780634f6ccce71461070e578063518302271461074b57610376565b80633af32abf146106175780633ccfd60b14610654578063421b09f11461066b57610376565b806318160ddd1161031857806321bdb26e116102f257806321bdb26e1461055b57806323b872dd146105865780632a23d07d146105af5780632f745c59146105da57610376565b806318160ddd146104c857806318cae269146104f357806319cc02aa1461053057610376565b8063081812fc11610354578063081812fc1461040e578063081c8c441461044b578063095ea7b31461047657806316c38b3c1461049f57610376565b806301ffc9a71461037b57806302411913146103b857806306fdde03146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906145ea565b610d90565b6040516103af9190614d62565b60405180910390f35b3480156103c457600080fd5b506103cd610e0a565b6040516103da919061515f565b60405180910390f35b3480156103ef57600080fd5b506103f8610e10565b6040516104059190614d7d565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061468d565b610ea2565b6040516104429190614cd9565b60405180910390f35b34801561045757600080fd5b50610460610f27565b60405161046d9190614d7d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614534565b610fb5565b005b3480156104ab57600080fd5b506104c660048036038101906104c191906145bd565b6110cd565b005b3480156104d457600080fd5b506104dd611166565b6040516104ea919061515f565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906143b1565b611170565b604051610527919061515f565b60405180910390f35b34801561053c57600080fd5b50610545611188565b6040516105529190614d62565b60405180910390f35b34801561056757600080fd5b5061057061119b565b60405161057d919061515f565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a8919061441e565b6111a1565b005b3480156105bb57600080fd5b506105c4611201565b6040516105d1919061515f565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190614534565b611207565b60405161060e919061515f565b60405180910390f35b34801561062357600080fd5b5061063e600480360381019061063991906143b1565b6112ac565b60405161064b9190614d62565b60405180910390f35b34801561066057600080fd5b506106696112b7565b005b34801561067757600080fd5b50610692600480360381019061068d919061468d565b611382565b60405161069f9190614d62565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca919061441e565b6113e5565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906143b1565b611405565b6040516107059190614d40565b60405180910390f35b34801561071a57600080fd5b506107356004803603810190610730919061468d565b6114b3565b604051610742919061515f565b60405180910390f35b34801561075757600080fd5b50610760611524565b60405161076d9190614d62565b60405180910390f35b34801561078257600080fd5b5061079d60048036038101906107989190614644565b611537565b005b3480156107ab57600080fd5b506107b46115cd565b6040516107c19190614d62565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec919061468d565b6115e0565b6040516107fe919061515f565b60405180910390f35b34801561081357600080fd5b5061082e6004803603810190610829919061468d565b611604565b60405161083b9190614cd9565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190614644565b6116b6565b005b34801561087957600080fd5b5061088261174c565b60405161088f9190614d7d565b60405180910390f35b3480156108a457600080fd5b506108ad6117da565b6040516108ba9190614d7d565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906143b1565b611868565b6040516108f7919061515f565b60405180910390f35b34801561090c57600080fd5b50610915611920565b005b34801561092357600080fd5b5061092c6119a8565b6040516109399190614d62565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906143b1565b6119bb565b6040516109769190614d62565b60405180910390f35b34801561098b57600080fd5b50610994611a11565b6040516109a1919061515f565b60405180910390f35b3480156109b657600080fd5b506109bf611a17565b6040516109cc9190614cd9565b60405180910390f35b3480156109e157600080fd5b506109ea611a41565b6040516109f79190614d7d565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a22919061468d565b611ad3565b604051610a349190614cd9565b60405180910390f35b610a576004803603810190610a52919061468d565b611b06565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906144f4565b611d6a565b005b348015610a8e57600080fd5b50610a97611d80565b005b348015610aa557600080fd5b50610aae611e19565b604051610abb919061515f565b60405180910390f35b348015610ad057600080fd5b50610aeb6004803603810190610ae69190614471565b611e1f565b005b348015610af957600080fd5b50610b02611e81565b604051610b0f919061515f565b60405180910390f35b348015610b2457600080fd5b50610b2d611e87565b604051610b3a9190614d7d565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b65919061468d565b611f15565b604051610b779190614d7d565b60405180910390f35b610b9a6004803603810190610b95919061468d565b61210e565b005b348015610ba857600080fd5b50610bb1612611565b604051610bbe919061515f565b60405180910390f35b348015610bd357600080fd5b50610bee6004803603810190610be991906145bd565b612617565b005b348015610bfc57600080fd5b50610c056126b0565b604051610c12919061515f565b60405180910390f35b348015610c2757600080fd5b50610c426004803603810190610c3d9190614644565b6126b6565b005b348015610c5057600080fd5b50610c6b6004803603810190610c6691906143de565b61274c565b604051610c789190614d62565b60405180910390f35b348015610c8d57600080fd5b50610ca86004803603810190610ca39190614574565b6127e0565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc9190614574565b6128f1565b005b348015610cdf57600080fd5b50610ce8612a02565b005b348015610cf657600080fd5b50610d116004803603810190610d0c9190614644565b612c9b565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d3591906143b1565b612d31565b005b348015610d4857600080fd5b50610d636004803603810190610d5e91906145bd565b612e29565b005b348015610d7157600080fd5b50610d7a612ec2565b604051610d879190614d62565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e035750610e0282612ed5565b5b9050919050565b60135481565b606060008054610e1f90615489565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90615489565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6000610ead82612fb7565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390614fdf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610f3490615489565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6090615489565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505081565b6000610fc082611604565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906150bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611050613023565b73ffffffffffffffffffffffffffffffffffffffff16148061107f575061107e81611079613023565b61274c565b5b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590614f3f565b60405180910390fd5b6110c8838361302b565b505050565b6110d5613023565b73ffffffffffffffffffffffffffffffffffffffff166110f3611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614fff565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b6000601054905090565b601a6020528060005260406000206000915090505481565b601b60149054906101000a900460ff1681565b60125481565b6111b26111ac613023565b826130e4565b6111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906150df565b60405180910390fd5b6111fc8383836131c2565b505050565b60165481565b600061121283611868565b8210611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614dbf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060019050919050565b6112bf613023565b73ffffffffffffffffffffffffffffffffffffffff166112dd611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90614fff565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561137e573d6000803e3d6000fd5b5050565b600080600090505b601d805490508110156113da5782601d82815481106113ac576113ab615622565b5b906000526020600020015414156113c75760019150506113e0565b80806113d2906154ec565b91505061138a565b50600090505b919050565b61140083838360405180602001604052806000815250611e1f565b505050565b6060600061141283611868565b905060008167ffffffffffffffff8111156114305761142f615651565b5b60405190808252806020026020018201604052801561145e5781602001602082028036833780820191505090505b50905060005b828110156114a8576114768582611207565b82828151811061148957611488615622565b5b60200260200101818152505080806114a0906154ec565b915050611464565b508092505050919050565b60006114bd61341e565b82106114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906150ff565b60405180910390fd5b6008828154811061151257611511615622565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b61153f613023565b73ffffffffffffffffffffffffffffffffffffffff1661155d611a17565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90614fff565b60405180910390fd5b80600b90805190602001906115c9929190614127565b5050565b601560009054906101000a900460ff1681565b601d81815481106115f057600080fd5b906000526020600020016000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f7f565b60405180910390fd5b80915050919050565b6116be613023565b73ffffffffffffffffffffffffffffffffffffffff166116dc611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990614fff565b60405180910390fd5b80600e9080519060200190611748929190614127565b5050565b600e805461175990615489565b80601f016020809104026020016040519081016040528092919081815260200182805461178590615489565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b505050505081565b600b80546117e790615489565b80601f016020809104026020016040519081016040528092919081815260200182805461181390615489565b80156118605780601f1061183557610100808354040283529160200191611860565b820191906000526020600020905b81548152906001019060200180831161184357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090614f5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611928613023565b73ffffffffffffffffffffffffffffffffffffffff16611946611a17565b73ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614fff565b60405180910390fd5b6119a6600061342b565b565b601860009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a5090615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7c90615489565b8015611ac95780601f10611a9e57610100808354040283529160200191611ac9565b820191906000526020600020905b815481529060010190602001808311611aac57829003601f168201915b5050505050905090565b601c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1615611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90614dff565b60405180910390fd5b60001515601860009054906101000a900460ff161515148015611b8c575060001515601860019054906101000a900460ff161515145b611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614e9f565b60405180910390fd5b6000611bd5611166565b905060008211611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061513f565b60405180910390fd5b600f548282611c2991906152be565b1115611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614f9f565b60405180910390fd5b81601754611c789190615345565b341015611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614f1f565b60405180910390fd5b6000600190505b828111611cf65760008183611cd691906152be565b9050611ce233826134f1565b508080611cee906154ec565b915050611cc1565b5081601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4691906152be565b925050819055508160106000828254611d5f91906152be565b925050819055505050565b611d7c611d75613023565b838361350f565b5050565b611d88613023565b73ffffffffffffffffffffffffffffffffffffffff16611da6611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614fff565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b60145481565b611e30611e2a613023565b836130e4565b611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e66906150df565b60405180910390fd5b611e7b8484848461367c565b50505050565b60105481565b600c8054611e9490615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec090615489565b8015611f0d5780601f10611ee257610100808354040283529160200191611f0d565b820191906000526020600020905b815481529060010190602001808311611ef057829003601f168201915b505050505081565b6060611f2082612fb7565b611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f569061505f565b60405180910390fd5b60001515601560019054906101000a900460ff16151514156120ad57611f8482611382565b1561201b57600e8054611f9690615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc290615489565b801561200f5780601f10611fe45761010080835404028352916020019161200f565b820191906000526020600020905b815481529060010190602001808311611ff257829003601f168201915b50505050509050612109565b600d805461202890615489565b80601f016020809104026020016040519081016040528092919081815260200182805461205490615489565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b50505050509050612109565b60006120b76136d8565b905060008151116120d75760405180602001604052806000815250612105565b806120e18461376a565b600c6040516020016120f593929190614ca8565b6040516020818303038152906040525b9150505b919050565b601560009054906101000a900460ff161561215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614dff565b60405180910390fd5b600081116121a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121989061513f565b60405180910390fd5b60011515601860009054906101000a900460ff16151514806121d6575060011515601860019054906101000a900460ff161515145b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061509f565b60405180910390fd5b600f548160105461222691906152be565b1115612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614f9f565b60405180910390fd5b6012548160115461227891906152be565b11156122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614ebf565b60405180910390fd5b60006122c4336119bb565b905060006122d1336112ac565b9050601860009054906101000a900460ff1680156122ec5750805b8061230c5750601860019054906101000a900460ff16801561230b5750815b5b61234b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123429061501f565b60405180910390fd5b826016546123599190615345565b34101561239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290614f1f565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508215806123f9575060145484826123f691906152be565b11155b612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f9061507f565b60405180910390fd5b8115806124525750601354848261244f91906152be565b11155b612491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124889061507f565b60405180910390fd5b83601160008282546124a391906152be565b925050819055506000600190505b84811161259b576000816010546124c891906152be565b9050831561257c576124fc601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134f1565b33601c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d819080600181540180825580915050600190039060005260206000200160009091909190915055612587565b61258633826134f1565b5b508080612593906154ec565b9150506124b1565b5083601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125eb91906152be565b92505081905550836010600082825461260491906152be565b9250508190555050505050565b60115481565b61261f613023565b73ffffffffffffffffffffffffffffffffffffffff1661263d611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90614fff565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b600f5481565b6126be613023565b73ffffffffffffffffffffffffffffffffffffffff166126dc611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272990614fff565b60405180910390fd5b80600c9080519060200190612748929190614127565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127e8613023565b73ffffffffffffffffffffffffffffffffffffffff16612806611a17565b73ffffffffffffffffffffffffffffffffffffffff161461285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614fff565b60405180910390fd5b60005b81518110156128ed5760016019600084848151811061288157612880615622565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806128e5906154ec565b91505061285f565b5050565b6128f9613023565b73ffffffffffffffffffffffffffffffffffffffff16612917611a17565b73ffffffffffffffffffffffffffffffffffffffff161461296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614fff565b60405180910390fd5b60005b81518110156129fe576001601e600084848151811061299257612991615622565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806129f6906154ec565b915050612970565b5050565b612a0a613023565b73ffffffffffffffffffffffffffffffffffffffff16612a28611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614fff565b60405180910390fd5b601b60149054906101000a900460ff1615612ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac59061511f565b60405180910390fd5b601560009054906101000a900460ff1615612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1590614dff565b60405180910390fd5b601860009054906101000a900460ff1615612b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6590614edf565b60405180910390fd5b601860019054906101000a900460ff1615612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590614d9f565b60405180910390fd5b6001601b60146101000a81548160ff02191690831515021790555060005b601d80549050811015612c9857612c85601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c6000601d8581548110612c2757612c26615622565b5b9060005260206000200154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8481548110612c7557612c74615622565b5b90600052602060002001546111a1565b8080612c90906154ec565b915050612bdc565b50565b612ca3613023565b73ffffffffffffffffffffffffffffffffffffffff16612cc1611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90614fff565b60405180910390fd5b80600d9080519060200190612d2d929190614127565b5050565b612d39613023565b73ffffffffffffffffffffffffffffffffffffffff16612d57611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614fff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490614e1f565b60405180910390fd5b612e268161342b565b50565b612e31613023565b73ffffffffffffffffffffffffffffffffffffffff16612e4f611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614fff565b60405180910390fd5b80601860016101000a81548160ff02191690831515021790555050565b601860019054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fa057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612fb05750612faf826138cb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661309e83611604565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130ef82612fb7565b61312e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312590614eff565b60405180910390fd5b600061313983611604565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806131a857508373ffffffffffffffffffffffffffffffffffffffff1661319084610ea2565b73ffffffffffffffffffffffffffffffffffffffff16145b806131b957506131b8818561274c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131e282611604565b73ffffffffffffffffffffffffffffffffffffffff1614613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f9061503f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614e5f565b60405180910390fd5b6132b3838383613935565b6132be60008261302b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330e919061539f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461336591906152be565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61350b828260405180602001604052806000815250613a49565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590614e7f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161366f9190614d62565b60405180910390a3505050565b6136878484846131c2565b61369384848484613aa4565b6136d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c990614ddf565b60405180910390fd5b50505050565b6060600b80546136e790615489565b80601f016020809104026020016040519081016040528092919081815260200182805461371390615489565b80156137605780601f1061373557610100808354040283529160200191613760565b820191906000526020600020905b81548152906001019060200180831161374357829003601f168201915b5050505050905090565b606060008214156137b2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506138c6565b600082905060005b600082146137e45780806137cd906154ec565b915050600a826137dd9190615314565b91506137ba565b60008167ffffffffffffffff811115613800576137ff615651565b5b6040519080825280601f01601f1916602001820160405280156138325781602001600182028036833780820191505090505b5090505b600085146138bf5760018261384b919061539f565b9150600a8561385a9190615535565b603061386691906152be565b60f81b81838151811061387c5761387b615622565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138b89190615314565b9450613836565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613940838383613c3b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139835761397e81613c40565b6139c2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146139c1576139c08382613c89565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a0557613a0081613df6565b613a44565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a4357613a428282613ec7565b5b5b505050565b613a538383613f46565b613a606000848484613aa4565b613a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9690614ddf565b60405180910390fd5b505050565b6000613ac58473ffffffffffffffffffffffffffffffffffffffff16614114565b15613c2e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613aee613023565b8786866040518563ffffffff1660e01b8152600401613b109493929190614cf4565b602060405180830381600087803b158015613b2a57600080fd5b505af1925050508015613b5b57506040513d601f19601f82011682018060405250810190613b589190614617565b60015b613bde573d8060008114613b8b576040519150601f19603f3d011682016040523d82523d6000602084013e613b90565b606091505b50600081511415613bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcd90614ddf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c33565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c9684611868565b613ca0919061539f565b9050600060076000848152602001908152602001600020549050818114613d85576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e0a919061539f565b9050600060096000848152602001908152602001600020549050600060088381548110613e3a57613e39615622565b5b906000526020600020015490508060088381548110613e5c57613e5b615622565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613eab57613eaa6155f3565b5b6001900381819060005260206000200160009055905550505050565b6000613ed283611868565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fad90614fbf565b60405180910390fd5b613fbf81612fb7565b15613fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff690614e3f565b60405180910390fd5b61400b60008383613935565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461405b91906152be565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461413390615489565b90600052602060002090601f016020900481019282614155576000855561419c565b82601f1061416e57805160ff191683800117855561419c565b8280016001018555821561419c579182015b8281111561419b578251825591602001919060010190614180565b5b5090506141a991906141ad565b5090565b5b808211156141c65760008160009055506001016141ae565b5090565b60006141dd6141d88461519f565b61517a565b90508083825260208201905082856020860282011115614200576141ff615685565b5b60005b85811015614230578161421688826142be565b845260208401935060208301925050600181019050614203565b5050509392505050565b600061424d614248846151cb565b61517a565b9050828152602081018484840111156142695761426861568a565b5b614274848285615447565b509392505050565b600061428f61428a846151fc565b61517a565b9050828152602081018484840111156142ab576142aa61568a565b5b6142b6848285615447565b509392505050565b6000813590506142cd81615dd8565b92915050565b600082601f8301126142e8576142e7615680565b5b81356142f88482602086016141ca565b91505092915050565b60008135905061431081615def565b92915050565b60008135905061432581615e06565b92915050565b60008151905061433a81615e06565b92915050565b600082601f83011261435557614354615680565b5b813561436584826020860161423a565b91505092915050565b600082601f83011261438357614382615680565b5b813561439384826020860161427c565b91505092915050565b6000813590506143ab81615e1d565b92915050565b6000602082840312156143c7576143c6615694565b5b60006143d5848285016142be565b91505092915050565b600080604083850312156143f5576143f4615694565b5b6000614403858286016142be565b9250506020614414858286016142be565b9150509250929050565b60008060006060848603121561443757614436615694565b5b6000614445868287016142be565b9350506020614456868287016142be565b92505060406144678682870161439c565b9150509250925092565b6000806000806080858703121561448b5761448a615694565b5b6000614499878288016142be565b94505060206144aa878288016142be565b93505060406144bb8782880161439c565b925050606085013567ffffffffffffffff8111156144dc576144db61568f565b5b6144e887828801614340565b91505092959194509250565b6000806040838503121561450b5761450a615694565b5b6000614519858286016142be565b925050602061452a85828601614301565b9150509250929050565b6000806040838503121561454b5761454a615694565b5b6000614559858286016142be565b925050602061456a8582860161439c565b9150509250929050565b60006020828403121561458a57614589615694565b5b600082013567ffffffffffffffff8111156145a8576145a761568f565b5b6145b4848285016142d3565b91505092915050565b6000602082840312156145d3576145d2615694565b5b60006145e184828501614301565b91505092915050565b600060208284031215614600576145ff615694565b5b600061460e84828501614316565b91505092915050565b60006020828403121561462d5761462c615694565b5b600061463b8482850161432b565b91505092915050565b60006020828403121561465a57614659615694565b5b600082013567ffffffffffffffff8111156146785761467761568f565b5b6146848482850161436e565b91505092915050565b6000602082840312156146a3576146a2615694565b5b60006146b18482850161439c565b91505092915050565b60006146c68383614c8a565b60208301905092915050565b6146db816153d3565b82525050565b60006146ec82615252565b6146f68185615280565b93506147018361522d565b8060005b8381101561473257815161471988826146ba565b975061472483615273565b925050600181019050614705565b5085935050505092915050565b614748816153e5565b82525050565b60006147598261525d565b6147638185615291565b9350614773818560208601615456565b61477c81615699565b840191505092915050565b600061479282615268565b61479c81856152a2565b93506147ac818560208601615456565b6147b581615699565b840191505092915050565b60006147cb82615268565b6147d581856152b3565b93506147e5818560208601615456565b80840191505092915050565b600081546147fe81615489565b61480881866152b3565b94506001821660008114614823576001811461483457614867565b60ff19831686528186019350614867565b61483d8561523d565b60005b8381101561485f57815481890152600182019150602081019050614840565b838801955050505b50505092915050565b600061487d6019836152a2565b9150614888826156aa565b602082019050919050565b60006148a0602b836152a2565b91506148ab826156d3565b604082019050919050565b60006148c36032836152a2565b91506148ce82615722565b604082019050919050565b60006148e66016836152a2565b91506148f182615771565b602082019050919050565b60006149096026836152a2565b91506149148261579a565b604082019050919050565b600061492c601c836152a2565b9150614937826157e9565b602082019050919050565b600061494f6024836152a2565b915061495a82615812565b604082019050919050565b60006149726019836152a2565b915061497d82615861565b602082019050919050565b6000614995601c836152a2565b91506149a08261588a565b602082019050919050565b60006149b8601e836152a2565b91506149c3826158b3565b602082019050919050565b60006149db601f836152a2565b91506149e6826158dc565b602082019050919050565b60006149fe602c836152a2565b9150614a0982615905565b604082019050919050565b6000614a216012836152a2565b9150614a2c82615954565b602082019050919050565b6000614a446038836152a2565b9150614a4f8261597d565b604082019050919050565b6000614a67602a836152a2565b9150614a72826159cc565b604082019050919050565b6000614a8a6029836152a2565b9150614a9582615a1b565b604082019050919050565b6000614aad6016836152a2565b9150614ab882615a6a565b602082019050919050565b6000614ad06020836152a2565b9150614adb82615a93565b602082019050919050565b6000614af3602c836152a2565b9150614afe82615abc565b604082019050919050565b6000614b166020836152a2565b9150614b2182615b0b565b602082019050919050565b6000614b396023836152a2565b9150614b4482615b34565b604082019050919050565b6000614b5c6029836152a2565b9150614b6782615b83565b604082019050919050565b6000614b7f602f836152a2565b9150614b8a82615bd2565b604082019050919050565b6000614ba2601c836152a2565b9150614bad82615c21565b602082019050919050565b6000614bc56012836152a2565b9150614bd082615c4a565b602082019050919050565b6000614be86021836152a2565b9150614bf382615c73565b604082019050919050565b6000614c0b6031836152a2565b9150614c1682615cc2565b604082019050919050565b6000614c2e602c836152a2565b9150614c3982615d11565b604082019050919050565b6000614c51602d836152a2565b9150614c5c82615d60565b604082019050919050565b6000614c74601b836152a2565b9150614c7f82615daf565b602082019050919050565b614c938161543d565b82525050565b614ca28161543d565b82525050565b6000614cb482866147c0565b9150614cc082856147c0565b9150614ccc82846147f1565b9150819050949350505050565b6000602082019050614cee60008301846146d2565b92915050565b6000608082019050614d0960008301876146d2565b614d1660208301866146d2565b614d236040830185614c99565b8181036060830152614d35818461474e565b905095945050505050565b60006020820190508181036000830152614d5a81846146e1565b905092915050565b6000602082019050614d77600083018461473f565b92915050565b60006020820190508181036000830152614d978184614787565b905092915050565b60006020820190508181036000830152614db881614870565b9050919050565b60006020820190508181036000830152614dd881614893565b9050919050565b60006020820190508181036000830152614df8816148b6565b9050919050565b60006020820190508181036000830152614e18816148d9565b9050919050565b60006020820190508181036000830152614e38816148fc565b9050919050565b60006020820190508181036000830152614e588161491f565b9050919050565b60006020820190508181036000830152614e7881614942565b9050919050565b60006020820190508181036000830152614e9881614965565b9050919050565b60006020820190508181036000830152614eb881614988565b9050919050565b60006020820190508181036000830152614ed8816149ab565b9050919050565b60006020820190508181036000830152614ef8816149ce565b9050919050565b60006020820190508181036000830152614f18816149f1565b9050919050565b60006020820190508181036000830152614f3881614a14565b9050919050565b60006020820190508181036000830152614f5881614a37565b9050919050565b60006020820190508181036000830152614f7881614a5a565b9050919050565b60006020820190508181036000830152614f9881614a7d565b9050919050565b60006020820190508181036000830152614fb881614aa0565b9050919050565b60006020820190508181036000830152614fd881614ac3565b9050919050565b60006020820190508181036000830152614ff881614ae6565b9050919050565b6000602082019050818103600083015261501881614b09565b9050919050565b6000602082019050818103600083015261503881614b2c565b9050919050565b6000602082019050818103600083015261505881614b4f565b9050919050565b6000602082019050818103600083015261507881614b72565b9050919050565b6000602082019050818103600083015261509881614b95565b9050919050565b600060208201905081810360008301526150b881614bb8565b9050919050565b600060208201905081810360008301526150d881614bdb565b9050919050565b600060208201905081810360008301526150f881614bfe565b9050919050565b6000602082019050818103600083015261511881614c21565b9050919050565b6000602082019050818103600083015261513881614c44565b9050919050565b6000602082019050818103600083015261515881614c67565b9050919050565b60006020820190506151746000830184614c99565b92915050565b6000615184615195565b905061519082826154bb565b919050565b6000604051905090565b600067ffffffffffffffff8211156151ba576151b9615651565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151e6576151e5615651565b5b6151ef82615699565b9050602081019050919050565b600067ffffffffffffffff82111561521757615216615651565b5b61522082615699565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006152c98261543d565b91506152d48361543d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561530957615308615566565b5b828201905092915050565b600061531f8261543d565b915061532a8361543d565b92508261533a57615339615595565b5b828204905092915050565b60006153508261543d565b915061535b8361543d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561539457615393615566565b5b828202905092915050565b60006153aa8261543d565b91506153b58361543d565b9250828210156153c8576153c7615566565b5b828203905092915050565b60006153de8261541d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615474578082015181840152602081019050615459565b83811115615483576000848401525b50505050565b600060028204905060018216806154a157607f821691505b602082108114156154b5576154b46155c4565b5b50919050565b6154c482615699565b810181811067ffffffffffffffff821117156154e3576154e2615651565b5b80604052505050565b60006154f78261543d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561552a57615529615566565b5b600182019050919050565b60006155408261543d565b915061554b8361543d565b92508261555b5761555a615595565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5649502073616c65206973207374696c6c2072756e6e696e6700000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c69632073616c65206973206e6f74206f70656e207965742e00000000600082015250565b7f4d61782050726573616c65204e4654206c696d69742065786365656465640000600082015250565b7f57686974656c6973742073616c65206973207374696c6c2072756e6e696e6700600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f55736572206973206e6f7420656c696769626c6520746f20746865205072657360008201527f616c650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f50726573616c6520697320636c6f7365642e0000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57686974656c69737420546f6b656e73206861766520616c726561647920626560008201527f656e2061697264726f7065642e00000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615de1816153d3565b8114615dec57600080fd5b50565b615df8816153e5565b8114615e0357600080fd5b50565b615e0f816153f1565b8114615e1a57600080fd5b50565b615e268161543d565b8114615e3157600080fd5b5056fea26469706673582212208159f7086fc24f8b852e267b88a5eb41682fa85f6ea5ff593742aac26d74b61264736f6c6343000807003368747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f636c61737369632e6a736f6e68747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f7072656f726465722e6a736f6e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004bc4f448660e12315fcf0fe0d9d60f4e2b169efe000000000000000000000000000000000000000000000000000000000000000f526963682042756c6c7320436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000352424300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f636c61737369632e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f7072656f726465722e6a736f6e000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103765760003560e01c806370a08231116101d1578063c668286211610102578063e985e9c5116100a0578063f2c4ce1e1161006f578063f2c4ce1e14610cea578063f2fde38b14610d13578063f884079514610d3c578063fc5e37ae14610d6557610376565b8063e985e9c514610c44578063edec5f2714610c81578063eea8a0ed14610caa578063ef982c8014610cd357610376565b8063d0ab14fb116100dc578063d0ab14fb14610b9c578063d2f902cf14610bc7578063d5abeb0114610bf0578063da3ef23f14610c1b57610376565b8063c668286214610b18578063c87b56dd14610b43578063c9b298f114610b8057610376565b80639d19e01e1161016f578063a475b5dd11610149578063a475b5dd14610a82578063a6a3d54e14610a99578063b88d4fde14610ac4578063c1bd8cf914610aed57610376565b80639d19e01e14610a00578063a0712d6814610a3d578063a22cb46514610a5957610376565b806384203f4b116101ab57806384203f4b146109425780638693da201461097f5780638da5cb5b146109aa57806395d89b41146109d557610376565b806370a08231146108c3578063715018a614610900578063804f43cd1461091757610376565b80633af32abf116102ab57806355f804b3116102495780636352211e116102235780636352211e1461080757806369c64652146108445780636a2c6dae1461086d5780636c0360eb1461089857610376565b806355f804b3146107765780635c975abb1461079f578063602a70f1146107ca57610376565b806342842e0e1161028557806342842e0e146106a8578063438b6300146106d15780634f6ccce71461070e578063518302271461074b57610376565b80633af32abf146106175780633ccfd60b14610654578063421b09f11461066b57610376565b806318160ddd1161031857806321bdb26e116102f257806321bdb26e1461055b57806323b872dd146105865780632a23d07d146105af5780632f745c59146105da57610376565b806318160ddd146104c857806318cae269146104f357806319cc02aa1461053057610376565b8063081812fc11610354578063081812fc1461040e578063081c8c441461044b578063095ea7b31461047657806316c38b3c1461049f57610376565b806301ffc9a71461037b57806302411913146103b857806306fdde03146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d91906145ea565b610d90565b6040516103af9190614d62565b60405180910390f35b3480156103c457600080fd5b506103cd610e0a565b6040516103da919061515f565b60405180910390f35b3480156103ef57600080fd5b506103f8610e10565b6040516104059190614d7d565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061468d565b610ea2565b6040516104429190614cd9565b60405180910390f35b34801561045757600080fd5b50610460610f27565b60405161046d9190614d7d565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614534565b610fb5565b005b3480156104ab57600080fd5b506104c660048036038101906104c191906145bd565b6110cd565b005b3480156104d457600080fd5b506104dd611166565b6040516104ea919061515f565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906143b1565b611170565b604051610527919061515f565b60405180910390f35b34801561053c57600080fd5b50610545611188565b6040516105529190614d62565b60405180910390f35b34801561056757600080fd5b5061057061119b565b60405161057d919061515f565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a8919061441e565b6111a1565b005b3480156105bb57600080fd5b506105c4611201565b6040516105d1919061515f565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190614534565b611207565b60405161060e919061515f565b60405180910390f35b34801561062357600080fd5b5061063e600480360381019061063991906143b1565b6112ac565b60405161064b9190614d62565b60405180910390f35b34801561066057600080fd5b506106696112b7565b005b34801561067757600080fd5b50610692600480360381019061068d919061468d565b611382565b60405161069f9190614d62565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca919061441e565b6113e5565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906143b1565b611405565b6040516107059190614d40565b60405180910390f35b34801561071a57600080fd5b506107356004803603810190610730919061468d565b6114b3565b604051610742919061515f565b60405180910390f35b34801561075757600080fd5b50610760611524565b60405161076d9190614d62565b60405180910390f35b34801561078257600080fd5b5061079d60048036038101906107989190614644565b611537565b005b3480156107ab57600080fd5b506107b46115cd565b6040516107c19190614d62565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec919061468d565b6115e0565b6040516107fe919061515f565b60405180910390f35b34801561081357600080fd5b5061082e6004803603810190610829919061468d565b611604565b60405161083b9190614cd9565b60405180910390f35b34801561085057600080fd5b5061086b60048036038101906108669190614644565b6116b6565b005b34801561087957600080fd5b5061088261174c565b60405161088f9190614d7d565b60405180910390f35b3480156108a457600080fd5b506108ad6117da565b6040516108ba9190614d7d565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906143b1565b611868565b6040516108f7919061515f565b60405180910390f35b34801561090c57600080fd5b50610915611920565b005b34801561092357600080fd5b5061092c6119a8565b6040516109399190614d62565b60405180910390f35b34801561094e57600080fd5b50610969600480360381019061096491906143b1565b6119bb565b6040516109769190614d62565b60405180910390f35b34801561098b57600080fd5b50610994611a11565b6040516109a1919061515f565b60405180910390f35b3480156109b657600080fd5b506109bf611a17565b6040516109cc9190614cd9565b60405180910390f35b3480156109e157600080fd5b506109ea611a41565b6040516109f79190614d7d565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a22919061468d565b611ad3565b604051610a349190614cd9565b60405180910390f35b610a576004803603810190610a52919061468d565b611b06565b005b348015610a6557600080fd5b50610a806004803603810190610a7b91906144f4565b611d6a565b005b348015610a8e57600080fd5b50610a97611d80565b005b348015610aa557600080fd5b50610aae611e19565b604051610abb919061515f565b60405180910390f35b348015610ad057600080fd5b50610aeb6004803603810190610ae69190614471565b611e1f565b005b348015610af957600080fd5b50610b02611e81565b604051610b0f919061515f565b60405180910390f35b348015610b2457600080fd5b50610b2d611e87565b604051610b3a9190614d7d565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b65919061468d565b611f15565b604051610b779190614d7d565b60405180910390f35b610b9a6004803603810190610b95919061468d565b61210e565b005b348015610ba857600080fd5b50610bb1612611565b604051610bbe919061515f565b60405180910390f35b348015610bd357600080fd5b50610bee6004803603810190610be991906145bd565b612617565b005b348015610bfc57600080fd5b50610c056126b0565b604051610c12919061515f565b60405180910390f35b348015610c2757600080fd5b50610c426004803603810190610c3d9190614644565b6126b6565b005b348015610c5057600080fd5b50610c6b6004803603810190610c6691906143de565b61274c565b604051610c789190614d62565b60405180910390f35b348015610c8d57600080fd5b50610ca86004803603810190610ca39190614574565b6127e0565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc9190614574565b6128f1565b005b348015610cdf57600080fd5b50610ce8612a02565b005b348015610cf657600080fd5b50610d116004803603810190610d0c9190614644565b612c9b565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d3591906143b1565b612d31565b005b348015610d4857600080fd5b50610d636004803603810190610d5e91906145bd565b612e29565b005b348015610d7157600080fd5b50610d7a612ec2565b604051610d879190614d62565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e035750610e0282612ed5565b5b9050919050565b60135481565b606060008054610e1f90615489565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4b90615489565b8015610e985780601f10610e6d57610100808354040283529160200191610e98565b820191906000526020600020905b815481529060010190602001808311610e7b57829003601f168201915b5050505050905090565b6000610ead82612fb7565b610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390614fdf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610f3490615489565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6090615489565b8015610fad5780601f10610f8257610100808354040283529160200191610fad565b820191906000526020600020905b815481529060010190602001808311610f9057829003601f168201915b505050505081565b6000610fc082611604565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611028906150bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611050613023565b73ffffffffffffffffffffffffffffffffffffffff16148061107f575061107e81611079613023565b61274c565b5b6110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590614f3f565b60405180910390fd5b6110c8838361302b565b505050565b6110d5613023565b73ffffffffffffffffffffffffffffffffffffffff166110f3611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614fff565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b6000601054905090565b601a6020528060005260406000206000915090505481565b601b60149054906101000a900460ff1681565b60125481565b6111b26111ac613023565b826130e4565b6111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906150df565b60405180910390fd5b6111fc8383836131c2565b505050565b60165481565b600061121283611868565b8210611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614dbf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600060019050919050565b6112bf613023565b73ffffffffffffffffffffffffffffffffffffffff166112dd611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90614fff565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561137e573d6000803e3d6000fd5b5050565b600080600090505b601d805490508110156113da5782601d82815481106113ac576113ab615622565b5b906000526020600020015414156113c75760019150506113e0565b80806113d2906154ec565b91505061138a565b50600090505b919050565b61140083838360405180602001604052806000815250611e1f565b505050565b6060600061141283611868565b905060008167ffffffffffffffff8111156114305761142f615651565b5b60405190808252806020026020018201604052801561145e5781602001602082028036833780820191505090505b50905060005b828110156114a8576114768582611207565b82828151811061148957611488615622565b5b60200260200101818152505080806114a0906154ec565b915050611464565b508092505050919050565b60006114bd61341e565b82106114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f5906150ff565b60405180910390fd5b6008828154811061151257611511615622565b5b90600052602060002001549050919050565b601560019054906101000a900460ff1681565b61153f613023565b73ffffffffffffffffffffffffffffffffffffffff1661155d611a17565b73ffffffffffffffffffffffffffffffffffffffff16146115b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115aa90614fff565b60405180910390fd5b80600b90805190602001906115c9929190614127565b5050565b601560009054906101000a900460ff1681565b601d81815481106115f057600080fd5b906000526020600020016000915090505481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f7f565b60405180910390fd5b80915050919050565b6116be613023565b73ffffffffffffffffffffffffffffffffffffffff166116dc611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990614fff565b60405180910390fd5b80600e9080519060200190611748929190614127565b5050565b600e805461175990615489565b80601f016020809104026020016040519081016040528092919081815260200182805461178590615489565b80156117d25780601f106117a7576101008083540402835291602001916117d2565b820191906000526020600020905b8154815290600101906020018083116117b557829003601f168201915b505050505081565b600b80546117e790615489565b80601f016020809104026020016040519081016040528092919081815260200182805461181390615489565b80156118605780601f1061183557610100808354040283529160200191611860565b820191906000526020600020905b81548152906001019060200180831161184357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090614f5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611928613023565b73ffffffffffffffffffffffffffffffffffffffff16611946611a17565b73ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199390614fff565b60405180910390fd5b6119a6600061342b565b565b601860009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611a5090615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7c90615489565b8015611ac95780601f10611a9e57610100808354040283529160200191611ac9565b820191906000526020600020905b815481529060010190602001808311611aac57829003601f168201915b5050505050905090565b601c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1615611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90614dff565b60405180910390fd5b60001515601860009054906101000a900460ff161515148015611b8c575060001515601860019054906101000a900460ff161515145b611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614e9f565b60405180910390fd5b6000611bd5611166565b905060008211611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061513f565b60405180910390fd5b600f548282611c2991906152be565b1115611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614f9f565b60405180910390fd5b81601754611c789190615345565b341015611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190614f1f565b60405180910390fd5b6000600190505b828111611cf65760008183611cd691906152be565b9050611ce233826134f1565b508080611cee906154ec565b915050611cc1565b5081601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4691906152be565b925050819055508160106000828254611d5f91906152be565b925050819055505050565b611d7c611d75613023565b838361350f565b5050565b611d88613023565b73ffffffffffffffffffffffffffffffffffffffff16611da6611a17565b73ffffffffffffffffffffffffffffffffffffffff1614611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614fff565b60405180910390fd5b6001601560016101000a81548160ff021916908315150217905550565b60145481565b611e30611e2a613023565b836130e4565b611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e66906150df565b60405180910390fd5b611e7b8484848461367c565b50505050565b60105481565b600c8054611e9490615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec090615489565b8015611f0d5780601f10611ee257610100808354040283529160200191611f0d565b820191906000526020600020905b815481529060010190602001808311611ef057829003601f168201915b505050505081565b6060611f2082612fb7565b611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f569061505f565b60405180910390fd5b60001515601560019054906101000a900460ff16151514156120ad57611f8482611382565b1561201b57600e8054611f9690615489565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc290615489565b801561200f5780601f10611fe45761010080835404028352916020019161200f565b820191906000526020600020905b815481529060010190602001808311611ff257829003601f168201915b50505050509050612109565b600d805461202890615489565b80601f016020809104026020016040519081016040528092919081815260200182805461205490615489565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b50505050509050612109565b60006120b76136d8565b905060008151116120d75760405180602001604052806000815250612105565b806120e18461376a565b600c6040516020016120f593929190614ca8565b6040516020818303038152906040525b9150505b919050565b601560009054906101000a900460ff161561215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590614dff565b60405180910390fd5b600081116121a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121989061513f565b60405180910390fd5b60011515601860009054906101000a900460ff16151514806121d6575060011515601860019054906101000a900460ff161515145b612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c9061509f565b60405180910390fd5b600f548160105461222691906152be565b1115612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e90614f9f565b60405180910390fd5b6012548160115461227891906152be565b11156122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614ebf565b60405180910390fd5b60006122c4336119bb565b905060006122d1336112ac565b9050601860009054906101000a900460ff1680156122ec5750805b8061230c5750601860019054906101000a900460ff16801561230b5750815b5b61234b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123429061501f565b60405180910390fd5b826016546123599190615345565b34101561239b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239290614f1f565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508215806123f9575060145484826123f691906152be565b11155b612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f9061507f565b60405180910390fd5b8115806124525750601354848261244f91906152be565b11155b612491576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124889061507f565b60405180910390fd5b83601160008282546124a391906152be565b925050819055506000600190505b84811161259b576000816010546124c891906152be565b9050831561257c576124fc601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826134f1565b33601c600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d819080600181540180825580915050600190039060005260206000200160009091909190915055612587565b61258633826134f1565b5b508080612593906154ec565b9150506124b1565b5083601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125eb91906152be565b92505081905550836010600082825461260491906152be565b9250508190555050505050565b60115481565b61261f613023565b73ffffffffffffffffffffffffffffffffffffffff1661263d611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a90614fff565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b600f5481565b6126be613023565b73ffffffffffffffffffffffffffffffffffffffff166126dc611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272990614fff565b60405180910390fd5b80600c9080519060200190612748929190614127565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127e8613023565b73ffffffffffffffffffffffffffffffffffffffff16612806611a17565b73ffffffffffffffffffffffffffffffffffffffff161461285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614fff565b60405180910390fd5b60005b81518110156128ed5760016019600084848151811061288157612880615622565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806128e5906154ec565b91505061285f565b5050565b6128f9613023565b73ffffffffffffffffffffffffffffffffffffffff16612917611a17565b73ffffffffffffffffffffffffffffffffffffffff161461296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614fff565b60405180910390fd5b60005b81518110156129fe576001601e600084848151811061299257612991615622565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806129f6906154ec565b915050612970565b5050565b612a0a613023565b73ffffffffffffffffffffffffffffffffffffffff16612a28611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590614fff565b60405180910390fd5b601b60149054906101000a900460ff1615612ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac59061511f565b60405180910390fd5b601560009054906101000a900460ff1615612b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1590614dff565b60405180910390fd5b601860009054906101000a900460ff1615612b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6590614edf565b60405180910390fd5b601860019054906101000a900460ff1615612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590614d9f565b60405180910390fd5b6001601b60146101000a81548160ff02191690831515021790555060005b601d80549050811015612c9857612c85601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c6000601d8581548110612c2757612c26615622565b5b9060005260206000200154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601d8481548110612c7557612c74615622565b5b90600052602060002001546111a1565b8080612c90906154ec565b915050612bdc565b50565b612ca3613023565b73ffffffffffffffffffffffffffffffffffffffff16612cc1611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0e90614fff565b60405180910390fd5b80600d9080519060200190612d2d929190614127565b5050565b612d39613023565b73ffffffffffffffffffffffffffffffffffffffff16612d57611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614fff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490614e1f565b60405180910390fd5b612e268161342b565b50565b612e31613023565b73ffffffffffffffffffffffffffffffffffffffff16612e4f611a17565b73ffffffffffffffffffffffffffffffffffffffff1614612ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9c90614fff565b60405180910390fd5b80601860016101000a81548160ff02191690831515021790555050565b601860019054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612fa057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612fb05750612faf826138cb565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661309e83611604565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130ef82612fb7565b61312e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312590614eff565b60405180910390fd5b600061313983611604565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806131a857508373ffffffffffffffffffffffffffffffffffffffff1661319084610ea2565b73ffffffffffffffffffffffffffffffffffffffff16145b806131b957506131b8818561274c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166131e282611604565b73ffffffffffffffffffffffffffffffffffffffff1614613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f9061503f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614e5f565b60405180910390fd5b6132b3838383613935565b6132be60008261302b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330e919061539f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461336591906152be565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61350b828260405180602001604052806000815250613a49565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590614e7f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161366f9190614d62565b60405180910390a3505050565b6136878484846131c2565b61369384848484613aa4565b6136d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c990614ddf565b60405180910390fd5b50505050565b6060600b80546136e790615489565b80601f016020809104026020016040519081016040528092919081815260200182805461371390615489565b80156137605780601f1061373557610100808354040283529160200191613760565b820191906000526020600020905b81548152906001019060200180831161374357829003601f168201915b5050505050905090565b606060008214156137b2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506138c6565b600082905060005b600082146137e45780806137cd906154ec565b915050600a826137dd9190615314565b91506137ba565b60008167ffffffffffffffff811115613800576137ff615651565b5b6040519080825280601f01601f1916602001820160405280156138325781602001600182028036833780820191505090505b5090505b600085146138bf5760018261384b919061539f565b9150600a8561385a9190615535565b603061386691906152be565b60f81b81838151811061387c5761387b615622565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856138b89190615314565b9450613836565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613940838383613c3b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139835761397e81613c40565b6139c2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146139c1576139c08382613c89565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a0557613a0081613df6565b613a44565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a4357613a428282613ec7565b5b5b505050565b613a538383613f46565b613a606000848484613aa4565b613a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9690614ddf565b60405180910390fd5b505050565b6000613ac58473ffffffffffffffffffffffffffffffffffffffff16614114565b15613c2e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613aee613023565b8786866040518563ffffffff1660e01b8152600401613b109493929190614cf4565b602060405180830381600087803b158015613b2a57600080fd5b505af1925050508015613b5b57506040513d601f19601f82011682018060405250810190613b589190614617565b60015b613bde573d8060008114613b8b576040519150601f19603f3d011682016040523d82523d6000602084013e613b90565b606091505b50600081511415613bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bcd90614ddf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613c33565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c9684611868565b613ca0919061539f565b9050600060076000848152602001908152602001600020549050818114613d85576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613e0a919061539f565b9050600060096000848152602001908152602001600020549050600060088381548110613e3a57613e39615622565b5b906000526020600020015490508060088381548110613e5c57613e5b615622565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613eab57613eaa6155f3565b5b6001900381819060005260206000200160009055905550505050565b6000613ed283611868565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fad90614fbf565b60405180910390fd5b613fbf81612fb7565b15613fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff690614e3f565b60405180910390fd5b61400b60008383613935565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461405b91906152be565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461413390615489565b90600052602060002090601f016020900481019282614155576000855561419c565b82601f1061416e57805160ff191683800117855561419c565b8280016001018555821561419c579182015b8281111561419b578251825591602001919060010190614180565b5b5090506141a991906141ad565b5090565b5b808211156141c65760008160009055506001016141ae565b5090565b60006141dd6141d88461519f565b61517a565b90508083825260208201905082856020860282011115614200576141ff615685565b5b60005b85811015614230578161421688826142be565b845260208401935060208301925050600181019050614203565b5050509392505050565b600061424d614248846151cb565b61517a565b9050828152602081018484840111156142695761426861568a565b5b614274848285615447565b509392505050565b600061428f61428a846151fc565b61517a565b9050828152602081018484840111156142ab576142aa61568a565b5b6142b6848285615447565b509392505050565b6000813590506142cd81615dd8565b92915050565b600082601f8301126142e8576142e7615680565b5b81356142f88482602086016141ca565b91505092915050565b60008135905061431081615def565b92915050565b60008135905061432581615e06565b92915050565b60008151905061433a81615e06565b92915050565b600082601f83011261435557614354615680565b5b813561436584826020860161423a565b91505092915050565b600082601f83011261438357614382615680565b5b813561439384826020860161427c565b91505092915050565b6000813590506143ab81615e1d565b92915050565b6000602082840312156143c7576143c6615694565b5b60006143d5848285016142be565b91505092915050565b600080604083850312156143f5576143f4615694565b5b6000614403858286016142be565b9250506020614414858286016142be565b9150509250929050565b60008060006060848603121561443757614436615694565b5b6000614445868287016142be565b9350506020614456868287016142be565b92505060406144678682870161439c565b9150509250925092565b6000806000806080858703121561448b5761448a615694565b5b6000614499878288016142be565b94505060206144aa878288016142be565b93505060406144bb8782880161439c565b925050606085013567ffffffffffffffff8111156144dc576144db61568f565b5b6144e887828801614340565b91505092959194509250565b6000806040838503121561450b5761450a615694565b5b6000614519858286016142be565b925050602061452a85828601614301565b9150509250929050565b6000806040838503121561454b5761454a615694565b5b6000614559858286016142be565b925050602061456a8582860161439c565b9150509250929050565b60006020828403121561458a57614589615694565b5b600082013567ffffffffffffffff8111156145a8576145a761568f565b5b6145b4848285016142d3565b91505092915050565b6000602082840312156145d3576145d2615694565b5b60006145e184828501614301565b91505092915050565b600060208284031215614600576145ff615694565b5b600061460e84828501614316565b91505092915050565b60006020828403121561462d5761462c615694565b5b600061463b8482850161432b565b91505092915050565b60006020828403121561465a57614659615694565b5b600082013567ffffffffffffffff8111156146785761467761568f565b5b6146848482850161436e565b91505092915050565b6000602082840312156146a3576146a2615694565b5b60006146b18482850161439c565b91505092915050565b60006146c68383614c8a565b60208301905092915050565b6146db816153d3565b82525050565b60006146ec82615252565b6146f68185615280565b93506147018361522d565b8060005b8381101561473257815161471988826146ba565b975061472483615273565b925050600181019050614705565b5085935050505092915050565b614748816153e5565b82525050565b60006147598261525d565b6147638185615291565b9350614773818560208601615456565b61477c81615699565b840191505092915050565b600061479282615268565b61479c81856152a2565b93506147ac818560208601615456565b6147b581615699565b840191505092915050565b60006147cb82615268565b6147d581856152b3565b93506147e5818560208601615456565b80840191505092915050565b600081546147fe81615489565b61480881866152b3565b94506001821660008114614823576001811461483457614867565b60ff19831686528186019350614867565b61483d8561523d565b60005b8381101561485f57815481890152600182019150602081019050614840565b838801955050505b50505092915050565b600061487d6019836152a2565b9150614888826156aa565b602082019050919050565b60006148a0602b836152a2565b91506148ab826156d3565b604082019050919050565b60006148c36032836152a2565b91506148ce82615722565b604082019050919050565b60006148e66016836152a2565b91506148f182615771565b602082019050919050565b60006149096026836152a2565b91506149148261579a565b604082019050919050565b600061492c601c836152a2565b9150614937826157e9565b602082019050919050565b600061494f6024836152a2565b915061495a82615812565b604082019050919050565b60006149726019836152a2565b915061497d82615861565b602082019050919050565b6000614995601c836152a2565b91506149a08261588a565b602082019050919050565b60006149b8601e836152a2565b91506149c3826158b3565b602082019050919050565b60006149db601f836152a2565b91506149e6826158dc565b602082019050919050565b60006149fe602c836152a2565b9150614a0982615905565b604082019050919050565b6000614a216012836152a2565b9150614a2c82615954565b602082019050919050565b6000614a446038836152a2565b9150614a4f8261597d565b604082019050919050565b6000614a67602a836152a2565b9150614a72826159cc565b604082019050919050565b6000614a8a6029836152a2565b9150614a9582615a1b565b604082019050919050565b6000614aad6016836152a2565b9150614ab882615a6a565b602082019050919050565b6000614ad06020836152a2565b9150614adb82615a93565b602082019050919050565b6000614af3602c836152a2565b9150614afe82615abc565b604082019050919050565b6000614b166020836152a2565b9150614b2182615b0b565b602082019050919050565b6000614b396023836152a2565b9150614b4482615b34565b604082019050919050565b6000614b5c6029836152a2565b9150614b6782615b83565b604082019050919050565b6000614b7f602f836152a2565b9150614b8a82615bd2565b604082019050919050565b6000614ba2601c836152a2565b9150614bad82615c21565b602082019050919050565b6000614bc56012836152a2565b9150614bd082615c4a565b602082019050919050565b6000614be86021836152a2565b9150614bf382615c73565b604082019050919050565b6000614c0b6031836152a2565b9150614c1682615cc2565b604082019050919050565b6000614c2e602c836152a2565b9150614c3982615d11565b604082019050919050565b6000614c51602d836152a2565b9150614c5c82615d60565b604082019050919050565b6000614c74601b836152a2565b9150614c7f82615daf565b602082019050919050565b614c938161543d565b82525050565b614ca28161543d565b82525050565b6000614cb482866147c0565b9150614cc082856147c0565b9150614ccc82846147f1565b9150819050949350505050565b6000602082019050614cee60008301846146d2565b92915050565b6000608082019050614d0960008301876146d2565b614d1660208301866146d2565b614d236040830185614c99565b8181036060830152614d35818461474e565b905095945050505050565b60006020820190508181036000830152614d5a81846146e1565b905092915050565b6000602082019050614d77600083018461473f565b92915050565b60006020820190508181036000830152614d978184614787565b905092915050565b60006020820190508181036000830152614db881614870565b9050919050565b60006020820190508181036000830152614dd881614893565b9050919050565b60006020820190508181036000830152614df8816148b6565b9050919050565b60006020820190508181036000830152614e18816148d9565b9050919050565b60006020820190508181036000830152614e38816148fc565b9050919050565b60006020820190508181036000830152614e588161491f565b9050919050565b60006020820190508181036000830152614e7881614942565b9050919050565b60006020820190508181036000830152614e9881614965565b9050919050565b60006020820190508181036000830152614eb881614988565b9050919050565b60006020820190508181036000830152614ed8816149ab565b9050919050565b60006020820190508181036000830152614ef8816149ce565b9050919050565b60006020820190508181036000830152614f18816149f1565b9050919050565b60006020820190508181036000830152614f3881614a14565b9050919050565b60006020820190508181036000830152614f5881614a37565b9050919050565b60006020820190508181036000830152614f7881614a5a565b9050919050565b60006020820190508181036000830152614f9881614a7d565b9050919050565b60006020820190508181036000830152614fb881614aa0565b9050919050565b60006020820190508181036000830152614fd881614ac3565b9050919050565b60006020820190508181036000830152614ff881614ae6565b9050919050565b6000602082019050818103600083015261501881614b09565b9050919050565b6000602082019050818103600083015261503881614b2c565b9050919050565b6000602082019050818103600083015261505881614b4f565b9050919050565b6000602082019050818103600083015261507881614b72565b9050919050565b6000602082019050818103600083015261509881614b95565b9050919050565b600060208201905081810360008301526150b881614bb8565b9050919050565b600060208201905081810360008301526150d881614bdb565b9050919050565b600060208201905081810360008301526150f881614bfe565b9050919050565b6000602082019050818103600083015261511881614c21565b9050919050565b6000602082019050818103600083015261513881614c44565b9050919050565b6000602082019050818103600083015261515881614c67565b9050919050565b60006020820190506151746000830184614c99565b92915050565b6000615184615195565b905061519082826154bb565b919050565b6000604051905090565b600067ffffffffffffffff8211156151ba576151b9615651565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156151e6576151e5615651565b5b6151ef82615699565b9050602081019050919050565b600067ffffffffffffffff82111561521757615216615651565b5b61522082615699565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006152c98261543d565b91506152d48361543d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561530957615308615566565b5b828201905092915050565b600061531f8261543d565b915061532a8361543d565b92508261533a57615339615595565b5b828204905092915050565b60006153508261543d565b915061535b8361543d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561539457615393615566565b5b828202905092915050565b60006153aa8261543d565b91506153b58361543d565b9250828210156153c8576153c7615566565b5b828203905092915050565b60006153de8261541d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615474578082015181840152602081019050615459565b83811115615483576000848401525b50505050565b600060028204905060018216806154a157607f821691505b602082108114156154b5576154b46155c4565b5b50919050565b6154c482615699565b810181811067ffffffffffffffff821117156154e3576154e2615651565b5b80604052505050565b60006154f78261543d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561552a57615529615566565b5b600182019050919050565b60006155408261543d565b915061554b8361543d565b92508261555b5761555a615595565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5649502073616c65206973207374696c6c2072756e6e696e6700000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f54686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c69632073616c65206973206e6f74206f70656e207965742e00000000600082015250565b7f4d61782050726573616c65204e4654206c696d69742065786365656465640000600082015250565b7f57686974656c6973742073616c65206973207374696c6c2072756e6e696e6700600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f55736572206973206e6f7420656c696769626c6520746f20746865205072657360008201527f616c650000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f50726573616c6520697320636c6f7365642e0000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57686974656c69737420546f6b656e73206861766520616c726561647920626560008201527f656e2061697264726f7065642e00000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615de1816153d3565b8114615dec57600080fd5b50565b615df8816153e5565b8114615e0357600080fd5b50565b615e0f816153f1565b8114615e1a57600080fd5b50565b615e268161543d565b8114615e3157600080fd5b5056fea26469706673582212208159f7086fc24f8b852e267b88a5eb41682fa85f6ea5ff593742aac26d74b61264736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000004bc4f448660e12315fcf0fe0d9d60f4e2b169efe000000000000000000000000000000000000000000000000000000000000000f526963682042756c6c7320436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000352424300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f636c61737369632e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f697066732e696f2f697066732f516d4e566a376f5635317633454738594557565079376d63556431547455536837784c4a784a66766a5667436a322f7072656f726465722e6a736f6e000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Rich Bulls Club
Arg [1] : _symbol (string): RBC
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string): https://ipfs.io/ipfs/QmNVj7oV51v3EG8YEWVPy7mcUd1TtUSh7xLJxJfvjVgCj2/classic.json
Arg [4] : _initWhitelistNotRevealedUri (string): https://ipfs.io/ipfs/QmNVj7oV51v3EG8YEWVPy7mcUd1TtUSh7xLJxJfvjVgCj2/preorder.json
Arg [5] : _whitelistWallet (address): 0x4bc4f448660E12315FCF0fE0D9D60F4E2B169efe

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [5] : 0000000000000000000000004bc4f448660e12315fcf0fe0d9d60f4e2b169efe
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [7] : 526963682042756c6c7320436c75620000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 5242430000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [12] : 68747470733a2f2f697066732e696f2f697066732f516d4e566a376f56353176
Arg [13] : 33454738594557565079376d63556431547455536837784c4a784a66766a5667
Arg [14] : 436a322f636c61737369632e6a736f6e00000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [16] : 68747470733a2f2f697066732e696f2f697066732f516d4e566a376f56353176
Arg [17] : 33454738594557565079376d63556431547455536837784c4a784a66766a5667
Arg [18] : 436a322f7072656f726465722e6a736f6e000000000000000000000000000000


Deployed Bytecode Sourcemap

47393:8547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48007:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47554:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55093:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51886:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48408:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48500:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47960:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48173:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51994:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55794;;;;;;;;;;;;;:::i;:::-;;52255:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52534:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48136:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54495:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48104:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48600:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54900:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47683:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47482:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;48282:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52145:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48218:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48537:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51118:760;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54418:69;;;;;;;;;;;;;:::i;:::-;;48049:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47877:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47510:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52932:835;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49286:1824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47915:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55184:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47839:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54607:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55388:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55598:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53775:590;;;;;;;;;;;;;:::i;:::-;;54766:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55292:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48322:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;48007:35::-;;;;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;47554:122::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;55093:83::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55162:6:::1;55153;;:15;;;;;;;;;;;;;;;;;;55093:83:::0;:::o;51886:100::-;51939:7;51966:12;;51959:19;;51886:100;:::o;48408:55::-;;;;;;;;;;;;;;;;;:::o;48500:30::-;;;;;;;;;;;;;:::o;47960:38::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;48173:38::-;;;;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;51994:143::-;52053:4;52125;52118:11;;51994:143;;;:::o;55794:::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55842:15:::1;55860:21;55842:39;;55900:10;55892:28;;:37;55921:7;55892:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55831:106;55794:143::o:0;52255:271::-;52319:4;52341:9;52353:1;52341:13;;52336:160;52360:15;:22;;;;52356:1;:26;52336:160;;;52430:7;52408:15;52424:1;52408:18;;;;;;;;:::i;:::-;;;;;;;;;;:29;52404:81;;;52465:4;52458:11;;;;;52404:81;52384:3;;;;;:::i;:::-;;;;52336:160;;;;52513:5;52506:12;;52255:271;;;;:::o;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;52534:390::-;52621:16;52655:23;52681:17;52691:6;52681:9;:17::i;:::-;52655:43;;52709:25;52751:15;52737:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52709:58;;52783:9;52778:113;52798:15;52794:1;:19;52778:113;;;52849:30;52869:6;52877:1;52849:19;:30::i;:::-;52835:8;52844:1;52835:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;52815:3;;;;;:::i;:::-;;;;52778:113;;;;52908:8;52901:15;;;;52534:390;;;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;48136:28::-;;;;;;;;;;;;;:::o;54495:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54580:11:::1;54570:7;:21;;;;;;;;;;;;:::i;:::-;;54495:104:::0;:::o;48104:25::-;;;;;;;;;;;;;:::o;48600:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;54900:185::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55053:24:::1;55027:23;:50;;;;;;;;;;;;:::i;:::-;;54900:185:::0;:::o;47683:132::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47482:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;48282:33::-;;;;;;;;;;;;;:::o;52145:102::-;52196:4;52220:12;:19;52233:5;52220:19;;;;;;;;;;;;;;;;;;;;;;;;;52213:26;;52145:102;;;:::o;48218:37::-;;;;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;48537:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;51118:760::-;51188:6;;;;;;;;;;;51187:7;51179:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;51271:5;51254:22;;:13;;;;;;;;;;;:22;;;:42;;;;;51291:5;51280:16;;:7;;;;;;;;;;;:16;;;51254:42;51232:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;51363:14;51380:13;:11;:13::i;:::-;51363:30;;51426:1;51412:11;:15;51404:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51502:9;;51487:11;51478:6;:20;;;;:::i;:::-;:33;;51470:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51585:11;51572:10;;:24;;;;:::i;:::-;51559:9;:37;;51551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51637:9;51649:1;51637:13;;51632:143;51657:11;51652:1;:16;51632:143;;51690:15;51717:1;51708:6;:10;;;;:::i;:::-;51690:28;;51733:30;51743:10;51755:7;51733:9;:30::i;:::-;51675:100;51670:3;;;;;:::i;:::-;;;;51632:143;;;;51821:11;51785:20;:32;51806:10;51785:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;51859:11;51843:12;;:27;;;;;;;:::i;:::-;;;;;;;;51168:710;51118:760;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;54418:69::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54475:4:::1;54464:8;;:15;;;;;;;;;;;;;;;;;;54418:69::o:0;48049:29::-;;;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;47877:31::-;;;;:::o;47510:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52932:835::-;53050:13;53103:16;53111:7;53103;:16::i;:::-;53081:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;53223:5;53211:17;;:8;;;;;;;;;;;:17;;;53207:181;;;53249:25;53266:7;53249:16;:25::i;:::-;53245:96;;;53302:23;53295:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53245:96;53362:14;53355:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53207:181;53400:28;53431:10;:8;:10::i;:::-;53400:41;;53503:1;53478:14;53472:28;:32;:287;;;;;;;;;;;;;;;;;53596:14;53637:18;:7;:16;:18::i;:::-;53682:13;53553:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53472:287;53452:307;;;52932:835;;;;:::o;49286:1824::-;49363:6;;;;;;;;;;;49362:7;49354:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;49429:1;49415:11;:15;49407:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49498:4;49481:21;;:13;;;;;;;;;;;:21;;;:40;;;;49517:4;49506:15;;:7;;;;;;;;;;;:15;;;49481:40;49473:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49607:9;;49592:11;49577:12;;:26;;;;:::i;:::-;:39;;49555:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;49736:16;;49721:11;49699:19;;:33;;;;:::i;:::-;:53;;49677:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;49821:14;49838:17;49844:10;49838:5;:17::i;:::-;49821:34;;49866:22;49891:25;49905:10;49891:13;:25::i;:::-;49866:50;;49950:13;;;;;;;;;;;:34;;;;;49967:17;49950:34;49949:62;;;;49990:7;;;;;;;;;;;:20;;;;;50001:9;49990:20;49949:62;49927:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;50120:11;50106;;:25;;;;:::i;:::-;50093:9;:38;;50085:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50165:24;50192:20;:32;50213:10;50192:32;;;;;;;;;;;;;;;;50165:59;;50259:9;50258:10;:60;;;;50307:10;;50292:11;50273:16;:30;;;;:::i;:::-;:44;;50258:60;50235:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;50410:17;50409:18;:91;;;;50483:16;;50468:11;50449:16;:30;;;;:::i;:::-;:50;;50409:91;50386:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;50591:11;50568:19;;:34;;;;;;;:::i;:::-;;;;;;;;50620:9;50632:1;50620:13;;50615:392;50640:11;50635:1;:16;50615:392;;50673:15;50706:1;50691:12;;:16;;;;:::i;:::-;50673:34;;50726:17;50722:274;;;50764:35;50774:15;;;;;;;;;;;50791:7;50764:9;:35::i;:::-;50851:10;50818:21;:30;50840:7;50818:30;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;50880:15;50901:7;50880:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50722:274;;;50950:30;50960:10;50972:7;50950:9;:30::i;:::-;50722:274;50658:349;50653:3;;;;;:::i;:::-;;;;50615:392;;;;51053:11;51017:20;:32;51038:10;51017:32;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;51091:11;51075:12;;:27;;;;;;;:::i;:::-;;;;;;;;49343:1767;;;49286:1824;:::o;47915:38::-;;;;:::o;55184:100::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55270:6:::1;55254:13;;:22;;;;;;;;;;;;;;;;;;55184:100:::0;:::o;47839:31::-;;;;:::o;54607:151::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54733:17:::1;54717:13;:33;;;;;;;;;;;;:::i;:::-;;54607:151:::0;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;55388:202::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55473:9:::1;55468:115;55492:9;:16;55488:1;:20;55468:115;;;55567:4;55530:20;:34;55551:9;55561:1;55551:12;;;;;;;;:::i;:::-;;;;;;;;55530:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;55510:3;;;;;:::i;:::-;;;;55468:115;;;;55388:202:::0;:::o;55598:188::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55677:9:::1;55672:107;55696:9;:16;55692:1;:20;55672:107;;;55763:4;55734:12;:26;55747:9;55757:1;55747:12;;;;;;;;:::i;:::-;;;;;;;;55734:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;55714:3;;;;;:::i;:::-;;;;55672:107;;;;55598:188:::0;:::o;53775:590::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53846:10:::1;;;;;;;;;;;53845:11;53837:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53926:6;;;;;;;;;;;53925:7;53917:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;53979:13;;;;;;;;;;;53978:14;53970:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;54048:7;;;;;;;;;;;54047:8;54039:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;54109:4;54096:10;;:17;;;;;;;;;;;;;;;;;;54129:9;54124:234;54144:15;:22;;;;54140:1;:26;54124:234;;;54188:158;54219:15;;;;;;;;;;;54253:21;:41;54275:15;54291:1;54275:18;;;;;;;;:::i;:::-;;;;;;;;;;54253:41;;;;;;;;;;;;;;;;;;;;;54313:15;54329:1;54313:18;;;;;;;;:::i;:::-;;;;;;;;;;54188:12;:158::i;:::-;54168:3;;;;;:::i;:::-;;;;54124:234;;;;53775:590::o:0;54766:126::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54869:15:::1;54852:14;:32;;;;;;;;;;;;:::i;:::-;;54766:126:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;55292:88::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55366:6:::1;55356:7;;:16;;;;;;;;;;;;;;;;;;55292:88:::0;:::o;48322:27::-;;;;;;;;;;;;;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;49170:108::-;49230:13;49263:7;49256:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49170:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;37122:126::-;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:118::-;9442:24;9460:5;9442:24;:::i;:::-;9437:3;9430:37;9355:118;;:::o;9509:732::-;9628:3;9657:54;9705:5;9657:54;:::i;:::-;9727:86;9806:6;9801:3;9727:86;:::i;:::-;9720:93;;9837:56;9887:5;9837:56;:::i;:::-;9916:7;9947:1;9932:284;9957:6;9954:1;9951:13;9932:284;;;10033:6;10027:13;10060:63;10119:3;10104:13;10060:63;:::i;:::-;10053:70;;10146:60;10199:6;10146:60;:::i;:::-;10136:70;;9992:224;9979:1;9976;9972:9;9967:14;;9932:284;;;9936:14;10232:3;10225:10;;9633:608;;;9509:732;;;;:::o;10247:109::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10247:109;;:::o;10362:360::-;10448:3;10476:38;10508:5;10476:38;:::i;:::-;10530:70;10593:6;10588:3;10530:70;:::i;:::-;10523:77;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10452:270;10362:360;;;;:::o;10728:364::-;10816:3;10844:39;10877:5;10844:39;:::i;:::-;10899:71;10963:6;10958:3;10899:71;:::i;:::-;10892:78;;10979:52;11024:6;11019:3;11012:4;11005:5;11001:16;10979:52;:::i;:::-;11056:29;11078:6;11056:29;:::i;:::-;11051:3;11047:39;11040:46;;10820:272;10728:364;;;;:::o;11098:377::-;11204:3;11232:39;11265:5;11232:39;:::i;:::-;11287:89;11369:6;11364:3;11287:89;:::i;:::-;11280:96;;11385:52;11430:6;11425:3;11418:4;11411:5;11407:16;11385:52;:::i;:::-;11462:6;11457:3;11453:16;11446:23;;11208:267;11098:377;;;;:::o;11505:845::-;11608:3;11645:5;11639:12;11674:36;11700:9;11674:36;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11846:1;11835:9;11831:17;11862:1;11857:137;;;;12008:1;12003:341;;;;11824:520;;11857:137;11941:4;11937:9;11926;11922:25;11917:3;11910:38;11977:6;11972:3;11968:16;11961:23;;11857:137;;12003:341;12070:38;12102:5;12070:38;:::i;:::-;12130:1;12144:154;12158:6;12155:1;12152:13;12144:154;;;12232:7;12226:14;12222:1;12217:3;12213:11;12206:35;12282:1;12273:7;12269:15;12258:26;;12180:4;12177:1;12173:12;12168:17;;12144:154;;;12327:6;12322:3;12318:16;12311:23;;12010:334;;11824:520;;11612:738;;11505:845;;;;:::o;12356:366::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:::-;19194:3;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19291:93;19380:3;19291:93;:::i;:::-;19409:2;19404:3;19400:12;19393:19;;19052:366;;;:::o;19424:::-;19566:3;19587:67;19651:2;19646:3;19587:67;:::i;:::-;19580:74;;19663:93;19752:3;19663:93;:::i;:::-;19781:2;19776:3;19772:12;19765:19;;19424:366;;;:::o;19796:::-;19938:3;19959:67;20023:2;20018:3;19959:67;:::i;:::-;19952:74;;20035:93;20124:3;20035:93;:::i;:::-;20153:2;20148:3;20144:12;20137:19;;19796:366;;;:::o;20168:::-;20310:3;20331:67;20395:2;20390:3;20331:67;:::i;:::-;20324:74;;20407:93;20496:3;20407:93;:::i;:::-;20525:2;20520:3;20516:12;20509:19;;20168:366;;;:::o;20540:::-;20682:3;20703:67;20767:2;20762:3;20703:67;:::i;:::-;20696:74;;20779:93;20868:3;20779:93;:::i;:::-;20897:2;20892:3;20888:12;20881:19;;20540:366;;;:::o;20912:::-;21054:3;21075:67;21139:2;21134:3;21075:67;:::i;:::-;21068:74;;21151:93;21240:3;21151:93;:::i;:::-;21269:2;21264:3;21260:12;21253:19;;20912:366;;;:::o;21284:::-;21426:3;21447:67;21511:2;21506:3;21447:67;:::i;:::-;21440:74;;21523:93;21612:3;21523:93;:::i;:::-;21641:2;21636:3;21632:12;21625:19;;21284:366;;;:::o;21656:::-;21798:3;21819:67;21883:2;21878:3;21819:67;:::i;:::-;21812:74;;21895:93;21984:3;21895:93;:::i;:::-;22013:2;22008:3;22004:12;21997:19;;21656:366;;;:::o;22028:::-;22170:3;22191:67;22255:2;22250:3;22191:67;:::i;:::-;22184:74;;22267:93;22356:3;22267:93;:::i;:::-;22385:2;22380:3;22376:12;22369:19;;22028:366;;;:::o;22400:::-;22542:3;22563:67;22627:2;22622:3;22563:67;:::i;:::-;22556:74;;22639:93;22728:3;22639:93;:::i;:::-;22757:2;22752:3;22748:12;22741:19;;22400:366;;;:::o;22772:::-;22914:3;22935:67;22999:2;22994:3;22935:67;:::i;:::-;22928:74;;23011:93;23100:3;23011:93;:::i;:::-;23129:2;23124:3;23120:12;23113:19;;22772:366;;;:::o;23144:::-;23286:3;23307:67;23371:2;23366:3;23307:67;:::i;:::-;23300:74;;23383:93;23472:3;23383:93;:::i;:::-;23501:2;23496:3;23492:12;23485:19;;23144:366;;;:::o;23516:108::-;23593:24;23611:5;23593:24;:::i;:::-;23588:3;23581:37;23516:108;;:::o;23630:118::-;23717:24;23735:5;23717:24;:::i;:::-;23712:3;23705:37;23630:118;;:::o;23754:589::-;23979:3;24001:95;24092:3;24083:6;24001:95;:::i;:::-;23994:102;;24113:95;24204:3;24195:6;24113:95;:::i;:::-;24106:102;;24225:92;24313:3;24304:6;24225:92;:::i;:::-;24218:99;;24334:3;24327:10;;23754:589;;;;;;:::o;24349:222::-;24442:4;24480:2;24469:9;24465:18;24457:26;;24493:71;24561:1;24550:9;24546:17;24537:6;24493:71;:::i;:::-;24349:222;;;;:::o;24577:640::-;24772:4;24810:3;24799:9;24795:19;24787:27;;24824:71;24892:1;24881:9;24877:17;24868:6;24824:71;:::i;:::-;24905:72;24973:2;24962:9;24958:18;24949:6;24905:72;:::i;:::-;24987;25055:2;25044:9;25040:18;25031:6;24987:72;:::i;:::-;25106:9;25100:4;25096:20;25091:2;25080:9;25076:18;25069:48;25134:76;25205:4;25196:6;25134:76;:::i;:::-;25126:84;;24577:640;;;;;;;:::o;25223:373::-;25366:4;25404:2;25393:9;25389:18;25381:26;;25453:9;25447:4;25443:20;25439:1;25428:9;25424:17;25417:47;25481:108;25584:4;25575:6;25481:108;:::i;:::-;25473:116;;25223:373;;;;:::o;25602:210::-;25689:4;25727:2;25716:9;25712:18;25704:26;;25740:65;25802:1;25791:9;25787:17;25778:6;25740:65;:::i;:::-;25602:210;;;;:::o;25818:313::-;25931:4;25969:2;25958:9;25954:18;25946:26;;26018:9;26012:4;26008:20;26004:1;25993:9;25989:17;25982:47;26046:78;26119:4;26110:6;26046:78;:::i;:::-;26038:86;;25818:313;;;;:::o;26137:419::-;26303:4;26341:2;26330:9;26326:18;26318:26;;26390:9;26384:4;26380:20;26376:1;26365:9;26361:17;26354:47;26418:131;26544:4;26418:131;:::i;:::-;26410:139;;26137:419;;;:::o;26562:::-;26728:4;26766:2;26755:9;26751:18;26743:26;;26815:9;26809:4;26805:20;26801:1;26790:9;26786:17;26779:47;26843:131;26969:4;26843:131;:::i;:::-;26835:139;;26562:419;;;:::o;26987:::-;27153:4;27191:2;27180:9;27176:18;27168:26;;27240:9;27234:4;27230:20;27226:1;27215:9;27211:17;27204:47;27268:131;27394:4;27268:131;:::i;:::-;27260:139;;26987:419;;;:::o;27412:::-;27578:4;27616:2;27605:9;27601:18;27593:26;;27665:9;27659:4;27655:20;27651:1;27640:9;27636:17;27629:47;27693:131;27819:4;27693:131;:::i;:::-;27685:139;;27412:419;;;:::o;27837:::-;28003:4;28041:2;28030:9;28026:18;28018:26;;28090:9;28084:4;28080:20;28076:1;28065:9;28061:17;28054:47;28118:131;28244:4;28118:131;:::i;:::-;28110:139;;27837:419;;;:::o;28262:::-;28428:4;28466:2;28455:9;28451:18;28443:26;;28515:9;28509:4;28505:20;28501:1;28490:9;28486:17;28479:47;28543:131;28669:4;28543:131;:::i;:::-;28535:139;;28262:419;;;:::o;28687:::-;28853:4;28891:2;28880:9;28876:18;28868:26;;28940:9;28934:4;28930:20;28926:1;28915:9;28911:17;28904:47;28968:131;29094:4;28968:131;:::i;:::-;28960:139;;28687:419;;;:::o;29112:::-;29278:4;29316:2;29305:9;29301:18;29293:26;;29365:9;29359:4;29355:20;29351:1;29340:9;29336:17;29329:47;29393:131;29519:4;29393:131;:::i;:::-;29385:139;;29112:419;;;:::o;29537:::-;29703:4;29741:2;29730:9;29726:18;29718:26;;29790:9;29784:4;29780:20;29776:1;29765:9;29761:17;29754:47;29818:131;29944:4;29818:131;:::i;:::-;29810:139;;29537:419;;;:::o;29962:::-;30128:4;30166:2;30155:9;30151:18;30143:26;;30215:9;30209:4;30205:20;30201:1;30190:9;30186:17;30179:47;30243:131;30369:4;30243:131;:::i;:::-;30235:139;;29962:419;;;:::o;30387:::-;30553:4;30591:2;30580:9;30576:18;30568:26;;30640:9;30634:4;30630:20;30626:1;30615:9;30611:17;30604:47;30668:131;30794:4;30668:131;:::i;:::-;30660:139;;30387:419;;;:::o;30812:::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:::-;31403:4;31441:2;31430:9;31426:18;31418:26;;31490:9;31484:4;31480:20;31476:1;31465:9;31461:17;31454:47;31518:131;31644:4;31518:131;:::i;:::-;31510:139;;31237:419;;;:::o;31662:::-;31828:4;31866:2;31855:9;31851:18;31843:26;;31915:9;31909:4;31905:20;31901:1;31890:9;31886:17;31879:47;31943:131;32069:4;31943:131;:::i;:::-;31935:139;;31662:419;;;:::o;32087:::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32340:9;32334:4;32330:20;32326:1;32315:9;32311:17;32304:47;32368:131;32494:4;32368:131;:::i;:::-;32360:139;;32087:419;;;:::o;32512:::-;32678:4;32716:2;32705:9;32701:18;32693:26;;32765:9;32759:4;32755:20;32751:1;32740:9;32736:17;32729:47;32793:131;32919:4;32793:131;:::i;:::-;32785:139;;32512:419;;;:::o;32937:::-;33103:4;33141:2;33130:9;33126:18;33118:26;;33190:9;33184:4;33180:20;33176:1;33165:9;33161:17;33154:47;33218:131;33344:4;33218:131;:::i;:::-;33210:139;;32937:419;;;:::o;33362:::-;33528:4;33566:2;33555:9;33551:18;33543:26;;33615:9;33609:4;33605:20;33601:1;33590:9;33586:17;33579:47;33643:131;33769:4;33643:131;:::i;:::-;33635:139;;33362:419;;;:::o;33787:::-;33953:4;33991:2;33980:9;33976:18;33968:26;;34040:9;34034:4;34030:20;34026:1;34015:9;34011:17;34004:47;34068:131;34194:4;34068:131;:::i;:::-;34060:139;;33787:419;;;:::o;34212:::-;34378:4;34416:2;34405:9;34401:18;34393:26;;34465:9;34459:4;34455:20;34451:1;34440:9;34436:17;34429:47;34493:131;34619:4;34493:131;:::i;:::-;34485:139;;34212:419;;;:::o;34637:::-;34803:4;34841:2;34830:9;34826:18;34818:26;;34890:9;34884:4;34880:20;34876:1;34865:9;34861:17;34854:47;34918:131;35044:4;34918:131;:::i;:::-;34910:139;;34637:419;;;:::o;35062:::-;35228:4;35266:2;35255:9;35251:18;35243:26;;35315:9;35309:4;35305:20;35301:1;35290:9;35286:17;35279:47;35343:131;35469:4;35343:131;:::i;:::-;35335:139;;35062:419;;;:::o;35487:::-;35653:4;35691:2;35680:9;35676:18;35668:26;;35740:9;35734:4;35730:20;35726:1;35715:9;35711:17;35704:47;35768:131;35894:4;35768:131;:::i;:::-;35760:139;;35487:419;;;:::o;35912:::-;36078:4;36116:2;36105:9;36101:18;36093:26;;36165:9;36159:4;36155:20;36151:1;36140:9;36136:17;36129:47;36193:131;36319:4;36193:131;:::i;:::-;36185:139;;35912:419;;;:::o;36337:::-;36503:4;36541:2;36530:9;36526:18;36518:26;;36590:9;36584:4;36580:20;36576:1;36565:9;36561:17;36554:47;36618:131;36744:4;36618:131;:::i;:::-;36610:139;;36337:419;;;:::o;36762:::-;36928:4;36966:2;36955:9;36951:18;36943:26;;37015:9;37009:4;37005:20;37001:1;36990:9;36986:17;36979:47;37043:131;37169:4;37043:131;:::i;:::-;37035:139;;36762:419;;;:::o;37187:::-;37353:4;37391:2;37380:9;37376:18;37368:26;;37440:9;37434:4;37430:20;37426:1;37415:9;37411:17;37404:47;37468:131;37594:4;37468:131;:::i;:::-;37460:139;;37187:419;;;:::o;37612:::-;37778:4;37816:2;37805:9;37801:18;37793:26;;37865:9;37859:4;37855:20;37851:1;37840:9;37836:17;37829:47;37893:131;38019:4;37893:131;:::i;:::-;37885:139;;37612:419;;;:::o;38037:::-;38203:4;38241:2;38230:9;38226:18;38218:26;;38290:9;38284:4;38280:20;38276:1;38265:9;38261:17;38254:47;38318:131;38444:4;38318:131;:::i;:::-;38310:139;;38037:419;;;:::o;38462:::-;38628:4;38666:2;38655:9;38651:18;38643:26;;38715:9;38709:4;38705:20;38701:1;38690:9;38686:17;38679:47;38743:131;38869:4;38743:131;:::i;:::-;38735:139;;38462:419;;;:::o;38887:222::-;38980:4;39018:2;39007:9;39003:18;38995:26;;39031:71;39099:1;39088:9;39084:17;39075:6;39031:71;:::i;:::-;38887:222;;;;:::o;39115:129::-;39149:6;39176:20;;:::i;:::-;39166:30;;39205:33;39233:4;39225:6;39205:33;:::i;:::-;39115:129;;;:::o;39250:75::-;39283:6;39316:2;39310:9;39300:19;;39250:75;:::o;39331:311::-;39408:4;39498:18;39490:6;39487:30;39484:56;;;39520:18;;:::i;:::-;39484:56;39570:4;39562:6;39558:17;39550:25;;39630:4;39624;39620:15;39612:23;;39331:311;;;:::o;39648:307::-;39709:4;39799:18;39791:6;39788:30;39785:56;;;39821:18;;:::i;:::-;39785:56;39859:29;39881:6;39859:29;:::i;:::-;39851:37;;39943:4;39937;39933:15;39925:23;;39648:307;;;:::o;39961:308::-;40023:4;40113:18;40105:6;40102:30;40099:56;;;40135:18;;:::i;:::-;40099:56;40173:29;40195:6;40173:29;:::i;:::-;40165:37;;40257:4;40251;40247:15;40239:23;;39961:308;;;:::o;40275:132::-;40342:4;40365:3;40357:11;;40395:4;40390:3;40386:14;40378:22;;40275:132;;;:::o;40413:141::-;40462:4;40485:3;40477:11;;40508:3;40505:1;40498:14;40542:4;40539:1;40529:18;40521:26;;40413:141;;;:::o;40560:114::-;40627:6;40661:5;40655:12;40645:22;;40560:114;;;:::o;40680:98::-;40731:6;40765:5;40759:12;40749:22;;40680:98;;;:::o;40784:99::-;40836:6;40870:5;40864:12;40854:22;;40784:99;;;:::o;40889:113::-;40959:4;40991;40986:3;40982:14;40974:22;;40889:113;;;:::o;41008:184::-;41107:11;41141:6;41136:3;41129:19;41181:4;41176:3;41172:14;41157:29;;41008:184;;;;:::o;41198:168::-;41281:11;41315:6;41310:3;41303:19;41355:4;41350:3;41346:14;41331:29;;41198:168;;;;:::o;41372:169::-;41456:11;41490:6;41485:3;41478:19;41530:4;41525:3;41521:14;41506:29;;41372:169;;;;:::o;41547:148::-;41649:11;41686:3;41671:18;;41547:148;;;;:::o;41701:305::-;41741:3;41760:20;41778:1;41760:20;:::i;:::-;41755:25;;41794:20;41812:1;41794:20;:::i;:::-;41789:25;;41948:1;41880:66;41876:74;41873:1;41870:81;41867:107;;;41954:18;;:::i;:::-;41867:107;41998:1;41995;41991:9;41984:16;;41701:305;;;;:::o;42012:185::-;42052:1;42069:20;42087:1;42069:20;:::i;:::-;42064:25;;42103:20;42121:1;42103:20;:::i;:::-;42098:25;;42142:1;42132:35;;42147:18;;:::i;:::-;42132:35;42189:1;42186;42182:9;42177:14;;42012:185;;;;:::o;42203:348::-;42243:7;42266:20;42284:1;42266:20;:::i;:::-;42261:25;;42300:20;42318:1;42300:20;:::i;:::-;42295:25;;42488:1;42420:66;42416:74;42413:1;42410:81;42405:1;42398:9;42391:17;42387:105;42384:131;;;42495:18;;:::i;:::-;42384:131;42543:1;42540;42536:9;42525:20;;42203:348;;;;:::o;42557:191::-;42597:4;42617:20;42635:1;42617:20;:::i;:::-;42612:25;;42651:20;42669:1;42651:20;:::i;:::-;42646:25;;42690:1;42687;42684:8;42681:34;;;42695:18;;:::i;:::-;42681:34;42740:1;42737;42733:9;42725:17;;42557:191;;;;:::o;42754:96::-;42791:7;42820:24;42838:5;42820:24;:::i;:::-;42809:35;;42754:96;;;:::o;42856:90::-;42890:7;42933:5;42926:13;42919:21;42908:32;;42856:90;;;:::o;42952:149::-;42988:7;43028:66;43021:5;43017:78;43006:89;;42952:149;;;:::o;43107:126::-;43144:7;43184:42;43177:5;43173:54;43162:65;;43107:126;;;:::o;43239:77::-;43276:7;43305:5;43294:16;;43239:77;;;:::o;43322:154::-;43406:6;43401:3;43396;43383:30;43468:1;43459:6;43454:3;43450:16;43443:27;43322:154;;;:::o;43482:307::-;43550:1;43560:113;43574:6;43571:1;43568:13;43560:113;;;43659:1;43654:3;43650:11;43644:18;43640:1;43635:3;43631:11;43624:39;43596:2;43593:1;43589:10;43584:15;;43560:113;;;43691:6;43688:1;43685:13;43682:101;;;43771:1;43762:6;43757:3;43753:16;43746:27;43682:101;43531:258;43482:307;;;:::o;43795:320::-;43839:6;43876:1;43870:4;43866:12;43856:22;;43923:1;43917:4;43913:12;43944:18;43934:81;;44000:4;43992:6;43988:17;43978:27;;43934:81;44062:2;44054:6;44051:14;44031:18;44028:38;44025:84;;;44081:18;;:::i;:::-;44025:84;43846:269;43795:320;;;:::o;44121:281::-;44204:27;44226:4;44204:27;:::i;:::-;44196:6;44192:40;44334:6;44322:10;44319:22;44298:18;44286:10;44283:34;44280:62;44277:88;;;44345:18;;:::i;:::-;44277:88;44385:10;44381:2;44374:22;44164:238;44121:281;;:::o;44408:233::-;44447:3;44470:24;44488:5;44470:24;:::i;:::-;44461:33;;44516:66;44509:5;44506:77;44503:103;;;44586:18;;:::i;:::-;44503:103;44633:1;44626:5;44622:13;44615:20;;44408:233;;;:::o;44647:176::-;44679:1;44696:20;44714:1;44696:20;:::i;:::-;44691:25;;44730:20;44748:1;44730:20;:::i;:::-;44725:25;;44769:1;44759:35;;44774:18;;:::i;:::-;44759:35;44815:1;44812;44808:9;44803:14;;44647:176;;;;:::o;44829:180::-;44877:77;44874:1;44867:88;44974:4;44971:1;44964:15;44998:4;44995:1;44988:15;45015:180;45063:77;45060:1;45053:88;45160:4;45157:1;45150:15;45184:4;45181:1;45174:15;45201:180;45249:77;45246:1;45239:88;45346:4;45343:1;45336:15;45370:4;45367:1;45360:15;45387:180;45435:77;45432:1;45425:88;45532:4;45529:1;45522:15;45556:4;45553:1;45546:15;45573:180;45621:77;45618:1;45611:88;45718:4;45715:1;45708:15;45742:4;45739:1;45732:15;45759:180;45807:77;45804:1;45797:88;45904:4;45901:1;45894:15;45928:4;45925:1;45918:15;45945:117;46054:1;46051;46044:12;46068:117;46177:1;46174;46167:12;46191:117;46300:1;46297;46290:12;46314:117;46423:1;46420;46413:12;46437:117;46546:1;46543;46536:12;46560:102;46601:6;46652:2;46648:7;46643:2;46636:5;46632:14;46628:28;46618:38;;46560:102;;;:::o;46668:175::-;46808:27;46804:1;46796:6;46792:14;46785:51;46668:175;:::o;46849:230::-;46989:34;46985:1;46977:6;46973:14;46966:58;47058:13;47053:2;47045:6;47041:15;47034:38;46849:230;:::o;47085:237::-;47225:34;47221:1;47213:6;47209:14;47202:58;47294:20;47289:2;47281:6;47277:15;47270:45;47085:237;:::o;47328:172::-;47468:24;47464:1;47456:6;47452:14;47445:48;47328:172;:::o;47506:225::-;47646:34;47642:1;47634:6;47630:14;47623:58;47715:8;47710:2;47702:6;47698:15;47691:33;47506:225;:::o;47737:178::-;47877:30;47873:1;47865:6;47861:14;47854:54;47737:178;:::o;47921:223::-;48061:34;48057:1;48049:6;48045:14;48038:58;48130:6;48125:2;48117:6;48113:15;48106:31;47921:223;:::o;48150:175::-;48290:27;48286:1;48278:6;48274:14;48267:51;48150:175;:::o;48331:178::-;48471:30;48467:1;48459:6;48455:14;48448:54;48331:178;:::o;48515:180::-;48655:32;48651:1;48643:6;48639:14;48632:56;48515:180;:::o;48701:181::-;48841:33;48837:1;48829:6;48825:14;48818:57;48701:181;:::o;48888:231::-;49028:34;49024:1;49016:6;49012:14;49005:58;49097:14;49092:2;49084:6;49080:15;49073:39;48888:231;:::o;49125:168::-;49265:20;49261:1;49253:6;49249:14;49242:44;49125:168;:::o;49299:243::-;49439:34;49435:1;49427:6;49423:14;49416:58;49508:26;49503:2;49495:6;49491:15;49484:51;49299:243;:::o;49548:229::-;49688:34;49684:1;49676:6;49672:14;49665:58;49757:12;49752:2;49744:6;49740:15;49733:37;49548:229;:::o;49783:228::-;49923:34;49919:1;49911:6;49907:14;49900:58;49992:11;49987:2;49979:6;49975:15;49968:36;49783:228;:::o;50017:172::-;50157:24;50153:1;50145:6;50141:14;50134:48;50017:172;:::o;50195:182::-;50335:34;50331:1;50323:6;50319:14;50312:58;50195:182;:::o;50383:231::-;50523:34;50519:1;50511:6;50507:14;50500:58;50592:14;50587:2;50579:6;50575:15;50568:39;50383:231;:::o;50620:182::-;50760:34;50756:1;50748:6;50744:14;50737:58;50620:182;:::o;50808:222::-;50948:34;50944:1;50936:6;50932:14;50925:58;51017:5;51012:2;51004:6;51000:15;50993:30;50808:222;:::o;51036:228::-;51176:34;51172:1;51164:6;51160:14;51153:58;51245:11;51240:2;51232:6;51228:15;51221:36;51036:228;:::o;51270:234::-;51410:34;51406:1;51398:6;51394:14;51387:58;51479:17;51474:2;51466:6;51462:15;51455:42;51270:234;:::o;51510:178::-;51650:30;51646:1;51638:6;51634:14;51627:54;51510:178;:::o;51694:168::-;51834:20;51830:1;51822:6;51818:14;51811:44;51694:168;:::o;51868:220::-;52008:34;52004:1;51996:6;51992:14;51985:58;52077:3;52072:2;52064:6;52060:15;52053:28;51868:220;:::o;52094:236::-;52234:34;52230:1;52222:6;52218:14;52211:58;52303:19;52298:2;52290:6;52286:15;52279:44;52094:236;:::o;52336:231::-;52476:34;52472:1;52464:6;52460:14;52453:58;52545:14;52540:2;52532:6;52528:15;52521:39;52336:231;:::o;52573:232::-;52713:34;52709:1;52701:6;52697:14;52690:58;52782:15;52777:2;52769:6;52765:15;52758:40;52573:232;:::o;52811:177::-;52951:29;52947:1;52939:6;52935:14;52928:53;52811:177;:::o;52994:122::-;53067:24;53085:5;53067:24;:::i;:::-;53060:5;53057:35;53047:63;;53106:1;53103;53096:12;53047:63;52994:122;:::o;53122:116::-;53192:21;53207:5;53192:21;:::i;:::-;53185:5;53182:32;53172:60;;53228:1;53225;53218:12;53172:60;53122:116;:::o;53244:120::-;53316:23;53333:5;53316:23;:::i;:::-;53309:5;53306:34;53296:62;;53354:1;53351;53344:12;53296:62;53244:120;:::o;53370:122::-;53443:24;53461:5;53443:24;:::i;:::-;53436:5;53433:35;53423:63;;53482:1;53479;53472:12;53423:63;53370:122;:::o

Swarm Source

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