Token Corgiclub

Overview

Total Supply:
0

Holders:
2 addresses

Transfers:
-

Loading
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HaveFeeCollection

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-11
*/

// Sources flattened with hardhat v2.8.4 https://hardhat.org

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

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

pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT

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


// File @openzeppelin/contracts/token/ERC1155/[email protected]

// 
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}


// File @openzeppelin/contracts/token/ERC1155/[email protected]

// 
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}


// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]

// 
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}


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

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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

pragma solidity ^0.8.0;

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

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


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

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

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

pragma solidity ^0.8.0;






/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @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, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}


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

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

// 
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

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

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

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

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

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


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

// 
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File contracts/interfaces/ERC1155Tradable.sol

pragma solidity ^0.8.0;
// 




abstract contract ERC1155Tradable is ERC1155, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _counter;
    using SafeMath for uint256;

    mapping (uint256 => address) public creators;
    mapping (uint256 => uint256) public tokenSupply;
    mapping (uint256 => string) public uris;

    string public name;
    string public symbol;

    modifier creatorOnly(uint256 _id) {
        require(creators[_id] == msg.sender, "ERC1155Tradable#creatorOnly: ONLY_CREATOR_ALLOWED");
        _;
    }

    modifier ownersOnly(uint256 _id) {
        require(balanceOf(msg.sender, _id) > 0, "ERC1155Tradable#ownersOnly: ONLY_OWNERS_ALLOWED");
        _;
    }

    constructor(
        string memory _name,
        string memory _symbol
    ) ERC1155("") {
        name = _name;
        symbol = _symbol;
    }

    function create(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri
    ) public virtual payable returns (uint256) {
        uint256 _id = _counter.current();
        _counter.increment();

        _mint(_initialOwner, _id, _initialSupply, "");
        tokenSupply[_id] = _initialSupply;
        creators[_id] = msg.sender;
        uris[_id] = _uri;

        return _id;
    }

}


// File contracts/interfaces/ICollectionRoyalty.sol

pragma solidity ^0.8.0;
// 

interface ICollectionRoyalty {
    function setRoyalty(uint256 _id, uint256 royalty) external;
    
    function getRoyalty(uint256 _id) external view returns(uint256);

    function getCreator(uint256 _id) external view returns(address);

    function getDecimal() external view returns(uint256);
}


// File contracts/ERC1155Collection.sol

pragma solidity ^0.8.0;
// 


contract ERC1155Collection is ERC1155Tradable, ICollectionRoyalty {
    string public contractURI;
    mapping (uint256 => uint256) public royalties;
    uint256 decimal = 2;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri
    ) ERC1155Tradable(_name, _symbol) {
        contractURI = _uri;
    }

    function uri(uint256 _id) public view override returns (string memory) {
        return uris[_id];
    }

    function setRoyalty(uint256 _id, uint256 royalty) public override creatorOnly(_id) {
        royalties[_id] = royalty;
    }
    
    function getRoyalty(uint256 _id) public override view returns(uint256) {
        return royalties[_id];
    }

    function getCreator(uint256 _id) public override view returns(address) {
        return creators[_id];
    }

    function getDecimal() public override view returns(uint256) {
        return decimal;
    }

}


// File contracts/HaveFeeCollection.sol

pragma solidity ^0.8.0;

contract HaveFeeCollection is ERC1155Collection {
    using Counters for Counters.Counter;
    Counters.Counter private _counter;

    uint256 public publicFee;
    uint256 public earlyFee;
    uint256 public earlyLimit;
    address public payee;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _uri,
        uint256 _publicFee,
        uint256 _earlyFee,
        uint32 _earlyLimit,
        address _payee
    ) ERC1155Collection(_name, _symbol, _uri) {
        _counter.increment();

        publicFee = _publicFee;
        earlyFee = _earlyFee;
        earlyLimit = _earlyLimit;
        payee = _payee;
    }

    function totalMinted() public view returns (uint256) {
        return _counter.current() - 1;
    }

    function getFee(address minter) public view returns (uint256) {
        if (minter == payee) {
            return 0;
        }
        if (totalMinted() < earlyLimit) {
            return earlyFee;
        } else {
            return publicFee;
        }
    }

    modifier enoughFee(uint256 value, address minter, uint256 quantity) {
        uint256 fee = publicFee * quantity;
        if (_counter.current() <= earlyLimit) {
            fee = earlyFee * quantity;
        }
        if (minter == payee) {
            fee = 0;
        }
        require(value == fee, "Not enough fee");
        _;
    }

    function create(
        address _initialOwner,
        uint256 _initialSupply,
        string calldata _uri
    ) public enoughFee(msg.value, msg.sender, 1) payable override returns (uint256) {
        uint256 _id = super.create(_initialOwner, _initialSupply, _uri);
        _counter.increment();
        return _id;
    }

    function bulkCreate(
        address _initialOwner,
        string[] calldata _uris
    ) public enoughFee(msg.value, msg.sender, _uris.length) payable {
        for (uint256 i = 0; i < _uris.length; i++) {
            super.create(_initialOwner, 1, _uris[i]);
            _counter.increment();
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"uint256","name":"_publicFee","type":"uint256"},{"internalType":"uint256","name":"_earlyFee","type":"uint256"},{"internalType":"uint32","name":"_earlyLimit","type":"uint32"},{"internalType":"address","name":"_payee","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"string[]","name":"_uris","type":"string[]"}],"name":"bulkCreate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"royalties","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"royalty","type":"uint256"}],"name":"setRoyalty","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":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uris","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526002600c553480156200001657600080fd5b50604051620044b1380380620044b183398181016040528101906200003c9190620003c6565b86868682826040518060200160405280600081525062000062816200015360201b60201c565b5062000083620000776200016f60201b60201c565b6200017760201b60201c565b81600890805190602001906200009b92919062000253565b508060099080519060200190620000b492919062000253565b50505080600a9080519060200190620000cf92919062000253565b50505050620000ea600d6200023d60201b620015761760201c565b83600e8190555082600f819055508163ffffffff1660108190555080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620006f6565b80600290805190602001906200016b92919062000253565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200026190620005b9565b90600052602060002090601f016020900481019282620002855760008555620002d1565b82601f10620002a057805160ff1916838001178555620002d1565b82800160010185558215620002d1579182015b82811115620002d0578251825591602001919060010190620002b3565b5b509050620002e09190620002e4565b5090565b5b80821115620002ff576000816000905550600101620002e5565b5090565b60006200031a6200031484620004ff565b620004d6565b90508281526020810184848401111562000339576200033862000688565b5b6200034684828562000583565b509392505050565b6000815190506200035f81620006a8565b92915050565b600082601f8301126200037d576200037c62000683565b5b81516200038f84826020860162000303565b91505092915050565b600081519050620003a981620006c2565b92915050565b600081519050620003c081620006dc565b92915050565b600080600080600080600060e0888a031215620003e857620003e762000692565b5b600088015167ffffffffffffffff8111156200040957620004086200068d565b5b620004178a828b0162000365565b975050602088015167ffffffffffffffff8111156200043b576200043a6200068d565b5b620004498a828b0162000365565b965050604088015167ffffffffffffffff8111156200046d576200046c6200068d565b5b6200047b8a828b0162000365565b95505060606200048e8a828b0162000398565b9450506080620004a18a828b0162000398565b93505060a0620004b48a828b01620003af565b92505060c0620004c78a828b016200034e565b91505092959891949750929550565b6000620004e2620004f5565b9050620004f08282620005ef565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051d576200051c62000654565b5b620005288262000697565b9050602081019050919050565b6000620005428262000549565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60005b83811015620005a357808201518184015260208101905062000586565b83811115620005b3576000848401525b50505050565b60006002820490506001821680620005d257607f821691505b60208210811415620005e957620005e862000625565b5b50919050565b620005fa8262000697565b810181811067ffffffffffffffff821117156200061c576200061b62000654565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006b38162000535565b8114620006bf57600080fd5b50565b620006cd8162000569565b8114620006d957600080fd5b50565b620006e78162000573565b8114620006f357600080fd5b50565b613dab80620007066000396000f3fe6080604052600436106101cc5760003560e01c8063715018a6116100f7578063ae90b21311610095578063e8a3d48511610064578063e8a3d485146106d1578063e985e9c5146106fc578063f242432a14610739578063f2fde38b14610762576101cc565b8063ae90b213146105ef578063b88c91481461061a578063cd53d08e14610657578063d48e638a14610694576101cc565b8063933a6f0d116100d1578063933a6f0d1461054757806395d89b4114610570578063a22cb4651461059b578063a2309ff8146105c4576101cc565b8063715018a6146104c85780637f77f574146104df5780638da5cb5b1461051c576101cc565b80631d40dbba1161016f5780634e1273f41161013e5780634e1273f41461040557806359646463146104425780635fe212ef1461046d57806369fc551a14610498576101cc565b80631d40dbba146103585780632693ebf2146103745780632eb2c2d6146103b157806334ce10c4146103da576101cc565b80630e89341c116101ab5780630e89341c146102765780631253c546146102b357806315bbd78f146102f05780631af9cf491461031b576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806306fdde031461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612a82565b61078b565b60405161020591906132f9565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612bae565b610854565b60405161024291906130dc565b60405180910390f35b34801561025757600080fd5b50610260610936565b60405161026d91906130f7565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612c08565b6109c4565b6040516102aa91906130f7565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c08565b610a69565b6040516102e791906130f7565b60405180910390f35b3480156102fc57600080fd5b50610305610b09565b60405161031291906132f9565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190612c08565b610b0f565b60405161034f91906132f9565b60405180910390f35b610372600480360381019061036d91906129e2565b610b2c565b005b34801561038057600080fd5b5061039b60048036038101906103969190612c08565b610c6a565b6040516103a891906132f9565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061287c565b610c82565b005b3480156103e657600080fd5b506103ef610d23565b6040516103fc91906132f9565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190612b36565b610d2d565b6040516104399190613083565b60405180910390f35b34801561044e57600080fd5b50610457610e46565b60405161046491906132f9565b60405180910390f35b34801561047957600080fd5b50610482610e4c565b60405161048f91906132f9565b60405180910390f35b6104b260048036038101906104ad9190612ac2565b610e52565b6040516104bf91906132f9565b60405180910390f35b3480156104d457600080fd5b506104dd610f54565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612c08565b610fdc565b60405161051391906132f9565b60405180910390f35b34801561052857600080fd5b50610531610ff4565b60405161053e9190612fa6565b60405180910390f35b34801561055357600080fd5b5061056e60048036038101906105699190612c35565b61101e565b005b34801561057c57600080fd5b506105856110dd565b60405161059291906130f7565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190612a42565b61116b565b005b3480156105d057600080fd5b506105d9611181565b6040516105e691906132f9565b60405180910390f35b3480156105fb57600080fd5b5061060461119e565b6040516106119190612fa6565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c919061280f565b6111c4565b60405161064e91906132f9565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190612c08565b61124b565b60405161068b9190612fa6565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190612c08565b61127e565b6040516106c89190612fa6565b60405180910390f35b3480156106dd57600080fd5b506106e66112bb565b6040516106f391906130f7565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e919061283c565b611349565b60405161073091906130dc565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b919061294b565b6113dd565b005b34801561076e57600080fd5b506107896004803603810190610784919061280f565b61147e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f390613179565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091f57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092f575061092e8261158c565b5b9050919050565b6008805461094390613659565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90613659565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b505050505081565b60606007600083815260200190815260200160002080546109e490613659565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1090613659565b8015610a5d5780601f10610a3257610100808354040283529160200191610a5d565b820191906000526020600020905b815481529060010190602001808311610a4057829003601f168201915b50505050509050919050565b60076020528060005260406000206000915090508054610a8890613659565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab490613659565b8015610b015780601f10610ad657610100808354040283529160200191610b01565b820191906000526020600020905b815481529060010190602001808311610ae457829003601f168201915b505050505081565b600f5481565b6000600b6000838152602001908152602001600020549050919050565b343383839050600081600e54610b429190613515565b9050601054610b51600d6115f6565b11610b675781600f54610b649190613515565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc257600090505b808414610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613159565b60405180910390fd5b60005b86869050811015610c6057610c42886001898985818110610c2b57610c2a613763565b5b9050602002810190610c3d919061333d565b611604565b50610c4d600d611576565b8080610c58906136bc565b915050610c07565b5050505050505050565b60066020528060005260406000206000915090505481565b610c8a6116d1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610cd05750610ccf85610cca6116d1565b611349565b5b610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d06906131f9565b60405180910390fd5b610d1c85858585856116d9565b5050505050565b6000600c54905090565b60608151835114610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613279565b60405180910390fd5b6000835167ffffffffffffffff811115610d9057610d8f613792565b5b604051908082528060200260200182016040528015610dbe5781602001602082028036833780820191505090505b50905060005b8451811015610e3b57610e0b858281518110610de357610de2613763565b5b6020026020010151858381518110610dfe57610dfd613763565b5b602002602001015161078b565b828281518110610e1e57610e1d613763565b5b60200260200101818152505080610e34906136bc565b9050610dc4565b508091505092915050565b600e5481565b60105481565b600034336001600081600e54610e689190613515565b9050601054610e77600d6115f6565b11610e8d5781600f54610e8a9190613515565b90505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee857600090505b808414610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190613159565b60405180910390fd5b6000610f388a8a8a8a611604565b9050610f44600d611576565b8095505050505050949350505050565b610f5c6116d1565b73ffffffffffffffffffffffffffffffffffffffff16610f7a610ff4565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790613239565b60405180910390fd5b610fda60006119ed565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b813373ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906132d9565b60405180910390fd5b81600b600085815260200190815260200160002081905550505050565b600980546110ea90613659565b80601f016020809104026020016040519081016040528092919081815260200182805461111690613659565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b505050505081565b61117d6111766116d1565b8383611ab3565b5050565b6000600161118f600d6115f6565b611199919061356f565b905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112255760009050611246565b601054611230611181565b101561124057600f549050611246565b600e5490505b919050565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a80546112c890613659565b80601f01602080910402602001604051908101604052809291908181526020018280546112f490613659565b80156113415780601f1061131657610100808354040283529160200191611341565b820191906000526020600020905b81548152906001019060200180831161132457829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113e56116d1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061142b575061142a856114256116d1565b611349565b5b61146a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611461906131b9565b60405180910390fd5b6114778585858585611c20565b5050505050565b6114866116d1565b73ffffffffffffffffffffffffffffffffffffffff166114a4610ff4565b73ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190613239565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613199565b60405180910390fd5b611573816119ed565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b60008061161160046115f6565b905061161d6004611576565b61163886828760405180602001604052806000815250611ea2565b846006600083815260200190815260200160002081905550336005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083836007600084815260200190815260200160002091906116c49291906124ab565b5080915050949350505050565b600033905090565b815183511461171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613299565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906131d9565b60405180910390fd5b60006117976116d1565b90506117a7818787878787612038565b60005b84518110156119585760008582815181106117c8576117c7613763565b5b6020026020010151905060008583815181106117e7576117e6613763565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f90613219565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461193d91906134bf565b9250508190555050505080611951906136bc565b90506117aa565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119cf9291906130a5565b60405180910390a46119e5818787878787612040565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1990613259565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c1391906130dc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906131d9565b60405180910390fd5b6000611c9a6116d1565b9050611cba818787611cab88612227565b611cb488612227565b87612038565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890613219565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0691906134bf565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e83929190613314565b60405180910390a4611e998288888888886122a1565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f09906132b9565b60405180910390fd5b6000611f1c6116d1565b9050611f3d81600087611f2e88612227565b611f3788612227565b87612038565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f9c91906134bf565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161201a929190613314565b60405180910390a4612031816000878787876122a1565b5050505050565b505050505050565b61205f8473ffffffffffffffffffffffffffffffffffffffff16612488565b1561221f578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120a5959493929190612fc1565b602060405180830381600087803b1580156120bf57600080fd5b505af19250505080156120f057506040513d601f19601f820116820180604052508101906120ed9190612bdb565b60015b612196576120fc6137c1565b806308c379a014156121595750612111613c83565b8061211c575061215b565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215091906130f7565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218d90613119565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461221d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221490613139565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561224657612245613792565b5b6040519080825280602002602001820160405280156122745781602001602082028036833780820191505090505b509050828160008151811061228c5761228b613763565b5b60200260200101818152505080915050919050565b6122c08473ffffffffffffffffffffffffffffffffffffffff16612488565b15612480578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612306959493929190613029565b602060405180830381600087803b15801561232057600080fd5b505af192505050801561235157506040513d601f19601f8201168201806040525081019061234e9190612bdb565b60015b6123f75761235d6137c1565b806308c379a014156123ba5750612372613c83565b8061237d57506123bc565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b191906130f7565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ee90613119565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461247e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247590613139565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546124b790613659565b90600052602060002090601f0160209004810192826124d95760008555612520565b82601f106124f257803560ff1916838001178555612520565b82800160010185558215612520579182015b8281111561251f578235825591602001919060010190612504565b5b50905061252d9190612531565b5090565b5b8082111561254a576000816000905550600101612532565b5090565b600061256161255c846133c5565b6133a0565b90508083825260208201905082856020860282011115612584576125836137f7565b5b60005b858110156125b4578161259a8882612670565b845260208401935060208301925050600181019050612587565b5050509392505050565b60006125d16125cc846133f1565b6133a0565b905080838252602082019050828560208602820111156125f4576125f36137f7565b5b60005b85811015612624578161260a88826127fa565b8452602084019350602083019250506001810190506125f7565b5050509392505050565b600061264161263c8461341d565b6133a0565b90508281526020810184848401111561265d5761265c613801565b5b612668848285613617565b509392505050565b60008135905061267f81613d19565b92915050565b600082601f83011261269a576126996137e8565b5b81356126aa84826020860161254e565b91505092915050565b60008083601f8401126126c9576126c86137e8565b5b8235905067ffffffffffffffff8111156126e6576126e56137e3565b5b602083019150836020820283011115612702576127016137f7565b5b9250929050565b600082601f83011261271e5761271d6137e8565b5b813561272e8482602086016125be565b91505092915050565b60008135905061274681613d30565b92915050565b60008135905061275b81613d47565b92915050565b60008151905061277081613d47565b92915050565b600082601f83011261278b5761278a6137e8565b5b813561279b84826020860161262e565b91505092915050565b60008083601f8401126127ba576127b96137e8565b5b8235905067ffffffffffffffff8111156127d7576127d66137e3565b5b6020830191508360018202830111156127f3576127f26137f7565b5b9250929050565b60008135905061280981613d5e565b92915050565b6000602082840312156128255761282461380b565b5b600061283384828501612670565b91505092915050565b600080604083850312156128535761285261380b565b5b600061286185828601612670565b925050602061287285828601612670565b9150509250929050565b600080600080600060a086880312156128985761289761380b565b5b60006128a688828901612670565b95505060206128b788828901612670565b945050604086013567ffffffffffffffff8111156128d8576128d7613806565b5b6128e488828901612709565b935050606086013567ffffffffffffffff81111561290557612904613806565b5b61291188828901612709565b925050608086013567ffffffffffffffff81111561293257612931613806565b5b61293e88828901612776565b9150509295509295909350565b600080600080600060a086880312156129675761296661380b565b5b600061297588828901612670565b955050602061298688828901612670565b9450506040612997888289016127fa565b93505060606129a8888289016127fa565b925050608086013567ffffffffffffffff8111156129c9576129c8613806565b5b6129d588828901612776565b9150509295509295909350565b6000806000604084860312156129fb576129fa61380b565b5b6000612a0986828701612670565b935050602084013567ffffffffffffffff811115612a2a57612a29613806565b5b612a36868287016126b3565b92509250509250925092565b60008060408385031215612a5957612a5861380b565b5b6000612a6785828601612670565b9250506020612a7885828601612737565b9150509250929050565b60008060408385031215612a9957612a9861380b565b5b6000612aa785828601612670565b9250506020612ab8858286016127fa565b9150509250929050565b60008060008060608587031215612adc57612adb61380b565b5b6000612aea87828801612670565b9450506020612afb878288016127fa565b935050604085013567ffffffffffffffff811115612b1c57612b1b613806565b5b612b28878288016127a4565b925092505092959194509250565b60008060408385031215612b4d57612b4c61380b565b5b600083013567ffffffffffffffff811115612b6b57612b6a613806565b5b612b7785828601612685565b925050602083013567ffffffffffffffff811115612b9857612b97613806565b5b612ba485828601612709565b9150509250929050565b600060208284031215612bc457612bc361380b565b5b6000612bd28482850161274c565b91505092915050565b600060208284031215612bf157612bf061380b565b5b6000612bff84828501612761565b91505092915050565b600060208284031215612c1e57612c1d61380b565b5b6000612c2c848285016127fa565b91505092915050565b60008060408385031215612c4c57612c4b61380b565b5b6000612c5a858286016127fa565b9250506020612c6b858286016127fa565b9150509250929050565b6000612c818383612f88565b60208301905092915050565b612c96816135a3565b82525050565b6000612ca78261345e565b612cb1818561348c565b9350612cbc8361344e565b8060005b83811015612ced578151612cd48882612c75565b9750612cdf8361347f565b925050600181019050612cc0565b5085935050505092915050565b612d03816135b5565b82525050565b6000612d1482613469565b612d1e818561349d565b9350612d2e818560208601613626565b612d3781613810565b840191505092915050565b6000612d4d82613474565b612d5781856134ae565b9350612d67818560208601613626565b612d7081613810565b840191505092915050565b6000612d886034836134ae565b9150612d938261382e565b604082019050919050565b6000612dab6028836134ae565b9150612db68261387d565b604082019050919050565b6000612dce600e836134ae565b9150612dd9826138cc565b602082019050919050565b6000612df1602b836134ae565b9150612dfc826138f5565b604082019050919050565b6000612e146026836134ae565b9150612e1f82613944565b604082019050919050565b6000612e376029836134ae565b9150612e4282613993565b604082019050919050565b6000612e5a6025836134ae565b9150612e65826139e2565b604082019050919050565b6000612e7d6032836134ae565b9150612e8882613a31565b604082019050919050565b6000612ea0602a836134ae565b9150612eab82613a80565b604082019050919050565b6000612ec36020836134ae565b9150612ece82613acf565b602082019050919050565b6000612ee66029836134ae565b9150612ef182613af8565b604082019050919050565b6000612f096029836134ae565b9150612f1482613b47565b604082019050919050565b6000612f2c6028836134ae565b9150612f3782613b96565b604082019050919050565b6000612f4f6021836134ae565b9150612f5a82613be5565b604082019050919050565b6000612f726031836134ae565b9150612f7d82613c34565b604082019050919050565b612f918161360d565b82525050565b612fa08161360d565b82525050565b6000602082019050612fbb6000830184612c8d565b92915050565b600060a082019050612fd66000830188612c8d565b612fe36020830187612c8d565b8181036040830152612ff58186612c9c565b905081810360608301526130098185612c9c565b9050818103608083015261301d8184612d09565b90509695505050505050565b600060a08201905061303e6000830188612c8d565b61304b6020830187612c8d565b6130586040830186612f97565b6130656060830185612f97565b81810360808301526130778184612d09565b90509695505050505050565b6000602082019050818103600083015261309d8184612c9c565b905092915050565b600060408201905081810360008301526130bf8185612c9c565b905081810360208301526130d38184612c9c565b90509392505050565b60006020820190506130f16000830184612cfa565b92915050565b600060208201905081810360008301526131118184612d42565b905092915050565b6000602082019050818103600083015261313281612d7b565b9050919050565b6000602082019050818103600083015261315281612d9e565b9050919050565b6000602082019050818103600083015261317281612dc1565b9050919050565b6000602082019050818103600083015261319281612de4565b9050919050565b600060208201905081810360008301526131b281612e07565b9050919050565b600060208201905081810360008301526131d281612e2a565b9050919050565b600060208201905081810360008301526131f281612e4d565b9050919050565b6000602082019050818103600083015261321281612e70565b9050919050565b6000602082019050818103600083015261323281612e93565b9050919050565b6000602082019050818103600083015261325281612eb6565b9050919050565b6000602082019050818103600083015261327281612ed9565b9050919050565b6000602082019050818103600083015261329281612efc565b9050919050565b600060208201905081810360008301526132b281612f1f565b9050919050565b600060208201905081810360008301526132d281612f42565b9050919050565b600060208201905081810360008301526132f281612f65565b9050919050565b600060208201905061330e6000830184612f97565b92915050565b60006040820190506133296000830185612f97565b6133366020830184612f97565b9392505050565b6000808335600160200384360303811261335a576133596137f2565b5b80840192508235915067ffffffffffffffff82111561337c5761337b6137ed565b5b602083019250600182023603831315613398576133976137fc565b5b509250929050565b60006133aa6133bb565b90506133b6828261368b565b919050565b6000604051905090565b600067ffffffffffffffff8211156133e0576133df613792565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561340c5761340b613792565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561343857613437613792565b5b61344182613810565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006134ca8261360d565b91506134d58361360d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561350a57613509613705565b5b828201905092915050565b60006135208261360d565b915061352b8361360d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561356457613563613705565b5b828202905092915050565b600061357a8261360d565b91506135858361360d565b92508282101561359857613597613705565b5b828203905092915050565b60006135ae826135ed565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613644578082015181840152602081019050613629565b83811115613653576000848401525b50505050565b6000600282049050600182168061367157607f821691505b6020821081141561368557613684613734565b5b50919050565b61369482613810565b810181811067ffffffffffffffff821117156136b3576136b2613792565b5b80604052505050565b60006136c78261360d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136fa576136f9613705565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156137e05760046000803e6137dd600051613821565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820666565000000000000000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135355472616461626c652363726561746f724f6e6c793a204f4e4c60008201527f595f43524541544f525f414c4c4f574544000000000000000000000000000000602082015250565b600060443d1015613c9357613d16565b613c9b6133bb565b60043d036004823e80513d602482011167ffffffffffffffff82111715613cc3575050613d16565b808201805167ffffffffffffffff811115613ce15750505050613d16565b80602083010160043d038501811115613cfe575050505050613d16565b613d0d8260200185018661368b565b82955050505050505b90565b613d22816135a3565b8114613d2d57600080fd5b50565b613d39816135b5565b8114613d4457600080fd5b50565b613d50816135c1565b8114613d5b57600080fd5b50565b613d678161360d565b8114613d7257600080fd5b5056fea2646970667358221220395192fdcbc3e7f036ea1930cd9690d8b67f5c3c039e9bbc82fce03bf72686ae64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b350000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000ad78ebc5ac620000000000000000000000000000000000000000000000000000821ab0d441498000000000000000000000000000000000000000000000000000000000000000005dc0000000000000000000000008a04c9a13473fbded852e9650bd095c20b1385870000000000000000000000000000000000000000000000000000000000000009436f726769636c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009436f726769636c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e66784e6638313170374a4a74756748336264706e473874626a4e673847665831536b350000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Corgiclub
Arg [1] : _symbol (string): Corgiclub
Arg [2] : _uri (string): https://ipfs.io/ipfs/QmbwZLzYV6NfxNf811p7JJtugH3bdpnG8tbjNg8GfX1Sk5
Arg [3] : _publicFee (uint256): 200000000000000000000
Arg [4] : _earlyFee (uint256): 150000000000000000000
Arg [5] : _earlyLimit (uint32): 1500
Arg [6] : _payee (address): 0x8a04c9a13473fbded852e9650bd095c20b138587

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000ad78ebc5ac6200000
Arg [4] : 00000000000000000000000000000000000000000000000821ab0d4414980000
Arg [5] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [6] : 0000000000000000000000008a04c9a13473fbded852e9650bd095c20b138587
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 436f726769636c75620000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [12] : 68747470733a2f2f697066732e696f2f697066732f516d62775a4c7a5956364e
Arg [13] : 66784e6638313170374a4a74756748336264706e473874626a4e673847665831
Arg [14] : 536b350000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

48490:2097:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21020:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20043:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45999:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47827:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45951:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48660:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48079:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50266:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45897:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22959:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48316:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21417:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48629:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48690:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49927:331;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36245:103;;;;;;;;;;;;;:::i;:::-;;47560:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35594:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47941:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46024:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22014:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49185:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48722:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49294:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45846:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48198:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47528:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22241:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22481:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36503:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21020:231;21106:7;21153:1;21134:21;;:7;:21;;;;21126:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21221:9;:13;21231:2;21221:13;;;;;;;;;;;:22;21235:7;21221:22;;;;;;;;;;;;;;;;21214:29;;21020:231;;;;:::o;20043:310::-;20145:4;20197:26;20182:41;;;:11;:41;;;;:110;;;;20255:37;20240:52;;;:11;:52;;;;20182:110;:163;;;;20309:36;20333:11;20309:23;:36::i;:::-;20182:163;20162:183;;20043:310;;;:::o;45999:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47827:106::-;47883:13;47916:4;:9;47921:3;47916:9;;;;;;;;;;;47909:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47827:106;;;:::o;45951:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48660:23::-;;;;:::o;48079:111::-;48141:7;48168:9;:14;48178:3;48168:14;;;;;;;;;;;;48161:21;;48079:111;;;:::o;50266:318::-;50376:9;50387:10;50399:5;;:12;;49650:11;49676:8;49664:9;;:20;;;;:::i;:::-;49650:34;;49721:10;;49699:18;:8;:16;:18::i;:::-;:32;49695:90;;49765:8;49754;;:19;;;;:::i;:::-;49748:25;;49695:90;49809:5;;;;;;;;;;;49799:15;;:6;:15;;;49795:55;;;49837:1;49831:7;;49795:55;49877:3;49868:5;:12;49860:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;50437:9:::1;50432:145;50456:5;;:12;;50452:1;:16;50432:145;;;50490:40;50503:13;50518:1;50521:5;;50527:1;50521:8;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;50490:12;:40::i;:::-;;50545:20;:8;:18;:20::i;:::-;50470:3;;;;;:::i;:::-;;;;50432:145;;;;49639:280:::0;50266:318;;;;;;:::o;45897:47::-;;;;;;;;;;;;;;;;;:::o;22959:442::-;23200:12;:10;:12::i;:::-;23192:20;;:4;:20;;;:60;;;;23216:36;23233:4;23239:12;:10;:12::i;:::-;23216:16;:36::i;:::-;23192:60;23170:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23341:52;23364:4;23370:2;23374:3;23379:7;23388:4;23341:22;:52::i;:::-;22959:442;;;;;:::o;48316:93::-;48367:7;48394;;48387:14;;48316:93;:::o;21417:524::-;21573:16;21634:3;:10;21615:8;:15;:29;21607:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21703:30;21750:8;:15;21736:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21703:63;;21784:9;21779:122;21803:8;:15;21799:1;:19;21779:122;;;21859:30;21869:8;21878:1;21869:11;;;;;;;;:::i;:::-;;;;;;;;21882:3;21886:1;21882:6;;;;;;;;:::i;:::-;;;;;;;;21859:9;:30::i;:::-;21840:13;21854:1;21840:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;21820:3;;;;:::i;:::-;;;21779:122;;;;21920:13;21913:20;;;21417:524;;;;:::o;48629:24::-;;;;:::o;48690:25::-;;;;:::o;49927:331::-;50115:7;50063:9;50074:10;50086:1;49650:11;49676:8;49664:9;;:20;;;;:::i;:::-;49650:34;;49721:10;;49699:18;:8;:16;:18::i;:::-;:32;49695:90;;49765:8;49754;;:19;;;;:::i;:::-;49748:25;;49695:90;49809:5;;;;;;;;;;;49799:15;;:6;:15;;;49795:55;;;49837:1;49831:7;;49795:55;49877:3;49868:5;:12;49860:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;50135:11:::1;50149:49;50162:13;50177:14;50193:4;;50149:12;:49::i;:::-;50135:63;;50209:20;:8;:18;:20::i;:::-;50247:3;50240:10;;;49639:280:::0;49927:331;;;;;;;;;:::o;36245:103::-;35825:12;:10;:12::i;:::-;35814:23;;:7;:5;:7::i;:::-;:23;;;35806:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36310:30:::1;36337:1;36310:18;:30::i;:::-;36245:103::o:0;47560:45::-;;;;;;;;;;;;;;;;;:::o;35594:87::-;35640:7;35667:6;;;;;;;;;;;35660:13;;35594:87;:::o;47941:126::-;48019:3;46123:10;46106:27;;:8;:13;46115:3;46106:13;;;;;;;;;;;;;;;;;;;;;:27;;;46098:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;48052:7:::1;48035:9;:14;48045:3;48035:14;;;;;;;;;;;:24;;;;47941:126:::0;;;:::o;46024:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22014:155::-;22109:52;22128:12;:10;:12::i;:::-;22142:8;22152;22109:18;:52::i;:::-;22014:155;;:::o;49185:101::-;49229:7;49277:1;49256:18;:8;:16;:18::i;:::-;:22;;;;:::i;:::-;49249:29;;49185:101;:::o;48722:20::-;;;;;;;;;;;;;:::o;49294:269::-;49347:7;49381:5;;;;;;;;;;;49371:15;;:6;:15;;;49367:56;;;49410:1;49403:8;;;;49367:56;49453:10;;49437:13;:11;:13::i;:::-;:26;49433:123;;;49487:8;;49480:15;;;;49433:123;49535:9;;49528:16;;49294:269;;;;:::o;45846:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;48198:110::-;48260:7;48287:8;:13;48296:3;48287:13;;;;;;;;;;;;;;;;;;;;;48280:20;;48198:110;;;:::o;47528:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22241:168::-;22340:4;22364:18;:27;22383:7;22364:27;;;;;;;;;;;;;;;:37;22392:8;22364:37;;;;;;;;;;;;;;;;;;;;;;;;;22357:44;;22241:168;;;;:::o;22481:401::-;22697:12;:10;:12::i;:::-;22689:20;;:4;:20;;;:60;;;;22713:36;22730:4;22736:12;:10;:12::i;:::-;22713:16;:36::i;:::-;22689:60;22667:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22829:45;22847:4;22853:2;22857;22861:6;22869:4;22829:17;:45::i;:::-;22481:401;;;;;:::o;36503:201::-;35825:12;:10;:12::i;:::-;35814:23;;:7;:5;:7::i;:::-;:23;;;35806:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36612:1:::1;36592:22;;:8;:22;;;;36584:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36668:28;36687:8;36668:18;:28::i;:::-;36503:201:::0;:::o;38067:127::-;38174:1;38156:7;:14;;;:19;;;;;;;;;;;38067:127;:::o;18793:157::-;18878:4;18917:25;18902:40;;;:11;:40;;;;18895:47;;18793:157;;;:::o;37945:114::-;38010:7;38037;:14;;;38030:21;;37945:114;;;:::o;46536:431::-;46687:7;46707:11;46721:18;:8;:16;:18::i;:::-;46707:32;;46750:20;:8;:18;:20::i;:::-;46783:45;46789:13;46804:3;46809:14;46783:45;;;;;;;;;;;;:5;:45::i;:::-;46858:14;46839:11;:16;46851:3;46839:16;;;;;;;;;;;:33;;;;46899:10;46883:8;:13;46892:3;46883:13;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46932:4;;46920;:9;46925:3;46920:9;;;;;;;;;;;:16;;;;;;;:::i;:::-;;46956:3;46949:10;;;46536:431;;;;;;:::o;17705:98::-;17758:7;17785:10;17778:17;;17705:98;:::o;25043:1074::-;25270:7;:14;25256:3;:10;:28;25248:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:1;25348:16;;:2;:16;;;;25340:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25419:16;25438:12;:10;:12::i;:::-;25419:31;;25463:60;25484:8;25494:4;25500:2;25504:3;25509:7;25518:4;25463:20;:60::i;:::-;25541:9;25536:421;25560:3;:10;25556:1;:14;25536:421;;;25592:10;25605:3;25609:1;25605:6;;;;;;;;:::i;:::-;;;;;;;;25592:19;;25626:14;25643:7;25651:1;25643:10;;;;;;;;:::i;:::-;;;;;;;;25626:27;;25670:19;25692:9;:13;25702:2;25692:13;;;;;;;;;;;:19;25706:4;25692:19;;;;;;;;;;;;;;;;25670:41;;25749:6;25734:11;:21;;25726:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25882:6;25868:11;:20;25846:9;:13;25856:2;25846:13;;;;;;;;;;;:19;25860:4;25846:19;;;;;;;;;;;;;;;:42;;;;25939:6;25918:9;:13;25928:2;25918:13;;;;;;;;;;;:17;25932:2;25918:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25577:380;;;25572:3;;;;:::i;:::-;;;25536:421;;;;26004:2;25974:47;;25998:4;25974:47;;25988:8;25974:47;;;26008:3;26013:7;25974:47;;;;;;;:::i;:::-;;;;;;;;26034:75;26070:8;26080:4;26086:2;26090:3;26095:7;26104:4;26034:35;:75::i;:::-;25237:880;25043:1074;;;;;:::o;36864:191::-;36938:16;36957:6;;;;;;;;;;;36938:25;;36983:8;36974:6;;:17;;;;;;;;;;;;;;;;;;37038:8;37007:40;;37028:8;37007:40;;;;;;;;;;;;36927:128;36864:191;:::o;31229:331::-;31384:8;31375:17;;:5;:17;;;;31367:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31487:8;31449:18;:25;31468:5;31449:25;;;;;;;;;;;;;;;:35;31475:8;31449:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31533:8;31511:41;;31526:5;31511:41;;;31543:8;31511:41;;;;;;:::i;:::-;;;;;;;;31229:331;;;:::o;23865:820::-;24067:1;24053:16;;:2;:16;;;;24045:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24124:16;24143:12;:10;:12::i;:::-;24124:31;;24168:96;24189:8;24199:4;24205:2;24209:21;24227:2;24209:17;:21::i;:::-;24232:25;24250:6;24232:17;:25::i;:::-;24259:4;24168:20;:96::i;:::-;24277:19;24299:9;:13;24309:2;24299:13;;;;;;;;;;;:19;24313:4;24299:19;;;;;;;;;;;;;;;;24277:41;;24352:6;24337:11;:21;;24329:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24477:6;24463:11;:20;24441:9;:13;24451:2;24441:13;;;;;;;;;;;:19;24455:4;24441:19;;;;;;;;;;;;;;;:42;;;;24526:6;24505:9;:13;24515:2;24505:13;;;;;;;;;;;:17;24519:2;24505:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24581:2;24550:46;;24575:4;24550:46;;24565:8;24550:46;;;24585:2;24589:6;24550:46;;;;;;;:::i;:::-;;;;;;;;24609:68;24640:8;24650:4;24656:2;24660;24664:6;24672:4;24609:30;:68::i;:::-;24034:651;;23865:820;;;;;:::o;27435:569::-;27602:1;27588:16;;:2;:16;;;;27580:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27655:16;27674:12;:10;:12::i;:::-;27655:31;;27699:102;27720:8;27738:1;27742:2;27746:21;27764:2;27746:17;:21::i;:::-;27769:25;27787:6;27769:17;:25::i;:::-;27796:4;27699:20;:102::i;:::-;27835:6;27814:9;:13;27824:2;27814:13;;;;;;;;;;;:17;27828:2;27814:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27894:2;27857:52;;27890:1;27857:52;;27872:8;27857:52;;;27898:2;27902:6;27857:52;;;;;;;:::i;:::-;;;;;;;;27922:74;27953:8;27971:1;27975:2;27979;27983:6;27991:4;27922:30;:74::i;:::-;27569:435;27435:569;;;;:::o;32516:221::-;;;;;;;:::o;33497:813::-;33737:15;:2;:13;;;:15::i;:::-;33733:570;;;33790:2;33773:43;;;33817:8;33827:4;33833:3;33838:7;33847:4;33773:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33769:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34165:6;34158:14;;;;;;;;;;;:::i;:::-;;;;;;;;33769:523;;;34214:62;;;;;;;;;;:::i;:::-;;;;;;;;33769:523;33946:48;;;33934:60;;;:8;:60;;;;33930:159;;34019:50;;;;;;;;;;:::i;:::-;;;;;;;;33930:159;33853:251;33733:570;33497:813;;;;;;:::o;34318:198::-;34384:16;34413:22;34452:1;34438:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34413:41;;34476:7;34465:5;34471:1;34465:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;34503:5;34496:12;;;34318:198;;;:::o;32745:744::-;32960:15;:2;:13;;;:15::i;:::-;32956:526;;;33013:2;32996:38;;;33035:8;33045:4;33051:2;33055:6;33063:4;32996:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32992:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33344:6;33337:14;;;;;;;;;;;:::i;:::-;;;;;;;;32992:479;;;33393:62;;;;;;;;;;:::i;:::-;;;;;;;;32992:479;33130:43;;;33118:55;;;:8;:55;;;;33114:154;;33198:50;;;;;;;;;;:::i;:::-;;;;;;;;33114:154;33069:214;32956:526;32745:744;;;;;;:::o;9745:326::-;9805:4;10062:1;10040:7;:19;;;:23;10033:30;;9745:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2467:580::-;2552:8;2562:6;2612:3;2605:4;2597:6;2593:17;2589:27;2579:122;;2620:79;;:::i;:::-;2579:122;2733:6;2720:20;2710:30;;2763:18;2755:6;2752:30;2749:117;;;2785:79;;:::i;:::-;2749:117;2899:4;2891:6;2887:17;2875:29;;2953:3;2945:4;2937:6;2933:17;2923:8;2919:32;2916:41;2913:128;;;2960:79;;:::i;:::-;2913:128;2467:580;;;;;:::o;3070:370::-;3141:5;3190:3;3183:4;3175:6;3171:17;3167:27;3157:122;;3198:79;;:::i;:::-;3157:122;3315:6;3302:20;3340:94;3430:3;3422:6;3415:4;3407:6;3403:17;3340:94;:::i;:::-;3331:103;;3147:293;3070:370;;;;:::o;3446:133::-;3489:5;3527:6;3514:20;3505:29;;3543:30;3567:5;3543:30;:::i;:::-;3446:133;;;;:::o;3585:137::-;3630:5;3668:6;3655:20;3646:29;;3684:32;3710:5;3684:32;:::i;:::-;3585:137;;;;:::o;3728:141::-;3784:5;3815:6;3809:13;3800:22;;3831:32;3857:5;3831:32;:::i;:::-;3728:141;;;;:::o;3888:338::-;3943:5;3992:3;3985:4;3977:6;3973:17;3969:27;3959:122;;4000:79;;:::i;:::-;3959:122;4117:6;4104:20;4142:78;4216:3;4208:6;4201:4;4193:6;4189:17;4142:78;:::i;:::-;4133:87;;3949:277;3888:338;;;;:::o;4246:553::-;4304:8;4314:6;4364:3;4357:4;4349:6;4345:17;4341:27;4331:122;;4372:79;;:::i;:::-;4331:122;4485:6;4472:20;4462:30;;4515:18;4507:6;4504:30;4501:117;;;4537:79;;:::i;:::-;4501:117;4651:4;4643:6;4639:17;4627:29;;4705:3;4697:4;4689:6;4685:17;4675:8;4671:32;4668:41;4665:128;;;4712:79;;:::i;:::-;4665:128;4246:553;;;;;:::o;4805:139::-;4851:5;4889:6;4876:20;4867:29;;4905:33;4932:5;4905:33;:::i;:::-;4805:139;;;;:::o;4950:329::-;5009:6;5058:2;5046:9;5037:7;5033:23;5029:32;5026:119;;;5064:79;;:::i;:::-;5026:119;5184:1;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5155:117;4950:329;;;;:::o;5285:474::-;5353:6;5361;5410:2;5398:9;5389:7;5385:23;5381:32;5378:119;;;5416:79;;:::i;:::-;5378:119;5536:1;5561:53;5606:7;5597:6;5586:9;5582:22;5561:53;:::i;:::-;5551:63;;5507:117;5663:2;5689:53;5734:7;5725:6;5714:9;5710:22;5689:53;:::i;:::-;5679:63;;5634:118;5285:474;;;;;:::o;5765:1509::-;5919:6;5927;5935;5943;5951;6000:3;5988:9;5979:7;5975:23;5971:33;5968:120;;;6007:79;;:::i;:::-;5968:120;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;6410:2;6399:9;6395:18;6382:32;6441:18;6433:6;6430:30;6427:117;;;6463:79;;:::i;:::-;6427:117;6568:78;6638:7;6629:6;6618:9;6614:22;6568:78;:::i;:::-;6558:88;;6353:303;6723:2;6712:9;6708:18;6695:32;6754:18;6746:6;6743:30;6740:117;;;6776:79;;:::i;:::-;6740:117;6881:78;6951:7;6942:6;6931:9;6927:22;6881:78;:::i;:::-;6871:88;;6666:303;7036:3;7025:9;7021:19;7008:33;7068:18;7060:6;7057:30;7054:117;;;7090:79;;:::i;:::-;7054:117;7195:62;7249:7;7240:6;7229:9;7225:22;7195:62;:::i;:::-;7185:72;;6979:288;5765:1509;;;;;;;;:::o;7280:1089::-;7384:6;7392;7400;7408;7416;7465:3;7453:9;7444:7;7440:23;7436:33;7433:120;;;7472:79;;:::i;:::-;7433:120;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:53;7790:7;7781:6;7770:9;7766:22;7745:53;:::i;:::-;7735:63;;7690:118;7847:2;7873:53;7918:7;7909:6;7898:9;7894:22;7873:53;:::i;:::-;7863:63;;7818:118;7975:2;8001:53;8046:7;8037:6;8026:9;8022:22;8001:53;:::i;:::-;7991:63;;7946:118;8131:3;8120:9;8116:19;8103:33;8163:18;8155:6;8152:30;8149:117;;;8185:79;;:::i;:::-;8149:117;8290:62;8344:7;8335:6;8324:9;8320:22;8290:62;:::i;:::-;8280:72;;8074:288;7280:1089;;;;;;;;:::o;8375:728::-;8482:6;8490;8498;8547:2;8535:9;8526:7;8522:23;8518:32;8515:119;;;8553:79;;:::i;:::-;8515:119;8673:1;8698:53;8743:7;8734:6;8723:9;8719:22;8698:53;:::i;:::-;8688:63;;8644:117;8828:2;8817:9;8813:18;8800:32;8859:18;8851:6;8848:30;8845:117;;;8881:79;;:::i;:::-;8845:117;8994:92;9078:7;9069:6;9058:9;9054:22;8994:92;:::i;:::-;8976:110;;;;8771:325;8375:728;;;;;:::o;9109:468::-;9174:6;9182;9231:2;9219:9;9210:7;9206:23;9202:32;9199:119;;;9237:79;;:::i;:::-;9199:119;9357:1;9382:53;9427:7;9418:6;9407:9;9403:22;9382:53;:::i;:::-;9372:63;;9328:117;9484:2;9510:50;9552:7;9543:6;9532:9;9528:22;9510:50;:::i;:::-;9500:60;;9455:115;9109:468;;;;;:::o;9583:474::-;9651:6;9659;9708:2;9696:9;9687:7;9683:23;9679:32;9676:119;;;9714:79;;:::i;:::-;9676:119;9834:1;9859:53;9904:7;9895:6;9884:9;9880:22;9859:53;:::i;:::-;9849:63;;9805:117;9961:2;9987:53;10032:7;10023:6;10012:9;10008:22;9987:53;:::i;:::-;9977:63;;9932:118;9583:474;;;;;:::o;10063:819::-;10152:6;10160;10168;10176;10225:2;10213:9;10204:7;10200:23;10196:32;10193:119;;;10231:79;;:::i;:::-;10193:119;10351:1;10376:53;10421:7;10412:6;10401:9;10397:22;10376:53;:::i;:::-;10366:63;;10322:117;10478:2;10504:53;10549:7;10540:6;10529:9;10525:22;10504:53;:::i;:::-;10494:63;;10449:118;10634:2;10623:9;10619:18;10606:32;10665:18;10657:6;10654:30;10651:117;;;10687:79;;:::i;:::-;10651:117;10800:65;10857:7;10848:6;10837:9;10833:22;10800:65;:::i;:::-;10782:83;;;;10577:298;10063:819;;;;;;;:::o;10888:894::-;11006:6;11014;11063:2;11051:9;11042:7;11038:23;11034:32;11031:119;;;11069:79;;:::i;:::-;11031:119;11217:1;11206:9;11202:17;11189:31;11247:18;11239:6;11236:30;11233:117;;;11269:79;;:::i;:::-;11233:117;11374:78;11444:7;11435:6;11424:9;11420:22;11374:78;:::i;:::-;11364:88;;11160:302;11529:2;11518:9;11514:18;11501:32;11560:18;11552:6;11549:30;11546:117;;;11582:79;;:::i;:::-;11546:117;11687:78;11757:7;11748:6;11737:9;11733:22;11687:78;:::i;:::-;11677:88;;11472:303;10888:894;;;;;:::o;11788:327::-;11846:6;11895:2;11883:9;11874:7;11870:23;11866:32;11863:119;;;11901:79;;:::i;:::-;11863:119;12021:1;12046:52;12090:7;12081:6;12070:9;12066:22;12046:52;:::i;:::-;12036:62;;11992:116;11788:327;;;;:::o;12121:349::-;12190:6;12239:2;12227:9;12218:7;12214:23;12210:32;12207:119;;;12245:79;;:::i;:::-;12207:119;12365:1;12390:63;12445:7;12436:6;12425:9;12421:22;12390:63;:::i;:::-;12380:73;;12336:127;12121:349;;;;:::o;12476:329::-;12535:6;12584:2;12572:9;12563:7;12559:23;12555:32;12552:119;;;12590:79;;:::i;:::-;12552:119;12710:1;12735:53;12780:7;12771:6;12760:9;12756:22;12735:53;:::i;:::-;12725:63;;12681:117;12476:329;;;;:::o;12811:474::-;12879:6;12887;12936:2;12924:9;12915:7;12911:23;12907:32;12904:119;;;12942:79;;:::i;:::-;12904:119;13062:1;13087:53;13132:7;13123:6;13112:9;13108:22;13087:53;:::i;:::-;13077:63;;13033:117;13189:2;13215:53;13260:7;13251:6;13240:9;13236:22;13215:53;:::i;:::-;13205:63;;13160:118;12811:474;;;;;:::o;13291:179::-;13360:10;13381:46;13423:3;13415:6;13381:46;:::i;:::-;13459:4;13454:3;13450:14;13436:28;;13291:179;;;;:::o;13476:118::-;13563:24;13581:5;13563:24;:::i;:::-;13558:3;13551:37;13476:118;;:::o;13630:732::-;13749:3;13778:54;13826:5;13778:54;:::i;:::-;13848:86;13927:6;13922:3;13848:86;:::i;:::-;13841:93;;13958:56;14008:5;13958:56;:::i;:::-;14037:7;14068:1;14053:284;14078:6;14075:1;14072:13;14053:284;;;14154:6;14148:13;14181:63;14240:3;14225:13;14181:63;:::i;:::-;14174:70;;14267:60;14320:6;14267:60;:::i;:::-;14257:70;;14113:224;14100:1;14097;14093:9;14088:14;;14053:284;;;14057:14;14353:3;14346:10;;13754:608;;;13630:732;;;;:::o;14368:109::-;14449:21;14464:5;14449:21;:::i;:::-;14444:3;14437:34;14368:109;;:::o;14483:360::-;14569:3;14597:38;14629:5;14597:38;:::i;:::-;14651:70;14714:6;14709:3;14651:70;:::i;:::-;14644:77;;14730:52;14775:6;14770:3;14763:4;14756:5;14752:16;14730:52;:::i;:::-;14807:29;14829:6;14807:29;:::i;:::-;14802:3;14798:39;14791:46;;14573:270;14483:360;;;;:::o;14849:364::-;14937:3;14965:39;14998:5;14965:39;:::i;:::-;15020:71;15084:6;15079:3;15020:71;:::i;:::-;15013:78;;15100:52;15145:6;15140:3;15133:4;15126:5;15122:16;15100:52;:::i;:::-;15177:29;15199:6;15177:29;:::i;:::-;15172:3;15168:39;15161:46;;14941:272;14849:364;;;;:::o;15219:366::-;15361:3;15382:67;15446:2;15441:3;15382:67;:::i;:::-;15375:74;;15458:93;15547:3;15458:93;:::i;:::-;15576:2;15571:3;15567:12;15560:19;;15219:366;;;:::o;15591:::-;15733:3;15754:67;15818:2;15813:3;15754:67;:::i;:::-;15747:74;;15830:93;15919:3;15830:93;:::i;:::-;15948:2;15943:3;15939:12;15932:19;;15591:366;;;:::o;15963:::-;16105:3;16126:67;16190:2;16185:3;16126:67;:::i;:::-;16119:74;;16202:93;16291:3;16202:93;:::i;:::-;16320:2;16315:3;16311:12;16304:19;;15963:366;;;:::o;16335:::-;16477:3;16498:67;16562:2;16557:3;16498:67;:::i;:::-;16491:74;;16574:93;16663:3;16574:93;:::i;:::-;16692:2;16687:3;16683:12;16676:19;;16335:366;;;:::o;16707:::-;16849:3;16870:67;16934:2;16929:3;16870:67;:::i;:::-;16863:74;;16946:93;17035:3;16946:93;:::i;:::-;17064:2;17059:3;17055:12;17048:19;;16707:366;;;:::o;17079:::-;17221:3;17242:67;17306:2;17301:3;17242:67;:::i;:::-;17235:74;;17318:93;17407:3;17318:93;:::i;:::-;17436:2;17431:3;17427:12;17420:19;;17079:366;;;:::o;17451:::-;17593:3;17614:67;17678:2;17673:3;17614:67;:::i;:::-;17607:74;;17690:93;17779:3;17690:93;:::i;:::-;17808:2;17803:3;17799:12;17792:19;;17451:366;;;:::o;17823:::-;17965:3;17986:67;18050:2;18045:3;17986:67;:::i;:::-;17979:74;;18062:93;18151:3;18062:93;:::i;:::-;18180:2;18175:3;18171:12;18164:19;;17823:366;;;:::o;18195:::-;18337:3;18358:67;18422:2;18417:3;18358:67;:::i;:::-;18351:74;;18434:93;18523:3;18434:93;:::i;:::-;18552:2;18547:3;18543:12;18536:19;;18195:366;;;:::o;18567:::-;18709:3;18730:67;18794:2;18789:3;18730:67;:::i;:::-;18723:74;;18806:93;18895:3;18806:93;:::i;:::-;18924:2;18919:3;18915:12;18908:19;;18567:366;;;:::o;18939:::-;19081:3;19102:67;19166:2;19161:3;19102:67;:::i;:::-;19095:74;;19178:93;19267:3;19178:93;:::i;:::-;19296:2;19291:3;19287:12;19280:19;;18939:366;;;:::o;19311:::-;19453:3;19474:67;19538:2;19533:3;19474:67;:::i;:::-;19467:74;;19550:93;19639:3;19550:93;:::i;:::-;19668:2;19663:3;19659:12;19652:19;;19311:366;;;:::o;19683:::-;19825:3;19846:67;19910:2;19905:3;19846:67;:::i;:::-;19839:74;;19922:93;20011:3;19922:93;:::i;:::-;20040:2;20035:3;20031:12;20024:19;;19683:366;;;:::o;20055:::-;20197:3;20218:67;20282:2;20277:3;20218:67;:::i;:::-;20211:74;;20294:93;20383:3;20294:93;:::i;:::-;20412:2;20407:3;20403:12;20396:19;;20055:366;;;:::o;20427:::-;20569:3;20590:67;20654:2;20649:3;20590:67;:::i;:::-;20583:74;;20666:93;20755:3;20666:93;:::i;:::-;20784:2;20779:3;20775:12;20768:19;;20427:366;;;:::o;20799:108::-;20876:24;20894:5;20876:24;:::i;:::-;20871:3;20864:37;20799:108;;:::o;20913:118::-;21000:24;21018:5;21000:24;:::i;:::-;20995:3;20988:37;20913:118;;:::o;21037:222::-;21130:4;21168:2;21157:9;21153:18;21145:26;;21181:71;21249:1;21238:9;21234:17;21225:6;21181:71;:::i;:::-;21037:222;;;;:::o;21265:1053::-;21588:4;21626:3;21615:9;21611:19;21603:27;;21640:71;21708:1;21697:9;21693:17;21684:6;21640:71;:::i;:::-;21721:72;21789:2;21778:9;21774:18;21765:6;21721:72;:::i;:::-;21840:9;21834:4;21830:20;21825:2;21814:9;21810:18;21803:48;21868:108;21971:4;21962:6;21868:108;:::i;:::-;21860:116;;22023:9;22017:4;22013:20;22008:2;21997:9;21993:18;21986:48;22051:108;22154:4;22145:6;22051:108;:::i;:::-;22043:116;;22207:9;22201:4;22197:20;22191:3;22180:9;22176:19;22169:49;22235:76;22306:4;22297:6;22235:76;:::i;:::-;22227:84;;21265:1053;;;;;;;;:::o;22324:751::-;22547:4;22585:3;22574:9;22570:19;22562:27;;22599:71;22667:1;22656:9;22652:17;22643:6;22599:71;:::i;:::-;22680:72;22748:2;22737:9;22733:18;22724:6;22680:72;:::i;:::-;22762;22830:2;22819:9;22815:18;22806:6;22762:72;:::i;:::-;22844;22912:2;22901:9;22897:18;22888:6;22844:72;:::i;:::-;22964:9;22958:4;22954:20;22948:3;22937:9;22933:19;22926:49;22992:76;23063:4;23054:6;22992:76;:::i;:::-;22984:84;;22324:751;;;;;;;;:::o;23081:373::-;23224:4;23262:2;23251:9;23247:18;23239:26;;23311:9;23305:4;23301:20;23297:1;23286:9;23282:17;23275:47;23339:108;23442:4;23433:6;23339:108;:::i;:::-;23331:116;;23081:373;;;;:::o;23460:634::-;23681:4;23719:2;23708:9;23704:18;23696:26;;23768:9;23762:4;23758:20;23754:1;23743:9;23739:17;23732:47;23796:108;23899:4;23890:6;23796:108;:::i;:::-;23788:116;;23951:9;23945:4;23941:20;23936:2;23925:9;23921:18;23914:48;23979:108;24082:4;24073:6;23979:108;:::i;:::-;23971:116;;23460:634;;;;;:::o;24100:210::-;24187:4;24225:2;24214:9;24210:18;24202:26;;24238:65;24300:1;24289:9;24285:17;24276:6;24238:65;:::i;:::-;24100:210;;;;:::o;24316:313::-;24429:4;24467:2;24456:9;24452:18;24444:26;;24516:9;24510:4;24506:20;24502:1;24491:9;24487:17;24480:47;24544:78;24617:4;24608:6;24544:78;:::i;:::-;24536:86;;24316:313;;;;:::o;24635:419::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:::-;26076:4;26114:2;26103:9;26099:18;26091:26;;26163:9;26157:4;26153:20;26149:1;26138:9;26134:17;26127:47;26191:131;26317:4;26191:131;:::i;:::-;26183:139;;25910:419;;;:::o;26335:::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:::-;26926:4;26964:2;26953:9;26949:18;26941:26;;27013:9;27007:4;27003:20;26999:1;26988:9;26984:17;26977:47;27041:131;27167:4;27041:131;:::i;:::-;27033:139;;26760:419;;;:::o;27185:::-;27351:4;27389:2;27378:9;27374:18;27366:26;;27438:9;27432:4;27428:20;27424:1;27413:9;27409:17;27402:47;27466:131;27592:4;27466:131;:::i;:::-;27458:139;;27185:419;;;:::o;27610:::-;27776:4;27814:2;27803:9;27799:18;27791:26;;27863:9;27857:4;27853:20;27849:1;27838:9;27834:17;27827:47;27891:131;28017:4;27891:131;:::i;:::-;27883:139;;27610:419;;;:::o;28035:::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:131;30142:4;30016:131;:::i;:::-;30008:139;;29735:419;;;:::o;30160:::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:222::-;31103:4;31141:2;31130:9;31126:18;31118:26;;31154:71;31222:1;31211:9;31207:17;31198:6;31154:71;:::i;:::-;31010:222;;;;:::o;31238:332::-;31359:4;31397:2;31386:9;31382:18;31374:26;;31410:71;31478:1;31467:9;31463:17;31454:6;31410:71;:::i;:::-;31491:72;31559:2;31548:9;31544:18;31535:6;31491:72;:::i;:::-;31238:332;;;;;:::o;31576:725::-;31654:4;31660:6;31716:11;31703:25;31816:1;31810:4;31806:12;31795:8;31779:14;31775:29;31771:48;31751:18;31747:73;31737:168;;31824:79;;:::i;:::-;31737:168;31936:18;31926:8;31922:33;31914:41;;31988:4;31975:18;31965:28;;32016:18;32008:6;32005:30;32002:117;;;32038:79;;:::i;:::-;32002:117;32146:2;32140:4;32136:13;32128:21;;32203:4;32195:6;32191:17;32175:14;32171:38;32165:4;32161:49;32158:136;;;32213:79;;:::i;:::-;32158:136;31667:634;31576:725;;;;;:::o;32307:129::-;32341:6;32368:20;;:::i;:::-;32358:30;;32397:33;32425:4;32417:6;32397:33;:::i;:::-;32307:129;;;:::o;32442:75::-;32475:6;32508:2;32502:9;32492:19;;32442:75;:::o;32523:311::-;32600:4;32690:18;32682:6;32679:30;32676:56;;;32712:18;;:::i;:::-;32676:56;32762:4;32754:6;32750:17;32742:25;;32822:4;32816;32812:15;32804:23;;32523:311;;;:::o;32840:::-;32917:4;33007:18;32999:6;32996:30;32993:56;;;33029:18;;:::i;:::-;32993:56;33079:4;33071:6;33067:17;33059:25;;33139:4;33133;33129:15;33121:23;;32840:311;;;:::o;33157:307::-;33218:4;33308:18;33300:6;33297:30;33294:56;;;33330:18;;:::i;:::-;33294:56;33368:29;33390:6;33368:29;:::i;:::-;33360:37;;33452:4;33446;33442:15;33434:23;;33157:307;;;:::o;33470:132::-;33537:4;33560:3;33552:11;;33590:4;33585:3;33581:14;33573:22;;33470:132;;;:::o;33608:114::-;33675:6;33709:5;33703:12;33693:22;;33608:114;;;:::o;33728:98::-;33779:6;33813:5;33807:12;33797:22;;33728:98;;;:::o;33832:99::-;33884:6;33918:5;33912:12;33902:22;;33832:99;;;:::o;33937:113::-;34007:4;34039;34034:3;34030:14;34022:22;;33937:113;;;:::o;34056:184::-;34155:11;34189:6;34184:3;34177:19;34229:4;34224:3;34220:14;34205:29;;34056:184;;;;:::o;34246:168::-;34329:11;34363:6;34358:3;34351:19;34403:4;34398:3;34394:14;34379:29;;34246:168;;;;:::o;34420:169::-;34504:11;34538:6;34533:3;34526:19;34578:4;34573:3;34569:14;34554:29;;34420:169;;;;:::o;34595:305::-;34635:3;34654:20;34672:1;34654:20;:::i;:::-;34649:25;;34688:20;34706:1;34688:20;:::i;:::-;34683:25;;34842:1;34774:66;34770:74;34767:1;34764:81;34761:107;;;34848:18;;:::i;:::-;34761:107;34892:1;34889;34885:9;34878:16;;34595:305;;;;:::o;34906:348::-;34946:7;34969:20;34987:1;34969:20;:::i;:::-;34964:25;;35003:20;35021:1;35003:20;:::i;:::-;34998:25;;35191:1;35123:66;35119:74;35116:1;35113:81;35108:1;35101:9;35094:17;35090:105;35087:131;;;35198:18;;:::i;:::-;35087:131;35246:1;35243;35239:9;35228:20;;34906:348;;;;:::o;35260:191::-;35300:4;35320:20;35338:1;35320:20;:::i;:::-;35315:25;;35354:20;35372:1;35354:20;:::i;:::-;35349:25;;35393:1;35390;35387:8;35384:34;;;35398:18;;:::i;:::-;35384:34;35443:1;35440;35436:9;35428:17;;35260:191;;;;:::o;35457:96::-;35494:7;35523:24;35541:5;35523:24;:::i;:::-;35512:35;;35457:96;;;:::o;35559:90::-;35593:7;35636:5;35629:13;35622:21;35611:32;;35559:90;;;:::o;35655:149::-;35691:7;35731:66;35724:5;35720:78;35709:89;;35655:149;;;:::o;35810:126::-;35847:7;35887:42;35880:5;35876:54;35865:65;;35810:126;;;:::o;35942:77::-;35979:7;36008:5;35997:16;;35942:77;;;:::o;36025:154::-;36109:6;36104:3;36099;36086:30;36171:1;36162:6;36157:3;36153:16;36146:27;36025:154;;;:::o;36185:307::-;36253:1;36263:113;36277:6;36274:1;36271:13;36263:113;;;36362:1;36357:3;36353:11;36347:18;36343:1;36338:3;36334:11;36327:39;36299:2;36296:1;36292:10;36287:15;;36263:113;;;36394:6;36391:1;36388:13;36385:101;;;36474:1;36465:6;36460:3;36456:16;36449:27;36385:101;36234:258;36185:307;;;:::o;36498:320::-;36542:6;36579:1;36573:4;36569:12;36559:22;;36626:1;36620:4;36616:12;36647:18;36637:81;;36703:4;36695:6;36691:17;36681:27;;36637:81;36765:2;36757:6;36754:14;36734:18;36731:38;36728:84;;;36784:18;;:::i;:::-;36728:84;36549:269;36498:320;;;:::o;36824:281::-;36907:27;36929:4;36907:27;:::i;:::-;36899:6;36895:40;37037:6;37025:10;37022:22;37001:18;36989:10;36986:34;36983:62;36980:88;;;37048:18;;:::i;:::-;36980:88;37088:10;37084:2;37077:22;36867:238;36824:281;;:::o;37111:233::-;37150:3;37173:24;37191:5;37173:24;:::i;:::-;37164:33;;37219:66;37212:5;37209:77;37206:103;;;37289:18;;:::i;:::-;37206:103;37336:1;37329:5;37325:13;37318:20;;37111:233;;;:::o;37350:180::-;37398:77;37395:1;37388:88;37495:4;37492:1;37485:15;37519:4;37516:1;37509:15;37536:180;37584:77;37581:1;37574:88;37681:4;37678:1;37671:15;37705:4;37702:1;37695:15;37722:180;37770:77;37767:1;37760:88;37867:4;37864:1;37857:15;37891:4;37888:1;37881:15;37908:180;37956:77;37953:1;37946:88;38053:4;38050:1;38043:15;38077:4;38074:1;38067:15;38094:183;38129:3;38167:1;38149:16;38146:23;38143:128;;;38205:1;38202;38199;38184:23;38227:34;38258:1;38252:8;38227:34;:::i;:::-;38220:41;;38143:128;38094:183;:::o;38283:117::-;38392:1;38389;38382:12;38406:117;38515:1;38512;38505:12;38529:117;38638:1;38635;38628:12;38652:117;38761:1;38758;38751:12;38775:117;38884:1;38881;38874:12;38898:117;39007:1;39004;38997:12;39021:117;39130:1;39127;39120:12;39144:117;39253:1;39250;39243:12;39267:117;39376:1;39373;39366:12;39390:102;39431:6;39482:2;39478:7;39473:2;39466:5;39462:14;39458:28;39448:38;;39390:102;;;:::o;39498:106::-;39542:8;39591:5;39586:3;39582:15;39561:36;;39498:106;;;:::o;39610:239::-;39750:34;39746:1;39738:6;39734:14;39727:58;39819:22;39814:2;39806:6;39802:15;39795:47;39610:239;:::o;39855:227::-;39995:34;39991:1;39983:6;39979:14;39972:58;40064:10;40059:2;40051:6;40047:15;40040:35;39855:227;:::o;40088:164::-;40228:16;40224:1;40216:6;40212:14;40205:40;40088:164;:::o;40258:230::-;40398:34;40394:1;40386:6;40382:14;40375:58;40467:13;40462:2;40454:6;40450:15;40443:38;40258:230;:::o;40494:225::-;40634:34;40630:1;40622:6;40618:14;40611:58;40703:8;40698:2;40690:6;40686:15;40679:33;40494:225;:::o;40725:228::-;40865:34;40861:1;40853:6;40849:14;40842:58;40934:11;40929:2;40921:6;40917:15;40910:36;40725:228;:::o;40959:224::-;41099:34;41095:1;41087:6;41083:14;41076:58;41168:7;41163:2;41155:6;41151:15;41144:32;40959:224;:::o;41189:237::-;41329:34;41325:1;41317:6;41313:14;41306:58;41398:20;41393:2;41385:6;41381:15;41374:45;41189:237;:::o;41432:229::-;41572:34;41568:1;41560:6;41556:14;41549:58;41641:12;41636:2;41628:6;41624:15;41617:37;41432:229;:::o;41667:182::-;41807:34;41803:1;41795:6;41791:14;41784:58;41667:182;:::o;41855:228::-;41995:34;41991:1;41983:6;41979:14;41972:58;42064:11;42059:2;42051:6;42047:15;42040:36;41855:228;:::o;42089:::-;42229:34;42225:1;42217:6;42213:14;42206:58;42298:11;42293:2;42285:6;42281:15;42274:36;42089:228;:::o;42323:227::-;42463:34;42459:1;42451:6;42447:14;42440:58;42532:10;42527:2;42519:6;42515:15;42508:35;42323:227;:::o;42556:220::-;42696:34;42692:1;42684:6;42680:14;42673:58;42765:3;42760:2;42752:6;42748:15;42741:28;42556:220;:::o;42782:236::-;42922:34;42918:1;42910:6;42906:14;42899:58;42991:19;42986:2;42978:6;42974:15;42967:44;42782:236;:::o;43024:711::-;43063:3;43101:4;43083:16;43080:26;43077:39;;;43109:5;;43077:39;43138:20;;:::i;:::-;43213:1;43195:16;43191:24;43188:1;43182:4;43167:49;43246:4;43240:11;43345:16;43338:4;43330:6;43326:17;43323:39;43290:18;43282:6;43279:30;43263:113;43260:146;;;43391:5;;;;43260:146;43437:6;43431:4;43427:17;43473:3;43467:10;43500:18;43492:6;43489:30;43486:43;;;43522:5;;;;;;43486:43;43570:6;43563:4;43558:3;43554:14;43550:27;43629:1;43611:16;43607:24;43601:4;43597:35;43592:3;43589:44;43586:57;;;43636:5;;;;;;;43586:57;43653;43701:6;43695:4;43691:17;43683:6;43679:30;43673:4;43653:57;:::i;:::-;43726:3;43719:10;;43067:668;;;;;43024:711;;:::o;43741:122::-;43814:24;43832:5;43814:24;:::i;:::-;43807:5;43804:35;43794:63;;43853:1;43850;43843:12;43794:63;43741:122;:::o;43869:116::-;43939:21;43954:5;43939:21;:::i;:::-;43932:5;43929:32;43919:60;;43975:1;43972;43965:12;43919:60;43869:116;:::o;43991:120::-;44063:23;44080:5;44063:23;:::i;:::-;44056:5;44053:34;44043:62;;44101:1;44098;44091:12;44043:62;43991:120;:::o;44117:122::-;44190:24;44208:5;44190:24;:::i;:::-;44183:5;44180:35;44170:63;;44229:1;44226;44219:12;44170:63;44117:122;:::o

Swarm Source

ipfs://395192fdcbc3e7f036ea1930cd9690d8b67f5c3c039e9bbc82fce03bf72686ae
Loading