ETH Price: $3,451.34 (+0.88%)
Gas: 10 Gwei

Token

babyckmfers (bck)
 

Overview

Max Total Supply

1,352 bck

Holders

90

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 bck
0x1e18677d4c9391ecbbbf63a0dc56f1b10f099f7f
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:
babyckmfers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-09
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

// File: @openzeppelin/contracts/utils/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/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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


// OpenZeppelin Contracts (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/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.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: erc721a/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
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 and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 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**128 - 1 (max value of uint128).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    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;
    }

    // Compiler will pack the following 
    // _currentIndex and _burnCounter into a single 256bit word.
    
    // The tokenId of the next token to be minted.
    uint128 internal _currentIndex;

    // The number of tokens burned.
    uint128 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_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;    
        }
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (!ownership.burned) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }
        revert TokenIndexOutOfBounds();
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        revert();
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).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);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * 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 (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 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 (!_checkOnERC721Received(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 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 > 3.4e38 (2**128) - 1
        // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 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;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = uint128(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);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // 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**128.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].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;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // 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**128.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].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;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, 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 address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert TransferToNonERC721ReceiverImplementer();
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File: contracts/babyckmfers.sol


pragma solidity ^0.8.4;





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

    string public baseURI;
    string public baseExtension = ".json";
    string public notRevealedUri;
    uint256 public cost = 0.05 ether;
    uint256 public maxSupply = 10000;
    uint256 public maxMintAmount = 100;
    uint256 public nftPerAddressLimit = 100;
    bool public paused = false;
    bool public revealed = false;
    bool public onlyWhitelisted = true;
    address[] public whitelistedAddresses;

    mapping(address => uint256) public addressMintedBalance;
    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri
    ) ERC721A(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
    }

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

    // public
    function mint(uint256 _mintAmount) public payable 
    {
        require(!paused, "the contract is paused");
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "need to mint at least 1 NFT");
        require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
        require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

        if (msg.sender != owner()) {
            if(onlyWhitelisted == true) {
                require(isWhitelisted(msg.sender), "user is not whitelisted");
                uint256 ownerMintedCount = addressMintedBalance[msg.sender];
                require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
            }
            require(msg.value >= cost * _mintAmount, "insufficient funds");
        }
        
        _safeMint(msg.sender, _mintAmount);
    }

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

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

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

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

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

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

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

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

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }
    
    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    }
    
    function whitelistUsers(address[] calldata _users) public onlyOwner {
        delete whitelistedAddresses;
        whitelistedAddresses = _users;
    }

    function withdraw() public payable onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","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":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000051929190620003c1565b5066b1a2bc2ec50000600b55612710600c556064600d556064600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550348015620000cb57600080fd5b50604051620052e9380380620052e98339818101604052810190620000f19190620004ef565b838381600190805190602001906200010b929190620003c1565b50806002908051906020019062000124929190620003c1565b505050620001476200013b6200017360201b60201c565b6200017b60201b60201c565b62000158826200024160201b60201c565b6200016981620002ec60201b60201c565b50505050620007e4565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002516200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002776200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c79062000604565b60405180910390fd5b8060089080519060200190620002e8929190620003c1565b5050565b620002fc6200017360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003226200039760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003729062000604565b60405180910390fd5b80600a908051906020019062000393929190620003c1565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003cf90620006cc565b90600052602060002090601f016020900481019282620003f357600085556200043f565b82601f106200040e57805160ff19168380011785556200043f565b828001600101855582156200043f579182015b828111156200043e57825182559160200191906001019062000421565b5b5090506200044e919062000452565b5090565b5b808211156200046d57600081600090555060010162000453565b5090565b60006200048862000482846200064f565b62000626565b905082815260208101848484011115620004a757620004a66200079b565b5b620004b484828562000696565b509392505050565b600082601f830112620004d457620004d362000796565b5b8151620004e684826020860162000471565b91505092915050565b600080600080608085870312156200050c576200050b620007a5565b5b600085015167ffffffffffffffff8111156200052d576200052c620007a0565b5b6200053b87828801620004bc565b945050602085015167ffffffffffffffff8111156200055f576200055e620007a0565b5b6200056d87828801620004bc565b935050604085015167ffffffffffffffff811115620005915762000590620007a0565b5b6200059f87828801620004bc565b925050606085015167ffffffffffffffff811115620005c357620005c2620007a0565b5b620005d187828801620004bc565b91505092959194509250565b6000620005ec60208362000685565b9150620005f982620007bb565b602082019050919050565b600060208201905081810360008301526200061f81620005dd565b9050919050565b60006200063262000645565b905062000640828262000702565b919050565b6000604051905090565b600067ffffffffffffffff8211156200066d576200066c62000767565b5b6200067882620007aa565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006b657808201518184015260208101905062000699565b83811115620006c6576000848401525b50505050565b60006002820490506001821680620006e557607f821691505b60208210811415620006fc57620006fb62000738565b5b50919050565b6200070d82620007aa565b810181811067ffffffffffffffff821117156200072f576200072e62000767565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614af580620007f46000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613ce3565b610a68565b6040516102ab91906141d7565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613cb6565b610bb2565b005b3480156102e957600080fd5b506102f2610c4b565b6040516102ff91906141f2565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613d86565b610cdd565b60405161033c919061414e565b60405180910390f35b34801561035157600080fd5b5061035a610d59565b60405161036791906141f2565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613c29565b610de7565b005b3480156103a557600080fd5b506103ae610ef2565b6040516103bb9190614354565b60405180910390f35b3480156103d057600080fd5b506103d9610ef8565b6040516103e69190614354565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613aa6565b610f4d565b6040516104239190614354565b60405180910390f35b34801561043857600080fd5b50610441610f65565b60405161044e9190614354565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613b13565b610f6b565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613c29565b610f7b565b6040516104b49190614354565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613aa6565b611182565b6040516104f191906141d7565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613cb6565b611231565b005b61052b6112ca565b005b34801561053957600080fd5b50610554600480360381019061054f9190613b13565b6113c6565b005b34801561056257600080fd5b5061057d60048036038101906105789190613aa6565b6113e6565b60405161058a91906141b5565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613d86565b611494565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613d86565b61151a565b6040516105f09190614354565b60405180910390f35b34801561060557600080fd5b5061060e61168b565b60405161061b91906141d7565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613d3d565b61169e565b005b34801561065957600080fd5b50610662611734565b60405161066f91906141d7565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613d86565b611747565b6040516106ac919061414e565b60405180910390f35b3480156106c157600080fd5b506106ca61175d565b6040516106d791906141f2565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613aa6565b6117eb565b6040516107149190614354565b60405180910390f35b34801561072957600080fd5b506107326118bb565b005b34801561074057600080fd5b5061075b60048036038101906107569190613d86565b611943565b005b34801561076957600080fd5b506107726119c9565b60405161077f919061414e565b60405180910390f35b34801561079457600080fd5b5061079d6119f3565b6040516107aa91906141f2565b60405180910390f35b3480156107bf57600080fd5b506107c8611a85565b6040516107d591906141d7565b60405180910390f35b6107f860048036038101906107f39190613d86565b611a98565b005b34801561080657600080fd5b50610821600480360381019061081c9190613be9565b611d5f565b005b34801561082f57600080fd5b50610838611ed7565b005b34801561084657600080fd5b50610861600480360381019061085c9190613b66565b611f70565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613d86565b611fc3565b604051610897919061414e565b60405180910390f35b3480156108ac57600080fd5b506108b5612002565b6040516108c29190614354565b60405180910390f35b3480156108d757600080fd5b506108e0612008565b6040516108ed91906141f2565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613d86565b612096565b60405161092a91906141f2565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613d86565b6121ef565b005b34801561096857600080fd5b50610971612275565b60405161097e9190614354565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613d3d565b61227b565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613ad3565b612311565b6040516109e491906141d7565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613c69565b6123a5565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613d3d565b612445565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613aa6565b6124db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bab5750610baa826125d3565b5b9050919050565b610bba61263d565b73ffffffffffffffffffffffffffffffffffffffff16610bd86119c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590614294565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b606060018054610c5a9061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c869061465d565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000610ce882612645565b610d1e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610d669061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d929061465d565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b505050505081565b6000610df282611747565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e7961263d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610eab5750610ea981610ea461263d565b612311565b155b15610ee2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eed8383836126ad565b505050565b600b5481565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b60116020528060005260406000206000915090505481565b600d5481565b610f7683838361275f565b505050565b6000610f86836117eb565b8210610fbe576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015611176576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156110d55750611169565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461111557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611167578684141561115e57819550505050505061117c565b83806001019450505b505b8080600101915050610ff8565b50600080fd5b92915050565b600080600090505b601080549050811015611226578273ffffffffffffffffffffffffffffffffffffffff16601082815481106111c2576111c16147c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561121357600191505061122c565b808061121e906146c0565b91505061118a565b50600090505b919050565b61123961263d565b73ffffffffffffffffffffffffffffffffffffffff166112576119c9565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614294565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6112d261263d565b73ffffffffffffffffffffffffffffffffffffffff166112f06119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90614294565b60405180910390fd5b60006113506119c9565b73ffffffffffffffffffffffffffffffffffffffff164760405161137390614139565b60006040518083038185875af1925050503d80600081146113b0576040519150601f19603f3d011682016040523d82523d6000602084013e6113b5565b606091505b50509050806113c357600080fd5b50565b6113e183838360405180602001604052806000815250611f70565b505050565b606060006113f3836117eb565b905060008167ffffffffffffffff811115611411576114106147f6565b5b60405190808252806020026020018201604052801561143f5781602001602082028036833780820191505090505b50905060005b82811015611489576114578582610f7b565b82828151811061146a576114696147c7565b5b6020026020010181815250508080611481906146c0565b915050611445565b508092505050919050565b61149c61263d565b73ffffffffffffffffffffffffffffffffffffffff166114ba6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614294565b60405180910390fd5b80600b8190555050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611653576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611645578583141561163c5781945050505050611686565b82806001019350505b508080600101915050611552565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600f60019054906101000a900460ff1681565b6116a661263d565b73ffffffffffffffffffffffffffffffffffffffff166116c46119c9565b73ffffffffffffffffffffffffffffffffffffffff161461171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190614294565b60405180910390fd5b8060089080519060200190611730929190613760565b5050565b600f60009054906101000a900460ff1681565b600061175282612c7c565b600001519050919050565b6008805461176a9061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546117969061465d565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611853576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118c361263d565b73ffffffffffffffffffffffffffffffffffffffff166118e16119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614294565b60405180910390fd5b6119416000612f24565b565b61194b61263d565b73ffffffffffffffffffffffffffffffffffffffff166119696119c9565b73ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614294565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a029061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2e9061465d565b8015611a7b5780601f10611a5057610100808354040283529160200191611a7b565b820191906000526020600020905b815481529060010190602001808311611a5e57829003601f168201915b5050505050905090565b600f60029054906101000a900460ff1681565b600f60009054906101000a900460ff1615611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf906142b4565b60405180910390fd5b6000611af2610ef8565b905060008211611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90614334565b60405180910390fd5b600d54821115611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614274565b60405180910390fd5b600c548282611b8b9190614492565b1115611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614254565b60405180910390fd5b611bd46119c9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d515760011515600f60029054906101000a900460ff1615151415611d0057611c2b33611182565b611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614314565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e548382611cbd9190614492565b1115611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614234565b60405180910390fd5b505b81600b54611d0e9190614519565b341015611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906142f4565b60405180910390fd5b5b611d5b3383612fea565b5050565b611d6761263d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcc576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611dd961263d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e8661263d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecb91906141d7565b60405180910390a35050565b611edf61263d565b73ffffffffffffffffffffffffffffffffffffffff16611efd6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614294565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b611f7b84848461275f565b611f8784848484613008565b611fbd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60108181548110611fd357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600980546120159061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546120419061465d565b801561208e5780601f106120635761010080835404028352916020019161208e565b820191906000526020600020905b81548152906001019060200180831161207157829003601f168201915b505050505081565b60606120a182612645565b6120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906142d4565b60405180910390fd5b60001515600f60019054906101000a900460ff161515141561218e57600a80546121099061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546121359061465d565b80156121825780601f1061215757610100808354040283529160200191612182565b820191906000526020600020905b81548152906001019060200180831161216557829003601f168201915b505050505090506121ea565b6000612198613196565b905060008151116121b857604051806020016040528060008152506121e6565b806121c284613228565b60096040516020016121d693929190614108565b6040516020818303038152906040525b9150505b919050565b6121f761263d565b73ffffffffffffffffffffffffffffffffffffffff166122156119c9565b73ffffffffffffffffffffffffffffffffffffffff161461226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614294565b60405180910390fd5b80600e8190555050565b600c5481565b61228361263d565b73ffffffffffffffffffffffffffffffffffffffff166122a16119c9565b73ffffffffffffffffffffffffffffffffffffffff16146122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90614294565b60405180910390fd5b806009908051906020019061230d929190613760565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123ad61263d565b73ffffffffffffffffffffffffffffffffffffffff166123cb6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614294565b60405180910390fd5b6010600061242f91906137e6565b818160109190612440929190613807565b505050565b61244d61263d565b73ffffffffffffffffffffffffffffffffffffffff1661246b6119c9565b73ffffffffffffffffffffffffffffffffffffffff16146124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614294565b60405180910390fd5b80600a90805190602001906124d7929190613760565b5050565b6124e361263d565b73ffffffffffffffffffffffffffffffffffffffff166125016119c9565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614294565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90614214565b60405180910390fd5b6125d081612f24565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16821080156126a6575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061276a82612c7c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661279161263d565b73ffffffffffffffffffffffffffffffffffffffff1614806127c457506127c382600001516127be61263d565b612311565b5b8061280957506127d261263d565b73ffffffffffffffffffffffffffffffffffffffff166127f184610cdd565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612842576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146128ab576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612912576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291f8585856001613389565b61292f60008484600001516126ad565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c0c5760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612c0b5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c75858585600161338f565b5050505050565b612c846138a7565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612eed576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eeb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dcf578092505050612f1f565b5b600115612eea57818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ee5578092505050612f1f565b612dd0565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613004828260405180602001604052806000815250613395565b5050565b60006130298473ffffffffffffffffffffffffffffffffffffffff166133a7565b15613189578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261305261263d565b8786866040518563ffffffff1660e01b81526004016130749493929190614169565b602060405180830381600087803b15801561308e57600080fd5b505af19250505080156130bf57506040513d601f19601f820116820180604052508101906130bc9190613d10565b60015b613139573d80600081146130ef576040519150601f19603f3d011682016040523d82523d6000602084013e6130f4565b606091505b50600081511415613131576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061318e565b600190505b949350505050565b6060600880546131a59061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546131d19061465d565b801561321e5780601f106131f35761010080835404028352916020019161321e565b820191906000526020600020905b81548152906001019060200180831161320157829003601f168201915b5050505050905090565b60606000821415613270576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613384565b600082905060005b600082146132a257808061328b906146c0565b915050600a8261329b91906144e8565b9150613278565b60008167ffffffffffffffff8111156132be576132bd6147f6565b5b6040519080825280601f01601f1916602001820160405280156132f05781602001600182028036833780820191505090505b5090505b6000851461337d576001826133099190614573565b9150600a856133189190614709565b60306133249190614492565b60f81b81838151811061333a576133396147c7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337691906144e8565b94506132f4565b8093505050505b919050565b50505050565b50505050565b6133a283838360016133ca565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613465576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156134a0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ad6000868387613389565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561371257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156136c657506136c46000888488613008565b155b156136fd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180600101925050808060010191505061364b565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613759600086838761338f565b5050505050565b82805461376c9061465d565b90600052602060002090601f01602090048101928261378e57600085556137d5565b82601f106137a757805160ff19168380011785556137d5565b828001600101855582156137d5579182015b828111156137d45782518255916020019190600101906137b9565b5b5090506137e291906138ea565b5090565b508054600082559060005260206000209081019061380491906138ea565b50565b828054828255906000526020600020908101928215613896579160200282015b8281111561389557823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613827565b5b5090506138a391906138ea565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139035760008160009055506001016138eb565b5090565b600061391a61391584614394565b61436f565b90508281526020810184848401111561393657613935614834565b5b61394184828561461b565b509392505050565b600061395c613957846143c5565b61436f565b90508281526020810184848401111561397857613977614834565b5b61398384828561461b565b509392505050565b60008135905061399a81614a63565b92915050565b60008083601f8401126139b6576139b561482a565b5b8235905067ffffffffffffffff8111156139d3576139d2614825565b5b6020830191508360208202830111156139ef576139ee61482f565b5b9250929050565b600081359050613a0581614a7a565b92915050565b600081359050613a1a81614a91565b92915050565b600081519050613a2f81614a91565b92915050565b600082601f830112613a4a57613a4961482a565b5b8135613a5a848260208601613907565b91505092915050565b600082601f830112613a7857613a7761482a565b5b8135613a88848260208601613949565b91505092915050565b600081359050613aa081614aa8565b92915050565b600060208284031215613abc57613abb61483e565b5b6000613aca8482850161398b565b91505092915050565b60008060408385031215613aea57613ae961483e565b5b6000613af88582860161398b565b9250506020613b098582860161398b565b9150509250929050565b600080600060608486031215613b2c57613b2b61483e565b5b6000613b3a8682870161398b565b9350506020613b4b8682870161398b565b9250506040613b5c86828701613a91565b9150509250925092565b60008060008060808587031215613b8057613b7f61483e565b5b6000613b8e8782880161398b565b9450506020613b9f8782880161398b565b9350506040613bb087828801613a91565b925050606085013567ffffffffffffffff811115613bd157613bd0614839565b5b613bdd87828801613a35565b91505092959194509250565b60008060408385031215613c0057613bff61483e565b5b6000613c0e8582860161398b565b9250506020613c1f858286016139f6565b9150509250929050565b60008060408385031215613c4057613c3f61483e565b5b6000613c4e8582860161398b565b9250506020613c5f85828601613a91565b9150509250929050565b60008060208385031215613c8057613c7f61483e565b5b600083013567ffffffffffffffff811115613c9e57613c9d614839565b5b613caa858286016139a0565b92509250509250929050565b600060208284031215613ccc57613ccb61483e565b5b6000613cda848285016139f6565b91505092915050565b600060208284031215613cf957613cf861483e565b5b6000613d0784828501613a0b565b91505092915050565b600060208284031215613d2657613d2561483e565b5b6000613d3484828501613a20565b91505092915050565b600060208284031215613d5357613d5261483e565b5b600082013567ffffffffffffffff811115613d7157613d70614839565b5b613d7d84828501613a63565b91505092915050565b600060208284031215613d9c57613d9b61483e565b5b6000613daa84828501613a91565b91505092915050565b6000613dbf83836140ea565b60208301905092915050565b613dd4816145a7565b82525050565b6000613de58261441b565b613def8185614449565b9350613dfa836143f6565b8060005b83811015613e2b578151613e128882613db3565b9750613e1d8361443c565b925050600181019050613dfe565b5085935050505092915050565b613e41816145b9565b82525050565b6000613e5282614426565b613e5c818561445a565b9350613e6c81856020860161462a565b613e7581614843565b840191505092915050565b6000613e8b82614431565b613e958185614476565b9350613ea581856020860161462a565b613eae81614843565b840191505092915050565b6000613ec482614431565b613ece8185614487565b9350613ede81856020860161462a565b80840191505092915050565b60008154613ef78161465d565b613f018186614487565b94506001821660008114613f1c5760018114613f2d57613f60565b60ff19831686528186019350613f60565b613f3685614406565b60005b83811015613f5857815481890152600182019150602081019050613f39565b838801955050505b50505092915050565b6000613f76602683614476565b9150613f8182614854565b604082019050919050565b6000613f99601c83614476565b9150613fa4826148a3565b602082019050919050565b6000613fbc601683614476565b9150613fc7826148cc565b602082019050919050565b6000613fdf602483614476565b9150613fea826148f5565b604082019050919050565b6000614002602083614476565b915061400d82614944565b602082019050919050565b6000614025601683614476565b91506140308261496d565b602082019050919050565b6000614048602f83614476565b915061405382614996565b604082019050919050565b600061406b60008361446b565b9150614076826149e5565b600082019050919050565b600061408e601283614476565b9150614099826149e8565b602082019050919050565b60006140b1601783614476565b91506140bc82614a11565b602082019050919050565b60006140d4601b83614476565b91506140df82614a3a565b602082019050919050565b6140f381614611565b82525050565b61410281614611565b82525050565b60006141148286613eb9565b91506141208285613eb9565b915061412c8284613eea565b9150819050949350505050565b60006141448261405e565b9150819050919050565b60006020820190506141636000830184613dcb565b92915050565b600060808201905061417e6000830187613dcb565b61418b6020830186613dcb565b61419860408301856140f9565b81810360608301526141aa8184613e47565b905095945050505050565b600060208201905081810360008301526141cf8184613dda565b905092915050565b60006020820190506141ec6000830184613e38565b92915050565b6000602082019050818103600083015261420c8184613e80565b905092915050565b6000602082019050818103600083015261422d81613f69565b9050919050565b6000602082019050818103600083015261424d81613f8c565b9050919050565b6000602082019050818103600083015261426d81613faf565b9050919050565b6000602082019050818103600083015261428d81613fd2565b9050919050565b600060208201905081810360008301526142ad81613ff5565b9050919050565b600060208201905081810360008301526142cd81614018565b9050919050565b600060208201905081810360008301526142ed8161403b565b9050919050565b6000602082019050818103600083015261430d81614081565b9050919050565b6000602082019050818103600083015261432d816140a4565b9050919050565b6000602082019050818103600083015261434d816140c7565b9050919050565b600060208201905061436960008301846140f9565b92915050565b600061437961438a565b9050614385828261468f565b919050565b6000604051905090565b600067ffffffffffffffff8211156143af576143ae6147f6565b5b6143b882614843565b9050602081019050919050565b600067ffffffffffffffff8211156143e0576143df6147f6565b5b6143e982614843565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061449d82614611565b91506144a883614611565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dd576144dc61473a565b5b828201905092915050565b60006144f382614611565b91506144fe83614611565b92508261450e5761450d614769565b5b828204905092915050565b600061452482614611565b915061452f83614611565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145685761456761473a565b5b828202905092915050565b600061457e82614611565b915061458983614611565b92508282101561459c5761459b61473a565b5b828203905092915050565b60006145b2826145f1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561464857808201518184015260208101905061462d565b83811115614657576000848401525b50505050565b6000600282049050600182168061467557607f821691505b6020821081141561468957614688614798565b5b50919050565b61469882614843565b810181811067ffffffffffffffff821117156146b7576146b66147f6565b5b80604052505050565b60006146cb82614611565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146fe576146fd61473a565b5b600182019050919050565b600061471482614611565b915061471f83614611565b92508261472f5761472e614769565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614a6c816145a7565b8114614a7757600080fd5b50565b614a83816145b9565b8114614a8e57600080fd5b50565b614a9a816145c5565b8114614aa557600080fd5b50565b614ab181614611565b8114614abc57600080fd5b5056fea2646970667358221220ef8497636e847e52f1076a3b6f3e0d8917d4df9b8569dec9e45982bc46fc6a9864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b62616279636b6d66657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e41584d5941515279644567486831436d4c574572362f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e41584d5941515279644567486831436d4c574572362f00000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613ce3565b610a68565b6040516102ab91906141d7565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613cb6565b610bb2565b005b3480156102e957600080fd5b506102f2610c4b565b6040516102ff91906141f2565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613d86565b610cdd565b60405161033c919061414e565b60405180910390f35b34801561035157600080fd5b5061035a610d59565b60405161036791906141f2565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613c29565b610de7565b005b3480156103a557600080fd5b506103ae610ef2565b6040516103bb9190614354565b60405180910390f35b3480156103d057600080fd5b506103d9610ef8565b6040516103e69190614354565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613aa6565b610f4d565b6040516104239190614354565b60405180910390f35b34801561043857600080fd5b50610441610f65565b60405161044e9190614354565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613b13565b610f6b565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613c29565b610f7b565b6040516104b49190614354565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613aa6565b611182565b6040516104f191906141d7565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190613cb6565b611231565b005b61052b6112ca565b005b34801561053957600080fd5b50610554600480360381019061054f9190613b13565b6113c6565b005b34801561056257600080fd5b5061057d60048036038101906105789190613aa6565b6113e6565b60405161058a91906141b5565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613d86565b611494565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613d86565b61151a565b6040516105f09190614354565b60405180910390f35b34801561060557600080fd5b5061060e61168b565b60405161061b91906141d7565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613d3d565b61169e565b005b34801561065957600080fd5b50610662611734565b60405161066f91906141d7565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613d86565b611747565b6040516106ac919061414e565b60405180910390f35b3480156106c157600080fd5b506106ca61175d565b6040516106d791906141f2565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613aa6565b6117eb565b6040516107149190614354565b60405180910390f35b34801561072957600080fd5b506107326118bb565b005b34801561074057600080fd5b5061075b60048036038101906107569190613d86565b611943565b005b34801561076957600080fd5b506107726119c9565b60405161077f919061414e565b60405180910390f35b34801561079457600080fd5b5061079d6119f3565b6040516107aa91906141f2565b60405180910390f35b3480156107bf57600080fd5b506107c8611a85565b6040516107d591906141d7565b60405180910390f35b6107f860048036038101906107f39190613d86565b611a98565b005b34801561080657600080fd5b50610821600480360381019061081c9190613be9565b611d5f565b005b34801561082f57600080fd5b50610838611ed7565b005b34801561084657600080fd5b50610861600480360381019061085c9190613b66565b611f70565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613d86565b611fc3565b604051610897919061414e565b60405180910390f35b3480156108ac57600080fd5b506108b5612002565b6040516108c29190614354565b60405180910390f35b3480156108d757600080fd5b506108e0612008565b6040516108ed91906141f2565b60405180910390f35b34801561090257600080fd5b5061091d60048036038101906109189190613d86565b612096565b60405161092a91906141f2565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613d86565b6121ef565b005b34801561096857600080fd5b50610971612275565b60405161097e9190614354565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613d3d565b61227b565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613ad3565b612311565b6040516109e491906141d7565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613c69565b6123a5565b005b348015610a2257600080fd5b50610a3d6004803603810190610a389190613d3d565b612445565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613aa6565b6124db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b3357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bab5750610baa826125d3565b5b9050919050565b610bba61263d565b73ffffffffffffffffffffffffffffffffffffffff16610bd86119c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2590614294565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b606060018054610c5a9061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c869061465d565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b5050505050905090565b6000610ce882612645565b610d1e576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610d669061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d929061465d565b8015610ddf5780601f10610db457610100808354040283529160200191610ddf565b820191906000526020600020905b815481529060010190602001808311610dc257829003601f168201915b505050505081565b6000610df282611747565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e5a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e7961263d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610eab5750610ea981610ea461263d565b612311565b155b15610ee2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eed8383836126ad565b505050565b600b5481565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b60116020528060005260406000206000915090505481565b600d5481565b610f7683838361275f565b505050565b6000610f86836117eb565b8210610fbe576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015611176576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151156110d55750611169565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461111557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611167578684141561115e57819550505050505061117c565b83806001019450505b505b8080600101915050610ff8565b50600080fd5b92915050565b600080600090505b601080549050811015611226578273ffffffffffffffffffffffffffffffffffffffff16601082815481106111c2576111c16147c7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561121357600191505061122c565b808061121e906146c0565b91505061118a565b50600090505b919050565b61123961263d565b73ffffffffffffffffffffffffffffffffffffffff166112576119c9565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614294565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b6112d261263d565b73ffffffffffffffffffffffffffffffffffffffff166112f06119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d90614294565b60405180910390fd5b60006113506119c9565b73ffffffffffffffffffffffffffffffffffffffff164760405161137390614139565b60006040518083038185875af1925050503d80600081146113b0576040519150601f19603f3d011682016040523d82523d6000602084013e6113b5565b606091505b50509050806113c357600080fd5b50565b6113e183838360405180602001604052806000815250611f70565b505050565b606060006113f3836117eb565b905060008167ffffffffffffffff811115611411576114106147f6565b5b60405190808252806020026020018201604052801561143f5781602001602082028036833780820191505090505b50905060005b82811015611489576114578582610f7b565b82828151811061146a576114696147c7565b5b6020026020010181815250508080611481906146c0565b915050611445565b508092505050919050565b61149c61263d565b73ffffffffffffffffffffffffffffffffffffffff166114ba6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790614294565b60405180910390fd5b80600b8190555050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611653576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611645578583141561163c5781945050505050611686565b82806001019350505b508080600101915050611552565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600f60019054906101000a900460ff1681565b6116a661263d565b73ffffffffffffffffffffffffffffffffffffffff166116c46119c9565b73ffffffffffffffffffffffffffffffffffffffff161461171a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171190614294565b60405180910390fd5b8060089080519060200190611730929190613760565b5050565b600f60009054906101000a900460ff1681565b600061175282612c7c565b600001519050919050565b6008805461176a9061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546117969061465d565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611853576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118c361263d565b73ffffffffffffffffffffffffffffffffffffffff166118e16119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614294565b60405180910390fd5b6119416000612f24565b565b61194b61263d565b73ffffffffffffffffffffffffffffffffffffffff166119696119c9565b73ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614294565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a029061465d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2e9061465d565b8015611a7b5780601f10611a5057610100808354040283529160200191611a7b565b820191906000526020600020905b815481529060010190602001808311611a5e57829003601f168201915b5050505050905090565b600f60029054906101000a900460ff1681565b600f60009054906101000a900460ff1615611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf906142b4565b60405180910390fd5b6000611af2610ef8565b905060008211611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90614334565b60405180910390fd5b600d54821115611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614274565b60405180910390fd5b600c548282611b8b9190614492565b1115611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc390614254565b60405180910390fd5b611bd46119c9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d515760011515600f60029054906101000a900460ff1615151415611d0057611c2b33611182565b611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6190614314565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600e548382611cbd9190614492565b1115611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf590614234565b60405180910390fd5b505b81600b54611d0e9190614519565b341015611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906142f4565b60405180910390fd5b5b611d5b3383612fea565b5050565b611d6761263d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dcc576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611dd961263d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e8661263d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecb91906141d7565b60405180910390a35050565b611edf61263d565b73ffffffffffffffffffffffffffffffffffffffff16611efd6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90614294565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550565b611f7b84848461275f565b611f8784848484613008565b611fbd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60108181548110611fd357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600980546120159061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546120419061465d565b801561208e5780601f106120635761010080835404028352916020019161208e565b820191906000526020600020905b81548152906001019060200180831161207157829003601f168201915b505050505081565b60606120a182612645565b6120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906142d4565b60405180910390fd5b60001515600f60019054906101000a900460ff161515141561218e57600a80546121099061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546121359061465d565b80156121825780601f1061215757610100808354040283529160200191612182565b820191906000526020600020905b81548152906001019060200180831161216557829003601f168201915b505050505090506121ea565b6000612198613196565b905060008151116121b857604051806020016040528060008152506121e6565b806121c284613228565b60096040516020016121d693929190614108565b6040516020818303038152906040525b9150505b919050565b6121f761263d565b73ffffffffffffffffffffffffffffffffffffffff166122156119c9565b73ffffffffffffffffffffffffffffffffffffffff161461226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290614294565b60405180910390fd5b80600e8190555050565b600c5481565b61228361263d565b73ffffffffffffffffffffffffffffffffffffffff166122a16119c9565b73ffffffffffffffffffffffffffffffffffffffff16146122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90614294565b60405180910390fd5b806009908051906020019061230d929190613760565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123ad61263d565b73ffffffffffffffffffffffffffffffffffffffff166123cb6119c9565b73ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614294565b60405180910390fd5b6010600061242f91906137e6565b818160109190612440929190613807565b505050565b61244d61263d565b73ffffffffffffffffffffffffffffffffffffffff1661246b6119c9565b73ffffffffffffffffffffffffffffffffffffffff16146124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614294565b60405180910390fd5b80600a90805190602001906124d7929190613760565b5050565b6124e361263d565b73ffffffffffffffffffffffffffffffffffffffff166125016119c9565b73ffffffffffffffffffffffffffffffffffffffff1614612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90614294565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be90614214565b60405180910390fd5b6125d081612f24565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16821080156126a6575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061276a82612c7c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661279161263d565b73ffffffffffffffffffffffffffffffffffffffff1614806127c457506127c382600001516127be61263d565b612311565b5b8061280957506127d261263d565b73ffffffffffffffffffffffffffffffffffffffff166127f184610cdd565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612842576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146128ab576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612912576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61291f8585856001613389565b61292f60008484600001516126ad565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c0c5760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612c0b5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c75858585600161338f565b5050505050565b612c846138a7565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612eed576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612eeb57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dcf578092505050612f1f565b5b600115612eea57818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ee5578092505050612f1f565b612dd0565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613004828260405180602001604052806000815250613395565b5050565b60006130298473ffffffffffffffffffffffffffffffffffffffff166133a7565b15613189578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261305261263d565b8786866040518563ffffffff1660e01b81526004016130749493929190614169565b602060405180830381600087803b15801561308e57600080fd5b505af19250505080156130bf57506040513d601f19601f820116820180604052508101906130bc9190613d10565b60015b613139573d80600081146130ef576040519150601f19603f3d011682016040523d82523d6000602084013e6130f4565b606091505b50600081511415613131576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061318e565b600190505b949350505050565b6060600880546131a59061465d565b80601f01602080910402602001604051908101604052809291908181526020018280546131d19061465d565b801561321e5780601f106131f35761010080835404028352916020019161321e565b820191906000526020600020905b81548152906001019060200180831161320157829003601f168201915b5050505050905090565b60606000821415613270576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613384565b600082905060005b600082146132a257808061328b906146c0565b915050600a8261329b91906144e8565b9150613278565b60008167ffffffffffffffff8111156132be576132bd6147f6565b5b6040519080825280601f01601f1916602001820160405280156132f05781602001600182028036833780820191505090505b5090505b6000851461337d576001826133099190614573565b9150600a856133189190614709565b60306133249190614492565b60f81b81838151811061333a576133396147c7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561337691906144e8565b94506132f4565b8093505050505b919050565b50505050565b50505050565b6133a283838360016133ca565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613465576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156134a0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134ad6000868387613389565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561371257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156136c657506136c46000888488613008565b155b156136fd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180600101925050808060010191505061364b565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613759600086838761338f565b5050505050565b82805461376c9061465d565b90600052602060002090601f01602090048101928261378e57600085556137d5565b82601f106137a757805160ff19168380011785556137d5565b828001600101855582156137d5579182015b828111156137d45782518255916020019190600101906137b9565b5b5090506137e291906138ea565b5090565b508054600082559060005260206000209081019061380491906138ea565b50565b828054828255906000526020600020908101928215613896579160200282015b8281111561389557823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613827565b5b5090506138a391906138ea565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139035760008160009055506001016138eb565b5090565b600061391a61391584614394565b61436f565b90508281526020810184848401111561393657613935614834565b5b61394184828561461b565b509392505050565b600061395c613957846143c5565b61436f565b90508281526020810184848401111561397857613977614834565b5b61398384828561461b565b509392505050565b60008135905061399a81614a63565b92915050565b60008083601f8401126139b6576139b561482a565b5b8235905067ffffffffffffffff8111156139d3576139d2614825565b5b6020830191508360208202830111156139ef576139ee61482f565b5b9250929050565b600081359050613a0581614a7a565b92915050565b600081359050613a1a81614a91565b92915050565b600081519050613a2f81614a91565b92915050565b600082601f830112613a4a57613a4961482a565b5b8135613a5a848260208601613907565b91505092915050565b600082601f830112613a7857613a7761482a565b5b8135613a88848260208601613949565b91505092915050565b600081359050613aa081614aa8565b92915050565b600060208284031215613abc57613abb61483e565b5b6000613aca8482850161398b565b91505092915050565b60008060408385031215613aea57613ae961483e565b5b6000613af88582860161398b565b9250506020613b098582860161398b565b9150509250929050565b600080600060608486031215613b2c57613b2b61483e565b5b6000613b3a8682870161398b565b9350506020613b4b8682870161398b565b9250506040613b5c86828701613a91565b9150509250925092565b60008060008060808587031215613b8057613b7f61483e565b5b6000613b8e8782880161398b565b9450506020613b9f8782880161398b565b9350506040613bb087828801613a91565b925050606085013567ffffffffffffffff811115613bd157613bd0614839565b5b613bdd87828801613a35565b91505092959194509250565b60008060408385031215613c0057613bff61483e565b5b6000613c0e8582860161398b565b9250506020613c1f858286016139f6565b9150509250929050565b60008060408385031215613c4057613c3f61483e565b5b6000613c4e8582860161398b565b9250506020613c5f85828601613a91565b9150509250929050565b60008060208385031215613c8057613c7f61483e565b5b600083013567ffffffffffffffff811115613c9e57613c9d614839565b5b613caa858286016139a0565b92509250509250929050565b600060208284031215613ccc57613ccb61483e565b5b6000613cda848285016139f6565b91505092915050565b600060208284031215613cf957613cf861483e565b5b6000613d0784828501613a0b565b91505092915050565b600060208284031215613d2657613d2561483e565b5b6000613d3484828501613a20565b91505092915050565b600060208284031215613d5357613d5261483e565b5b600082013567ffffffffffffffff811115613d7157613d70614839565b5b613d7d84828501613a63565b91505092915050565b600060208284031215613d9c57613d9b61483e565b5b6000613daa84828501613a91565b91505092915050565b6000613dbf83836140ea565b60208301905092915050565b613dd4816145a7565b82525050565b6000613de58261441b565b613def8185614449565b9350613dfa836143f6565b8060005b83811015613e2b578151613e128882613db3565b9750613e1d8361443c565b925050600181019050613dfe565b5085935050505092915050565b613e41816145b9565b82525050565b6000613e5282614426565b613e5c818561445a565b9350613e6c81856020860161462a565b613e7581614843565b840191505092915050565b6000613e8b82614431565b613e958185614476565b9350613ea581856020860161462a565b613eae81614843565b840191505092915050565b6000613ec482614431565b613ece8185614487565b9350613ede81856020860161462a565b80840191505092915050565b60008154613ef78161465d565b613f018186614487565b94506001821660008114613f1c5760018114613f2d57613f60565b60ff19831686528186019350613f60565b613f3685614406565b60005b83811015613f5857815481890152600182019150602081019050613f39565b838801955050505b50505092915050565b6000613f76602683614476565b9150613f8182614854565b604082019050919050565b6000613f99601c83614476565b9150613fa4826148a3565b602082019050919050565b6000613fbc601683614476565b9150613fc7826148cc565b602082019050919050565b6000613fdf602483614476565b9150613fea826148f5565b604082019050919050565b6000614002602083614476565b915061400d82614944565b602082019050919050565b6000614025601683614476565b91506140308261496d565b602082019050919050565b6000614048602f83614476565b915061405382614996565b604082019050919050565b600061406b60008361446b565b9150614076826149e5565b600082019050919050565b600061408e601283614476565b9150614099826149e8565b602082019050919050565b60006140b1601783614476565b91506140bc82614a11565b602082019050919050565b60006140d4601b83614476565b91506140df82614a3a565b602082019050919050565b6140f381614611565b82525050565b61410281614611565b82525050565b60006141148286613eb9565b91506141208285613eb9565b915061412c8284613eea565b9150819050949350505050565b60006141448261405e565b9150819050919050565b60006020820190506141636000830184613dcb565b92915050565b600060808201905061417e6000830187613dcb565b61418b6020830186613dcb565b61419860408301856140f9565b81810360608301526141aa8184613e47565b905095945050505050565b600060208201905081810360008301526141cf8184613dda565b905092915050565b60006020820190506141ec6000830184613e38565b92915050565b6000602082019050818103600083015261420c8184613e80565b905092915050565b6000602082019050818103600083015261422d81613f69565b9050919050565b6000602082019050818103600083015261424d81613f8c565b9050919050565b6000602082019050818103600083015261426d81613faf565b9050919050565b6000602082019050818103600083015261428d81613fd2565b9050919050565b600060208201905081810360008301526142ad81613ff5565b9050919050565b600060208201905081810360008301526142cd81614018565b9050919050565b600060208201905081810360008301526142ed8161403b565b9050919050565b6000602082019050818103600083015261430d81614081565b9050919050565b6000602082019050818103600083015261432d816140a4565b9050919050565b6000602082019050818103600083015261434d816140c7565b9050919050565b600060208201905061436960008301846140f9565b92915050565b600061437961438a565b9050614385828261468f565b919050565b6000604051905090565b600067ffffffffffffffff8211156143af576143ae6147f6565b5b6143b882614843565b9050602081019050919050565b600067ffffffffffffffff8211156143e0576143df6147f6565b5b6143e982614843565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061449d82614611565b91506144a883614611565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144dd576144dc61473a565b5b828201905092915050565b60006144f382614611565b91506144fe83614611565b92508261450e5761450d614769565b5b828204905092915050565b600061452482614611565b915061452f83614611565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145685761456761473a565b5b828202905092915050565b600061457e82614611565b915061458983614611565b92508282101561459c5761459b61473a565b5b828203905092915050565b60006145b2826145f1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561464857808201518184015260208101905061462d565b83811115614657576000848401525b50505050565b6000600282049050600182168061467557607f821691505b6020821081141561468957614688614798565b5b50919050565b61469882614843565b810181811067ffffffffffffffff821117156146b7576146b66147f6565b5b80604052505050565b60006146cb82614611565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146fe576146fd61473a565b5b600182019050919050565b600061471482614611565b915061471f83614611565b92508261472f5761472e614769565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614a6c816145a7565b8114614a7757600080fd5b50565b614a83816145b9565b8114614a8e57600080fd5b50565b614a9a816145c5565b8114614aa557600080fd5b50565b614ab181614611565b8114614abc57600080fd5b5056fea2646970667358221220ef8497636e847e52f1076a3b6f3e0d8917d4df9b8569dec9e45982bc46fc6a9864736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000b62616279636b6d66657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000362636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e41584d5941515279644567486831436d4c574572362f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e41584d5941515279644567486831436d4c574572362f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): babyckmfers
Arg [1] : _symbol (string): bck
Arg [2] : _initBaseURI (string): ipfs://QmSWNzDLkGqvyKVTUK6wP7hxnAXMYAQRydEgHh1CmLWEr6/
Arg [3] : _initNotRevealedUri (string): ipfs://QmSWNzDLkGqvyKVTUK6wP7hxnAXMYAQRydEgHh1CmLWEr6/

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 62616279636b6d66657273000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 62636b0000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e
Arg [10] : 41584d5941515279644567486831436d4c574572362f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d53574e7a444c6b477176794b5654554b3677503768786e
Arg [13] : 41584d5941515279644567486831436d4c574572362f00000000000000000000


Deployed Bytecode Sourcemap

49138:4528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32601:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53142:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35211:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36714:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49292:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36277:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49327:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29838:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49647:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49405:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37571:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31424:1105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51059:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53233:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53508:155;;;:::i;:::-;;37812:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51344:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52532:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30411:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49525:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52756:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49492:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35020:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49220:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33037:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;52626:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35380:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49560:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50149:902;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36990:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52329:69;;;;;;;;;;;;;:::i;:::-;;38068:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49601:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49446:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49248:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51738:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52410:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49366:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52868:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37340:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53346:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53008:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32601:372;32703:4;32755:25;32740:40;;;:11;:40;;;;:105;;;;32812:33;32797:48;;;:11;:48;;;;32740:105;:172;;;;32877:35;32862:50;;;:11;:50;;;;32740:172;:225;;;;32929:36;32953:11;32929:23;:36::i;:::-;32740:225;32720:245;;32601:372;;;:::o;53142:79::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53207:6:::1;53198;;:15;;;;;;;;;;;;;;;;;;53142:79:::0;:::o;35211:100::-;35265:13;35298:5;35291:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35211:100;:::o;36714:204::-;36782:7;36807:16;36815:7;36807;:16::i;:::-;36802:64;;36832:34;;;;;;;;;;;;;;36802:64;36886:15;:24;36902:7;36886:24;;;;;;;;;;;;;;;;;;;;;36879:31;;36714:204;;;:::o;49292:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36277:371::-;36350:13;36366:24;36382:7;36366:15;:24::i;:::-;36350:40;;36411:5;36405:11;;:2;:11;;;36401:48;;;36425:24;;;;;;;;;;;;;;36401:48;36482:5;36466:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;36492:37;36509:5;36516:12;:10;:12::i;:::-;36492:16;:37::i;:::-;36491:38;36466:63;36462:138;;;36553:35;;;;;;;;;;;;;;36462:138;36612:28;36621:2;36625:7;36634:5;36612:8;:28::i;:::-;36339:309;36277:371;;:::o;49327:32::-;;;;:::o;29838:280::-;29891:7;30083:12;;;;;;;;;;;30067:13;;;;;;;;;;:28;30060:35;;;;29838:280;:::o;49647:55::-;;;;;;;;;;;;;;;;;:::o;49405:34::-;;;;:::o;37571:170::-;37705:28;37715:4;37721:2;37725:7;37705:9;:28::i;:::-;37571:170;;;:::o;31424:1105::-;31513:7;31546:16;31556:5;31546:9;:16::i;:::-;31537:5;:25;31533:61;;31571:23;;;;;;;;;;;;;;31533:61;31605:22;31630:13;;;;;;;;;;;31605:38;;;;31654:19;31684:25;31885:9;31880:557;31900:14;31896:1;:18;31880:557;;;31940:31;31974:11;:14;31986:1;31974:14;;;;;;;;;;;31940:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32011:9;:16;;;32007:73;;;32052:8;;;32007:73;32128:1;32102:28;;:9;:14;;;:28;;;32098:111;;32175:9;:14;;;32155:34;;32098:111;32252:5;32231:26;;:17;:26;;;32227:195;;;32301:5;32286:11;:20;32282:85;;;32342:1;32335:8;;;;;;;;;32282:85;32389:13;;;;;;;32227:195;31921:516;31880:557;31916:3;;;;;;;31880:557;;;;32513:8;;;31424:1105;;;;;:::o;51059:277::-;51118:4;51146:6;51155:1;51146:10;;51141:165;51162:20;:27;;;;51158:1;:31;51141:165;;;51242:5;51215:32;;:20;51236:1;51215:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;51211:84;;;51275:4;51268:11;;;;;51211:84;51191:3;;;;;:::i;:::-;;;;51141:165;;;;51323:5;51316:12;;51059:277;;;;:::o;53233:101::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53320:6:::1;53302:15;;:24;;;;;;;;;;;;;;;;;;53233:101:::0;:::o;53508:155::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53565:7:::1;53586;:5;:7::i;:::-;53578:21;;53607;53578:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53564:69;;;53652:2;53644:11;;;::::0;::::1;;53553:110;53508:155::o:0;37812:185::-;37950:39;37967:4;37973:2;37977:7;37950:39;;;;;;;;;;;;:16;:39::i;:::-;37812:185;;;:::o;51344:386::-;51431:16;51465:23;51491:17;51501:6;51491:9;:17::i;:::-;51465:43;;51519:25;51561:15;51547:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51519:58;;51593:9;51588:109;51608:15;51604:1;:19;51588:109;;;51655:30;51675:6;51683:1;51655:19;:30::i;:::-;51641:8;51650:1;51641:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;51625:3;;;;;:::i;:::-;;;;51588:109;;;;51714:8;51707:15;;;;51344:386;;;:::o;52532:86::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52602:8:::1;52595:4;:15;;;;52532:86:::0;:::o;30411:713::-;30478:7;30498:22;30523:13;;;;;;;;;;30498:38;;;;30547:19;30742:9;30737:328;30757:14;30753:1;:18;30737:328;;;30797:31;30831:11;:14;30843:1;30831:14;;;;;;;;;;;30797:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30869:9;:16;;;30864:186;;30929:5;30914:11;:20;30910:85;;;30970:1;30963:8;;;;;;;;30910:85;31017:13;;;;;;;30864:186;30778:287;30773:3;;;;;;;30737:328;;;;31093:23;;;;;;;;;;;;;;30411:713;;;;:::o;49525:28::-;;;;;;;;;;;;;:::o;52756:104::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52841:11:::1;52831:7;:21;;;;;;;;;;;;:::i;:::-;;52756:104:::0;:::o;49492:26::-;;;;;;;;;;;;;:::o;35020:124::-;35084:7;35111:20;35123:7;35111:11;:20::i;:::-;:25;;;35104:32;;35020:124;;;:::o;49220:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33037:206::-;33101:7;33142:1;33125:19;;:5;:19;;;33121:60;;;33153:28;;;;;;;;;;;;;;33121:60;33207:12;:19;33220:5;33207:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;33199:36;;33192:43;;33037:206;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;52626:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52723:17:::1;52707:13;:33;;;;52626:122:::0;:::o;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;35380:104::-;35436:13;35469:7;35462:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35380:104;:::o;49560:34::-;;;;;;;;;;;;;:::o;50149:902::-;50225:6;;;;;;;;;;;50224:7;50216:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;50269:14;50286:13;:11;:13::i;:::-;50269:30;;50332:1;50318:11;:15;50310:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50399:13;;50384:11;:28;;50376:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50496:9;;50481:11;50472:6;:20;;;;:::i;:::-;:33;;50464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50563:7;:5;:7::i;:::-;50549:21;;:10;:21;;;50545:444;;50609:4;50590:23;;:15;;;;;;;;;;;:23;;;50587:314;;;50642:25;50656:10;50642:13;:25::i;:::-;50634:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;50714:24;50741:20;:32;50762:10;50741:32;;;;;;;;;;;;;;;;50714:59;;50834:18;;50819:11;50800:16;:30;;;;:::i;:::-;:52;;50792:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;50615:286;50587:314;50943:11;50936:4;;:18;;;;:::i;:::-;50923:9;:31;;50915:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50545:444;51009:34;51019:10;51031:11;51009:9;:34::i;:::-;50205:846;50149:902;:::o;36990:279::-;37093:12;:10;:12::i;:::-;37081:24;;:8;:24;;;37077:54;;;37114:17;;;;;;;;;;;;;;37077:54;37189:8;37144:18;:32;37163:12;:10;:12::i;:::-;37144:32;;;;;;;;;;;;;;;:42;37177:8;37144:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;37242:8;37213:48;;37228:12;:10;:12::i;:::-;37213:48;;;37252:8;37213:48;;;;;;:::i;:::-;;;;;;;;36990:279;;:::o;52329:69::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52386:4:::1;52375:8;;:15;;;;;;;;;;;;;;;;;;52329:69::o:0;38068:342::-;38235:28;38245:4;38251:2;38255:7;38235:9;:28::i;:::-;38279:48;38302:4;38308:2;38312:7;38321:5;38279:22;:48::i;:::-;38274:129;;38351:40;;;;;;;;;;;;;;38274:129;38068:342;;;;:::o;49601:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49446:39::-;;;;:::o;49248:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51738:565::-;51856:13;51905:16;51913:7;51905;:16::i;:::-;51887:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;52028:5;52016:17;;:8;;;;;;;;;;;:17;;;52013:70;;;52057:14;52050:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52013:70;52095:28;52126:10;:8;:10::i;:::-;52095:41;;52185:1;52160:14;52154:28;:32;:141;;;;;;;;;;;;;;;;;52226:14;52242:18;:7;:16;:18::i;:::-;52262:13;52209:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52154:141;52147:148;;;51738:565;;;;:::o;52410:110::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52506:6:::1;52485:18;:27;;;;52410:110:::0;:::o;49366:32::-;;;;:::o;52868:128::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52971:17:::1;52955:13;:33;;;;;;;;;;;;:::i;:::-;;52868:128:::0;:::o;37340:164::-;37437:4;37461:18;:25;37480:5;37461:25;;;;;;;;;;;;;;;:35;37487:8;37461:35;;;;;;;;;;;;;;;;;;;;;;;;;37454:42;;37340:164;;;;:::o;53346:154::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53432:20:::1;;53425:27;;;;:::i;:::-;53486:6;;53463:20;:29;;;;;;;:::i;:::-;;53346:154:::0;;:::o;53008:126::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53111:15:::1;53094:14;:32;;;;;;;;;;;;:::i;:::-;;53008:126:::0;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;;;7861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;19655:157::-;19740:4;19779:25;19764:40;;;:11;:40;;;;19757:47;;19655:157;;;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;38665:144::-;38722:4;38756:13;;;;;;;;;;;38746:23;;:7;:23;:55;;;;;38774:11;:20;38786:7;38774:20;;;;;;;;;;;:27;;;;;;;;;;;;38773:28;38746:55;38739:62;;38665:144;;;:::o;45881:196::-;46023:2;45996:15;:24;46012:7;45996:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46061:7;46057:2;46041:28;;46050:5;46041:28;;;;;;;;;;;;45881:196;;;:::o;41382:2112::-;41497:35;41535:20;41547:7;41535:11;:20::i;:::-;41497:58;;41568:22;41610:13;:18;;;41594:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;41645:50;41662:13;:18;;;41682:12;:10;:12::i;:::-;41645:16;:50::i;:::-;41594:101;:154;;;;41736:12;:10;:12::i;:::-;41712:36;;:20;41724:7;41712:11;:20::i;:::-;:36;;;41594:154;41568:181;;41767:17;41762:66;;41793:35;;;;;;;;;;;;;;41762:66;41865:4;41843:26;;:13;:18;;;:26;;;41839:67;;41878:28;;;;;;;;;;;;;;41839:67;41935:1;41921:16;;:2;:16;;;41917:52;;;41946:23;;;;;;;;;;;;;;41917:52;41982:43;42004:4;42010:2;42014:7;42023:1;41982:21;:43::i;:::-;42090:49;42107:1;42111:7;42120:13;:18;;;42090:8;:49::i;:::-;42465:1;42435:12;:18;42448:4;42435:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42509:1;42481:12;:16;42494:2;42481:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42555:2;42527:11;:20;42539:7;42527:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;42617:15;42572:11;:20;42584:7;42572:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;42885:19;42917:1;42907:7;:11;42885:33;;42978:1;42937:43;;:11;:24;42949:11;42937:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;42933:445;;;43162:13;;;;;;;;;;43148:27;;:11;:27;43144:219;;;43232:13;:18;;;43200:11;:24;43212:11;43200:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;43315:13;:28;;;43273:11;:24;43285:11;43273:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;43144:219;42933:445;42410:979;43425:7;43421:2;43406:27;;43415:4;43406:27;;;;;;;;;;;;43444:42;43465:4;43471:2;43475:7;43484:1;43444:20;:42::i;:::-;41486:2008;;41382:2112;;;:::o;33875:1083::-;33936:21;;:::i;:::-;33970:12;33985:7;33970:22;;34041:13;;;;;;;;;;34034:20;;:4;:20;34030:861;;;34075:31;34109:11;:17;34121:4;34109:17;;;;;;;;;;;34075:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34150:9;:16;;;34145:731;;34221:1;34195:28;;:9;:14;;;:28;;;34191:101;;34259:9;34252:16;;;;;;34191:101;34596:261;34603:4;34596:261;;;34636:6;;;;;;;;34681:11;:17;34693:4;34681:17;;;;;;;;;;;34669:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34755:1;34729:28;;:9;:14;;;:28;;;34725:109;;34797:9;34790:16;;;;;;34725:109;34596:261;;;34145:731;34056:835;34030:861;34919:31;;;;;;;;;;;;;;33875:1083;;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;38817:104::-;38886:27;38896:2;38900:8;38886:27;;;;;;;;;;;;:9;:27::i;:::-;38817:104;;:::o;46642:790::-;46797:4;46818:15;:2;:13;;;:15::i;:::-;46814:611;;;46870:2;46854:36;;;46891:12;:10;:12::i;:::-;46905:4;46911:7;46920:5;46854:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46850:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47117:1;47100:6;:13;:18;47096:259;;;47150:40;;;;;;;;;;;;;;47096:259;47305:6;47299:13;47290:6;47286:2;47282:15;47275:38;46850:520;46987:45;;;46977:55;;;:6;:55;;;;46970:62;;;;;46814:611;47409:4;47402:11;;46642:790;;;;;;;:::o;50012:114::-;50072:13;50111:7;50104:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50012:114;:::o;3157:723::-;3213:13;3443:1;3434:5;:10;3430:53;;;3461:10;;;;;;;;;;;;;;;;;;;;;3430:53;3493:12;3508:5;3493:20;;3524:14;3549:78;3564:1;3556:4;:9;3549:78;;3582:8;;;;;:::i;:::-;;;;3613:2;3605:10;;;;;:::i;:::-;;;3549:78;;;3637:19;3669:6;3659:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:39;;3687:154;3703:1;3694:5;:10;3687:154;;3731:1;3721:11;;;;;:::i;:::-;;;3798:2;3790:5;:10;;;;:::i;:::-;3777:2;:24;;;;:::i;:::-;3764:39;;3747:6;3754;3747:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3827:2;3818:11;;;;;:::i;:::-;;;3687:154;;;3865:6;3851:21;;;;;3157:723;;;;:::o;48080:159::-;;;;;:::o;48898:158::-;;;;;:::o;39284:163::-;39407:32;39413:2;39417:8;39427:5;39434:4;39407:5;:32::i;:::-;39284:163;;;:::o;9572:326::-;9632:4;9889:1;9867:7;:19;;;:23;9860:30;;9572:326;;;:::o;39706:1422::-;39845:20;39868:13;;;;;;;;;;;39845:36;;;;39910:1;39896:16;;:2;:16;;;39892:48;;;39921:19;;;;;;;;;;;;;;39892:48;39967:1;39955:8;:13;39951:44;;;39977:18;;;;;;;;;;;;;;39951:44;40008:61;40038:1;40042:2;40046:12;40060:8;40008:21;:61::i;:::-;40382:8;40347:12;:16;40360:2;40347:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40446:8;40406:12;:16;40419:2;40406:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40505:2;40472:11;:25;40484:12;40472:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40572:15;40522:11;:25;40534:12;40522:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;40605:20;40628:12;40605:35;;40662:9;40657:328;40677:8;40673:1;:12;40657:328;;;40741:12;40737:2;40716:38;;40733:1;40716:38;;;;;;;;;;;;40777:4;:68;;;;;40786:59;40817:1;40821:2;40825:12;40839:5;40786:22;:59::i;:::-;40785:60;40777:68;40773:164;;;40877:40;;;;;;;;;;;;;;40773:164;40955:14;;;;;;;40687:3;;;;;;;40657:328;;;;41025:12;41001:13;;:37;;;;;;;;;;;;;;;;;;40322:728;41060:60;41089:1;41093:2;41097:12;41111:8;41060:20;:60::i;:::-;39834:1294;39706:1422;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:398::-;14592:3;14613:83;14694:1;14689:3;14613:83;:::i;:::-;14606:90;;14705:93;14794:3;14705:93;:::i;:::-;14823:1;14818:3;14814:11;14807:18;;14433:398;;;:::o;14837:366::-;14979:3;15000:67;15064:2;15059:3;15000:67;:::i;:::-;14993:74;;15076:93;15165:3;15076:93;:::i;:::-;15194:2;15189:3;15185:12;15178:19;;14837:366;;;:::o;15209:::-;15351:3;15372:67;15436:2;15431:3;15372:67;:::i;:::-;15365:74;;15448:93;15537:3;15448:93;:::i;:::-;15566:2;15561:3;15557:12;15550:19;;15209:366;;;:::o;15581:::-;15723:3;15744:67;15808:2;15803:3;15744:67;:::i;:::-;15737:74;;15820:93;15909:3;15820:93;:::i;:::-;15938:2;15933:3;15929:12;15922:19;;15581:366;;;:::o;15953:108::-;16030:24;16048:5;16030:24;:::i;:::-;16025:3;16018:37;15953:108;;:::o;16067:118::-;16154:24;16172:5;16154:24;:::i;:::-;16149:3;16142:37;16067:118;;:::o;16191:589::-;16416:3;16438:95;16529:3;16520:6;16438:95;:::i;:::-;16431:102;;16550:95;16641:3;16632:6;16550:95;:::i;:::-;16543:102;;16662:92;16750:3;16741:6;16662:92;:::i;:::-;16655:99;;16771:3;16764:10;;16191:589;;;;;;:::o;16786:379::-;16970:3;16992:147;17135:3;16992:147;:::i;:::-;16985:154;;17156:3;17149:10;;16786:379;;;:::o;17171:222::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17315:71;17383:1;17372:9;17368:17;17359:6;17315:71;:::i;:::-;17171:222;;;;:::o;17399:640::-;17594:4;17632:3;17621:9;17617:19;17609:27;;17646:71;17714:1;17703:9;17699:17;17690:6;17646:71;:::i;:::-;17727:72;17795:2;17784:9;17780:18;17771:6;17727:72;:::i;:::-;17809;17877:2;17866:9;17862:18;17853:6;17809:72;:::i;:::-;17928:9;17922:4;17918:20;17913:2;17902:9;17898:18;17891:48;17956:76;18027:4;18018:6;17956:76;:::i;:::-;17948:84;;17399:640;;;;;;;:::o;18045:373::-;18188:4;18226:2;18215:9;18211:18;18203:26;;18275:9;18269:4;18265:20;18261:1;18250:9;18246:17;18239:47;18303:108;18406:4;18397:6;18303:108;:::i;:::-;18295:116;;18045:373;;;;:::o;18424:210::-;18511:4;18549:2;18538:9;18534:18;18526:26;;18562:65;18624:1;18613:9;18609:17;18600:6;18562:65;:::i;:::-;18424:210;;;;:::o;18640:313::-;18753:4;18791:2;18780:9;18776:18;18768:26;;18840:9;18834:4;18830:20;18826:1;18815:9;18811:17;18804:47;18868:78;18941:4;18932:6;18868:78;:::i;:::-;18860:86;;18640:313;;;;:::o;18959:419::-;19125:4;19163:2;19152:9;19148:18;19140:26;;19212:9;19206:4;19202:20;19198:1;19187:9;19183:17;19176:47;19240:131;19366:4;19240:131;:::i;:::-;19232:139;;18959:419;;;:::o;19384:::-;19550:4;19588:2;19577:9;19573:18;19565:26;;19637:9;19631:4;19627:20;19623:1;19612:9;19608:17;19601:47;19665:131;19791:4;19665:131;:::i;:::-;19657:139;;19384:419;;;:::o;19809:::-;19975:4;20013:2;20002:9;19998:18;19990:26;;20062:9;20056:4;20052:20;20048:1;20037:9;20033:17;20026:47;20090:131;20216:4;20090:131;:::i;:::-;20082:139;;19809:419;;;:::o;20234:::-;20400:4;20438:2;20427:9;20423:18;20415:26;;20487:9;20481:4;20477:20;20473:1;20462:9;20458:17;20451:47;20515:131;20641:4;20515:131;:::i;:::-;20507:139;;20234:419;;;:::o;20659:::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:::-;21250:4;21288:2;21277:9;21273:18;21265:26;;21337:9;21331:4;21327:20;21323:1;21312:9;21308:17;21301:47;21365:131;21491:4;21365:131;:::i;:::-;21357:139;;21084:419;;;:::o;21509:::-;21675:4;21713:2;21702:9;21698:18;21690:26;;21762:9;21756:4;21752:20;21748:1;21737:9;21733:17;21726:47;21790:131;21916:4;21790:131;:::i;:::-;21782:139;;21509:419;;;:::o;21934:::-;22100:4;22138:2;22127:9;22123:18;22115:26;;22187:9;22181:4;22177:20;22173:1;22162:9;22158:17;22151:47;22215:131;22341:4;22215:131;:::i;:::-;22207:139;;21934:419;;;:::o;22359:::-;22525:4;22563:2;22552:9;22548:18;22540:26;;22612:9;22606:4;22602:20;22598:1;22587:9;22583:17;22576:47;22640:131;22766:4;22640:131;:::i;:::-;22632:139;;22359:419;;;:::o;22784:::-;22950:4;22988:2;22977:9;22973:18;22965:26;;23037:9;23031:4;23027:20;23023:1;23012:9;23008:17;23001:47;23065:131;23191:4;23065:131;:::i;:::-;23057:139;;22784:419;;;:::o;23209:222::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23353:71;23421:1;23410:9;23406:17;23397:6;23353:71;:::i;:::-;23209:222;;;;:::o;23437:129::-;23471:6;23498:20;;:::i;:::-;23488:30;;23527:33;23555:4;23547:6;23527:33;:::i;:::-;23437:129;;;:::o;23572:75::-;23605:6;23638:2;23632:9;23622:19;;23572:75;:::o;23653:307::-;23714:4;23804:18;23796:6;23793:30;23790:56;;;23826:18;;:::i;:::-;23790:56;23864:29;23886:6;23864:29;:::i;:::-;23856:37;;23948:4;23942;23938:15;23930:23;;23653:307;;;:::o;23966:308::-;24028:4;24118:18;24110:6;24107:30;24104:56;;;24140:18;;:::i;:::-;24104:56;24178:29;24200:6;24178:29;:::i;:::-;24170:37;;24262:4;24256;24252:15;24244:23;;23966:308;;;:::o;24280:132::-;24347:4;24370:3;24362:11;;24400:4;24395:3;24391:14;24383:22;;24280:132;;;:::o;24418:141::-;24467:4;24490:3;24482:11;;24513:3;24510:1;24503:14;24547:4;24544:1;24534:18;24526:26;;24418:141;;;:::o;24565:114::-;24632:6;24666:5;24660:12;24650:22;;24565:114;;;:::o;24685:98::-;24736:6;24770:5;24764:12;24754:22;;24685:98;;;:::o;24789:99::-;24841:6;24875:5;24869:12;24859:22;;24789:99;;;:::o;24894:113::-;24964:4;24996;24991:3;24987:14;24979:22;;24894:113;;;:::o;25013:184::-;25112:11;25146:6;25141:3;25134:19;25186:4;25181:3;25177:14;25162:29;;25013:184;;;;:::o;25203:168::-;25286:11;25320:6;25315:3;25308:19;25360:4;25355:3;25351:14;25336:29;;25203:168;;;;:::o;25377:147::-;25478:11;25515:3;25500:18;;25377:147;;;;:::o;25530:169::-;25614:11;25648:6;25643:3;25636:19;25688:4;25683:3;25679:14;25664:29;;25530:169;;;;:::o;25705:148::-;25807:11;25844:3;25829:18;;25705:148;;;;:::o;25859:305::-;25899:3;25918:20;25936:1;25918:20;:::i;:::-;25913:25;;25952:20;25970:1;25952:20;:::i;:::-;25947:25;;26106:1;26038:66;26034:74;26031:1;26028:81;26025:107;;;26112:18;;:::i;:::-;26025:107;26156:1;26153;26149:9;26142:16;;25859:305;;;;:::o;26170:185::-;26210:1;26227:20;26245:1;26227:20;:::i;:::-;26222:25;;26261:20;26279:1;26261:20;:::i;:::-;26256:25;;26300:1;26290:35;;26305:18;;:::i;:::-;26290:35;26347:1;26344;26340:9;26335:14;;26170:185;;;;:::o;26361:348::-;26401:7;26424:20;26442:1;26424:20;:::i;:::-;26419:25;;26458:20;26476:1;26458:20;:::i;:::-;26453:25;;26646:1;26578:66;26574:74;26571:1;26568:81;26563:1;26556:9;26549:17;26545:105;26542:131;;;26653:18;;:::i;:::-;26542:131;26701:1;26698;26694:9;26683:20;;26361:348;;;;:::o;26715:191::-;26755:4;26775:20;26793:1;26775:20;:::i;:::-;26770:25;;26809:20;26827:1;26809:20;:::i;:::-;26804:25;;26848:1;26845;26842:8;26839:34;;;26853:18;;:::i;:::-;26839:34;26898:1;26895;26891:9;26883:17;;26715:191;;;;:::o;26912:96::-;26949:7;26978:24;26996:5;26978:24;:::i;:::-;26967:35;;26912:96;;;:::o;27014:90::-;27048:7;27091:5;27084:13;27077:21;27066:32;;27014:90;;;:::o;27110:149::-;27146:7;27186:66;27179:5;27175:78;27164:89;;27110:149;;;:::o;27265:126::-;27302:7;27342:42;27335:5;27331:54;27320:65;;27265:126;;;:::o;27397:77::-;27434:7;27463:5;27452:16;;27397:77;;;:::o;27480:154::-;27564:6;27559:3;27554;27541:30;27626:1;27617:6;27612:3;27608:16;27601:27;27480:154;;;:::o;27640:307::-;27708:1;27718:113;27732:6;27729:1;27726:13;27718:113;;;27817:1;27812:3;27808:11;27802:18;27798:1;27793:3;27789:11;27782:39;27754:2;27751:1;27747:10;27742:15;;27718:113;;;27849:6;27846:1;27843:13;27840:101;;;27929:1;27920:6;27915:3;27911:16;27904:27;27840:101;27689:258;27640:307;;;:::o;27953:320::-;27997:6;28034:1;28028:4;28024:12;28014:22;;28081:1;28075:4;28071:12;28102:18;28092:81;;28158:4;28150:6;28146:17;28136:27;;28092:81;28220:2;28212:6;28209:14;28189:18;28186:38;28183:84;;;28239:18;;:::i;:::-;28183:84;28004:269;27953:320;;;:::o;28279:281::-;28362:27;28384:4;28362:27;:::i;:::-;28354:6;28350:40;28492:6;28480:10;28477:22;28456:18;28444:10;28441:34;28438:62;28435:88;;;28503:18;;:::i;:::-;28435:88;28543:10;28539:2;28532:22;28322:238;28279:281;;:::o;28566:233::-;28605:3;28628:24;28646:5;28628:24;:::i;:::-;28619:33;;28674:66;28667:5;28664:77;28661:103;;;28744:18;;:::i;:::-;28661:103;28791:1;28784:5;28780:13;28773:20;;28566:233;;;:::o;28805:176::-;28837:1;28854:20;28872:1;28854:20;:::i;:::-;28849:25;;28888:20;28906:1;28888:20;:::i;:::-;28883:25;;28927:1;28917:35;;28932:18;;:::i;:::-;28917:35;28973:1;28970;28966:9;28961:14;;28805:176;;;;:::o;28987:180::-;29035:77;29032:1;29025:88;29132:4;29129:1;29122:15;29156:4;29153:1;29146:15;29173:180;29221:77;29218:1;29211:88;29318:4;29315:1;29308:15;29342:4;29339:1;29332:15;29359:180;29407:77;29404:1;29397:88;29504:4;29501:1;29494:15;29528:4;29525:1;29518:15;29545:180;29593:77;29590:1;29583:88;29690:4;29687:1;29680:15;29714:4;29711:1;29704:15;29731:180;29779:77;29776:1;29769:88;29876:4;29873:1;29866:15;29900:4;29897:1;29890:15;29917:117;30026:1;30023;30016:12;30040:117;30149:1;30146;30139:12;30163:117;30272:1;30269;30262:12;30286:117;30395:1;30392;30385:12;30409:117;30518:1;30515;30508:12;30532:117;30641:1;30638;30631:12;30655:102;30696:6;30747:2;30743:7;30738:2;30731:5;30727:14;30723:28;30713:38;;30655:102;;;:::o;30763:225::-;30903:34;30899:1;30891:6;30887:14;30880:58;30972:8;30967:2;30959:6;30955:15;30948:33;30763:225;:::o;30994:178::-;31134:30;31130:1;31122:6;31118:14;31111:54;30994:178;:::o;31178:172::-;31318:24;31314:1;31306:6;31302:14;31295:48;31178:172;:::o;31356:223::-;31496:34;31492:1;31484:6;31480:14;31473:58;31565:6;31560:2;31552:6;31548:15;31541:31;31356:223;:::o;31585:182::-;31725:34;31721:1;31713:6;31709:14;31702:58;31585:182;:::o;31773:172::-;31913:24;31909:1;31901:6;31897:14;31890:48;31773:172;:::o;31951:234::-;32091:34;32087:1;32079:6;32075:14;32068:58;32160:17;32155:2;32147:6;32143:15;32136:42;31951:234;:::o;32191:114::-;;:::o;32311:168::-;32451:20;32447:1;32439:6;32435:14;32428:44;32311:168;:::o;32485:173::-;32625:25;32621:1;32613:6;32609:14;32602:49;32485:173;:::o;32664:177::-;32804:29;32800:1;32792:6;32788:14;32781:53;32664:177;:::o;32847:122::-;32920:24;32938:5;32920:24;:::i;:::-;32913:5;32910:35;32900:63;;32959:1;32956;32949:12;32900:63;32847:122;:::o;32975:116::-;33045:21;33060:5;33045:21;:::i;:::-;33038:5;33035:32;33025:60;;33081:1;33078;33071:12;33025:60;32975:116;:::o;33097:120::-;33169:23;33186:5;33169:23;:::i;:::-;33162:5;33159:34;33149:62;;33207:1;33204;33197:12;33149:62;33097:120;:::o;33223:122::-;33296:24;33314:5;33296:24;:::i;:::-;33289:5;33286:35;33276:63;;33335:1;33332;33325:12;33276:63;33223:122;:::o

Swarm Source

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