ETH Price: $3,409.20 (+2.27%)

Token

Cube Monkeys Business Cards (CMBC)
 

Overview

Max Total Supply

10,001 CMBC

Holders

1,049

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
10 CMBC
0x419f099a1e8e93b24e82b0f1f2bf057ca32294f8
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CubeMonkeysBusinessCards

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 2022-10-15
*/

// SPDX-License-Identifier: MIT

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

// OpenZeppelin Contracts v4.4.1 (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.1 (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/utils/Address.sol

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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.1 (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.1 (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.1 (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.1 (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/IERC721Metadata.sol

// OpenZeppelin Contracts v4.4.1 (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: contracts/new.sol

pragma solidity ^0.8.4;

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (
            to.isContract() &&
            !_checkContractOnERC721Received(from, to, tokenId, _data)
        ) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (
                        !_checkContractOnERC721Received(
                            address(0),
                            to,
                            updatedIndex++,
                            _data
                        )
                    ) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try
            IERC721Receiver(to).onERC721Received(
                _msgSender(),
                from,
                tokenId,
                _data
            )
        returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b)
        private
        pure
        returns (bytes32 value)
    {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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);
    }
}
pragma solidity ^0.8.7;

contract CubeMonkeysBusinessCards is ERC721A, Ownable {
    using Strings for uint256;

    string private uriPrefix = "ipfs://QmXLUeRkMWF4ET4R37U9MrBwbNZY8zHiWstAEZrKJMSgCp/";
    string private uriSuffix = ".json";
    string public hiddenMetadataUri;

    uint256 public cost = 0.0 ether;

    uint16 public constant maxSupply = 10000;

    bool public WLpaused = false;
    bool public paused = true;
    bool public whitelistMintNotOver = true;
    
    mapping(address => uint8) public NFTPerWLAddress;
    mapping(address => uint8) public NFTPerAddress;
    uint8 public maxMintAmountPerWallet = 10;

    bytes32 public whitelistMerkleRoot;
    bool public revealed = false;

    constructor() ERC721A("Cube Monkeys Business Cards", "CMBC") {
        setHiddenMetadataUri(
            "ipfs://QmZcbNbT3sC84UK1ddF8mzhWhvdN9Ad7XDKQALjdLgCDNM/hidden.json"
        );
    }
//MINT FUNCTION HERE
    function mint(uint8 _mintAmount) external payable {
        uint16 totalSupply = uint16(totalSupply());
        require(totalSupply + _mintAmount <= maxSupply, "Exceeds max supply.");
        uint8 Nft = NFTPerAddress[msg.sender];
        require(
            _mintAmount + Nft <= maxMintAmountPerWallet,
            "Exceeds max Nfts allowed per wallet."
        );

        require(!paused, "The contract is paused!");
        require(!whitelistMintNotOver, "Whitelist minting is NOT over! Get back to work ya Cube Monkey.");

        if (Nft == 0) {
            require(
                msg.value >= cost * (_mintAmount - 1),
                "Insufficient funds!"
            );
        } else {
            require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        }
        _safeMint(msg.sender, _mintAmount);
        NFTPerAddress[msg.sender] = _mintAmount + Nft;

        delete totalSupply;
        delete _mintAmount;
    }

    function Reserve(uint16 _mintAmount, address _receiver) external onlyOwner {
        uint16 totalSupply = uint16(totalSupply());
        require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply.");
        _safeMint(_receiver, _mintAmount);
        delete _mintAmount;
        delete _receiver;
        delete totalSupply;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return hiddenMetadataUri;
        }

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

    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setwhitelistMintNotOver() external onlyOwner {
        whitelistMintNotOver = !whitelistMintNotOver;
    }

    function setWLPaused() external onlyOwner {
        WLpaused = !WLpaused;
    }

    function setMaxMintAmountPerWallet(uint8 _limit) external onlyOwner {
        maxMintAmountPerWallet = _limit;
        delete _limit;
    }

    function setWhitelistMerkleRoot(bytes32 _whitelistMerkleRoot)
        external
        onlyOwner
    {
        whitelistMerkleRoot = _whitelistMerkleRoot;
    }

    function getLeafNode(address _leaf) internal pure returns (bytes32 temp) {
        return keccak256(abi.encodePacked(_leaf));
    }

    function _verify(bytes32 leaf, bytes32[] memory proof)
        internal
        view
        returns (bool)
    {
        return MerkleProof.verify(proof, whitelistMerkleRoot, leaf);
    }

    function whitelistMint(uint8 _mintAmount, bytes32[] calldata merkleProof)
        external
        payable
    {
        bytes32 leafnode = getLeafNode(msg.sender);
        uint8 _txPerAddress = NFTPerWLAddress[msg.sender];
        require(_verify(leafnode, merkleProof), "Invalid merkle proof");
        require(
            _txPerAddress + _mintAmount <= maxMintAmountPerWallet,
            "Exceeds max nft allowed per address"
        );

        require(!WLpaused, "Whitelist minting is over!");

        if (_txPerAddress >= 2) {
            require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        } else {
            uint8 costAmount = _mintAmount + _txPerAddress;
            if (costAmount > 2) {
                costAmount = costAmount - 2;
                require(msg.value >= cost * costAmount, "Insufficient funds!");
            }
        }

        _safeMint(msg.sender, _mintAmount);
        NFTPerWLAddress[msg.sender] = _txPerAddress + _mintAmount;

        delete _mintAmount;
        delete _txPerAddress;
    }

    function setUriPrefix(string memory _uriPrefix) external onlyOwner {
        uriPrefix = _uriPrefix;
    }

    function setPaused() external onlyOwner {
        paused = !paused;
        WLpaused = true;
    }

    function setCost(uint256 _cost) external onlyOwner {
        cost = _cost;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri)
        public
        onlyOwner
    {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"NFTPerAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NFTPerWLAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"Reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WLpaused","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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_whitelistMerkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setwhitelistMintNotOver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_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":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintNotOver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180606001604052806036815260200162004f3a603691396009908051906020019062000035929190620003cd565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000083929190620003cd565b506000600c556000600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550600a601060006101000a81548160ff021916908360ff1602179055506000601260006101000a81548160ff0219169083151502179055503480156200011e57600080fd5b506040518060400160405280601b81526020017f43756265204d6f6e6b65797320427573696e65737320436172647300000000008152506040518060400160405280600481526020017f434d4243000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001a3929190620003cd565b508060039080519060200190620001bc929190620003cd565b50620001cd6200022560201b60201c565b6000819055505050620001f5620001e96200022a60201b60201c565b6200023260201b60201c565b6200021f60405180608001604052806041815260200162004ef960419139620002f860201b60201c565b62000565565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003086200022a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032e620003a360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000387576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037e90620004a4565b60405180910390fd5b80600b90805190602001906200039f929190620003cd565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003db90620004d7565b90600052602060002090601f016020900481019282620003ff57600085556200044b565b82601f106200041a57805160ff19168380011785556200044b565b828001600101855582156200044b579182015b828111156200044a5782518255916020019190600101906200042d565b5b5090506200045a91906200045e565b5090565b5b80821115620004795760008160009055506001016200045f565b5090565b60006200048c602083620004c6565b915062000499826200053c565b602082019050919050565b60006020820190508181036000830152620004bf816200047d565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004f057607f821691505b602082108114156200050757620005066200050d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61498480620005756000396000f3fe6080604052600436106102465760003560e01c80636352211e11610139578063a7334118116100b6578063c87b56dd1161007a578063c87b56dd146107ee578063d5abeb011461082b578063dbd37cf414610856578063e0a8085314610893578063e985e9c5146108bc578063f2fde38b146108f957610246565b8063a73341181461072f578063aa98e0c614610746578063b88d4fde14610771578063bc951b911461079a578063bd32fb66146107c557610246565b80637f6e9093116100fd5780637f6e90931461065a5780638da5cb5b1461068557806395d89b41146106b0578063a22cb465146106db578063a45ba8e71461070457610246565b80636352211e146105845780636ecd2306146105c157806370a08231146105dd578063715018a61461061a5780637ec4a6591461063157610246565b806331253082116101c75780634fdd43cb1161018b5780634fdd43cb146104ac57806351830227146104d5578063583816691461050057806359bf5dbb1461051c5780635c975abb1461055957610246565b8063312530821461040157806337a66d851461042c5780633ccfd60b1461044357806342842e0e1461045a57806344a0d68a1461048357610246565b806313faede61161020e57806313faede61461033057806318160ddd1461035b57806323b872dd1461038657806328b60d15146103af5780632f6f98e1146103d857610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063093cfa63146102f0578063095ea7b314610307575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906138b9565b610922565b60405161027f9190613e40565b60405180910390f35b34801561029457600080fd5b5061029d610a04565b6040516102aa9190613e76565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061399c565b610a96565b6040516102e79190613dd9565b60405180910390f35b3480156102fc57600080fd5b50610305610b12565b005b34801561031357600080fd5b5061032e6004803603810190610329919061381f565b610bba565b005b34801561033c57600080fd5b50610345610cc5565b6040516103529190614033565b60405180910390f35b34801561036757600080fd5b50610370610ccb565b60405161037d9190614033565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613709565b610ce2565b005b3480156103bb57600080fd5b506103d660048036038101906103d191906139c9565b610cf2565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061395c565b610d90565b005b34801561040d57600080fd5b50610416610e8f565b6040516104239190613e40565b60405180910390f35b34801561043857600080fd5b50610441610ea2565b005b34801561044f57600080fd5b50610458610f65565b005b34801561046657600080fd5b50610481600480360381019061047c9190613709565b611030565b005b34801561048f57600080fd5b506104aa60048036038101906104a5919061399c565b611050565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190613913565b6110d6565b005b3480156104e157600080fd5b506104ea61116c565b6040516104f79190613e40565b60405180910390f35b61051a600480360381019061051591906139f6565b61117f565b005b34801561052857600080fd5b50610543600480360381019061053e919061369c565b61147d565b604051610550919061404e565b60405180910390f35b34801561056557600080fd5b5061056e61149d565b60405161057b9190613e40565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061399c565b6114b0565b6040516105b89190613dd9565b60405180910390f35b6105db60048036038101906105d691906139c9565b6114c6565b005b3480156105e957600080fd5b5061060460048036038101906105ff919061369c565b6117c2565b6040516106119190614033565b60405180910390f35b34801561062657600080fd5b5061062f611892565b005b34801561063d57600080fd5b5061065860048036038101906106539190613913565b61191a565b005b34801561066657600080fd5b5061066f6119b0565b60405161067c9190613e40565b60405180910390f35b34801561069157600080fd5b5061069a6119c3565b6040516106a79190613dd9565b60405180910390f35b3480156106bc57600080fd5b506106c56119ed565b6040516106d29190613e76565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906137df565b611a7f565b005b34801561071057600080fd5b50610719611bf7565b6040516107269190613e76565b60405180910390f35b34801561073b57600080fd5b50610744611c85565b005b34801561075257600080fd5b5061075b611d2d565b6040516107689190613e5b565b60405180910390f35b34801561077d57600080fd5b506107986004803603810190610793919061375c565b611d33565b005b3480156107a657600080fd5b506107af611daf565b6040516107bc919061404e565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e7919061388c565b611dc2565b005b3480156107fa57600080fd5b506108156004803603810190610810919061399c565b611e48565b6040516108229190613e76565b60405180910390f35b34801561083757600080fd5b50610840611fa1565b60405161084d9190614018565b60405180910390f35b34801561086257600080fd5b5061087d6004803603810190610878919061369c565b611fa7565b60405161088a919061404e565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b5919061385f565b611fc7565b005b3480156108c857600080fd5b506108e360048036038101906108de91906136c9565b612060565b6040516108f09190613e40565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b919061369c565b6120f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc826121ec565b5b9050919050565b606060028054610a13906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906143db565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612256565b610ad7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b1a6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610b386119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613f58565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000610bc5826114b0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2d576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4c6122a4565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c7e5750610c7c81610c776122a4565b612060565b155b15610cb5576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc08383836122ac565b505050565b600c5481565b6000610cd561235e565b6001546000540303905090565b610ced838383612363565b505050565b610cfa6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610d186119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590613f58565b60405180910390fd5b80601060006101000a81548160ff021916908360ff1602179055506000905050565b610d986122a4565b73ffffffffffffffffffffffffffffffffffffffff16610db66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390613f58565b60405180910390fd5b6000610e16610ccb565b905061271061ffff168382610e2b9190614148565b61ffff161115610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790613e98565b60405180910390fd5b610e7e828461ffff16612819565b600092506000915060009050505050565b600d60029054906101000a900460ff1681565b610eaa6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610ec86119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590613f58565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff021916908315150217905550565b610f6d6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610f8b6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613f58565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561102c573d6000803e3d6000fd5b5050565b61104b83838360405180602001604052806000815250611d33565b505050565b6110586122a4565b73ffffffffffffffffffffffffffffffffffffffff166110766119c3565b73ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390613f58565b60405180910390fd5b80600c8190555050565b6110de6122a4565b73ffffffffffffffffffffffffffffffffffffffff166110fc6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613f58565b60405180910390fd5b80600b90805190602001906111689291906133d8565b5050565b601260009054906101000a900460ff1681565b600061118a33612837565b90506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905061122882858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612867565b611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90613f78565b60405180910390fd5b601060009054906101000a900460ff1660ff16858261128691906141d6565b60ff1611156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f38565b60405180910390fd5b600d60009054906101000a900460ff161561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ed8565b60405180910390fd5b60028160ff161061137d578460ff16600c54611336919061423e565b341015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613ff8565b60405180910390fd5b6113fe565b6000818661138b91906141d6565b905060028160ff1611156113fc576002816113a691906142cc565b90508060ff16600c546113b9919061423e565b3410156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290613ff8565b60405180910390fd5b5b505b61140b338660ff16612819565b848161141791906141d6565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060009450600090505050505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b60006114bb8261287e565b600001519050919050565b60006114d0610ccb565b905061271061ffff168260ff16826114e89190614148565b61ffff16111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490613fd8565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1660ff16818461159d91906141d6565b60ff1611156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613ef8565b60405180910390fd5b600d60019054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613f98565b60405180910390fd5b600d60029054906101000a900460ff1615611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613f18565b60405180910390fd5b60008160ff1614156116f15760018361169a91906142cc565b60ff16600c546116aa919061423e565b3410156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613ff8565b60405180910390fd5b611745565b8260ff16600c54611702919061423e565b341015611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90613ff8565b60405180910390fd5b5b611752338460ff16612819565b808361175e91906141d6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506000915060009250505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61189a6122a4565b73ffffffffffffffffffffffffffffffffffffffff166118b86119c3565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613f58565b60405180910390fd5b6119186000612b0d565b565b6119226122a4565b73ffffffffffffffffffffffffffffffffffffffff166119406119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613f58565b60405180910390fd5b80600990805190602001906119ac9291906133d8565b5050565b600d60009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546119fc906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611a28906143db565b8015611a755780601f10611a4a57610100808354040283529160200191611a75565b820191906000526020600020905b815481529060010190602001808311611a5857829003601f168201915b5050505050905090565b611a876122a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aec576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611af96122a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ba66122a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611beb9190613e40565b60405180910390a35050565b600b8054611c04906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611c30906143db565b8015611c7d5780601f10611c5257610100808354040283529160200191611c7d565b820191906000526020600020905b815481529060010190602001808311611c6057829003601f168201915b505050505081565b611c8d6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611cab6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613f58565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b60115481565b611d3e848484612363565b611d5d8373ffffffffffffffffffffffffffffffffffffffff16612bd3565b8015611d725750611d7084848484612bf6565b155b15611da9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b601060009054906101000a900460ff1681565b611dca6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611de86119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613f58565b60405180910390fd5b8060118190555050565b6060611e5382612256565b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613fb8565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611f4057600b8054611ebb906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee7906143db565b8015611f345780601f10611f0957610100808354040283529160200191611f34565b820191906000526020600020905b815481529060010190602001808311611f1757829003601f168201915b50505050509050611f9c565b6000611f4a612d56565b90506000815111611f6a5760405180602001604052806000815250611f98565b80611f7484612de8565b600a604051602001611f8893929190613da8565b6040516020818303038152906040525b9150505b919050565b61271081565b600f6020528060005260406000206000915054906101000a900460ff1681565b611fcf6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611fed6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613f58565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120fc6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661211a6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790613f58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790613eb8565b60405180910390fd5b6121e981612b0d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161226161235e565b11158015612270575060005482105b801561229d575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061236e8261287e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123d9576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123fa6122a4565b73ffffffffffffffffffffffffffffffffffffffff1614806124295750612428856124236122a4565b612060565b5b8061246e57506124376122a4565b73ffffffffffffffffffffffffffffffffffffffff1661245684610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124a7576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561250e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251b8585856001612f49565b612527600084876122ac565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127a75760005482146127a657878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128128585856001612f4f565b5050505050565b612833828260405180602001604052806000815250612f55565b5050565b60008160405160200161284a9190613d8d565b604051602081830303815290604052805190602001209050919050565b60006128768260115485612f67565b905092915050565b61288661345e565b60008290508061289461235e565b111580156128a3575060005481105b15612ad6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ad457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129b8578092505050612b08565b5b600115612ad357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ace578092505050612b08565b6129b9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c1c6122a4565b8786866040518563ffffffff1660e01b8152600401612c3e9493929190613df4565b602060405180830381600087803b158015612c5857600080fd5b505af1925050508015612c8957506040513d601f19601f82011682018060405250810190612c8691906138e6565b60015b612d03573d8060008114612cb9576040519150601f19603f3d011682016040523d82523d6000602084013e612cbe565b606091505b50600081511415612cfb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612d65906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054612d91906143db565b8015612dde5780601f10612db357610100808354040283529160200191612dde565b820191906000526020600020905b815481529060010190602001808311612dc157829003601f168201915b5050505050905090565b60606000821415612e30576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f44565b600082905060005b60008214612e62578080612e4b9061443e565b915050600a82612e5b919061420d565b9150612e38565b60008167ffffffffffffffff811115612e7e57612e7d614598565b5b6040519080825280601f01601f191660200182016040528015612eb05781602001600182028036833780820191505090505b5090505b60008514612f3d57600182612ec99190614298565b9150600a85612ed891906144ab565b6030612ee49190614180565b60f81b818381518110612efa57612ef9614569565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f36919061420d565b9450612eb4565b8093505050505b919050565b50505050565b50505050565b612f628383836001612f7e565b505050565b600082612f74858461334c565b1490509392505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612feb576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613026576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130336000868387612f49565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156131fd57506131fc8773ffffffffffffffffffffffffffffffffffffffff16612bd3565b5b156132c3575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132726000888480600101955088612bf6565b6132a8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156132035782600054146132be57600080fd5b61332f565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156132c4575b8160008190555050506133456000868387612f4f565b5050505050565b60008082905060005b84518110156133b657600085828151811061337357613372614569565b5b602002602001015190508083116133955761338e83826133c1565b92506133a2565b61339f81846133c1565b92505b5080806133ae9061443e565b915050613355565b508091505092915050565b600082600052816020526040600020905092915050565b8280546133e4906143db565b90600052602060002090601f016020900481019282613406576000855561344d565b82601f1061341f57805160ff191683800117855561344d565b8280016001018555821561344d579182015b8281111561344c578251825591602001919060010190613431565b5b50905061345a91906134a1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134ba5760008160009055506001016134a2565b5090565b60006134d16134cc8461408e565b614069565b9050828152602081018484840111156134ed576134ec6145d6565b5b6134f8848285614399565b509392505050565b600061351361350e846140bf565b614069565b90508281526020810184848401111561352f5761352e6145d6565b5b61353a848285614399565b509392505050565b600081359050613551816148ad565b92915050565b60008083601f84011261356d5761356c6145cc565b5b8235905067ffffffffffffffff81111561358a576135896145c7565b5b6020830191508360208202830111156135a6576135a56145d1565b5b9250929050565b6000813590506135bc816148c4565b92915050565b6000813590506135d1816148db565b92915050565b6000813590506135e6816148f2565b92915050565b6000815190506135fb816148f2565b92915050565b600082601f830112613616576136156145cc565b5b81356136268482602086016134be565b91505092915050565b600082601f830112613644576136436145cc565b5b8135613654848260208601613500565b91505092915050565b60008135905061366c81614909565b92915050565b60008135905061368181614920565b92915050565b60008135905061369681614937565b92915050565b6000602082840312156136b2576136b16145e0565b5b60006136c084828501613542565b91505092915050565b600080604083850312156136e0576136df6145e0565b5b60006136ee85828601613542565b92505060206136ff85828601613542565b9150509250929050565b600080600060608486031215613722576137216145e0565b5b600061373086828701613542565b935050602061374186828701613542565b925050604061375286828701613672565b9150509250925092565b60008060008060808587031215613776576137756145e0565b5b600061378487828801613542565b945050602061379587828801613542565b93505060406137a687828801613672565b925050606085013567ffffffffffffffff8111156137c7576137c66145db565b5b6137d387828801613601565b91505092959194509250565b600080604083850312156137f6576137f56145e0565b5b600061380485828601613542565b9250506020613815858286016135ad565b9150509250929050565b60008060408385031215613836576138356145e0565b5b600061384485828601613542565b925050602061385585828601613672565b9150509250929050565b600060208284031215613875576138746145e0565b5b6000613883848285016135ad565b91505092915050565b6000602082840312156138a2576138a16145e0565b5b60006138b0848285016135c2565b91505092915050565b6000602082840312156138cf576138ce6145e0565b5b60006138dd848285016135d7565b91505092915050565b6000602082840312156138fc576138fb6145e0565b5b600061390a848285016135ec565b91505092915050565b600060208284031215613929576139286145e0565b5b600082013567ffffffffffffffff811115613947576139466145db565b5b6139538482850161362f565b91505092915050565b60008060408385031215613973576139726145e0565b5b60006139818582860161365d565b925050602061399285828601613542565b9150509250929050565b6000602082840312156139b2576139b16145e0565b5b60006139c084828501613672565b91505092915050565b6000602082840312156139df576139de6145e0565b5b60006139ed84828501613687565b91505092915050565b600080600060408486031215613a0f57613a0e6145e0565b5b6000613a1d86828701613687565b935050602084013567ffffffffffffffff811115613a3e57613a3d6145db565b5b613a4a86828701613557565b92509250509250925092565b613a5f81614300565b82525050565b613a76613a7182614300565b614487565b82525050565b613a8581614312565b82525050565b613a948161431e565b82525050565b6000613aa582614105565b613aaf818561411b565b9350613abf8185602086016143a8565b613ac8816145e5565b840191505092915050565b6000613ade82614110565b613ae8818561412c565b9350613af88185602086016143a8565b613b01816145e5565b840191505092915050565b6000613b1782614110565b613b21818561413d565b9350613b318185602086016143a8565b80840191505092915050565b60008154613b4a816143db565b613b54818661413d565b94506001821660008114613b6f5760018114613b8057613bb3565b60ff19831686528186019350613bb3565b613b89856140f0565b60005b83811015613bab57815481890152600182019150602081019050613b8c565b838801955050505b50505092915050565b6000613bc960138361412c565b9150613bd482614603565b602082019050919050565b6000613bec60268361412c565b9150613bf78261462c565b604082019050919050565b6000613c0f601a8361412c565b9150613c1a8261467b565b602082019050919050565b6000613c3260248361412c565b9150613c3d826146a4565b604082019050919050565b6000613c55603f8361412c565b9150613c60826146f3565b604082019050919050565b6000613c7860238361412c565b9150613c8382614742565b604082019050919050565b6000613c9b60208361412c565b9150613ca682614791565b602082019050919050565b6000613cbe60148361412c565b9150613cc9826147ba565b602082019050919050565b6000613ce160178361412c565b9150613cec826147e3565b602082019050919050565b6000613d04602f8361412c565b9150613d0f8261480c565b604082019050919050565b6000613d2760138361412c565b9150613d328261485b565b602082019050919050565b6000613d4a60138361412c565b9150613d5582614884565b602082019050919050565b613d6981614354565b82525050565b613d7881614382565b82525050565b613d878161438c565b82525050565b6000613d998284613a65565b60148201915081905092915050565b6000613db48286613b0c565b9150613dc08285613b0c565b9150613dcc8284613b3d565b9150819050949350505050565b6000602082019050613dee6000830184613a56565b92915050565b6000608082019050613e096000830187613a56565b613e166020830186613a56565b613e236040830185613d6f565b8181036060830152613e358184613a9a565b905095945050505050565b6000602082019050613e556000830184613a7c565b92915050565b6000602082019050613e706000830184613a8b565b92915050565b60006020820190508181036000830152613e908184613ad3565b905092915050565b60006020820190508181036000830152613eb181613bbc565b9050919050565b60006020820190508181036000830152613ed181613bdf565b9050919050565b60006020820190508181036000830152613ef181613c02565b9050919050565b60006020820190508181036000830152613f1181613c25565b9050919050565b60006020820190508181036000830152613f3181613c48565b9050919050565b60006020820190508181036000830152613f5181613c6b565b9050919050565b60006020820190508181036000830152613f7181613c8e565b9050919050565b60006020820190508181036000830152613f9181613cb1565b9050919050565b60006020820190508181036000830152613fb181613cd4565b9050919050565b60006020820190508181036000830152613fd181613cf7565b9050919050565b60006020820190508181036000830152613ff181613d1a565b9050919050565b6000602082019050818103600083015261401181613d3d565b9050919050565b600060208201905061402d6000830184613d60565b92915050565b60006020820190506140486000830184613d6f565b92915050565b60006020820190506140636000830184613d7e565b92915050565b6000614073614084565b905061407f828261440d565b919050565b6000604051905090565b600067ffffffffffffffff8211156140a9576140a8614598565b5b6140b2826145e5565b9050602081019050919050565b600067ffffffffffffffff8211156140da576140d9614598565b5b6140e3826145e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061415382614354565b915061415e83614354565b92508261ffff03821115614175576141746144dc565b5b828201905092915050565b600061418b82614382565b915061419683614382565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141cb576141ca6144dc565b5b828201905092915050565b60006141e18261438c565b91506141ec8361438c565b92508260ff03821115614202576142016144dc565b5b828201905092915050565b600061421882614382565b915061422383614382565b9250826142335761423261450b565b5b828204905092915050565b600061424982614382565b915061425483614382565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428d5761428c6144dc565b5b828202905092915050565b60006142a382614382565b91506142ae83614382565b9250828210156142c1576142c06144dc565b5b828203905092915050565b60006142d78261438c565b91506142e28361438c565b9250828210156142f5576142f46144dc565b5b828203905092915050565b600061430b82614362565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143c65780820151818401526020810190506143ab565b838111156143d5576000848401525b50505050565b600060028204905060018216806143f357607f821691505b602082108114156144075761440661453a565b5b50919050565b614416826145e5565b810181811067ffffffffffffffff8211171561443557614434614598565b5b80604052505050565b600061444982614382565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561447c5761447b6144dc565b5b600182019050919050565b600061449282614499565b9050919050565b60006144a4826145f6565b9050919050565b60006144b682614382565b91506144c183614382565b9250826144d1576144d061450b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b7f45786365656473206d6178204e66747320616c6c6f776564207065722077616c60008201527f6c65742e00000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973204e4f54206f76657221204760008201527f6574206261636b20746f20776f726b2079612043756265204d6f6e6b65792e00602082015250565b7f45786365656473206d6178206e667420616c6c6f77656420706572206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6148b681614300565b81146148c157600080fd5b50565b6148cd81614312565b81146148d857600080fd5b50565b6148e48161431e565b81146148ef57600080fd5b50565b6148fb81614328565b811461490657600080fd5b50565b61491281614354565b811461491d57600080fd5b50565b61492981614382565b811461493457600080fd5b50565b6149408161438c565b811461494b57600080fd5b5056fea264697066735822122016c68149f0f3d1d020f64611a03b1dc32906965e2fdd0208b982dcd2e017633e64736f6c63430008070033697066733a2f2f516d5a63624e62543373433834554b31646446386d7a68576876644e3941643758444b51414c6a644c6743444e4d2f68696464656e2e6a736f6e697066733a2f2f516d584c5565526b4d57463445543452333755394d724277624e5a59387a486957737441455a724b4a4d536743702f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80636352211e11610139578063a7334118116100b6578063c87b56dd1161007a578063c87b56dd146107ee578063d5abeb011461082b578063dbd37cf414610856578063e0a8085314610893578063e985e9c5146108bc578063f2fde38b146108f957610246565b8063a73341181461072f578063aa98e0c614610746578063b88d4fde14610771578063bc951b911461079a578063bd32fb66146107c557610246565b80637f6e9093116100fd5780637f6e90931461065a5780638da5cb5b1461068557806395d89b41146106b0578063a22cb465146106db578063a45ba8e71461070457610246565b80636352211e146105845780636ecd2306146105c157806370a08231146105dd578063715018a61461061a5780637ec4a6591461063157610246565b806331253082116101c75780634fdd43cb1161018b5780634fdd43cb146104ac57806351830227146104d5578063583816691461050057806359bf5dbb1461051c5780635c975abb1461055957610246565b8063312530821461040157806337a66d851461042c5780633ccfd60b1461044357806342842e0e1461045a57806344a0d68a1461048357610246565b806313faede61161020e57806313faede61461033057806318160ddd1461035b57806323b872dd1461038657806328b60d15146103af5780632f6f98e1146103d857610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063093cfa63146102f0578063095ea7b314610307575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906138b9565b610922565b60405161027f9190613e40565b60405180910390f35b34801561029457600080fd5b5061029d610a04565b6040516102aa9190613e76565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061399c565b610a96565b6040516102e79190613dd9565b60405180910390f35b3480156102fc57600080fd5b50610305610b12565b005b34801561031357600080fd5b5061032e6004803603810190610329919061381f565b610bba565b005b34801561033c57600080fd5b50610345610cc5565b6040516103529190614033565b60405180910390f35b34801561036757600080fd5b50610370610ccb565b60405161037d9190614033565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a89190613709565b610ce2565b005b3480156103bb57600080fd5b506103d660048036038101906103d191906139c9565b610cf2565b005b3480156103e457600080fd5b506103ff60048036038101906103fa919061395c565b610d90565b005b34801561040d57600080fd5b50610416610e8f565b6040516104239190613e40565b60405180910390f35b34801561043857600080fd5b50610441610ea2565b005b34801561044f57600080fd5b50610458610f65565b005b34801561046657600080fd5b50610481600480360381019061047c9190613709565b611030565b005b34801561048f57600080fd5b506104aa60048036038101906104a5919061399c565b611050565b005b3480156104b857600080fd5b506104d360048036038101906104ce9190613913565b6110d6565b005b3480156104e157600080fd5b506104ea61116c565b6040516104f79190613e40565b60405180910390f35b61051a600480360381019061051591906139f6565b61117f565b005b34801561052857600080fd5b50610543600480360381019061053e919061369c565b61147d565b604051610550919061404e565b60405180910390f35b34801561056557600080fd5b5061056e61149d565b60405161057b9190613e40565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061399c565b6114b0565b6040516105b89190613dd9565b60405180910390f35b6105db60048036038101906105d691906139c9565b6114c6565b005b3480156105e957600080fd5b5061060460048036038101906105ff919061369c565b6117c2565b6040516106119190614033565b60405180910390f35b34801561062657600080fd5b5061062f611892565b005b34801561063d57600080fd5b5061065860048036038101906106539190613913565b61191a565b005b34801561066657600080fd5b5061066f6119b0565b60405161067c9190613e40565b60405180910390f35b34801561069157600080fd5b5061069a6119c3565b6040516106a79190613dd9565b60405180910390f35b3480156106bc57600080fd5b506106c56119ed565b6040516106d29190613e76565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd91906137df565b611a7f565b005b34801561071057600080fd5b50610719611bf7565b6040516107269190613e76565b60405180910390f35b34801561073b57600080fd5b50610744611c85565b005b34801561075257600080fd5b5061075b611d2d565b6040516107689190613e5b565b60405180910390f35b34801561077d57600080fd5b506107986004803603810190610793919061375c565b611d33565b005b3480156107a657600080fd5b506107af611daf565b6040516107bc919061404e565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e7919061388c565b611dc2565b005b3480156107fa57600080fd5b506108156004803603810190610810919061399c565b611e48565b6040516108229190613e76565b60405180910390f35b34801561083757600080fd5b50610840611fa1565b60405161084d9190614018565b60405180910390f35b34801561086257600080fd5b5061087d6004803603810190610878919061369c565b611fa7565b60405161088a919061404e565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b5919061385f565b611fc7565b005b3480156108c857600080fd5b506108e360048036038101906108de91906136c9565b612060565b6040516108f09190613e40565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b919061369c565b6120f4565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ed57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109fd57506109fc826121ec565b5b9050919050565b606060028054610a13906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3f906143db565b8015610a8c5780601f10610a6157610100808354040283529160200191610a8c565b820191906000526020600020905b815481529060010190602001808311610a6f57829003601f168201915b5050505050905090565b6000610aa182612256565b610ad7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b1a6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610b386119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613f58565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000610bc5826114b0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2d576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4c6122a4565b73ffffffffffffffffffffffffffffffffffffffff1614158015610c7e5750610c7c81610c776122a4565b612060565b155b15610cb5576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc08383836122ac565b505050565b600c5481565b6000610cd561235e565b6001546000540303905090565b610ced838383612363565b505050565b610cfa6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610d186119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6590613f58565b60405180910390fd5b80601060006101000a81548160ff021916908360ff1602179055506000905050565b610d986122a4565b73ffffffffffffffffffffffffffffffffffffffff16610db66119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390613f58565b60405180910390fd5b6000610e16610ccb565b905061271061ffff168382610e2b9190614148565b61ffff161115610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790613e98565b60405180910390fd5b610e7e828461ffff16612819565b600092506000915060009050505050565b600d60029054906101000a900460ff1681565b610eaa6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610ec86119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1590613f58565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff021916908315150217905550565b610f6d6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610f8b6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613f58565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561102c573d6000803e3d6000fd5b5050565b61104b83838360405180602001604052806000815250611d33565b505050565b6110586122a4565b73ffffffffffffffffffffffffffffffffffffffff166110766119c3565b73ffffffffffffffffffffffffffffffffffffffff16146110cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c390613f58565b60405180910390fd5b80600c8190555050565b6110de6122a4565b73ffffffffffffffffffffffffffffffffffffffff166110fc6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114990613f58565b60405180910390fd5b80600b90805190602001906111689291906133d8565b5050565b601260009054906101000a900460ff1681565b600061118a33612837565b90506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905061122882858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612867565b611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90613f78565b60405180910390fd5b601060009054906101000a900460ff1660ff16858261128691906141d6565b60ff1611156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613f38565b60405180910390fd5b600d60009054906101000a900460ff161561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ed8565b60405180910390fd5b60028160ff161061137d578460ff16600c54611336919061423e565b341015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613ff8565b60405180910390fd5b6113fe565b6000818661138b91906141d6565b905060028160ff1611156113fc576002816113a691906142cc565b90508060ff16600c546113b9919061423e565b3410156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290613ff8565b60405180910390fd5b5b505b61140b338660ff16612819565b848161141791906141d6565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060009450600090505050505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b60006114bb8261287e565b600001519050919050565b60006114d0610ccb565b905061271061ffff168260ff16826114e89190614148565b61ffff16111561152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152490613fd8565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1660ff16818461159d91906141d6565b60ff1611156115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613ef8565b60405180910390fd5b600d60019054906101000a900460ff1615611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613f98565b60405180910390fd5b600d60029054906101000a900460ff1615611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613f18565b60405180910390fd5b60008160ff1614156116f15760018361169a91906142cc565b60ff16600c546116aa919061423e565b3410156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613ff8565b60405180910390fd5b611745565b8260ff16600c54611702919061423e565b341015611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90613ff8565b60405180910390fd5b5b611752338460ff16612819565b808361175e91906141d6565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506000915060009250505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61189a6122a4565b73ffffffffffffffffffffffffffffffffffffffff166118b86119c3565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613f58565b60405180910390fd5b6119186000612b0d565b565b6119226122a4565b73ffffffffffffffffffffffffffffffffffffffff166119406119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613f58565b60405180910390fd5b80600990805190602001906119ac9291906133d8565b5050565b600d60009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546119fc906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611a28906143db565b8015611a755780601f10611a4a57610100808354040283529160200191611a75565b820191906000526020600020905b815481529060010190602001808311611a5857829003601f168201915b5050505050905090565b611a876122a4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aec576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611af96122a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ba66122a4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611beb9190613e40565b60405180910390a35050565b600b8054611c04906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611c30906143db565b8015611c7d5780601f10611c5257610100808354040283529160200191611c7d565b820191906000526020600020905b815481529060010190602001808311611c6057829003601f168201915b505050505081565b611c8d6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611cab6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613f58565b60405180910390fd5b600d60029054906101000a900460ff1615600d60026101000a81548160ff021916908315150217905550565b60115481565b611d3e848484612363565b611d5d8373ffffffffffffffffffffffffffffffffffffffff16612bd3565b8015611d725750611d7084848484612bf6565b155b15611da9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b601060009054906101000a900460ff1681565b611dca6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611de86119c3565b73ffffffffffffffffffffffffffffffffffffffff1614611e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3590613f58565b60405180910390fd5b8060118190555050565b6060611e5382612256565b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613fb8565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611f4057600b8054611ebb906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee7906143db565b8015611f345780601f10611f0957610100808354040283529160200191611f34565b820191906000526020600020905b815481529060010190602001808311611f1757829003601f168201915b50505050509050611f9c565b6000611f4a612d56565b90506000815111611f6a5760405180602001604052806000815250611f98565b80611f7484612de8565b600a604051602001611f8893929190613da8565b6040516020818303038152906040525b9150505b919050565b61271081565b600f6020528060005260406000206000915054906101000a900460ff1681565b611fcf6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611fed6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613f58565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120fc6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661211a6119c3565b73ffffffffffffffffffffffffffffffffffffffff1614612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790613f58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d790613eb8565b60405180910390fd5b6121e981612b0d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161226161235e565b11158015612270575060005482105b801561229d575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061236e8261287e565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123d9576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123fa6122a4565b73ffffffffffffffffffffffffffffffffffffffff1614806124295750612428856124236122a4565b612060565b5b8061246e57506124376122a4565b73ffffffffffffffffffffffffffffffffffffffff1661245684610a96565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806124a7576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561250e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251b8585856001612f49565b612527600084876122ac565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127a75760005482146127a657878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128128585856001612f4f565b5050505050565b612833828260405180602001604052806000815250612f55565b5050565b60008160405160200161284a9190613d8d565b604051602081830303815290604052805190602001209050919050565b60006128768260115485612f67565b905092915050565b61288661345e565b60008290508061289461235e565b111580156128a3575060005481105b15612ad6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ad457600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129b8578092505050612b08565b5b600115612ad357818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ace578092505050612b08565b6129b9565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c1c6122a4565b8786866040518563ffffffff1660e01b8152600401612c3e9493929190613df4565b602060405180830381600087803b158015612c5857600080fd5b505af1925050508015612c8957506040513d601f19601f82011682018060405250810190612c8691906138e6565b60015b612d03573d8060008114612cb9576040519150601f19603f3d011682016040523d82523d6000602084013e612cbe565b606091505b50600081511415612cfb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612d65906143db565b80601f0160208091040260200160405190810160405280929190818152602001828054612d91906143db565b8015612dde5780601f10612db357610100808354040283529160200191612dde565b820191906000526020600020905b815481529060010190602001808311612dc157829003601f168201915b5050505050905090565b60606000821415612e30576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f44565b600082905060005b60008214612e62578080612e4b9061443e565b915050600a82612e5b919061420d565b9150612e38565b60008167ffffffffffffffff811115612e7e57612e7d614598565b5b6040519080825280601f01601f191660200182016040528015612eb05781602001600182028036833780820191505090505b5090505b60008514612f3d57600182612ec99190614298565b9150600a85612ed891906144ab565b6030612ee49190614180565b60f81b818381518110612efa57612ef9614569565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f36919061420d565b9450612eb4565b8093505050505b919050565b50505050565b50505050565b612f628383836001612f7e565b505050565b600082612f74858461334c565b1490509392505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612feb576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613026576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130336000868387612f49565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156131fd57506131fc8773ffffffffffffffffffffffffffffffffffffffff16612bd3565b5b156132c3575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132726000888480600101955088612bf6565b6132a8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156132035782600054146132be57600080fd5b61332f565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156132c4575b8160008190555050506133456000868387612f4f565b5050505050565b60008082905060005b84518110156133b657600085828151811061337357613372614569565b5b602002602001015190508083116133955761338e83826133c1565b92506133a2565b61339f81846133c1565b92505b5080806133ae9061443e565b915050613355565b508091505092915050565b600082600052816020526040600020905092915050565b8280546133e4906143db565b90600052602060002090601f016020900481019282613406576000855561344d565b82601f1061341f57805160ff191683800117855561344d565b8280016001018555821561344d579182015b8281111561344c578251825591602001919060010190613431565b5b50905061345a91906134a1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156134ba5760008160009055506001016134a2565b5090565b60006134d16134cc8461408e565b614069565b9050828152602081018484840111156134ed576134ec6145d6565b5b6134f8848285614399565b509392505050565b600061351361350e846140bf565b614069565b90508281526020810184848401111561352f5761352e6145d6565b5b61353a848285614399565b509392505050565b600081359050613551816148ad565b92915050565b60008083601f84011261356d5761356c6145cc565b5b8235905067ffffffffffffffff81111561358a576135896145c7565b5b6020830191508360208202830111156135a6576135a56145d1565b5b9250929050565b6000813590506135bc816148c4565b92915050565b6000813590506135d1816148db565b92915050565b6000813590506135e6816148f2565b92915050565b6000815190506135fb816148f2565b92915050565b600082601f830112613616576136156145cc565b5b81356136268482602086016134be565b91505092915050565b600082601f830112613644576136436145cc565b5b8135613654848260208601613500565b91505092915050565b60008135905061366c81614909565b92915050565b60008135905061368181614920565b92915050565b60008135905061369681614937565b92915050565b6000602082840312156136b2576136b16145e0565b5b60006136c084828501613542565b91505092915050565b600080604083850312156136e0576136df6145e0565b5b60006136ee85828601613542565b92505060206136ff85828601613542565b9150509250929050565b600080600060608486031215613722576137216145e0565b5b600061373086828701613542565b935050602061374186828701613542565b925050604061375286828701613672565b9150509250925092565b60008060008060808587031215613776576137756145e0565b5b600061378487828801613542565b945050602061379587828801613542565b93505060406137a687828801613672565b925050606085013567ffffffffffffffff8111156137c7576137c66145db565b5b6137d387828801613601565b91505092959194509250565b600080604083850312156137f6576137f56145e0565b5b600061380485828601613542565b9250506020613815858286016135ad565b9150509250929050565b60008060408385031215613836576138356145e0565b5b600061384485828601613542565b925050602061385585828601613672565b9150509250929050565b600060208284031215613875576138746145e0565b5b6000613883848285016135ad565b91505092915050565b6000602082840312156138a2576138a16145e0565b5b60006138b0848285016135c2565b91505092915050565b6000602082840312156138cf576138ce6145e0565b5b60006138dd848285016135d7565b91505092915050565b6000602082840312156138fc576138fb6145e0565b5b600061390a848285016135ec565b91505092915050565b600060208284031215613929576139286145e0565b5b600082013567ffffffffffffffff811115613947576139466145db565b5b6139538482850161362f565b91505092915050565b60008060408385031215613973576139726145e0565b5b60006139818582860161365d565b925050602061399285828601613542565b9150509250929050565b6000602082840312156139b2576139b16145e0565b5b60006139c084828501613672565b91505092915050565b6000602082840312156139df576139de6145e0565b5b60006139ed84828501613687565b91505092915050565b600080600060408486031215613a0f57613a0e6145e0565b5b6000613a1d86828701613687565b935050602084013567ffffffffffffffff811115613a3e57613a3d6145db565b5b613a4a86828701613557565b92509250509250925092565b613a5f81614300565b82525050565b613a76613a7182614300565b614487565b82525050565b613a8581614312565b82525050565b613a948161431e565b82525050565b6000613aa582614105565b613aaf818561411b565b9350613abf8185602086016143a8565b613ac8816145e5565b840191505092915050565b6000613ade82614110565b613ae8818561412c565b9350613af88185602086016143a8565b613b01816145e5565b840191505092915050565b6000613b1782614110565b613b21818561413d565b9350613b318185602086016143a8565b80840191505092915050565b60008154613b4a816143db565b613b54818661413d565b94506001821660008114613b6f5760018114613b8057613bb3565b60ff19831686528186019350613bb3565b613b89856140f0565b60005b83811015613bab57815481890152600182019150602081019050613b8c565b838801955050505b50505092915050565b6000613bc960138361412c565b9150613bd482614603565b602082019050919050565b6000613bec60268361412c565b9150613bf78261462c565b604082019050919050565b6000613c0f601a8361412c565b9150613c1a8261467b565b602082019050919050565b6000613c3260248361412c565b9150613c3d826146a4565b604082019050919050565b6000613c55603f8361412c565b9150613c60826146f3565b604082019050919050565b6000613c7860238361412c565b9150613c8382614742565b604082019050919050565b6000613c9b60208361412c565b9150613ca682614791565b602082019050919050565b6000613cbe60148361412c565b9150613cc9826147ba565b602082019050919050565b6000613ce160178361412c565b9150613cec826147e3565b602082019050919050565b6000613d04602f8361412c565b9150613d0f8261480c565b604082019050919050565b6000613d2760138361412c565b9150613d328261485b565b602082019050919050565b6000613d4a60138361412c565b9150613d5582614884565b602082019050919050565b613d6981614354565b82525050565b613d7881614382565b82525050565b613d878161438c565b82525050565b6000613d998284613a65565b60148201915081905092915050565b6000613db48286613b0c565b9150613dc08285613b0c565b9150613dcc8284613b3d565b9150819050949350505050565b6000602082019050613dee6000830184613a56565b92915050565b6000608082019050613e096000830187613a56565b613e166020830186613a56565b613e236040830185613d6f565b8181036060830152613e358184613a9a565b905095945050505050565b6000602082019050613e556000830184613a7c565b92915050565b6000602082019050613e706000830184613a8b565b92915050565b60006020820190508181036000830152613e908184613ad3565b905092915050565b60006020820190508181036000830152613eb181613bbc565b9050919050565b60006020820190508181036000830152613ed181613bdf565b9050919050565b60006020820190508181036000830152613ef181613c02565b9050919050565b60006020820190508181036000830152613f1181613c25565b9050919050565b60006020820190508181036000830152613f3181613c48565b9050919050565b60006020820190508181036000830152613f5181613c6b565b9050919050565b60006020820190508181036000830152613f7181613c8e565b9050919050565b60006020820190508181036000830152613f9181613cb1565b9050919050565b60006020820190508181036000830152613fb181613cd4565b9050919050565b60006020820190508181036000830152613fd181613cf7565b9050919050565b60006020820190508181036000830152613ff181613d1a565b9050919050565b6000602082019050818103600083015261401181613d3d565b9050919050565b600060208201905061402d6000830184613d60565b92915050565b60006020820190506140486000830184613d6f565b92915050565b60006020820190506140636000830184613d7e565b92915050565b6000614073614084565b905061407f828261440d565b919050565b6000604051905090565b600067ffffffffffffffff8211156140a9576140a8614598565b5b6140b2826145e5565b9050602081019050919050565b600067ffffffffffffffff8211156140da576140d9614598565b5b6140e3826145e5565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061415382614354565b915061415e83614354565b92508261ffff03821115614175576141746144dc565b5b828201905092915050565b600061418b82614382565b915061419683614382565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141cb576141ca6144dc565b5b828201905092915050565b60006141e18261438c565b91506141ec8361438c565b92508260ff03821115614202576142016144dc565b5b828201905092915050565b600061421882614382565b915061422383614382565b9250826142335761423261450b565b5b828204905092915050565b600061424982614382565b915061425483614382565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428d5761428c6144dc565b5b828202905092915050565b60006142a382614382565b91506142ae83614382565b9250828210156142c1576142c06144dc565b5b828203905092915050565b60006142d78261438c565b91506142e28361438c565b9250828210156142f5576142f46144dc565b5b828203905092915050565b600061430b82614362565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156143c65780820151818401526020810190506143ab565b838111156143d5576000848401525b50505050565b600060028204905060018216806143f357607f821691505b602082108114156144075761440661453a565b5b50919050565b614416826145e5565b810181811067ffffffffffffffff8211171561443557614434614598565b5b80604052505050565b600061444982614382565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561447c5761447b6144dc565b5b600182019050919050565b600061449282614499565b9050919050565b60006144a4826145f6565b9050919050565b60006144b682614382565b91506144c183614382565b9250826144d1576144d061450b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b7f45786365656473206d6178204e66747320616c6c6f776564207065722077616c60008201527f6c65742e00000000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973204e4f54206f76657221204760008201527f6574206261636b20746f20776f726b2079612043756265204d6f6e6b65792e00602082015250565b7f45786365656473206d6178206e667420616c6c6f77656420706572206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e76616c6964206d65726b6c652070726f6f66000000000000000000000000600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6148b681614300565b81146148c157600080fd5b50565b6148cd81614312565b81146148d857600080fd5b50565b6148e48161431e565b81146148ef57600080fd5b50565b6148fb81614328565b811461490657600080fd5b50565b61491281614354565b811461491d57600080fd5b50565b61492981614382565b811461493457600080fd5b50565b6149408161438c565b811461494b57600080fd5b5056fea264697066735822122016c68149f0f3d1d020f64611a03b1dc32906965e2fdd0208b982dcd2e017633e64736f6c63430008070033

Deployed Bytecode Sourcemap

47782:5804:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25106:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28301:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51001:81;;;;;;;;;;;;;:::i;:::-;;29464:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48048:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24355:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30889:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51090:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49692:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48204:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52958:101;;;;;;;;;;;;;:::i;:::-;;53326:147;;;;;;;;;;;;;:::i;:::-;;31130:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53067:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53157:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48454:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51756:1078;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48256:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48172:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28109:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48712:972;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25525:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46903:103;;;;;;;;;;;;;:::i;:::-;;52842:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48137:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46252:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28470:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30218:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48008:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50876:117;;;;;;;;;;;;;:::i;:::-;;48413:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31386:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48364:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51240:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50046:727;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48088:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48311:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50781:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30608:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47161:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25106:355;25253:4;25310:25;25295:40;;;:11;:40;;;;:105;;;;25367:33;25352:48;;;:11;:48;;;;25295:105;:158;;;;25417:36;25441:11;25417:23;:36::i;:::-;25295:158;25275:178;;25106:355;;;:::o;28301:100::-;28355:13;28388:5;28381:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28301:100;:::o;29901:245::-;30005:7;30035:16;30043:7;30035;:16::i;:::-;30030:64;;30060:34;;;;;;;;;;;;;;30030:64;30114:15;:24;30130:7;30114:24;;;;;;;;;;;;;;;;;;;;;30107:31;;29901:245;;;:::o;51001:81::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51066:8:::1;;;;;;;;;;;51065:9;51054:8;;:20;;;;;;;;;;;;;;;;;;51001:81::o:0;29464:371::-;29537:13;29553:24;29569:7;29553:15;:24::i;:::-;29537:40;;29598:5;29592:11;;:2;:11;;;29588:48;;;29612:24;;;;;;;;;;;;;;29588:48;29669:5;29653:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;29679:37;29696:5;29703:12;:10;:12::i;:::-;29679:16;:37::i;:::-;29678:38;29653:63;29649:138;;;29740:35;;;;;;;;;;;;;;29649:138;29799:28;29808:2;29812:7;29821:5;29799:8;:28::i;:::-;29526:309;29464:371;;:::o;48048:31::-;;;;:::o;24355:303::-;24399:7;24624:15;:13;:15::i;:::-;24609:12;;24593:13;;:28;:46;24586:53;;24355:303;:::o;30889:170::-;31023:28;31033:4;31039:2;31043:7;31023:9;:28::i;:::-;30889:170;;;:::o;51090:142::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51194:6:::1;51169:22;;:31;;;;;;;;;;;;;;;;;;51211:13;;;51090:142:::0;:::o;49692:346::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49778:18:::1;49806:13;:11;:13::i;:::-;49778:42;;48123:5;49839:38;;49853:11;49839;:25;;;;:::i;:::-;:38;;;;49831:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49912:33;49922:9;49933:11;49912:33;;:9;:33::i;:::-;49956:18;;;49985:16;;;50012:18;;;49767:271;49692:346:::0;;:::o;48204:39::-;;;;;;;;;;;;;:::o;52958:101::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53019:6:::1;;;;;;;;;;;53018:7;53009:6;;:16;;;;;;;;;;;;;;;;;;53047:4;53036:8;;:15;;;;;;;;;;;;;;;;;;52958:101::o:0;53326:147::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53376:16:::1;53395:21;53376:40;;53435:10;53427:28;;:38;53456:8;53427:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53365:108;53326:147::o:0;31130:185::-;31268:39;31285:4;31291:2;31295:7;31268:39;;;;;;;;;;;;:16;:39::i;:::-;31130:185;;;:::o;53067:82::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53136:5:::1;53129:4;:12;;;;53067:82:::0;:::o;53157:161::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53292:18:::1;53272:17;:38;;;;;;;;;;;;:::i;:::-;;53157:161:::0;:::o;48454:28::-;;;;;;;;;;;;;:::o;51756:1078::-;51881:16;51900:23;51912:10;51900:11;:23::i;:::-;51881:42;;51934:19;51956:15;:27;51972:10;51956:27;;;;;;;;;;;;;;;;;;;;;;;;;51934:49;;52002:30;52010:8;52020:11;;52002:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:30::i;:::-;51994:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52121:22;;;;;;;;;;;52090:53;;52106:11;52090:13;:27;;;;:::i;:::-;:53;;;;52068:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;52228:8;;;;;;;;;;;52227:9;52219:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52301:1;52284:13;:18;;;52280:370;;52347:11;52340:18;;:4;;:18;;;;:::i;:::-;52327:9;:31;;52319:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52280:370;;;52415:16;52448:13;52434:11;:27;;;;:::i;:::-;52415:46;;52493:1;52480:10;:14;;;52476:163;;;52541:1;52528:10;:14;;;;:::i;:::-;52515:27;;52589:10;52582:17;;:4;;:17;;;;:::i;:::-;52569:9;:30;;52561:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52476:163;52400:250;52280:370;52662:34;52672:10;52684:11;52662:34;;:9;:34::i;:::-;52753:11;52737:13;:27;;;;:::i;:::-;52707:15;:27;52723:10;52707:27;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;52777:18;;;52806:20;;;51870:964;;51756:1078;;;:::o;48256:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;48172:25::-;;;;;;;;;;;;;:::o;28109:125::-;28173:7;28200:21;28213:7;28200:12;:21::i;:::-;:26;;;28193:33;;28109:125;;;:::o;48712:972::-;48773:18;48801:13;:11;:13::i;:::-;48773:42;;48123:5;48834:38;;48848:11;48834:25;;:11;:25;;;;:::i;:::-;:38;;;;48826:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48907:9;48919:13;:25;48933:10;48919:25;;;;;;;;;;;;;;;;;;;;;;;;;48907:37;;48998:22;;;;;;;;;;;48977:43;;48991:3;48977:11;:17;;;;:::i;:::-;:43;;;;48955:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;49106:6;;;;;;;;;;;49105:7;49097:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;49160:20;;;;;;;;;;;49159:21;49151:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49272:1;49265:3;:8;;;49261:255;;;49351:1;49337:11;:15;;;;:::i;:::-;49329:24;;:4;;:24;;;;:::i;:::-;49316:9;:37;;49290:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;49261:255;;;49469:11;49462:18;;:4;;:18;;;;:::i;:::-;49449:9;:31;;49441:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49261:255;49526:34;49536:10;49548:11;49526:34;;:9;:34::i;:::-;49613:3;49599:11;:17;;;;:::i;:::-;49571:13;:25;49585:10;49571:25;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;49629:18;;;49658;;;48762:922;;48712:972;:::o;25525:206::-;25589:7;25630:1;25613:19;;:5;:19;;;25609:60;;;25641:28;;;;;;;;;;;;;;25609:60;25695:12;:19;25708:5;25695:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25687:36;;25680:43;;25525:206;;;:::o;46903:103::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46968:30:::1;46995:1;46968:18;:30::i;:::-;46903:103::o:0;52842:108::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52932:10:::1;52920:9;:22;;;;;;;;;;;;:::i;:::-;;52842:108:::0;:::o;48137:28::-;;;;;;;;;;;;;:::o;46252:87::-;46298:7;46325:6;;;;;;;;;;;46318:13;;46252:87;:::o;28470:104::-;28526:13;28559:7;28552:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28470:104;:::o;30218:319::-;30361:12;:10;:12::i;:::-;30349:24;;:8;:24;;;30345:54;;;30382:17;;;;;;;;;;;;;;30345:54;30457:8;30412:18;:32;30431:12;:10;:12::i;:::-;30412:32;;;;;;;;;;;;;;;:42;30445:8;30412:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30510:8;30481:48;;30496:12;:10;:12::i;:::-;30481:48;;;30520:8;30481:48;;;;;;:::i;:::-;;;;;;;;30218:319;;:::o;48008:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50876:117::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50965:20:::1;;;;;;;;;;;50964:21;50941:20;;:44;;;;;;;;;;;;;;;;;;50876:117::o:0;48413:34::-;;;;:::o;31386:406::-;31553:28;31563:4;31569:2;31573:7;31553:9;:28::i;:::-;31610:15;:2;:13;;;:15::i;:::-;:89;;;;;31643:56;31674:4;31680:2;31684:7;31693:5;31643:30;:56::i;:::-;31642:57;31610:89;31592:193;;;31733:40;;;;;;;;;;;;;;31592:193;31386:406;;;;:::o;48364:40::-;;;;;;;;;;;;;:::o;51240:165::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51377:20:::1;51355:19;:42;;;;51240:165:::0;:::o;50046:727::-;50165:13;50218:17;50226:8;50218:7;:17::i;:::-;50196:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;50339:5;50327:17;;:8;;;;;;;;;;;:17;;;50323:74;;;50368:17;50361:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50323:74;50409:28;50440:10;:8;:10::i;:::-;50409:41;;50512:1;50487:14;50481:28;:32;:284;;;;;;;;;;;;;;;;;50605:14;50646:19;:8;:17;:19::i;:::-;50692:9;50562:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50481:284;50461:304;;;50046:727;;;;:::o;48088:40::-;48123:5;48088:40;:::o;48311:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;50781:87::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50854:6:::1;50843:8;;:17;;;;;;;;;;;;;;;;;;50781:87:::0;:::o;30608:214::-;30750:4;30779:18;:25;30798:5;30779:25;;;;;;;;;;;;;;;:35;30805:8;30779:35;;;;;;;;;;;;;;;;;;;;;;;;;30772:42;;30608:214;;;;:::o;47161:238::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47284:1:::1;47264:22;;:8;:22;;;;47242:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47363:28;47382:8;47363:18;:28::i;:::-;47161:238:::0;:::o;14853:207::-;14983:4;15027:25;15012:40;;;:11;:40;;;;15005:47;;14853:207;;;:::o;32047:213::-;32104:4;32160:7;32141:15;:13;:15::i;:::-;:26;;:66;;;;;32194:13;;32184:7;:23;32141:66;:111;;;;;32225:11;:20;32237:7;32225:20;;;;;;;;;;;:27;;;;;;;;;;;;32224:28;32141:111;32121:131;;32047:213;;;:::o;2866:98::-;2919:7;2946:10;2939:17;;2866:98;:::o;40434:196::-;40576:2;40549:15;:24;40565:7;40549:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40614:7;40610:2;40594:28;;40603:5;40594:28;;;;;;;;;;;;40434:196;;;:::o;24129:92::-;24185:7;24129:92;:::o;35377:2130::-;35492:35;35530:21;35543:7;35530:12;:21::i;:::-;35492:59;;35590:4;35568:26;;:13;:18;;;:26;;;35564:67;;35603:28;;;;;;;;;;;;;;35564:67;35644:22;35686:4;35670:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;35707:36;35724:4;35730:12;:10;:12::i;:::-;35707:16;:36::i;:::-;35670:73;:126;;;;35784:12;:10;:12::i;:::-;35760:36;;:20;35772:7;35760:11;:20::i;:::-;:36;;;35670:126;35644:153;;35815:17;35810:66;;35841:35;;;;;;;;;;;;;;35810:66;35905:1;35891:16;;:2;:16;;;35887:52;;;35916:23;;;;;;;;;;;;;;35887:52;35952:43;35974:4;35980:2;35984:7;35993:1;35952:21;:43::i;:::-;36060:35;36077:1;36081:7;36090:4;36060:8;:35::i;:::-;36421:1;36391:12;:18;36404:4;36391:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36465:1;36437:12;:16;36450:2;36437:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36483:31;36517:11;:20;36529:7;36517:20;;;;;;;;;;;36483:54;;36568:2;36552:8;:13;;;:18;;;;;;;;;;;;;;;;;;36618:15;36585:8;:23;;;:49;;;;;;;;;;;;;;;;;;36886:19;36918:1;36908:7;:11;36886:33;;36934:31;36968:11;:24;36980:11;36968:24;;;;;;;;;;;36934:58;;37036:1;37011:27;;:8;:13;;;;;;;;;;;;:27;;;37007:384;;;37221:13;;37206:11;:28;37202:174;;37275:4;37259:8;:13;;;:20;;;;;;;;;;;;;;;;;;37328:13;:28;;;37302:8;:23;;;:54;;;;;;;;;;;;;;;;;;37202:174;37007:384;36366:1036;;;37438:7;37434:2;37419:27;;37428:4;37419:27;;;;;;;;;;;;37457:42;37478:4;37484:2;37488:7;37497:1;37457:20;:42::i;:::-;35481:2026;;35377:2130;;;:::o;32268:104::-;32337:27;32347:2;32351:8;32337:27;;;;;;;;;;;;:9;:27::i;:::-;32268:104;;:::o;51413:133::-;51472:12;51531:5;51514:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;51504:34;;;;;;51497:41;;51413:133;;;:::o;51554:194::-;51659:4;51688:52;51707:5;51714:19;;51735:4;51688:18;:52::i;:::-;51681:59;;51554:194;;;;:::o;26906:1141::-;26995:21;;:::i;:::-;27034:12;27049:7;27034:22;;27117:4;27098:15;:13;:15::i;:::-;:23;;:47;;;;;27132:13;;27125:4;:20;27098:47;27094:886;;;27166:31;27200:11;:17;27212:4;27200:17;;;;;;;;;;;27166:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27241:9;:16;;;27236:729;;27312:1;27286:28;;:9;:14;;;:28;;;27282:101;;27350:9;27343:16;;;;;;27282:101;27685:261;27692:4;27685:261;;;27725:6;;;;;;;;27770:11;:17;27782:4;27770:17;;;;;;;;;;;27758:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27844:1;27818:28;;:9;:14;;;:28;;;27814:109;;27886:9;27879:16;;;;;;27814:109;27685:261;;;27236:729;27147:833;27094:886;28008:31;;;;;;;;;;;;;;26906:1141;;;;:::o;47559:191::-;47633:16;47652:6;;;;;;;;;;;47633:25;;47678:8;47669:6;;:17;;;;;;;;;;;;;;;;;;47733:8;47702:40;;47723:8;47702:40;;;;;;;;;;;;47622:128;47559:191;:::o;4311:326::-;4371:4;4628:1;4606:7;:19;;;:23;4599:30;;4311:326;;;:::o;41122:772::-;41285:4;41335:2;41319:36;;;41374:12;:10;:12::i;:::-;41405:4;41428:7;41454:5;41319:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41302:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41662:1;41645:6;:13;:18;41641:235;;;41691:40;;;;;;;;;;;;;;41641:235;41834:6;41828:13;41819:6;41815:2;41811:15;41804:38;41302:585;41540:45;;;41530:55;;;:6;:55;;;;41523:62;;;41122:772;;;;;;:::o;53481:102::-;53533:13;53566:9;53559:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53481:102;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;42542:159::-;;;;;:::o;43360:158::-;;;;;:::o;32735:163::-;32858:32;32864:2;32868:8;32878:5;32885:4;32858:5;:32::i;:::-;32735:163;;;:::o;44285:190::-;44410:4;44463;44434:25;44447:5;44454:4;44434:12;:25::i;:::-;:33;44427:40;;44285:190;;;;;:::o;33157:1966::-;33296:20;33319:13;;33296:36;;33361:1;33347:16;;:2;:16;;;33343:48;;;33372:19;;;;;;;;;;;;;;33343:48;33418:1;33406:8;:13;33402:44;;;33428:18;;;;;;;;;;;;;;33402:44;33459:61;33489:1;33493:2;33497:12;33511:8;33459:21;:61::i;:::-;33832:8;33797:12;:16;33810:2;33797:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33896:8;33856:12;:16;33869:2;33856:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33955:2;33922:11;:25;33934:12;33922:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;34022:15;33972:11;:25;33984:12;33972:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;34055:20;34078:12;34055:35;;34105:11;34134:8;34119:12;:23;34105:37;;34163:4;:23;;;;;34171:15;:2;:13;;;:15::i;:::-;34163:23;34159:832;;;34207:505;34263:12;34259:2;34238:38;;34255:1;34238:38;;;;;;;;;;;;34330:212;34399:1;34432:2;34465:14;;;;;;34510:5;34330:30;:212::i;:::-;34299:365;;34600:40;;;;;;;;;;;;;;34299:365;34707:3;34691:12;:19;;34207:505;;34793:12;34776:13;;:29;34772:43;;34807:8;;;34772:43;34159:832;;;34856:120;34912:14;;;;;;34908:2;34887:40;;34904:1;34887:40;;;;;;;;;;;;34971:3;34955:12;:19;;34856:120;;34159:832;35021:12;35005:13;:28;;;;33772:1273;;35055:60;35084:1;35088:2;35092:12;35106:8;35055:20;:60::i;:::-;33285:1838;33157:1966;;;;:::o;44837:707::-;44947:7;44972:20;44995:4;44972:27;;45015:9;45010:497;45034:5;:12;45030:1;:16;45010:497;;;45068:20;45091:5;45097:1;45091:8;;;;;;;;:::i;:::-;;;;;;;;45068:31;;45134:12;45118;:28;45114:382;;45261:42;45276:12;45290;45261:14;:42::i;:::-;45246:57;;45114:382;;;45438:42;45453:12;45467;45438:14;:42::i;:::-;45423:57;;45114:382;45053:454;45048:3;;;;;:::i;:::-;;;;45010:497;;;;45524:12;45517:19;;;44837:707;;;;:::o;45552:256::-;45647:13;45715:1;45709:4;45702:15;45744:1;45738:4;45731:15;45785:4;45779;45769:21;45760:30;;45552:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:135::-;3200:5;3238:6;3225:20;3216:29;;3254:31;3279:5;3254:31;:::i;:::-;3156:135;;;;:::o;3297:329::-;3356:6;3405:2;3393:9;3384:7;3380:23;3376:32;3373:119;;;3411:79;;:::i;:::-;3373:119;3531:1;3556:53;3601:7;3592:6;3581:9;3577:22;3556:53;:::i;:::-;3546:63;;3502:117;3297:329;;;;:::o;3632:474::-;3700:6;3708;3757:2;3745:9;3736:7;3732:23;3728:32;3725:119;;;3763:79;;:::i;:::-;3725:119;3883:1;3908:53;3953:7;3944:6;3933:9;3929:22;3908:53;:::i;:::-;3898:63;;3854:117;4010:2;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3981:118;3632:474;;;;;:::o;4112:619::-;4189:6;4197;4205;4254:2;4242:9;4233:7;4229:23;4225:32;4222:119;;;4260:79;;:::i;:::-;4222:119;4380:1;4405:53;4450:7;4441:6;4430:9;4426:22;4405:53;:::i;:::-;4395:63;;4351:117;4507:2;4533:53;4578:7;4569:6;4558:9;4554:22;4533:53;:::i;:::-;4523:63;;4478:118;4635:2;4661:53;4706:7;4697:6;4686:9;4682:22;4661:53;:::i;:::-;4651:63;;4606:118;4112:619;;;;;:::o;4737:943::-;4832:6;4840;4848;4856;4905:3;4893:9;4884:7;4880:23;4876:33;4873:120;;;4912:79;;:::i;:::-;4873:120;5032:1;5057:53;5102:7;5093:6;5082:9;5078:22;5057:53;:::i;:::-;5047:63;;5003:117;5159:2;5185:53;5230:7;5221:6;5210:9;5206:22;5185:53;:::i;:::-;5175:63;;5130:118;5287:2;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5258:118;5443:2;5432:9;5428:18;5415:32;5474:18;5466:6;5463:30;5460:117;;;5496:79;;:::i;:::-;5460:117;5601:62;5655:7;5646:6;5635:9;5631:22;5601:62;:::i;:::-;5591:72;;5386:287;4737:943;;;;;;;:::o;5686:468::-;5751:6;5759;5808:2;5796:9;5787:7;5783:23;5779:32;5776:119;;;5814:79;;:::i;:::-;5776:119;5934:1;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5905:117;6061:2;6087:50;6129:7;6120:6;6109:9;6105:22;6087:50;:::i;:::-;6077:60;;6032:115;5686:468;;;;;:::o;6160:474::-;6228:6;6236;6285:2;6273:9;6264:7;6260:23;6256:32;6253:119;;;6291:79;;:::i;:::-;6253:119;6411:1;6436:53;6481:7;6472:6;6461:9;6457:22;6436:53;:::i;:::-;6426:63;;6382:117;6538:2;6564:53;6609:7;6600:6;6589:9;6585:22;6564:53;:::i;:::-;6554:63;;6509:118;6160:474;;;;;:::o;6640:323::-;6696:6;6745:2;6733:9;6724:7;6720:23;6716:32;6713:119;;;6751:79;;:::i;:::-;6713:119;6871:1;6896:50;6938:7;6929:6;6918:9;6914:22;6896:50;:::i;:::-;6886:60;;6842:114;6640:323;;;;:::o;6969:329::-;7028:6;7077:2;7065:9;7056:7;7052:23;7048:32;7045:119;;;7083:79;;:::i;:::-;7045:119;7203:1;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7174:117;6969:329;;;;:::o;7304:327::-;7362:6;7411:2;7399:9;7390:7;7386:23;7382:32;7379:119;;;7417:79;;:::i;:::-;7379:119;7537:1;7562:52;7606:7;7597:6;7586:9;7582:22;7562:52;:::i;:::-;7552:62;;7508:116;7304:327;;;;:::o;7637:349::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:63;7961:7;7952:6;7941:9;7937:22;7906:63;:::i;:::-;7896:73;;7852:127;7637:349;;;;:::o;7992:509::-;8061:6;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8264:1;8253:9;8249:17;8236:31;8294:18;8286:6;8283:30;8280:117;;;8316:79;;:::i;:::-;8280:117;8421:63;8476:7;8467:6;8456:9;8452:22;8421:63;:::i;:::-;8411:73;;8207:287;7992:509;;;;:::o;8507:472::-;8574:6;8582;8631:2;8619:9;8610:7;8606:23;8602:32;8599:119;;;8637:79;;:::i;:::-;8599:119;8757:1;8782:52;8826:7;8817:6;8806:9;8802:22;8782:52;:::i;:::-;8772:62;;8728:116;8883:2;8909:53;8954:7;8945:6;8934:9;8930:22;8909:53;:::i;:::-;8899:63;;8854:118;8507:472;;;;;:::o;8985:329::-;9044:6;9093:2;9081:9;9072:7;9068:23;9064:32;9061:119;;;9099:79;;:::i;:::-;9061:119;9219:1;9244:53;9289:7;9280:6;9269:9;9265:22;9244:53;:::i;:::-;9234:63;;9190:117;8985:329;;;;:::o;9320:325::-;9377:6;9426:2;9414:9;9405:7;9401:23;9397:32;9394:119;;;9432:79;;:::i;:::-;9394:119;9552:1;9577:51;9620:7;9611:6;9600:9;9596:22;9577:51;:::i;:::-;9567:61;;9523:115;9320:325;;;;:::o;9651:700::-;9744:6;9752;9760;9809:2;9797:9;9788:7;9784:23;9780:32;9777:119;;;9815:79;;:::i;:::-;9777:119;9935:1;9960:51;10003:7;9994:6;9983:9;9979:22;9960:51;:::i;:::-;9950:61;;9906:115;10088:2;10077:9;10073:18;10060:32;10119:18;10111:6;10108:30;10105:117;;;10141:79;;:::i;:::-;10105:117;10254:80;10326:7;10317:6;10306:9;10302:22;10254:80;:::i;:::-;10236:98;;;;10031:313;9651:700;;;;;:::o;10357:118::-;10444:24;10462:5;10444:24;:::i;:::-;10439:3;10432:37;10357:118;;:::o;10481:157::-;10586:45;10606:24;10624:5;10606:24;:::i;:::-;10586:45;:::i;:::-;10581:3;10574:58;10481:157;;:::o;10644:109::-;10725:21;10740:5;10725:21;:::i;:::-;10720:3;10713:34;10644:109;;:::o;10759:118::-;10846:24;10864:5;10846:24;:::i;:::-;10841:3;10834:37;10759:118;;:::o;10883:360::-;10969:3;10997:38;11029:5;10997:38;:::i;:::-;11051:70;11114:6;11109:3;11051:70;:::i;:::-;11044:77;;11130:52;11175:6;11170:3;11163:4;11156:5;11152:16;11130:52;:::i;:::-;11207:29;11229:6;11207:29;:::i;:::-;11202:3;11198:39;11191:46;;10973:270;10883:360;;;;:::o;11249:364::-;11337:3;11365:39;11398:5;11365:39;:::i;:::-;11420:71;11484:6;11479:3;11420:71;:::i;:::-;11413:78;;11500:52;11545:6;11540:3;11533:4;11526:5;11522:16;11500:52;:::i;:::-;11577:29;11599:6;11577:29;:::i;:::-;11572:3;11568:39;11561:46;;11341:272;11249:364;;;;:::o;11619:377::-;11725:3;11753:39;11786:5;11753:39;:::i;:::-;11808:89;11890:6;11885:3;11808:89;:::i;:::-;11801:96;;11906:52;11951:6;11946:3;11939:4;11932:5;11928:16;11906:52;:::i;:::-;11983:6;11978:3;11974:16;11967:23;;11729:267;11619:377;;;;:::o;12026:845::-;12129:3;12166:5;12160:12;12195:36;12221:9;12195:36;:::i;:::-;12247:89;12329:6;12324:3;12247:89;:::i;:::-;12240:96;;12367:1;12356:9;12352:17;12383:1;12378:137;;;;12529:1;12524:341;;;;12345:520;;12378:137;12462:4;12458:9;12447;12443:25;12438:3;12431:38;12498:6;12493:3;12489:16;12482:23;;12378:137;;12524:341;12591:38;12623:5;12591:38;:::i;:::-;12651:1;12665:154;12679:6;12676:1;12673:13;12665:154;;;12753:7;12747:14;12743:1;12738:3;12734:11;12727:35;12803:1;12794:7;12790:15;12779:26;;12701:4;12698:1;12694:12;12689:17;;12665:154;;;12848:6;12843:3;12839:16;12832:23;;12531:334;;12345:520;;12133:738;;12026:845;;;;:::o;12877:366::-;13019:3;13040:67;13104:2;13099:3;13040:67;:::i;:::-;13033:74;;13116:93;13205:3;13116:93;:::i;:::-;13234:2;13229:3;13225:12;13218:19;;12877:366;;;:::o;13249:::-;13391:3;13412:67;13476:2;13471:3;13412:67;:::i;:::-;13405:74;;13488:93;13577:3;13488:93;:::i;:::-;13606:2;13601:3;13597:12;13590:19;;13249:366;;;:::o;13621:::-;13763:3;13784:67;13848:2;13843:3;13784:67;:::i;:::-;13777:74;;13860:93;13949:3;13860:93;:::i;:::-;13978:2;13973:3;13969:12;13962:19;;13621:366;;;:::o;13993:::-;14135:3;14156:67;14220:2;14215:3;14156:67;:::i;:::-;14149:74;;14232:93;14321:3;14232:93;:::i;:::-;14350:2;14345:3;14341:12;14334:19;;13993:366;;;:::o;14365:::-;14507:3;14528:67;14592:2;14587:3;14528:67;:::i;:::-;14521:74;;14604:93;14693:3;14604:93;:::i;:::-;14722:2;14717:3;14713:12;14706:19;;14365:366;;;:::o;14737:::-;14879:3;14900:67;14964:2;14959:3;14900:67;:::i;:::-;14893:74;;14976:93;15065:3;14976:93;:::i;:::-;15094:2;15089:3;15085:12;15078:19;;14737:366;;;:::o;15109:::-;15251:3;15272:67;15336:2;15331:3;15272:67;:::i;:::-;15265:74;;15348:93;15437:3;15348:93;:::i;:::-;15466:2;15461:3;15457:12;15450:19;;15109:366;;;:::o;15481:::-;15623:3;15644:67;15708:2;15703:3;15644:67;:::i;:::-;15637:74;;15720:93;15809:3;15720:93;:::i;:::-;15838:2;15833:3;15829:12;15822:19;;15481:366;;;:::o;15853:::-;15995:3;16016:67;16080:2;16075:3;16016:67;:::i;:::-;16009:74;;16092:93;16181:3;16092:93;:::i;:::-;16210:2;16205:3;16201:12;16194:19;;15853:366;;;:::o;16225:::-;16367:3;16388:67;16452:2;16447:3;16388:67;:::i;:::-;16381:74;;16464:93;16553:3;16464:93;:::i;:::-;16582:2;16577:3;16573:12;16566:19;;16225:366;;;:::o;16597:::-;16739:3;16760:67;16824:2;16819:3;16760:67;:::i;:::-;16753:74;;16836:93;16925:3;16836:93;:::i;:::-;16954:2;16949:3;16945:12;16938:19;;16597:366;;;:::o;16969:::-;17111:3;17132:67;17196:2;17191:3;17132:67;:::i;:::-;17125:74;;17208:93;17297:3;17208:93;:::i;:::-;17326:2;17321:3;17317:12;17310:19;;16969:366;;;:::o;17341:115::-;17426:23;17443:5;17426:23;:::i;:::-;17421:3;17414:36;17341:115;;:::o;17462:118::-;17549:24;17567:5;17549:24;:::i;:::-;17544:3;17537:37;17462:118;;:::o;17586:112::-;17669:22;17685:5;17669:22;:::i;:::-;17664:3;17657:35;17586:112;;:::o;17704:256::-;17816:3;17831:75;17902:3;17893:6;17831:75;:::i;:::-;17931:2;17926:3;17922:12;17915:19;;17951:3;17944:10;;17704:256;;;;:::o;17966:589::-;18191:3;18213:95;18304:3;18295:6;18213:95;:::i;:::-;18206:102;;18325:95;18416:3;18407:6;18325:95;:::i;:::-;18318:102;;18437:92;18525:3;18516:6;18437:92;:::i;:::-;18430:99;;18546:3;18539:10;;17966:589;;;;;;:::o;18561:222::-;18654:4;18692:2;18681:9;18677:18;18669:26;;18705:71;18773:1;18762:9;18758:17;18749:6;18705:71;:::i;:::-;18561:222;;;;:::o;18789:640::-;18984:4;19022:3;19011:9;19007:19;18999:27;;19036:71;19104:1;19093:9;19089:17;19080:6;19036:71;:::i;:::-;19117:72;19185:2;19174:9;19170:18;19161:6;19117:72;:::i;:::-;19199;19267:2;19256:9;19252:18;19243:6;19199:72;:::i;:::-;19318:9;19312:4;19308:20;19303:2;19292:9;19288:18;19281:48;19346:76;19417:4;19408:6;19346:76;:::i;:::-;19338:84;;18789:640;;;;;;;:::o;19435:210::-;19522:4;19560:2;19549:9;19545:18;19537:26;;19573:65;19635:1;19624:9;19620:17;19611:6;19573:65;:::i;:::-;19435:210;;;;:::o;19651:222::-;19744:4;19782:2;19771:9;19767:18;19759:26;;19795:71;19863:1;19852:9;19848:17;19839:6;19795:71;:::i;:::-;19651:222;;;;:::o;19879:313::-;19992:4;20030:2;20019:9;20015:18;20007:26;;20079:9;20073:4;20069:20;20065:1;20054:9;20050:17;20043:47;20107:78;20180:4;20171:6;20107:78;:::i;:::-;20099:86;;19879:313;;;;:::o;20198:419::-;20364:4;20402:2;20391:9;20387:18;20379:26;;20451:9;20445:4;20441:20;20437:1;20426:9;20422:17;20415:47;20479:131;20605:4;20479:131;:::i;:::-;20471:139;;20198:419;;;:::o;20623:::-;20789:4;20827:2;20816:9;20812:18;20804:26;;20876:9;20870:4;20866:20;20862:1;20851:9;20847:17;20840:47;20904:131;21030:4;20904:131;:::i;:::-;20896:139;;20623:419;;;:::o;21048:::-;21214:4;21252:2;21241:9;21237:18;21229:26;;21301:9;21295:4;21291:20;21287:1;21276:9;21272:17;21265:47;21329:131;21455:4;21329:131;:::i;:::-;21321:139;;21048:419;;;:::o;21473:::-;21639:4;21677:2;21666:9;21662:18;21654:26;;21726:9;21720:4;21716:20;21712:1;21701:9;21697:17;21690:47;21754:131;21880:4;21754:131;:::i;:::-;21746:139;;21473:419;;;:::o;21898:::-;22064:4;22102:2;22091:9;22087:18;22079:26;;22151:9;22145:4;22141:20;22137:1;22126:9;22122:17;22115:47;22179:131;22305:4;22179:131;:::i;:::-;22171:139;;21898:419;;;:::o;22323:::-;22489:4;22527:2;22516:9;22512:18;22504:26;;22576:9;22570:4;22566:20;22562:1;22551:9;22547:17;22540:47;22604:131;22730:4;22604:131;:::i;:::-;22596:139;;22323:419;;;:::o;22748:::-;22914:4;22952:2;22941:9;22937:18;22929:26;;23001:9;22995:4;22991:20;22987:1;22976:9;22972:17;22965:47;23029:131;23155:4;23029:131;:::i;:::-;23021:139;;22748:419;;;:::o;23173:::-;23339:4;23377:2;23366:9;23362:18;23354:26;;23426:9;23420:4;23416:20;23412:1;23401:9;23397:17;23390:47;23454:131;23580:4;23454:131;:::i;:::-;23446:139;;23173:419;;;:::o;23598:::-;23764:4;23802:2;23791:9;23787:18;23779:26;;23851:9;23845:4;23841:20;23837:1;23826:9;23822:17;23815:47;23879:131;24005:4;23879:131;:::i;:::-;23871:139;;23598:419;;;:::o;24023:::-;24189:4;24227:2;24216:9;24212:18;24204:26;;24276:9;24270:4;24266:20;24262:1;24251:9;24247:17;24240:47;24304:131;24430:4;24304:131;:::i;:::-;24296:139;;24023:419;;;:::o;24448:::-;24614:4;24652:2;24641:9;24637:18;24629:26;;24701:9;24695:4;24691:20;24687:1;24676:9;24672:17;24665:47;24729:131;24855:4;24729:131;:::i;:::-;24721:139;;24448:419;;;:::o;24873:::-;25039:4;25077:2;25066:9;25062:18;25054:26;;25126:9;25120:4;25116:20;25112:1;25101:9;25097:17;25090:47;25154:131;25280:4;25154:131;:::i;:::-;25146:139;;24873:419;;;:::o;25298:218::-;25389:4;25427:2;25416:9;25412:18;25404:26;;25440:69;25506:1;25495:9;25491:17;25482:6;25440:69;:::i;:::-;25298:218;;;;:::o;25522:222::-;25615:4;25653:2;25642:9;25638:18;25630:26;;25666:71;25734:1;25723:9;25719:17;25710:6;25666:71;:::i;:::-;25522:222;;;;:::o;25750:214::-;25839:4;25877:2;25866:9;25862:18;25854:26;;25890:67;25954:1;25943:9;25939:17;25930:6;25890:67;:::i;:::-;25750:214;;;;:::o;25970:129::-;26004:6;26031:20;;:::i;:::-;26021:30;;26060:33;26088:4;26080:6;26060:33;:::i;:::-;25970:129;;;:::o;26105:75::-;26138:6;26171:2;26165:9;26155:19;;26105:75;:::o;26186:307::-;26247:4;26337:18;26329:6;26326:30;26323:56;;;26359:18;;:::i;:::-;26323:56;26397:29;26419:6;26397:29;:::i;:::-;26389:37;;26481:4;26475;26471:15;26463:23;;26186:307;;;:::o;26499:308::-;26561:4;26651:18;26643:6;26640:30;26637:56;;;26673:18;;:::i;:::-;26637:56;26711:29;26733:6;26711:29;:::i;:::-;26703:37;;26795:4;26789;26785:15;26777:23;;26499:308;;;:::o;26813:141::-;26862:4;26885:3;26877:11;;26908:3;26905:1;26898:14;26942:4;26939:1;26929:18;26921:26;;26813:141;;;:::o;26960:98::-;27011:6;27045:5;27039:12;27029:22;;26960:98;;;:::o;27064:99::-;27116:6;27150:5;27144:12;27134:22;;27064:99;;;:::o;27169:168::-;27252:11;27286:6;27281:3;27274:19;27326:4;27321:3;27317:14;27302:29;;27169:168;;;;:::o;27343:169::-;27427:11;27461:6;27456:3;27449:19;27501:4;27496:3;27492:14;27477:29;;27343:169;;;;:::o;27518:148::-;27620:11;27657:3;27642:18;;27518:148;;;;:::o;27672:242::-;27711:3;27730:19;27747:1;27730:19;:::i;:::-;27725:24;;27763:19;27780:1;27763:19;:::i;:::-;27758:24;;27856:1;27848:6;27844:14;27841:1;27838:21;27835:47;;;27862:18;;:::i;:::-;27835:47;27906:1;27903;27899:9;27892:16;;27672:242;;;;:::o;27920:305::-;27960:3;27979:20;27997:1;27979:20;:::i;:::-;27974:25;;28013:20;28031:1;28013:20;:::i;:::-;28008:25;;28167:1;28099:66;28095:74;28092:1;28089:81;28086:107;;;28173:18;;:::i;:::-;28086:107;28217:1;28214;28210:9;28203:16;;27920:305;;;;:::o;28231:237::-;28269:3;28288:18;28304:1;28288:18;:::i;:::-;28283:23;;28320:18;28336:1;28320:18;:::i;:::-;28315:23;;28410:1;28404:4;28400:12;28397:1;28394:19;28391:45;;;28416:18;;:::i;:::-;28391:45;28460:1;28457;28453:9;28446:16;;28231:237;;;;:::o;28474:185::-;28514:1;28531:20;28549:1;28531:20;:::i;:::-;28526:25;;28565:20;28583:1;28565:20;:::i;:::-;28560:25;;28604:1;28594:35;;28609:18;;:::i;:::-;28594:35;28651:1;28648;28644:9;28639:14;;28474:185;;;;:::o;28665:348::-;28705:7;28728:20;28746:1;28728:20;:::i;:::-;28723:25;;28762:20;28780:1;28762:20;:::i;:::-;28757:25;;28950:1;28882:66;28878:74;28875:1;28872:81;28867:1;28860:9;28853:17;28849:105;28846:131;;;28957:18;;:::i;:::-;28846:131;29005:1;29002;28998:9;28987:20;;28665:348;;;;:::o;29019:191::-;29059:4;29079:20;29097:1;29079:20;:::i;:::-;29074:25;;29113:20;29131:1;29113:20;:::i;:::-;29108:25;;29152:1;29149;29146:8;29143:34;;;29157:18;;:::i;:::-;29143:34;29202:1;29199;29195:9;29187:17;;29019:191;;;;:::o;29216:185::-;29254:4;29274:18;29290:1;29274:18;:::i;:::-;29269:23;;29306:18;29322:1;29306:18;:::i;:::-;29301:23;;29343:1;29340;29337:8;29334:34;;;29348:18;;:::i;:::-;29334:34;29393:1;29390;29386:9;29378:17;;29216:185;;;;:::o;29407:96::-;29444:7;29473:24;29491:5;29473:24;:::i;:::-;29462:35;;29407:96;;;:::o;29509:90::-;29543:7;29586:5;29579:13;29572:21;29561:32;;29509:90;;;:::o;29605:77::-;29642:7;29671:5;29660:16;;29605:77;;;:::o;29688:149::-;29724:7;29764:66;29757:5;29753:78;29742:89;;29688:149;;;:::o;29843:89::-;29879:7;29919:6;29912:5;29908:18;29897:29;;29843:89;;;:::o;29938:126::-;29975:7;30015:42;30008:5;30004:54;29993:65;;29938:126;;;:::o;30070:77::-;30107:7;30136:5;30125:16;;30070:77;;;:::o;30153:86::-;30188:7;30228:4;30221:5;30217:16;30206:27;;30153:86;;;:::o;30245:154::-;30329:6;30324:3;30319;30306:30;30391:1;30382:6;30377:3;30373:16;30366:27;30245:154;;;:::o;30405:307::-;30473:1;30483:113;30497:6;30494:1;30491:13;30483:113;;;30582:1;30577:3;30573:11;30567:18;30563:1;30558:3;30554:11;30547:39;30519:2;30516:1;30512:10;30507:15;;30483:113;;;30614:6;30611:1;30608:13;30605:101;;;30694:1;30685:6;30680:3;30676:16;30669:27;30605:101;30454:258;30405:307;;;:::o;30718:320::-;30762:6;30799:1;30793:4;30789:12;30779:22;;30846:1;30840:4;30836:12;30867:18;30857:81;;30923:4;30915:6;30911:17;30901:27;;30857:81;30985:2;30977:6;30974:14;30954:18;30951:38;30948:84;;;31004:18;;:::i;:::-;30948:84;30769:269;30718:320;;;:::o;31044:281::-;31127:27;31149:4;31127:27;:::i;:::-;31119:6;31115:40;31257:6;31245:10;31242:22;31221:18;31209:10;31206:34;31203:62;31200:88;;;31268:18;;:::i;:::-;31200:88;31308:10;31304:2;31297:22;31087:238;31044:281;;:::o;31331:233::-;31370:3;31393:24;31411:5;31393:24;:::i;:::-;31384:33;;31439:66;31432:5;31429:77;31426:103;;;31509:18;;:::i;:::-;31426:103;31556:1;31549:5;31545:13;31538:20;;31331:233;;;:::o;31570:100::-;31609:7;31638:26;31658:5;31638:26;:::i;:::-;31627:37;;31570:100;;;:::o;31676:94::-;31715:7;31744:20;31758:5;31744:20;:::i;:::-;31733:31;;31676:94;;;:::o;31776:176::-;31808:1;31825:20;31843:1;31825:20;:::i;:::-;31820:25;;31859:20;31877:1;31859:20;:::i;:::-;31854:25;;31898:1;31888:35;;31903:18;;:::i;:::-;31888:35;31944:1;31941;31937:9;31932:14;;31776:176;;;;:::o;31958:180::-;32006:77;32003:1;31996:88;32103:4;32100:1;32093:15;32127:4;32124:1;32117:15;32144:180;32192:77;32189:1;32182:88;32289:4;32286:1;32279:15;32313:4;32310:1;32303:15;32330:180;32378:77;32375:1;32368:88;32475:4;32472:1;32465:15;32499:4;32496:1;32489:15;32516:180;32564:77;32561:1;32554:88;32661:4;32658:1;32651:15;32685:4;32682:1;32675:15;32702:180;32750:77;32747:1;32740:88;32847:4;32844:1;32837:15;32871:4;32868:1;32861:15;32888:117;32997:1;32994;32987:12;33011:117;33120:1;33117;33110:12;33134:117;33243:1;33240;33233:12;33257:117;33366:1;33363;33356:12;33380:117;33489:1;33486;33479:12;33503:117;33612:1;33609;33602:12;33626:102;33667:6;33718:2;33714:7;33709:2;33702:5;33698:14;33694:28;33684:38;;33626:102;;;:::o;33734:94::-;33767:8;33815:5;33811:2;33807:14;33786:35;;33734:94;;;:::o;33834:169::-;33974:21;33970:1;33962:6;33958:14;33951:45;33834:169;:::o;34009:225::-;34149:34;34145:1;34137:6;34133:14;34126:58;34218:8;34213:2;34205:6;34201:15;34194:33;34009:225;:::o;34240:176::-;34380:28;34376:1;34368:6;34364:14;34357:52;34240:176;:::o;34422:223::-;34562:34;34558:1;34550:6;34546:14;34539:58;34631:6;34626:2;34618:6;34614:15;34607:31;34422:223;:::o;34651:250::-;34791:34;34787:1;34779:6;34775:14;34768:58;34860:33;34855:2;34847:6;34843:15;34836:58;34651:250;:::o;34907:222::-;35047:34;35043:1;35035:6;35031:14;35024:58;35116:5;35111:2;35103:6;35099:15;35092:30;34907:222;:::o;35135:182::-;35275:34;35271:1;35263:6;35259:14;35252:58;35135:182;:::o;35323:170::-;35463:22;35459:1;35451:6;35447:14;35440:46;35323:170;:::o;35499:173::-;35639:25;35635:1;35627:6;35623:14;35616:49;35499:173;:::o;35678:234::-;35818:34;35814:1;35806:6;35802:14;35795:58;35887:17;35882:2;35874:6;35870:15;35863:42;35678:234;:::o;35918:169::-;36058:21;36054:1;36046:6;36042:14;36035:45;35918:169;:::o;36093:::-;36233:21;36229:1;36221:6;36217:14;36210:45;36093:169;:::o;36268:122::-;36341:24;36359:5;36341:24;:::i;:::-;36334:5;36331:35;36321:63;;36380:1;36377;36370:12;36321:63;36268:122;:::o;36396:116::-;36466:21;36481:5;36466:21;:::i;:::-;36459:5;36456:32;36446:60;;36502:1;36499;36492:12;36446:60;36396:116;:::o;36518:122::-;36591:24;36609:5;36591:24;:::i;:::-;36584:5;36581:35;36571:63;;36630:1;36627;36620:12;36571:63;36518:122;:::o;36646:120::-;36718:23;36735:5;36718:23;:::i;:::-;36711:5;36708:34;36698:62;;36756:1;36753;36746:12;36698:62;36646:120;:::o;36772:::-;36844:23;36861:5;36844:23;:::i;:::-;36837:5;36834:34;36824:62;;36882:1;36879;36872:12;36824:62;36772:120;:::o;36898:122::-;36971:24;36989:5;36971:24;:::i;:::-;36964:5;36961:35;36951:63;;37010:1;37007;37000:12;36951:63;36898:122;:::o;37026:118::-;37097:22;37113:5;37097:22;:::i;:::-;37090:5;37087:33;37077:61;;37134:1;37131;37124:12;37077:61;37026:118;:::o

Swarm Source

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