ETH Price: $3,651.23 (-1.03%)

Token

BoredPixelKennelClub (BPKC)
 

Overview

Max Total Supply

19 BPKC

Holders

12

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 BPKC
0x76a7843b59e6c78f2dbf67be043a7362734751e4
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:
BoredPKC

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-01-08
*/

// SPDX-License-Identifier: GPL-3.0
// 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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.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 v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.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: @openzeppelin/contracts/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

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

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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


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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/bakc.sol




pragma solidity ^0.8.0;



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

  string public baseURI;
  string public baseExtension = ".json";
  uint256 public cost = .033 ether;
  uint256 public maxSupply = 3333;
  uint256 public maxMintAmount = 10;
  uint256 public maxPerAddress = 4;
  bool public paused = false;
  bool public onlyWhiteListed = true;
  address[] public whitelistedAddresses;
  


  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    mint(5);
  }

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

  // public
  function mint(uint256 _mintAmount) public payable {
    require(!paused);
    uint256 supply = totalSupply();
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
        if (onlyWhiteListed == true) {
            require(isWhiteListed(msg.sender), "not white listed");
            uint256 ownerTokenCount = balanceOf(msg.sender);
            require(ownerTokenCount + _mintAmount <= maxPerAddress);
        }
          require(msg.value >= cost * _mintAmount);
    }
    
    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

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

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

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

  //only owner
  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 pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
 function whitelistUsers(address[] calldata _users) public onlyOwner {
    delete whitelistedAddresses;
    whitelistedAddresses = _users;
  }

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

 function presale(bool _state) public onlyOwner {
    onlyWhiteListed = _state;
  }

  function withdraw() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"maxPerAddress","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":"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"presale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"_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"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000f60565b5066753d533d968000600d55610d05600e55600a600f5560046010556000601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550348015620000b057600080fd5b506040516200604d3803806200604d8339818101604052810190620000d69190620010d7565b82828160009080519060200190620000f092919062000f60565b5080600190805190602001906200010992919062000f60565b5050506200012c620001206200015860201b60201c565b6200016060201b60201c565b6200013d816200022660201b60201c565b6200014f6005620002d160201b60201c565b50505062001948565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002366200015860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025c6200048960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ac90620013b9565b60405180910390fd5b80600b9080519060200190620002cd92919062000f60565b5050565b601160009054906101000a900460ff1615620002ec57600080fd5b6000620002fe620004b360201b60201c565b9050600082116200030e57600080fd5b600f548211156200031e57600080fd5b600e5482826200032f919062001489565b11156200033b57600080fd5b6200034b6200048960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620004405760011515601160019054906101000a900460ff16151514156200042257620003ac33620004c060201b60201c565b620003ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e590620013db565b60405180910390fd5b600062000401336200057860201b60201c565b9050601054838262000414919062001489565b11156200042057600080fd5b505b81600d54620004329190620014e6565b3410156200043f57600080fd5b5b6000600190505b82811162000484576200046e33828462000462919062001489565b6200063360201b60201c565b80806200047b906200168e565b91505062000447565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b600080600090505b6012805490508110156200056d578273ffffffffffffffffffffffffffffffffffffffff166012828154811062000504576200050362001769565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200055757600191505062000573565b808062000564906200168e565b915050620004c8565b50600090505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e39062001375565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b620006558282604051806020016040528060008152506200065960201b60201c565b5050565b6200066b8383620006c760201b60201c565b620006806000848484620008ad60201b60201c565b620006c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b99062001331565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007319062001397565b60405180910390fd5b6200074b8162000a6760201b60201c565b156200078e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007859062001353565b60405180910390fd5b620007a26000838362000ad360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007f4919062001489565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620008db8473ffffffffffffffffffffffffffffffffffffffff1662000c1a60201b62001c071760201c565b1562000a5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200090d6200015860201b60201c565b8786866040518563ffffffff1660e01b8152600401620009319493929190620012dd565b602060405180830381600087803b1580156200094c57600080fd5b505af19250505080156200098057506040513d601f19601f820116820180604052508101906200097d9190620010a5565b60015b62000a09573d8060008114620009b3576040519150601f19603f3d011682016040523d82523d6000602084013e620009b8565b606091505b5060008151141562000a01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f89062001331565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a5f565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000aeb83838362000c2d60201b62001c1a1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000b385762000b328162000c3260201b60201c565b62000b80565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b7f5762000b7e838262000c7b60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000bcd5762000bc78162000df860201b60201c565b62000c15565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c145762000c13828262000ed460201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000c95846200057860201b620012a91760201c565b62000ca1919062001547565b905060006007600084815260200190815260200160002054905081811462000d87576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e0e919062001547565b905060006009600084815260200190815260200160002054905060006008838154811062000e415762000e4062001769565b5b90600052602060002001549050806008838154811062000e665762000e6562001769565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000eb85762000eb76200173a565b5b6001900381819060005260206000200160009055905550505050565b600062000eec836200057860201b620012a91760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805462000f6e9062001622565b90600052602060002090601f01602090048101928262000f92576000855562000fde565b82601f1062000fad57805160ff191683800117855562000fde565b8280016001018555821562000fde579182015b8281111562000fdd57825182559160200191906001019062000fc0565b5b50905062000fed919062000ff1565b5090565b5b808211156200100c57600081600090555060010162000ff2565b5090565b600062001027620010218462001426565b620013fd565b905082815260208101848484011115620010465762001045620017cc565b5b62001053848285620015ec565b509392505050565b6000815190506200106c816200192e565b92915050565b600082601f8301126200108a5762001089620017c7565b5b81516200109c84826020860162001010565b91505092915050565b600060208284031215620010be57620010bd620017d6565b5b6000620010ce848285016200105b565b91505092915050565b600080600060608486031215620010f357620010f2620017d6565b5b600084015167ffffffffffffffff811115620011145762001113620017d1565b5b620011228682870162001072565b935050602084015167ffffffffffffffff811115620011465762001145620017d1565b5b620011548682870162001072565b925050604084015167ffffffffffffffff811115620011785762001177620017d1565b5b620011868682870162001072565b9150509250925092565b6200119b8162001582565b82525050565b6000620011ae826200145c565b620011ba818562001467565b9350620011cc818560208601620015ec565b620011d781620017db565b840191505092915050565b6000620011f160328362001478565b9150620011fe82620017ec565b604082019050919050565b600062001218601c8362001478565b915062001225826200183b565b602082019050919050565b60006200123f602a8362001478565b91506200124c8262001864565b604082019050919050565b60006200126660208362001478565b91506200127382620018b3565b602082019050919050565b60006200128d60208362001478565b91506200129a82620018dc565b602082019050919050565b6000620012b460108362001478565b9150620012c18262001905565b602082019050919050565b620012d781620015e2565b82525050565b6000608082019050620012f4600083018762001190565b62001303602083018662001190565b620013126040830185620012cc565b8181036060830152620013268184620011a1565b905095945050505050565b600060208201905081810360008301526200134c81620011e2565b9050919050565b600060208201905081810360008301526200136e8162001209565b9050919050565b60006020820190508181036000830152620013908162001230565b9050919050565b60006020820190508181036000830152620013b28162001257565b9050919050565b60006020820190508181036000830152620013d4816200127e565b9050919050565b60006020820190508181036000830152620013f681620012a5565b9050919050565b6000620014096200141c565b905062001417828262001658565b919050565b6000604051905090565b600067ffffffffffffffff82111562001444576200144362001798565b5b6200144f82620017db565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200149682620015e2565b9150620014a383620015e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620014db57620014da620016dc565b5b828201905092915050565b6000620014f382620015e2565b91506200150083620015e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200153c576200153b620016dc565b5b828202905092915050565b60006200155482620015e2565b91506200156183620015e2565b925082821015620015775762001576620016dc565b5b828203905092915050565b60006200158f82620015c2565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200160c578082015181840152602081019050620015ef565b838111156200161c576000848401525b50505050565b600060028204905060018216806200163b57607f821691505b602082108114156200165257620016516200170b565b5b50919050565b6200166382620017db565b810181811067ffffffffffffffff8211171562001685576200168462001798565b5b80604052505050565b60006200169b82620015e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620016d157620016d0620016dc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f74207768697465206c697374656400000000000000000000000000000000600082015250565b620019398162001596565b81146200194557600080fd5b50565b6146f580620019586000396000f3fe6080604052600436106102305760003560e01c80636c0360eb1161012e578063b88d4fde116100ab578063da3ef23f1161006f578063da3ef23f14610849578063e985e9c514610872578063edc2fcfb146108af578063edec5f27146108d8578063f2fde38b1461090157610230565b8063b88d4fde14610750578063ba4e5c4914610779578063c6682862146107b6578063c87b56dd146107e1578063d5abeb011461081e57610230565b80638da5cb5b116100f25780638da5cb5b1461068a57806395d89b41146106b5578063a0712d68146106e0578063a22cb465146106fc578063a47590741461072557610230565b80636c0360eb146105a55780636f9170f6146105d057806370a082311461060d578063715018a61461064a5780637f00c7a61461066157610230565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104ac57806355f804b3146104e95780635c975abb146105125780636352211e1461053d578063639814e01461057a57610230565b80632f745c59146103d65780633ccfd60b1461041357806342842e0e1461041d578063438b63001461044657806344a0d68a1461048357610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063239c70ae1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061338c565b61092a565b6040516102699190613983565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061335f565b6109a4565b005b3480156102a757600080fd5b506102b0610a3d565b6040516102bd919061399e565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061342f565b610acf565b6040516102fa91906138fa565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906132d2565b610b54565b005b34801561033857600080fd5b50610341610c6c565b60405161034e9190613c20565b60405180910390f35b34801561036357600080fd5b5061036c610c72565b6040516103799190613c20565b60405180910390f35b34801561038e57600080fd5b50610397610c7f565b6040516103a49190613c20565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906131bc565b610c85565b005b3480156103e257600080fd5b506103fd60048036038101906103f891906132d2565b610ce5565b60405161040a9190613c20565b60405180910390f35b61041b610d8a565b005b34801561042957600080fd5b50610444600480360381019061043f91906131bc565b610e46565b005b34801561045257600080fd5b5061046d6004803603810190610468919061314f565b610e66565b60405161047a9190613961565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a5919061342f565b610f14565b005b3480156104b857600080fd5b506104d360048036038101906104ce919061342f565b610f9a565b6040516104e09190613c20565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906133e6565b61100b565b005b34801561051e57600080fd5b506105276110a1565b6040516105349190613983565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061342f565b6110b4565b60405161057191906138fa565b60405180910390f35b34801561058657600080fd5b5061058f611166565b60405161059c9190613c20565b60405180910390f35b3480156105b157600080fd5b506105ba61116c565b6040516105c7919061399e565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061314f565b6111fa565b6040516106049190613983565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061314f565b6112a9565b6040516106419190613c20565b60405180910390f35b34801561065657600080fd5b5061065f611361565b005b34801561066d57600080fd5b506106886004803603810190610683919061342f565b6113e9565b005b34801561069657600080fd5b5061069f61146f565b6040516106ac91906138fa565b60405180910390f35b3480156106c157600080fd5b506106ca611499565b6040516106d7919061399e565b60405180910390f35b6106fa60048036038101906106f5919061342f565b61152b565b005b34801561070857600080fd5b50610723600480360381019061071e9190613292565b6116a4565b005b34801561073157600080fd5b5061073a6116ba565b6040516107479190613983565b60405180910390f35b34801561075c57600080fd5b506107776004803603810190610772919061320f565b6116cd565b005b34801561078557600080fd5b506107a0600480360381019061079b919061342f565b61172f565b6040516107ad91906138fa565b60405180910390f35b3480156107c257600080fd5b506107cb61176e565b6040516107d8919061399e565b60405180910390f35b3480156107ed57600080fd5b506108086004803603810190610803919061342f565b6117fc565b604051610815919061399e565b60405180910390f35b34801561082a57600080fd5b506108336118a6565b6040516108409190613c20565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906133e6565b6118ac565b005b34801561087e57600080fd5b506108996004803603810190610894919061317c565b611942565b6040516108a69190613983565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061335f565b6119d6565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613312565b611a6f565b005b34801561090d57600080fd5b506109286004803603810190610923919061314f565b611b0f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099d575061099c82611c1f565b5b9050919050565b6109ac611d01565b73ffffffffffffffffffffffffffffffffffffffff166109ca61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613b40565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a4c90613f1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7890613f1e565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b6000610ada82611d09565b610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613b20565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5f826110b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613ba0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bef611d01565b73ffffffffffffffffffffffffffffffffffffffff161480610c1e5750610c1d81610c18611d01565b611942565b5b610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613aa0565b60405180910390fd5b610c678383611d75565b505050565b600d5481565b6000600880549050905090565b600f5481565b610c96610c90611d01565b82611e2e565b610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613be0565b60405180910390fd5b610ce0838383611f0c565b505050565b6000610cf0836112a9565b8210610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906139c0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d92611d01565b73ffffffffffffffffffffffffffffffffffffffff16610db061146f565b73ffffffffffffffffffffffffffffffffffffffff1614610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613b40565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e4457600080fd5b565b610e61838383604051806020016040528060008152506116cd565b505050565b60606000610e73836112a9565b905060008167ffffffffffffffff811115610e9157610e906140e6565b5b604051908082528060200260200182016040528015610ebf5781602001602082028036833780820191505090505b50905060005b82811015610f0957610ed78582610ce5565b828281518110610eea57610ee96140b7565b5b6020026020010181815250508080610f0190613f81565b915050610ec5565b508092505050919050565b610f1c611d01565b73ffffffffffffffffffffffffffffffffffffffff16610f3a61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613b40565b60405180910390fd5b80600d8190555050565b6000610fa4610c72565b8210610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613c00565b60405180910390fd5b60088281548110610ff957610ff86140b7565b5b90600052602060002001549050919050565b611013611d01565b73ffffffffffffffffffffffffffffffffffffffff1661103161146f565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613b40565b60405180910390fd5b80600b908051906020019061109d929190612e4c565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613ae0565b60405180910390fd5b80915050919050565b60105481565b600b805461117990613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546111a590613f1e565b80156111f25780601f106111c7576101008083540402835291602001916111f2565b820191906000526020600020905b8154815290600101906020018083116111d557829003601f168201915b505050505081565b600080600090505b60128054905081101561129e578273ffffffffffffffffffffffffffffffffffffffff166012828154811061123a576112396140b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128b5760019150506112a4565b808061129690613f81565b915050611202565b50600090505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ac0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611369611d01565b73ffffffffffffffffffffffffffffffffffffffff1661138761146f565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613b40565b60405180910390fd5b6113e76000612168565b565b6113f1611d01565b73ffffffffffffffffffffffffffffffffffffffff1661140f61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613b40565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546114a890613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546114d490613f1e565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b601160009054906101000a900460ff161561154557600080fd5b600061154f610c72565b90506000821161155e57600080fd5b600f5482111561156d57600080fd5b600e54828261157c9190613d53565b111561158757600080fd5b61158f61146f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116695760011515601160019054906101000a900460ff161515141561164e576115e6336111fa565b611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90613bc0565b60405180910390fd5b6000611630336112a9565b905060105483826116419190613d53565b111561164c57600080fd5b505b81600d5461165c9190613dda565b34101561166857600080fd5b5b6000600190505b82811161169f5761168c3382846116879190613d53565b61222e565b808061169790613f81565b915050611670565b505050565b6116b66116af611d01565b838361224c565b5050565b601160019054906101000a900460ff1681565b6116de6116d8611d01565b83611e2e565b61171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613be0565b60405180910390fd5b611729848484846123b9565b50505050565b6012818154811061173f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805461177b90613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a790613f1e565b80156117f45780601f106117c9576101008083540402835291602001916117f4565b820191906000526020600020905b8154815290600101906020018083116117d757829003601f168201915b505050505081565b606061180782611d09565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613b80565b60405180910390fd5b6000611850612415565b90506000815111611870576040518060200160405280600081525061189e565b8061187a846124a7565b600c60405160200161188e939291906138c9565b6040516020818303038152906040525b915050919050565b600e5481565b6118b4611d01565b73ffffffffffffffffffffffffffffffffffffffff166118d261146f565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90613b40565b60405180910390fd5b80600c908051906020019061193e929190612e4c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119de611d01565b73ffffffffffffffffffffffffffffffffffffffff166119fc61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613b40565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b611a77611d01565b73ffffffffffffffffffffffffffffffffffffffff16611a9561146f565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613b40565b60405180910390fd5b60126000611af99190612ed2565b818160129190611b0a929190612ef3565b505050565b611b17611d01565b73ffffffffffffffffffffffffffffffffffffffff16611b3561146f565b73ffffffffffffffffffffffffffffffffffffffff1614611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613a00565b60405180910390fd5b611c0481612168565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cfa5750611cf982612608565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de8836110b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3982611d09565b611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f90613a80565b60405180910390fd5b6000611e83836110b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ef257508373ffffffffffffffffffffffffffffffffffffffff16611eda84610acf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f035750611f028185611942565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2c826110b4565b73ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990613b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613a40565b60405180910390fd5b611ffd838383612672565b612008600082611d75565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120589190613e34565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120af9190613d53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612248828260405180602001604052806000815250612786565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613a60565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ac9190613983565b60405180910390a3505050565b6123c4848484611f0c565b6123d0848484846127e1565b61240f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612406906139e0565b60405180910390fd5b50505050565b6060600b805461242490613f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461245090613f1e565b801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b5050505050905090565b606060008214156124ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612603565b600082905060005b6000821461252157808061250a90613f81565b915050600a8261251a9190613da9565b91506124f7565b60008167ffffffffffffffff81111561253d5761253c6140e6565b5b6040519080825280601f01601f19166020018201604052801561256f5781602001600182028036833780820191505090505b5090505b600085146125fc576001826125889190613e34565b9150600a856125979190613fca565b60306125a39190613d53565b60f81b8183815181106125b9576125b86140b7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f59190613da9565b9450612573565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267d838383611c1a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c0576126bb81612978565b6126ff565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fe576126fd83826129c1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127425761273d81612b2e565b612781565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127805761277f8282612bff565b5b5b505050565b6127908383612c7e565b61279d60008484846127e1565b6127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906139e0565b60405180910390fd5b505050565b60006128028473ffffffffffffffffffffffffffffffffffffffff16611c07565b1561296b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261282b611d01565b8786866040518563ffffffff1660e01b815260040161284d9493929190613915565b602060405180830381600087803b15801561286757600080fd5b505af192505050801561289857506040513d601f19601f8201168201806040525081019061289591906133b9565b60015b61291b573d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b50600081511415612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906139e0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612970565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129ce846112a9565b6129d89190613e34565b9050600060076000848152602001908152602001600020549050818114612abd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b429190613e34565b9050600060096000848152602001908152602001600020549050600060088381548110612b7257612b716140b7565b5b906000526020600020015490508060088381548110612b9457612b936140b7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be357612be2614088565b5b6001900381819060005260206000200160009055905550505050565b6000612c0a836112a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590613b00565b60405180910390fd5b612cf781611d09565b15612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90613a20565b60405180910390fd5b612d4360008383612672565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d939190613d53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e5890613f1e565b90600052602060002090601f016020900481019282612e7a5760008555612ec1565b82601f10612e9357805160ff1916838001178555612ec1565b82800160010185558215612ec1579182015b82811115612ec0578251825591602001919060010190612ea5565b5b509050612ece9190612f93565b5090565b5080546000825590600052602060002090810190612ef09190612f93565b50565b828054828255906000526020600020908101928215612f82579160200282015b82811115612f8157823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612f13565b5b509050612f8f9190612f93565b5090565b5b80821115612fac576000816000905550600101612f94565b5090565b6000612fc3612fbe84613c60565b613c3b565b905082815260208101848484011115612fdf57612fde614124565b5b612fea848285613edc565b509392505050565b600061300561300084613c91565b613c3b565b90508281526020810184848401111561302157613020614124565b5b61302c848285613edc565b509392505050565b60008135905061304381614663565b92915050565b60008083601f84011261305f5761305e61411a565b5b8235905067ffffffffffffffff81111561307c5761307b614115565b5b6020830191508360208202830111156130985761309761411f565b5b9250929050565b6000813590506130ae8161467a565b92915050565b6000813590506130c381614691565b92915050565b6000815190506130d881614691565b92915050565b600082601f8301126130f3576130f261411a565b5b8135613103848260208601612fb0565b91505092915050565b600082601f8301126131215761312061411a565b5b8135613131848260208601612ff2565b91505092915050565b600081359050613149816146a8565b92915050565b6000602082840312156131655761316461412e565b5b600061317384828501613034565b91505092915050565b600080604083850312156131935761319261412e565b5b60006131a185828601613034565b92505060206131b285828601613034565b9150509250929050565b6000806000606084860312156131d5576131d461412e565b5b60006131e386828701613034565b93505060206131f486828701613034565b92505060406132058682870161313a565b9150509250925092565b600080600080608085870312156132295761322861412e565b5b600061323787828801613034565b945050602061324887828801613034565b93505060406132598782880161313a565b925050606085013567ffffffffffffffff81111561327a57613279614129565b5b613286878288016130de565b91505092959194509250565b600080604083850312156132a9576132a861412e565b5b60006132b785828601613034565b92505060206132c88582860161309f565b9150509250929050565b600080604083850312156132e9576132e861412e565b5b60006132f785828601613034565b92505060206133088582860161313a565b9150509250929050565b600080602083850312156133295761332861412e565b5b600083013567ffffffffffffffff81111561334757613346614129565b5b61335385828601613049565b92509250509250929050565b6000602082840312156133755761337461412e565b5b60006133838482850161309f565b91505092915050565b6000602082840312156133a2576133a161412e565b5b60006133b0848285016130b4565b91505092915050565b6000602082840312156133cf576133ce61412e565b5b60006133dd848285016130c9565b91505092915050565b6000602082840312156133fc576133fb61412e565b5b600082013567ffffffffffffffff81111561341a57613419614129565b5b6134268482850161310c565b91505092915050565b6000602082840312156134455761344461412e565b5b60006134538482850161313a565b91505092915050565b600061346883836138ab565b60208301905092915050565b61347d81613e68565b82525050565b600061348e82613ce7565b6134988185613d15565b93506134a383613cc2565b8060005b838110156134d45781516134bb888261345c565b97506134c683613d08565b9250506001810190506134a7565b5085935050505092915050565b6134ea81613e7a565b82525050565b60006134fb82613cf2565b6135058185613d26565b9350613515818560208601613eeb565b61351e81614133565b840191505092915050565b600061353482613cfd565b61353e8185613d37565b935061354e818560208601613eeb565b61355781614133565b840191505092915050565b600061356d82613cfd565b6135778185613d48565b9350613587818560208601613eeb565b80840191505092915050565b600081546135a081613f1e565b6135aa8186613d48565b945060018216600081146135c557600181146135d657613609565b60ff19831686528186019350613609565b6135df85613cd2565b60005b83811015613601578154818901526001820191506020810190506135e2565b838801955050505b50505092915050565b600061361f602b83613d37565b915061362a82614144565b604082019050919050565b6000613642603283613d37565b915061364d82614193565b604082019050919050565b6000613665602683613d37565b9150613670826141e2565b604082019050919050565b6000613688601c83613d37565b915061369382614231565b602082019050919050565b60006136ab602483613d37565b91506136b68261425a565b604082019050919050565b60006136ce601983613d37565b91506136d9826142a9565b602082019050919050565b60006136f1602c83613d37565b91506136fc826142d2565b604082019050919050565b6000613714603883613d37565b915061371f82614321565b604082019050919050565b6000613737602a83613d37565b915061374282614370565b604082019050919050565b600061375a602983613d37565b9150613765826143bf565b604082019050919050565b600061377d602083613d37565b91506137888261440e565b602082019050919050565b60006137a0602c83613d37565b91506137ab82614437565b604082019050919050565b60006137c3602083613d37565b91506137ce82614486565b602082019050919050565b60006137e6602983613d37565b91506137f1826144af565b604082019050919050565b6000613809602f83613d37565b9150613814826144fe565b604082019050919050565b600061382c602183613d37565b91506138378261454d565b604082019050919050565b600061384f601083613d37565b915061385a8261459c565b602082019050919050565b6000613872603183613d37565b915061387d826145c5565b604082019050919050565b6000613895602c83613d37565b91506138a082614614565b604082019050919050565b6138b481613ed2565b82525050565b6138c381613ed2565b82525050565b60006138d58286613562565b91506138e18285613562565b91506138ed8284613593565b9150819050949350505050565b600060208201905061390f6000830184613474565b92915050565b600060808201905061392a6000830187613474565b6139376020830186613474565b61394460408301856138ba565b818103606083015261395681846134f0565b905095945050505050565b6000602082019050818103600083015261397b8184613483565b905092915050565b600060208201905061399860008301846134e1565b92915050565b600060208201905081810360008301526139b88184613529565b905092915050565b600060208201905081810360008301526139d981613612565b9050919050565b600060208201905081810360008301526139f981613635565b9050919050565b60006020820190508181036000830152613a1981613658565b9050919050565b60006020820190508181036000830152613a398161367b565b9050919050565b60006020820190508181036000830152613a598161369e565b9050919050565b60006020820190508181036000830152613a79816136c1565b9050919050565b60006020820190508181036000830152613a99816136e4565b9050919050565b60006020820190508181036000830152613ab981613707565b9050919050565b60006020820190508181036000830152613ad98161372a565b9050919050565b60006020820190508181036000830152613af98161374d565b9050919050565b60006020820190508181036000830152613b1981613770565b9050919050565b60006020820190508181036000830152613b3981613793565b9050919050565b60006020820190508181036000830152613b59816137b6565b9050919050565b60006020820190508181036000830152613b79816137d9565b9050919050565b60006020820190508181036000830152613b99816137fc565b9050919050565b60006020820190508181036000830152613bb98161381f565b9050919050565b60006020820190508181036000830152613bd981613842565b9050919050565b60006020820190508181036000830152613bf981613865565b9050919050565b60006020820190508181036000830152613c1981613888565b9050919050565b6000602082019050613c3560008301846138ba565b92915050565b6000613c45613c56565b9050613c518282613f50565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7b57613c7a6140e6565b5b613c8482614133565b9050602081019050919050565b600067ffffffffffffffff821115613cac57613cab6140e6565b5b613cb582614133565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d5e82613ed2565b9150613d6983613ed2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d9e57613d9d613ffb565b5b828201905092915050565b6000613db482613ed2565b9150613dbf83613ed2565b925082613dcf57613dce61402a565b5b828204905092915050565b6000613de582613ed2565b9150613df083613ed2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e2957613e28613ffb565b5b828202905092915050565b6000613e3f82613ed2565b9150613e4a83613ed2565b925082821015613e5d57613e5c613ffb565b5b828203905092915050565b6000613e7382613eb2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f09578082015181840152602081019050613eee565b83811115613f18576000848401525b50505050565b60006002820490506001821680613f3657607f821691505b60208210811415613f4a57613f49614059565b5b50919050565b613f5982614133565b810181811067ffffffffffffffff82111715613f7857613f776140e6565b5b80604052505050565b6000613f8c82613ed2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fbf57613fbe613ffb565b5b600182019050919050565b6000613fd582613ed2565b9150613fe083613ed2565b925082613ff057613fef61402a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f74207768697465206c697374656400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61466c81613e68565b811461467757600080fd5b50565b61468381613e7a565b811461468e57600080fd5b50565b61469a81613e86565b81146146a557600080fd5b50565b6146b181613ed2565b81146146bc57600080fd5b5056fea264697066735822122025da904bf70a1348b7801f082c11656f628ea144025d98ddde66de12c914cb6264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014426f726564506978656c4b656e6e656c436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000442504b4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b52657665616c536f6f6e2f000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80636c0360eb1161012e578063b88d4fde116100ab578063da3ef23f1161006f578063da3ef23f14610849578063e985e9c514610872578063edc2fcfb146108af578063edec5f27146108d8578063f2fde38b1461090157610230565b8063b88d4fde14610750578063ba4e5c4914610779578063c6682862146107b6578063c87b56dd146107e1578063d5abeb011461081e57610230565b80638da5cb5b116100f25780638da5cb5b1461068a57806395d89b41146106b5578063a0712d68146106e0578063a22cb465146106fc578063a47590741461072557610230565b80636c0360eb146105a55780636f9170f6146105d057806370a082311461060d578063715018a61461064a5780637f00c7a61461066157610230565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104ac57806355f804b3146104e95780635c975abb146105125780636352211e1461053d578063639814e01461057a57610230565b80632f745c59146103d65780633ccfd60b1461041357806342842e0e1461041d578063438b63001461044657806344a0d68a1461048357610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063239c70ae1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061338c565b61092a565b6040516102699190613983565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061335f565b6109a4565b005b3480156102a757600080fd5b506102b0610a3d565b6040516102bd919061399e565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e8919061342f565b610acf565b6040516102fa91906138fa565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906132d2565b610b54565b005b34801561033857600080fd5b50610341610c6c565b60405161034e9190613c20565b60405180910390f35b34801561036357600080fd5b5061036c610c72565b6040516103799190613c20565b60405180910390f35b34801561038e57600080fd5b50610397610c7f565b6040516103a49190613c20565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906131bc565b610c85565b005b3480156103e257600080fd5b506103fd60048036038101906103f891906132d2565b610ce5565b60405161040a9190613c20565b60405180910390f35b61041b610d8a565b005b34801561042957600080fd5b50610444600480360381019061043f91906131bc565b610e46565b005b34801561045257600080fd5b5061046d6004803603810190610468919061314f565b610e66565b60405161047a9190613961565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a5919061342f565b610f14565b005b3480156104b857600080fd5b506104d360048036038101906104ce919061342f565b610f9a565b6040516104e09190613c20565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b91906133e6565b61100b565b005b34801561051e57600080fd5b506105276110a1565b6040516105349190613983565b60405180910390f35b34801561054957600080fd5b50610564600480360381019061055f919061342f565b6110b4565b60405161057191906138fa565b60405180910390f35b34801561058657600080fd5b5061058f611166565b60405161059c9190613c20565b60405180910390f35b3480156105b157600080fd5b506105ba61116c565b6040516105c7919061399e565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061314f565b6111fa565b6040516106049190613983565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061314f565b6112a9565b6040516106419190613c20565b60405180910390f35b34801561065657600080fd5b5061065f611361565b005b34801561066d57600080fd5b506106886004803603810190610683919061342f565b6113e9565b005b34801561069657600080fd5b5061069f61146f565b6040516106ac91906138fa565b60405180910390f35b3480156106c157600080fd5b506106ca611499565b6040516106d7919061399e565b60405180910390f35b6106fa60048036038101906106f5919061342f565b61152b565b005b34801561070857600080fd5b50610723600480360381019061071e9190613292565b6116a4565b005b34801561073157600080fd5b5061073a6116ba565b6040516107479190613983565b60405180910390f35b34801561075c57600080fd5b506107776004803603810190610772919061320f565b6116cd565b005b34801561078557600080fd5b506107a0600480360381019061079b919061342f565b61172f565b6040516107ad91906138fa565b60405180910390f35b3480156107c257600080fd5b506107cb61176e565b6040516107d8919061399e565b60405180910390f35b3480156107ed57600080fd5b506108086004803603810190610803919061342f565b6117fc565b604051610815919061399e565b60405180910390f35b34801561082a57600080fd5b506108336118a6565b6040516108409190613c20565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906133e6565b6118ac565b005b34801561087e57600080fd5b506108996004803603810190610894919061317c565b611942565b6040516108a69190613983565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d1919061335f565b6119d6565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613312565b611a6f565b005b34801561090d57600080fd5b506109286004803603810190610923919061314f565b611b0f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099d575061099c82611c1f565b5b9050919050565b6109ac611d01565b73ffffffffffffffffffffffffffffffffffffffff166109ca61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613b40565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a4c90613f1e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7890613f1e565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b6000610ada82611d09565b610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613b20565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5f826110b4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613ba0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bef611d01565b73ffffffffffffffffffffffffffffffffffffffff161480610c1e5750610c1d81610c18611d01565b611942565b5b610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613aa0565b60405180910390fd5b610c678383611d75565b505050565b600d5481565b6000600880549050905090565b600f5481565b610c96610c90611d01565b82611e2e565b610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90613be0565b60405180910390fd5b610ce0838383611f0c565b505050565b6000610cf0836112a9565b8210610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906139c0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d92611d01565b73ffffffffffffffffffffffffffffffffffffffff16610db061146f565b73ffffffffffffffffffffffffffffffffffffffff1614610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613b40565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e4457600080fd5b565b610e61838383604051806020016040528060008152506116cd565b505050565b60606000610e73836112a9565b905060008167ffffffffffffffff811115610e9157610e906140e6565b5b604051908082528060200260200182016040528015610ebf5781602001602082028036833780820191505090505b50905060005b82811015610f0957610ed78582610ce5565b828281518110610eea57610ee96140b7565b5b6020026020010181815250508080610f0190613f81565b915050610ec5565b508092505050919050565b610f1c611d01565b73ffffffffffffffffffffffffffffffffffffffff16610f3a61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8790613b40565b60405180910390fd5b80600d8190555050565b6000610fa4610c72565b8210610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90613c00565b60405180910390fd5b60088281548110610ff957610ff86140b7565b5b90600052602060002001549050919050565b611013611d01565b73ffffffffffffffffffffffffffffffffffffffff1661103161146f565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90613b40565b60405180910390fd5b80600b908051906020019061109d929190612e4c565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115490613ae0565b60405180910390fd5b80915050919050565b60105481565b600b805461117990613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546111a590613f1e565b80156111f25780601f106111c7576101008083540402835291602001916111f2565b820191906000526020600020905b8154815290600101906020018083116111d557829003601f168201915b505050505081565b600080600090505b60128054905081101561129e578273ffffffffffffffffffffffffffffffffffffffff166012828154811061123a576112396140b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561128b5760019150506112a4565b808061129690613f81565b915050611202565b50600090505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ac0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611369611d01565b73ffffffffffffffffffffffffffffffffffffffff1661138761146f565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490613b40565b60405180910390fd5b6113e76000612168565b565b6113f1611d01565b73ffffffffffffffffffffffffffffffffffffffff1661140f61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613b40565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546114a890613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546114d490613f1e565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b601160009054906101000a900460ff161561154557600080fd5b600061154f610c72565b90506000821161155e57600080fd5b600f5482111561156d57600080fd5b600e54828261157c9190613d53565b111561158757600080fd5b61158f61146f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116695760011515601160019054906101000a900460ff161515141561164e576115e6336111fa565b611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90613bc0565b60405180910390fd5b6000611630336112a9565b905060105483826116419190613d53565b111561164c57600080fd5b505b81600d5461165c9190613dda565b34101561166857600080fd5b5b6000600190505b82811161169f5761168c3382846116879190613d53565b61222e565b808061169790613f81565b915050611670565b505050565b6116b66116af611d01565b838361224c565b5050565b601160019054906101000a900460ff1681565b6116de6116d8611d01565b83611e2e565b61171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613be0565b60405180910390fd5b611729848484846123b9565b50505050565b6012818154811061173f57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c805461177b90613f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a790613f1e565b80156117f45780601f106117c9576101008083540402835291602001916117f4565b820191906000526020600020905b8154815290600101906020018083116117d757829003601f168201915b505050505081565b606061180782611d09565b611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613b80565b60405180910390fd5b6000611850612415565b90506000815111611870576040518060200160405280600081525061189e565b8061187a846124a7565b600c60405160200161188e939291906138c9565b6040516020818303038152906040525b915050919050565b600e5481565b6118b4611d01565b73ffffffffffffffffffffffffffffffffffffffff166118d261146f565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90613b40565b60405180910390fd5b80600c908051906020019061193e929190612e4c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119de611d01565b73ffffffffffffffffffffffffffffffffffffffff166119fc61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990613b40565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b611a77611d01565b73ffffffffffffffffffffffffffffffffffffffff16611a9561146f565b73ffffffffffffffffffffffffffffffffffffffff1614611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613b40565b60405180910390fd5b60126000611af99190612ed2565b818160129190611b0a929190612ef3565b505050565b611b17611d01565b73ffffffffffffffffffffffffffffffffffffffff16611b3561146f565b73ffffffffffffffffffffffffffffffffffffffff1614611b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8290613b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf290613a00565b60405180910390fd5b611c0481612168565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611cfa5750611cf982612608565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de8836110b4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3982611d09565b611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f90613a80565b60405180910390fd5b6000611e83836110b4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ef257508373ffffffffffffffffffffffffffffffffffffffff16611eda84610acf565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f035750611f028185611942565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2c826110b4565b73ffffffffffffffffffffffffffffffffffffffff1614611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990613b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613a40565b60405180910390fd5b611ffd838383612672565b612008600082611d75565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120589190613e34565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120af9190613d53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612248828260405180602001604052806000815250612786565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613a60565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123ac9190613983565b60405180910390a3505050565b6123c4848484611f0c565b6123d0848484846127e1565b61240f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612406906139e0565b60405180910390fd5b50505050565b6060600b805461242490613f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461245090613f1e565b801561249d5780601f106124725761010080835404028352916020019161249d565b820191906000526020600020905b81548152906001019060200180831161248057829003601f168201915b5050505050905090565b606060008214156124ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612603565b600082905060005b6000821461252157808061250a90613f81565b915050600a8261251a9190613da9565b91506124f7565b60008167ffffffffffffffff81111561253d5761253c6140e6565b5b6040519080825280601f01601f19166020018201604052801561256f5781602001600182028036833780820191505090505b5090505b600085146125fc576001826125889190613e34565b9150600a856125979190613fca565b60306125a39190613d53565b60f81b8183815181106125b9576125b86140b7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125f59190613da9565b9450612573565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61267d838383611c1a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c0576126bb81612978565b6126ff565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126fe576126fd83826129c1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127425761273d81612b2e565b612781565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127805761277f8282612bff565b5b5b505050565b6127908383612c7e565b61279d60008484846127e1565b6127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d3906139e0565b60405180910390fd5b505050565b60006128028473ffffffffffffffffffffffffffffffffffffffff16611c07565b1561296b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261282b611d01565b8786866040518563ffffffff1660e01b815260040161284d9493929190613915565b602060405180830381600087803b15801561286757600080fd5b505af192505050801561289857506040513d601f19601f8201168201806040525081019061289591906133b9565b60015b61291b573d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b50600081511415612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906139e0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612970565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129ce846112a9565b6129d89190613e34565b9050600060076000848152602001908152602001600020549050818114612abd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b429190613e34565b9050600060096000848152602001908152602001600020549050600060088381548110612b7257612b716140b7565b5b906000526020600020015490508060088381548110612b9457612b936140b7565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be357612be2614088565b5b6001900381819060005260206000200160009055905550505050565b6000612c0a836112a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590613b00565b60405180910390fd5b612cf781611d09565b15612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90613a20565b60405180910390fd5b612d4360008383612672565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d939190613d53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e5890613f1e565b90600052602060002090601f016020900481019282612e7a5760008555612ec1565b82601f10612e9357805160ff1916838001178555612ec1565b82800160010185558215612ec1579182015b82811115612ec0578251825591602001919060010190612ea5565b5b509050612ece9190612f93565b5090565b5080546000825590600052602060002090810190612ef09190612f93565b50565b828054828255906000526020600020908101928215612f82579160200282015b82811115612f8157823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612f13565b5b509050612f8f9190612f93565b5090565b5b80821115612fac576000816000905550600101612f94565b5090565b6000612fc3612fbe84613c60565b613c3b565b905082815260208101848484011115612fdf57612fde614124565b5b612fea848285613edc565b509392505050565b600061300561300084613c91565b613c3b565b90508281526020810184848401111561302157613020614124565b5b61302c848285613edc565b509392505050565b60008135905061304381614663565b92915050565b60008083601f84011261305f5761305e61411a565b5b8235905067ffffffffffffffff81111561307c5761307b614115565b5b6020830191508360208202830111156130985761309761411f565b5b9250929050565b6000813590506130ae8161467a565b92915050565b6000813590506130c381614691565b92915050565b6000815190506130d881614691565b92915050565b600082601f8301126130f3576130f261411a565b5b8135613103848260208601612fb0565b91505092915050565b600082601f8301126131215761312061411a565b5b8135613131848260208601612ff2565b91505092915050565b600081359050613149816146a8565b92915050565b6000602082840312156131655761316461412e565b5b600061317384828501613034565b91505092915050565b600080604083850312156131935761319261412e565b5b60006131a185828601613034565b92505060206131b285828601613034565b9150509250929050565b6000806000606084860312156131d5576131d461412e565b5b60006131e386828701613034565b93505060206131f486828701613034565b92505060406132058682870161313a565b9150509250925092565b600080600080608085870312156132295761322861412e565b5b600061323787828801613034565b945050602061324887828801613034565b93505060406132598782880161313a565b925050606085013567ffffffffffffffff81111561327a57613279614129565b5b613286878288016130de565b91505092959194509250565b600080604083850312156132a9576132a861412e565b5b60006132b785828601613034565b92505060206132c88582860161309f565b9150509250929050565b600080604083850312156132e9576132e861412e565b5b60006132f785828601613034565b92505060206133088582860161313a565b9150509250929050565b600080602083850312156133295761332861412e565b5b600083013567ffffffffffffffff81111561334757613346614129565b5b61335385828601613049565b92509250509250929050565b6000602082840312156133755761337461412e565b5b60006133838482850161309f565b91505092915050565b6000602082840312156133a2576133a161412e565b5b60006133b0848285016130b4565b91505092915050565b6000602082840312156133cf576133ce61412e565b5b60006133dd848285016130c9565b91505092915050565b6000602082840312156133fc576133fb61412e565b5b600082013567ffffffffffffffff81111561341a57613419614129565b5b6134268482850161310c565b91505092915050565b6000602082840312156134455761344461412e565b5b60006134538482850161313a565b91505092915050565b600061346883836138ab565b60208301905092915050565b61347d81613e68565b82525050565b600061348e82613ce7565b6134988185613d15565b93506134a383613cc2565b8060005b838110156134d45781516134bb888261345c565b97506134c683613d08565b9250506001810190506134a7565b5085935050505092915050565b6134ea81613e7a565b82525050565b60006134fb82613cf2565b6135058185613d26565b9350613515818560208601613eeb565b61351e81614133565b840191505092915050565b600061353482613cfd565b61353e8185613d37565b935061354e818560208601613eeb565b61355781614133565b840191505092915050565b600061356d82613cfd565b6135778185613d48565b9350613587818560208601613eeb565b80840191505092915050565b600081546135a081613f1e565b6135aa8186613d48565b945060018216600081146135c557600181146135d657613609565b60ff19831686528186019350613609565b6135df85613cd2565b60005b83811015613601578154818901526001820191506020810190506135e2565b838801955050505b50505092915050565b600061361f602b83613d37565b915061362a82614144565b604082019050919050565b6000613642603283613d37565b915061364d82614193565b604082019050919050565b6000613665602683613d37565b9150613670826141e2565b604082019050919050565b6000613688601c83613d37565b915061369382614231565b602082019050919050565b60006136ab602483613d37565b91506136b68261425a565b604082019050919050565b60006136ce601983613d37565b91506136d9826142a9565b602082019050919050565b60006136f1602c83613d37565b91506136fc826142d2565b604082019050919050565b6000613714603883613d37565b915061371f82614321565b604082019050919050565b6000613737602a83613d37565b915061374282614370565b604082019050919050565b600061375a602983613d37565b9150613765826143bf565b604082019050919050565b600061377d602083613d37565b91506137888261440e565b602082019050919050565b60006137a0602c83613d37565b91506137ab82614437565b604082019050919050565b60006137c3602083613d37565b91506137ce82614486565b602082019050919050565b60006137e6602983613d37565b91506137f1826144af565b604082019050919050565b6000613809602f83613d37565b9150613814826144fe565b604082019050919050565b600061382c602183613d37565b91506138378261454d565b604082019050919050565b600061384f601083613d37565b915061385a8261459c565b602082019050919050565b6000613872603183613d37565b915061387d826145c5565b604082019050919050565b6000613895602c83613d37565b91506138a082614614565b604082019050919050565b6138b481613ed2565b82525050565b6138c381613ed2565b82525050565b60006138d58286613562565b91506138e18285613562565b91506138ed8284613593565b9150819050949350505050565b600060208201905061390f6000830184613474565b92915050565b600060808201905061392a6000830187613474565b6139376020830186613474565b61394460408301856138ba565b818103606083015261395681846134f0565b905095945050505050565b6000602082019050818103600083015261397b8184613483565b905092915050565b600060208201905061399860008301846134e1565b92915050565b600060208201905081810360008301526139b88184613529565b905092915050565b600060208201905081810360008301526139d981613612565b9050919050565b600060208201905081810360008301526139f981613635565b9050919050565b60006020820190508181036000830152613a1981613658565b9050919050565b60006020820190508181036000830152613a398161367b565b9050919050565b60006020820190508181036000830152613a598161369e565b9050919050565b60006020820190508181036000830152613a79816136c1565b9050919050565b60006020820190508181036000830152613a99816136e4565b9050919050565b60006020820190508181036000830152613ab981613707565b9050919050565b60006020820190508181036000830152613ad98161372a565b9050919050565b60006020820190508181036000830152613af98161374d565b9050919050565b60006020820190508181036000830152613b1981613770565b9050919050565b60006020820190508181036000830152613b3981613793565b9050919050565b60006020820190508181036000830152613b59816137b6565b9050919050565b60006020820190508181036000830152613b79816137d9565b9050919050565b60006020820190508181036000830152613b99816137fc565b9050919050565b60006020820190508181036000830152613bb98161381f565b9050919050565b60006020820190508181036000830152613bd981613842565b9050919050565b60006020820190508181036000830152613bf981613865565b9050919050565b60006020820190508181036000830152613c1981613888565b9050919050565b6000602082019050613c3560008301846138ba565b92915050565b6000613c45613c56565b9050613c518282613f50565b919050565b6000604051905090565b600067ffffffffffffffff821115613c7b57613c7a6140e6565b5b613c8482614133565b9050602081019050919050565b600067ffffffffffffffff821115613cac57613cab6140e6565b5b613cb582614133565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d5e82613ed2565b9150613d6983613ed2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d9e57613d9d613ffb565b5b828201905092915050565b6000613db482613ed2565b9150613dbf83613ed2565b925082613dcf57613dce61402a565b5b828204905092915050565b6000613de582613ed2565b9150613df083613ed2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e2957613e28613ffb565b5b828202905092915050565b6000613e3f82613ed2565b9150613e4a83613ed2565b925082821015613e5d57613e5c613ffb565b5b828203905092915050565b6000613e7382613eb2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f09578082015181840152602081019050613eee565b83811115613f18576000848401525b50505050565b60006002820490506001821680613f3657607f821691505b60208210811415613f4a57613f49614059565b5b50919050565b613f5982614133565b810181811067ffffffffffffffff82111715613f7857613f776140e6565b5b80604052505050565b6000613f8c82613ed2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fbf57613fbe613ffb565b5b600182019050919050565b6000613fd582613ed2565b9150613fe083613ed2565b925082613ff057613fef61402a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f74207768697465206c697374656400000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61466c81613e68565b811461467757600080fd5b50565b61468381613e7a565b811461468e57600080fd5b50565b61469a81613e86565b81146146a557600080fd5b50565b6146b181613ed2565b81146146bc57600080fd5b5056fea264697066735822122025da904bf70a1348b7801f082c11656f628ea144025d98ddde66de12c914cb6264736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014426f726564506978656c4b656e6e656c436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000442504b4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b52657665616c536f6f6e2f000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): BoredPixelKennelClub
Arg [1] : _symbol (string): BPKC
Arg [2] : _initBaseURI (string): RevealSoon/

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 426f726564506978656c4b656e6e656c436c7562000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 42504b4300000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [8] : 52657665616c536f6f6e2f000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44519:3378:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38303:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47197:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25797:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27356:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44671:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38943:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44744:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28106:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38611:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47780:114;;;:::i;:::-;;28516:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45958:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46757:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39133:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46965:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44819:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25491:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44782:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44603:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47426:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25221:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:103;;;;;;;;;;;;;:::i;:::-;;46843:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25966:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45259:693;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27649:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44850:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28772:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44889:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44629;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46312:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44708:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47069:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27875:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47690:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47276:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38303:224;38405:4;38444:35;38429:50;;;:11;:50;;;;:90;;;;38483:36;38507:11;38483:23;:36::i;:::-;38429:90;38422:97;;38303:224;;;:::o;47197:73::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47258:6:::1;47249;;:15;;;;;;;;;;;;;;;;;;47197:73:::0;:::o;25797:100::-;25851:13;25884:5;25877:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25797:100;:::o;27356:221::-;27432:7;27460:16;27468:7;27460;:16::i;:::-;27452:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27545:15;:24;27561:7;27545:24;;;;;;;;;;;;;;;;;;;;;27538:31;;27356:221;;;:::o;26879:411::-;26960:13;26976:23;26991:7;26976:14;:23::i;:::-;26960:39;;27024:5;27018:11;;:2;:11;;;;27010:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27118:5;27102:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27127:37;27144:5;27151:12;:10;:12::i;:::-;27127:16;:37::i;:::-;27102:62;27080:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27261:21;27270:2;27274:7;27261:8;:21::i;:::-;26949:341;26879:411;;:::o;44671:32::-;;;;:::o;38943:113::-;39004:7;39031:10;:17;;;;39024:24;;38943:113;:::o;44744:33::-;;;;:::o;28106:339::-;28301:41;28320:12;:10;:12::i;:::-;28334:7;28301:18;:41::i;:::-;28293:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28409:28;28419:4;28425:2;28429:7;28409:9;:28::i;:::-;28106:339;;;:::o;38611:256::-;38708:7;38744:23;38761:5;38744:16;:23::i;:::-;38736:5;:31;38728:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38833:12;:19;38846:5;38833:19;;;;;;;;;;;;;;;:26;38853:5;38833:26;;;;;;;;;;;;38826:33;;38611:256;;;;:::o;47780:114::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47848:10:::1;47840:24;;:47;47865:21;47840:47;;;;;;;;;;;;;;;;;;;;;;;47832:56;;;::::0;::::1;;47780:114::o:0;28516:185::-;28654:39;28671:4;28677:2;28681:7;28654:39;;;;;;;;;;;;:16;:39::i;:::-;28516:185;;;:::o;45958:348::-;46033:16;46061:23;46087:17;46097:6;46087:9;:17::i;:::-;46061:43;;46111:25;46153:15;46139:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46111:58;;46181:9;46176:103;46196:15;46192:1;:19;46176:103;;;46241:30;46261:6;46269:1;46241:19;:30::i;:::-;46227:8;46236:1;46227:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46213:3;;;;;:::i;:::-;;;;46176:103;;;;46292:8;46285:15;;;;45958:348;;;:::o;46757:80::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46823:8:::1;46816:4;:15;;;;46757:80:::0;:::o;39133:233::-;39208:7;39244:30;:28;:30::i;:::-;39236:5;:38;39228:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39341:10;39352:5;39341:17;;;;;;;;:::i;:::-;;;;;;;;;;39334:24;;39133:233;;;:::o;46965:98::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47046:11:::1;47036:7;:21;;;;;;;;;;;;:::i;:::-;;46965:98:::0;:::o;44819:26::-;;;;;;;;;;;;;:::o;25491:239::-;25563:7;25583:13;25599:7;:16;25607:7;25599:16;;;;;;;;;;;;;;;;;;;;;25583:32;;25651:1;25634:19;;:5;:19;;;;25626:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25717:5;25710:12;;;25491:239;;;:::o;44782:32::-;;;;:::o;44603:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47426:259::-;47485:4;47504:9;47516:1;47504:13;;47500:159;47523:20;:27;;;;47519:1;:31;47500:159;;;47601:5;47574:32;;:20;47595:1;47574:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;47570:80;;;47632:4;47625:11;;;;;47570:80;47552:3;;;;;:::i;:::-;;;;47500:159;;;;47674:5;47667:12;;47426:259;;;;:::o;25221:208::-;25293:7;25338:1;25321:19;;:5;:19;;;;25313:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25405:9;:16;25415:5;25405:16;;;;;;;;;;;;;;;;25398:23;;25221:208;;;:::o;4767:103::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;46843:116::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46936:17:::1;46920:13;:33;;;;46843:116:::0;:::o;4116:87::-;4162:7;4189:6;;;;;;;;;;;4182:13;;4116:87;:::o;25966:104::-;26022:13;26055:7;26048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25966:104;:::o;45259:693::-;45325:6;;;;;;;;;;;45324:7;45316:16;;;;;;45339:14;45356:13;:11;:13::i;:::-;45339:30;;45398:1;45384:11;:15;45376:24;;;;;;45430:13;;45415:11;:28;;45407:37;;;;;;45483:9;;45468:11;45459:6;:20;;;;:::i;:::-;:33;;45451:42;;;;;;45520:7;:5;:7::i;:::-;45506:21;;:10;:21;;;45502:340;;45563:4;45544:23;;:15;;;;;;;;;;;:23;;;45540:242;;;45592:25;45606:10;45592:13;:25::i;:::-;45584:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45653:23;45679:21;45689:10;45679:9;:21::i;:::-;45653:47;;45756:13;;45741:11;45723:15;:29;;;;:::i;:::-;:46;;45715:55;;;;;;45569:213;45540:242;45822:11;45815:4;;:18;;;;:::i;:::-;45802:9;:31;;45794:40;;;;;;45502:340;45859:9;45871:1;45859:13;;45854:93;45879:11;45874:1;:16;45854:93;;45906:33;45916:10;45937:1;45928:6;:10;;;;:::i;:::-;45906:9;:33::i;:::-;45892:3;;;;;:::i;:::-;;;;45854:93;;;;45309:643;45259:693;:::o;27649:155::-;27744:52;27763:12;:10;:12::i;:::-;27777:8;27787;27744:18;:52::i;:::-;27649:155;;:::o;44850:34::-;;;;;;;;;;;;;:::o;28772:328::-;28947:41;28966:12;:10;:12::i;:::-;28980:7;28947:18;:41::i;:::-;28939:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29053:39;29067:4;29073:2;29077:7;29086:5;29053:13;:39::i;:::-;28772:328;;;;:::o;44889:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44629:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46312:423::-;46410:13;46451:16;46459:7;46451;:16::i;:::-;46435:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46541:28;46572:10;:8;:10::i;:::-;46541:41;;46627:1;46602:14;46596:28;:32;:133;;;;;;;;;;;;;;;;;46664:14;46680:18;:7;:16;:18::i;:::-;46700:13;46647:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46596:133;46589:140;;;46312:423;;;:::o;44708:31::-;;;;:::o;47069:122::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47168:17:::1;47152:13;:33;;;;;;;;;;;;:::i;:::-;;47069:122:::0;:::o;27875:164::-;27972:4;27996:18;:25;28015:5;27996:25;;;;;;;;;;;;;;;:35;28022:8;27996:35;;;;;;;;;;;;;;;;;;;;;;;;;27989:42;;27875:164;;;;:::o;47690:84::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47762:6:::1;47744:15;;:24;;;;;;;;;;;;;;;;;;47690:84:::0;:::o;47276:144::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47358:20:::1;;47351:27;;;;:::i;:::-;47408:6;;47385:20;:29;;;;;;;:::i;:::-;;47276:144:::0;;:::o;5025:201::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5134:1:::1;5114:22;;:8;:22;;;;5106:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;6404:387::-;6464:4;6672:12;6739:7;6727:20;6719:28;;6782:1;6775:4;:8;6768:15;;;6404:387;;;:::o;37159:126::-;;;;:::o;24852:305::-;24954:4;25006:25;24991:40;;;:11;:40;;;;:105;;;;25063:33;25048:48;;;:11;:48;;;;24991:105;:158;;;;25113:36;25137:11;25113:23;:36::i;:::-;24991:158;24971:178;;24852:305;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;30610:127::-;30675:4;30727:1;30699:30;;:7;:16;30707:7;30699:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30692:37;;30610:127;;;:::o;34592:174::-;34694:2;34667:15;:24;34683:7;34667:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34750:7;34746:2;34712:46;;34721:23;34736:7;34721:14;:23::i;:::-;34712:46;;;;;;;;;;;;34592:174;;:::o;30904:348::-;30997:4;31022:16;31030:7;31022;:16::i;:::-;31014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31098:13;31114:23;31129:7;31114:14;:23::i;:::-;31098:39;;31167:5;31156:16;;:7;:16;;;:51;;;;31200:7;31176:31;;:20;31188:7;31176:11;:20::i;:::-;:31;;;31156:51;:87;;;;31211:32;31228:5;31235:7;31211:16;:32::i;:::-;31156:87;31148:96;;;30904:348;;;;:::o;33896:578::-;34055:4;34028:31;;:23;34043:7;34028:14;:23::i;:::-;:31;;;34020:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34138:1;34124:16;;:2;:16;;;;34116:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34194:39;34215:4;34221:2;34225:7;34194:20;:39::i;:::-;34298:29;34315:1;34319:7;34298:8;:29::i;:::-;34359:1;34340:9;:15;34350:4;34340:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34388:1;34371:9;:13;34381:2;34371:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34419:2;34400:7;:16;34408:7;34400:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34458:7;34454:2;34439:27;;34448:4;34439:27;;;;;;;;;;;;33896:578;;;:::o;5386:191::-;5460:16;5479:6;;;;;;;;;;;5460:25;;5505:8;5496:6;;:17;;;;;;;;;;;;;;;;;;5560:8;5529:40;;5550:8;5529:40;;;;;;;;;;;;5449:128;5386:191;:::o;31594:110::-;31670:26;31680:2;31684:7;31670:26;;;;;;;;;;;;:9;:26::i;:::-;31594:110;;:::o;34908:315::-;35063:8;35054:17;;:5;:17;;;;35046:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35150:8;35112:18;:25;35131:5;35112:25;;;;;;;;;;;;;;;:35;35138:8;35112:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35196:8;35174:41;;35189:5;35174:41;;;35206:8;35174:41;;;;;;:::i;:::-;;;;;;;;34908:315;;;:::o;29982:::-;30139:28;30149:4;30155:2;30159:7;30139:9;:28::i;:::-;30186:48;30209:4;30215:2;30219:7;30228:5;30186:22;:48::i;:::-;30178:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:315;;;;:::o;45138:102::-;45198:13;45227:7;45220:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45138:102;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;16548:157::-;16633:4;16672:25;16657:40;;;:11;:40;;;;16650:47;;16548:157;;;:::o;39979:589::-;40123:45;40150:4;40156:2;40160:7;40123:26;:45::i;:::-;40201:1;40185:18;;:4;:18;;;40181:187;;;40220:40;40252:7;40220:31;:40::i;:::-;40181:187;;;40290:2;40282:10;;:4;:10;;;40278:90;;40309:47;40342:4;40348:7;40309:32;:47::i;:::-;40278:90;40181:187;40396:1;40382:16;;:2;:16;;;40378:183;;;40415:45;40452:7;40415:36;:45::i;:::-;40378:183;;;40488:4;40482:10;;:2;:10;;;40478:83;;40509:40;40537:2;40541:7;40509:27;:40::i;:::-;40478:83;40378:183;39979:589;;;:::o;31931:321::-;32061:18;32067:2;32071:7;32061:5;:18::i;:::-;32112:54;32143:1;32147:2;32151:7;32160:5;32112:22;:54::i;:::-;32090:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31931:321;;;:::o;35788:799::-;35943:4;35964:15;:2;:13;;;:15::i;:::-;35960:620;;;36016:2;36000:36;;;36037:12;:10;:12::i;:::-;36051:4;36057:7;36066:5;36000:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35996:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36259:1;36242:6;:13;:18;36238:272;;;36285:60;;;;;;;;;;:::i;:::-;;;;;;;;36238:272;36460:6;36454:13;36445:6;36441:2;36437:15;36430:38;35996:529;36133:41;;;36123:51;;;:6;:51;;;;36116:58;;;;;35960:620;36564:4;36557:11;;35788:799;;;;;;;:::o;41291:164::-;41395:10;:17;;;;41368:15;:24;41384:7;41368:24;;;;;;;;;;;:44;;;;41423:10;41439:7;41423:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41291:164;:::o;42082:988::-;42348:22;42398:1;42373:22;42390:4;42373:16;:22::i;:::-;:26;;;;:::i;:::-;42348:51;;42410:18;42431:17;:26;42449:7;42431:26;;;;;;;;;;;;42410:47;;42578:14;42564:10;:28;42560:328;;42609:19;42631:12;:18;42644:4;42631:18;;;;;;;;;;;;;;;:34;42650:14;42631:34;;;;;;;;;;;;42609:56;;42715:11;42682:12;:18;42695:4;42682:18;;;;;;;;;;;;;;;:30;42701:10;42682:30;;;;;;;;;;;:44;;;;42832:10;42799:17;:30;42817:11;42799:30;;;;;;;;;;;:43;;;;42594:294;42560:328;42984:17;:26;43002:7;42984:26;;;;;;;;;;;42977:33;;;43028:12;:18;43041:4;43028:18;;;;;;;;;;;;;;;:34;43047:14;43028:34;;;;;;;;;;;43021:41;;;42163:907;;42082:988;;:::o;43365:1079::-;43618:22;43663:1;43643:10;:17;;;;:21;;;;:::i;:::-;43618:46;;43675:18;43696:15;:24;43712:7;43696:24;;;;;;;;;;;;43675:45;;44047:19;44069:10;44080:14;44069:26;;;;;;;;:::i;:::-;;;;;;;;;;44047:48;;44133:11;44108:10;44119;44108:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44244:10;44213:15;:28;44229:11;44213:28;;;;;;;;;;;:41;;;;44385:15;:24;44401:7;44385:24;;;;;;;;;;;44378:31;;;44420:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43436:1008;;;43365:1079;:::o;40869:221::-;40954:14;40971:20;40988:2;40971:16;:20::i;:::-;40954:37;;41029:7;41002:12;:16;41015:2;41002:16;;;;;;;;;;;;;;;:24;41019:6;41002:24;;;;;;;;;;;:34;;;;41076:6;41047:17;:26;41065:7;41047:26;;;;;;;;;;;:35;;;;40943:147;40869:221;;:::o;32588:382::-;32682:1;32668:16;;:2;:16;;;;32660:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32741:16;32749:7;32741;:16::i;:::-;32740:17;32732:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32803:45;32832:1;32836:2;32840:7;32803:20;:45::i;:::-;32878:1;32861:9;:13;32871:2;32861:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32909:2;32890:7;:16;32898:7;32890:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32954:7;32950:2;32929:33;;32946:1;32929:33;;;;;;;;;;;;32588:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:::-;17923:3;17944:67;18008:2;18003:3;17944:67;:::i;:::-;17937:74;;18020:93;18109:3;18020:93;:::i;:::-;18138:2;18133:3;18129:12;18122:19;;17781:366;;;:::o;18153:::-;18295:3;18316:67;18380:2;18375:3;18316:67;:::i;:::-;18309:74;;18392:93;18481:3;18392:93;:::i;:::-;18510:2;18505:3;18501:12;18494:19;;18153:366;;;:::o;18525:::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:108::-;18974:24;18992:5;18974:24;:::i;:::-;18969:3;18962:37;18897:108;;:::o;19011:118::-;19098:24;19116:5;19098:24;:::i;:::-;19093:3;19086:37;19011:118;;:::o;19135:589::-;19360:3;19382:95;19473:3;19464:6;19382:95;:::i;:::-;19375:102;;19494:95;19585:3;19576:6;19494:95;:::i;:::-;19487:102;;19606:92;19694:3;19685:6;19606:92;:::i;:::-;19599:99;;19715:3;19708:10;;19135:589;;;;;;:::o;19730:222::-;19823:4;19861:2;19850:9;19846:18;19838:26;;19874:71;19942:1;19931:9;19927:17;19918:6;19874:71;:::i;:::-;19730:222;;;;:::o;19958:640::-;20153:4;20191:3;20180:9;20176:19;20168:27;;20205:71;20273:1;20262:9;20258:17;20249:6;20205:71;:::i;:::-;20286:72;20354:2;20343:9;20339:18;20330:6;20286:72;:::i;:::-;20368;20436:2;20425:9;20421:18;20412:6;20368:72;:::i;:::-;20487:9;20481:4;20477:20;20472:2;20461:9;20457:18;20450:48;20515:76;20586:4;20577:6;20515:76;:::i;:::-;20507:84;;19958:640;;;;;;;:::o;20604:373::-;20747:4;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:108;20965:4;20956:6;20862:108;:::i;:::-;20854:116;;20604:373;;;;:::o;20983:210::-;21070:4;21108:2;21097:9;21093:18;21085:26;;21121:65;21183:1;21172:9;21168:17;21159:6;21121:65;:::i;:::-;20983:210;;;;:::o;21199:313::-;21312:4;21350:2;21339:9;21335:18;21327:26;;21399:9;21393:4;21389:20;21385:1;21374:9;21370:17;21363:47;21427:78;21500:4;21491:6;21427:78;:::i;:::-;21419:86;;21199:313;;;;:::o;21518:419::-;21684:4;21722:2;21711:9;21707:18;21699:26;;21771:9;21765:4;21761:20;21757:1;21746:9;21742:17;21735:47;21799:131;21925:4;21799:131;:::i;:::-;21791:139;;21518:419;;;:::o;21943:::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22196:9;22190:4;22186:20;22182:1;22171:9;22167:17;22160:47;22224:131;22350:4;22224:131;:::i;:::-;22216:139;;21943:419;;;:::o;22368:::-;22534:4;22572:2;22561:9;22557:18;22549:26;;22621:9;22615:4;22611:20;22607:1;22596:9;22592:17;22585:47;22649:131;22775:4;22649:131;:::i;:::-;22641:139;;22368:419;;;:::o;22793:::-;22959:4;22997:2;22986:9;22982:18;22974:26;;23046:9;23040:4;23036:20;23032:1;23021:9;23017:17;23010:47;23074:131;23200:4;23074:131;:::i;:::-;23066:139;;22793:419;;;:::o;23218:::-;23384:4;23422:2;23411:9;23407:18;23399:26;;23471:9;23465:4;23461:20;23457:1;23446:9;23442:17;23435:47;23499:131;23625:4;23499:131;:::i;:::-;23491:139;;23218:419;;;:::o;23643:::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:::-;24234:4;24272:2;24261:9;24257:18;24249:26;;24321:9;24315:4;24311:20;24307:1;24296:9;24292:17;24285:47;24349:131;24475:4;24349:131;:::i;:::-;24341:139;;24068:419;;;:::o;24493:::-;24659:4;24697:2;24686:9;24682:18;24674:26;;24746:9;24740:4;24736:20;24732:1;24721:9;24717:17;24710:47;24774:131;24900:4;24774:131;:::i;:::-;24766:139;;24493:419;;;:::o;24918:::-;25084:4;25122:2;25111:9;25107:18;25099:26;;25171:9;25165:4;25161:20;25157:1;25146:9;25142:17;25135:47;25199:131;25325:4;25199:131;:::i;:::-;25191:139;;24918:419;;;:::o;25343:::-;25509:4;25547:2;25536:9;25532:18;25524:26;;25596:9;25590:4;25586:20;25582:1;25571:9;25567:17;25560:47;25624:131;25750:4;25624:131;:::i;:::-;25616:139;;25343:419;;;:::o;25768:::-;25934:4;25972:2;25961:9;25957:18;25949:26;;26021:9;26015:4;26011:20;26007:1;25996:9;25992:17;25985:47;26049:131;26175:4;26049:131;:::i;:::-;26041:139;;25768:419;;;:::o;26193:::-;26359:4;26397:2;26386:9;26382:18;26374:26;;26446:9;26440:4;26436:20;26432:1;26421:9;26417:17;26410:47;26474:131;26600:4;26474:131;:::i;:::-;26466:139;;26193:419;;;:::o;26618:::-;26784:4;26822:2;26811:9;26807:18;26799:26;;26871:9;26865:4;26861:20;26857:1;26846:9;26842:17;26835:47;26899:131;27025:4;26899:131;:::i;:::-;26891:139;;26618:419;;;:::o;27043:::-;27209:4;27247:2;27236:9;27232:18;27224:26;;27296:9;27290:4;27286:20;27282:1;27271:9;27267:17;27260:47;27324:131;27450:4;27324:131;:::i;:::-;27316:139;;27043:419;;;:::o;27468:::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:::-;28059:4;28097:2;28086:9;28082:18;28074:26;;28146:9;28140:4;28136:20;28132:1;28121:9;28117:17;28110:47;28174:131;28300:4;28174:131;:::i;:::-;28166:139;;27893:419;;;:::o;28318:::-;28484:4;28522:2;28511:9;28507:18;28499:26;;28571:9;28565:4;28561:20;28557:1;28546:9;28542:17;28535:47;28599:131;28725:4;28599:131;:::i;:::-;28591:139;;28318:419;;;:::o;28743:::-;28909:4;28947:2;28936:9;28932:18;28924:26;;28996:9;28990:4;28986:20;28982:1;28971:9;28967:17;28960:47;29024:131;29150:4;29024:131;:::i;:::-;29016:139;;28743:419;;;:::o;29168:::-;29334:4;29372:2;29361:9;29357:18;29349:26;;29421:9;29415:4;29411:20;29407:1;29396:9;29392:17;29385:47;29449:131;29575:4;29449:131;:::i;:::-;29441:139;;29168:419;;;:::o;29593:222::-;29686:4;29724:2;29713:9;29709:18;29701:26;;29737:71;29805:1;29794:9;29790:17;29781:6;29737:71;:::i;:::-;29593:222;;;;:::o;29821:129::-;29855:6;29882:20;;:::i;:::-;29872:30;;29911:33;29939:4;29931:6;29911:33;:::i;:::-;29821:129;;;:::o;29956:75::-;29989:6;30022:2;30016:9;30006:19;;29956:75;:::o;30037:307::-;30098:4;30188:18;30180:6;30177:30;30174:56;;;30210:18;;:::i;:::-;30174:56;30248:29;30270:6;30248:29;:::i;:::-;30240:37;;30332:4;30326;30322:15;30314:23;;30037:307;;;:::o;30350:308::-;30412:4;30502:18;30494:6;30491:30;30488:56;;;30524:18;;:::i;:::-;30488:56;30562:29;30584:6;30562:29;:::i;:::-;30554:37;;30646:4;30640;30636:15;30628:23;;30350:308;;;:::o;30664:132::-;30731:4;30754:3;30746:11;;30784:4;30779:3;30775:14;30767:22;;30664:132;;;:::o;30802:141::-;30851:4;30874:3;30866:11;;30897:3;30894:1;30887:14;30931:4;30928:1;30918:18;30910:26;;30802:141;;;:::o;30949:114::-;31016:6;31050:5;31044:12;31034:22;;30949:114;;;:::o;31069:98::-;31120:6;31154:5;31148:12;31138:22;;31069:98;;;:::o;31173:99::-;31225:6;31259:5;31253:12;31243:22;;31173:99;;;:::o;31278:113::-;31348:4;31380;31375:3;31371:14;31363:22;;31278:113;;;:::o;31397:184::-;31496:11;31530:6;31525:3;31518:19;31570:4;31565:3;31561:14;31546:29;;31397:184;;;;:::o;31587:168::-;31670:11;31704:6;31699:3;31692:19;31744:4;31739:3;31735:14;31720:29;;31587:168;;;;:::o;31761:169::-;31845:11;31879:6;31874:3;31867:19;31919:4;31914:3;31910:14;31895:29;;31761:169;;;;:::o;31936:148::-;32038:11;32075:3;32060:18;;31936:148;;;;:::o;32090:305::-;32130:3;32149:20;32167:1;32149:20;:::i;:::-;32144:25;;32183:20;32201:1;32183:20;:::i;:::-;32178:25;;32337:1;32269:66;32265:74;32262:1;32259:81;32256:107;;;32343:18;;:::i;:::-;32256:107;32387:1;32384;32380:9;32373:16;;32090:305;;;;:::o;32401:185::-;32441:1;32458:20;32476:1;32458:20;:::i;:::-;32453:25;;32492:20;32510:1;32492:20;:::i;:::-;32487:25;;32531:1;32521:35;;32536:18;;:::i;:::-;32521:35;32578:1;32575;32571:9;32566:14;;32401:185;;;;:::o;32592:348::-;32632:7;32655:20;32673:1;32655:20;:::i;:::-;32650:25;;32689:20;32707:1;32689:20;:::i;:::-;32684:25;;32877:1;32809:66;32805:74;32802:1;32799:81;32794:1;32787:9;32780:17;32776:105;32773:131;;;32884:18;;:::i;:::-;32773:131;32932:1;32929;32925:9;32914:20;;32592:348;;;;:::o;32946:191::-;32986:4;33006:20;33024:1;33006:20;:::i;:::-;33001:25;;33040:20;33058:1;33040:20;:::i;:::-;33035:25;;33079:1;33076;33073:8;33070:34;;;33084:18;;:::i;:::-;33070:34;33129:1;33126;33122:9;33114:17;;32946:191;;;;:::o;33143:96::-;33180:7;33209:24;33227:5;33209:24;:::i;:::-;33198:35;;33143:96;;;:::o;33245:90::-;33279:7;33322:5;33315:13;33308:21;33297:32;;33245:90;;;:::o;33341:149::-;33377:7;33417:66;33410:5;33406:78;33395:89;;33341:149;;;:::o;33496:126::-;33533:7;33573:42;33566:5;33562:54;33551:65;;33496:126;;;:::o;33628:77::-;33665:7;33694:5;33683:16;;33628:77;;;:::o;33711:154::-;33795:6;33790:3;33785;33772:30;33857:1;33848:6;33843:3;33839:16;33832:27;33711:154;;;:::o;33871:307::-;33939:1;33949:113;33963:6;33960:1;33957:13;33949:113;;;34048:1;34043:3;34039:11;34033:18;34029:1;34024:3;34020:11;34013:39;33985:2;33982:1;33978:10;33973:15;;33949:113;;;34080:6;34077:1;34074:13;34071:101;;;34160:1;34151:6;34146:3;34142:16;34135:27;34071:101;33920:258;33871:307;;;:::o;34184:320::-;34228:6;34265:1;34259:4;34255:12;34245:22;;34312:1;34306:4;34302:12;34333:18;34323:81;;34389:4;34381:6;34377:17;34367:27;;34323:81;34451:2;34443:6;34440:14;34420:18;34417:38;34414:84;;;34470:18;;:::i;:::-;34414:84;34235:269;34184:320;;;:::o;34510:281::-;34593:27;34615:4;34593:27;:::i;:::-;34585:6;34581:40;34723:6;34711:10;34708:22;34687:18;34675:10;34672:34;34669:62;34666:88;;;34734:18;;:::i;:::-;34666:88;34774:10;34770:2;34763:22;34553:238;34510:281;;:::o;34797:233::-;34836:3;34859:24;34877:5;34859:24;:::i;:::-;34850:33;;34905:66;34898:5;34895:77;34892:103;;;34975:18;;:::i;:::-;34892:103;35022:1;35015:5;35011:13;35004:20;;34797:233;;;:::o;35036:176::-;35068:1;35085:20;35103:1;35085:20;:::i;:::-;35080:25;;35119:20;35137:1;35119:20;:::i;:::-;35114:25;;35158:1;35148:35;;35163:18;;:::i;:::-;35148:35;35204:1;35201;35197:9;35192:14;;35036:176;;;;:::o;35218:180::-;35266:77;35263:1;35256:88;35363:4;35360:1;35353:15;35387:4;35384:1;35377:15;35404:180;35452:77;35449:1;35442:88;35549:4;35546:1;35539:15;35573:4;35570:1;35563:15;35590:180;35638:77;35635:1;35628:88;35735:4;35732:1;35725:15;35759:4;35756:1;35749:15;35776:180;35824:77;35821:1;35814:88;35921:4;35918:1;35911:15;35945:4;35942:1;35935:15;35962:180;36010:77;36007:1;36000:88;36107:4;36104:1;36097:15;36131:4;36128:1;36121:15;36148:180;36196:77;36193:1;36186:88;36293:4;36290:1;36283:15;36317:4;36314:1;36307:15;36334:117;36443:1;36440;36433:12;36457:117;36566:1;36563;36556:12;36580:117;36689:1;36686;36679:12;36703:117;36812:1;36809;36802:12;36826:117;36935:1;36932;36925:12;36949:117;37058:1;37055;37048:12;37072:102;37113:6;37164:2;37160:7;37155:2;37148:5;37144:14;37140:28;37130:38;;37072:102;;;:::o;37180:230::-;37320:34;37316:1;37308:6;37304:14;37297:58;37389:13;37384:2;37376:6;37372:15;37365:38;37180:230;:::o;37416:237::-;37556:34;37552:1;37544:6;37540:14;37533:58;37625:20;37620:2;37612:6;37608:15;37601:45;37416:237;:::o;37659:225::-;37799:34;37795:1;37787:6;37783:14;37776:58;37868:8;37863:2;37855:6;37851:15;37844:33;37659:225;:::o;37890:178::-;38030:30;38026:1;38018:6;38014:14;38007:54;37890:178;:::o;38074:223::-;38214:34;38210:1;38202:6;38198:14;38191:58;38283:6;38278:2;38270:6;38266:15;38259:31;38074:223;:::o;38303:175::-;38443:27;38439:1;38431:6;38427:14;38420:51;38303:175;:::o;38484:231::-;38624:34;38620:1;38612:6;38608:14;38601:58;38693:14;38688:2;38680:6;38676:15;38669:39;38484:231;:::o;38721:243::-;38861:34;38857:1;38849:6;38845:14;38838:58;38930:26;38925:2;38917:6;38913:15;38906:51;38721:243;:::o;38970:229::-;39110:34;39106:1;39098:6;39094:14;39087:58;39179:12;39174:2;39166:6;39162:15;39155:37;38970:229;:::o;39205:228::-;39345:34;39341:1;39333:6;39329:14;39322:58;39414:11;39409:2;39401:6;39397:15;39390:36;39205:228;:::o;39439:182::-;39579:34;39575:1;39567:6;39563:14;39556:58;39439:182;:::o;39627:231::-;39767:34;39763:1;39755:6;39751:14;39744:58;39836:14;39831:2;39823:6;39819:15;39812:39;39627:231;:::o;39864:182::-;40004:34;40000:1;39992:6;39988:14;39981:58;39864:182;:::o;40052:228::-;40192:34;40188:1;40180:6;40176:14;40169:58;40261:11;40256:2;40248:6;40244:15;40237:36;40052:228;:::o;40286:234::-;40426:34;40422:1;40414:6;40410:14;40403:58;40495:17;40490:2;40482:6;40478:15;40471:42;40286:234;:::o;40526:220::-;40666:34;40662:1;40654:6;40650:14;40643:58;40735:3;40730:2;40722:6;40718:15;40711:28;40526:220;:::o;40752:166::-;40892:18;40888:1;40880:6;40876:14;40869:42;40752:166;:::o;40924:236::-;41064:34;41060:1;41052:6;41048:14;41041:58;41133:19;41128:2;41120:6;41116:15;41109:44;40924:236;:::o;41166:231::-;41306:34;41302:1;41294:6;41290:14;41283:58;41375:14;41370:2;41362:6;41358:15;41351:39;41166:231;:::o;41403:122::-;41476:24;41494:5;41476:24;:::i;:::-;41469:5;41466:35;41456:63;;41515:1;41512;41505:12;41456:63;41403:122;:::o;41531:116::-;41601:21;41616:5;41601:21;:::i;:::-;41594:5;41591:32;41581:60;;41637:1;41634;41627:12;41581:60;41531:116;:::o;41653:120::-;41725:23;41742:5;41725:23;:::i;:::-;41718:5;41715:34;41705:62;;41763:1;41760;41753:12;41705:62;41653:120;:::o;41779:122::-;41852:24;41870:5;41852:24;:::i;:::-;41845:5;41842:35;41832:63;;41891:1;41888;41881:12;41832:63;41779:122;:::o

Swarm Source

ipfs://25da904bf70a1348b7801f082c11656f628ea144025d98ddde66de12c914cb62
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.