ETH Price: $3,284.73 (-5.48%)

Token

 

Overview

Max Total Supply

119

Holders

50

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
cashflowking.eth
0xa4e60abe0c20d1c6e14556d340cf36868407dabd
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MetaComedyClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


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


// 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/extensions/IERC1155MetadataURI.sol


// 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/token/ERC1155/ERC1155.sol


// 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: metacomedymint.sol


pragma solidity ^0.8.2;



contract MetaComedyClub is ERC1155, Ownable {
    uint256 private constant GENESIS_ID = 0;
    uint256 private constant ROOM_101_ID = 1;
    uint256 private constant MAX_GENESIS = 5000;
    uint256 private constant MAX_ROOM_101 = 101;

    uint256 public mintPrice = 101000000000000000; // 0.101 eth

    // Club Rules
    mapping(uint256 => uint256) public maxSupply;
    mapping(uint256 => uint256) public totalSupply;
    // Guest List
    mapping(address => bool) public room101Allow;
    // URIs
    mapping(uint256 => string) private uris;

    // Mint Guard
    bool private minting;

    address public clubWallet;
    address public devWallet;

    constructor() ERC1155('') {
        maxSupply[GENESIS_ID] = MAX_GENESIS;
        maxSupply[ROOM_101_ID] = MAX_ROOM_101;
    }

    // returns the IPFS address of the Magazine Issue once set
    function uri(uint256 tokenId) public view override returns (string memory) {
        return (uris[tokenId]);
    }

    // sets the IPFS address of the Magazine Issue
    function setTokenURI(uint256 tokenId, string memory newUri)
        external
        onlyOwner
    {
        uris[tokenId] = newUri;
    }

    function mintGenesis(uint16 amount) external payable {
        require(minting, "Minting must be active");
        uint256 currentSupply = totalSupply[GENESIS_ID];
        uint256 availableSupply = maxSupply[GENESIS_ID] - currentSupply;

        require(amount > 0 && amount <= 3, "Max 3 NFTs per transaction");
        require(availableSupply >= amount, "Mint would exceed max supply");

        require(msg.value >= mintPrice * amount, "Ether value sent is not correct");

        totalSupply[GENESIS_ID] += amount;

        _mint(_msgSender(), GENESIS_ID, amount, '');
    }

    function mintRoom101() external {
        require(minting, "Minting must be active");
        require(
            totalSupply[ROOM_101_ID] < maxSupply[ROOM_101_ID],
            "Mint would exceed max supply"
        );
        require(room101Allow[_msgSender()], "Not on the list");

        totalSupply[ROOM_101_ID] += 1;
        room101Allow[_msgSender()] = false;

        _mint(_msgSender(), ROOM_101_ID, 1, '');
    }

    function communityReserve(uint256 amount, uint256 tokenId) external onlyOwner {
        uint256 currentSupply = totalSupply[tokenId];
        uint256 availableSupply = maxSupply[tokenId] - currentSupply;

        require(!minting, "Minting is in progress");
        require(availableSupply >= amount, "Not enough remaining");

        totalSupply[tokenId] += amount;

        _mint(owner(), tokenId, amount, '');
    }

    function withdraw() external onlyOwner {
        require(
            address(clubWallet) != address(0),
            "No club wallet"
        );
        require(
            address(devWallet) != address(0),
            "No dev wallet"
        );

        require(address(this).balance > 0, "Balance is 0");

        uint256 balance = address(this).balance;

        payable(clubWallet).transfer((balance * 850) / 1000);
        payable(devWallet).transfer((balance * 150) / 1000);
    }

    function setClubWallet(address _clubWallet) external onlyOwner {
        clubWallet = _clubWallet;
    }

    function setDevWallet(address _devWallet) external onlyOwner {
        devWallet = _devWallet;
    }

    function setMinting(bool _minting) external onlyOwner {
        minting = _minting;
    }

    function setMintPrice(uint256 _mintPrice) external onlyOwner {
        mintPrice = _mintPrice;
    }

    function setRoom101Allow(address[] calldata addresses, bool allowed)
        external
        onlyOwner
    {
        for (uint256 i; i < addresses.length; i++) {
            room101Allow[addresses[i]] = allowed;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"clubWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"communityReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"amount","type":"uint16"}],"name":"mintGenesis","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintRoom101","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"room101Allow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"address","name":"_clubWallet","type":"address"}],"name":"setClubWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_minting","type":"bool"}],"name":"setMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setRoom101Allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newUri","type":"string"}],"name":"setTokenURI","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","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":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670166d2f7025080006004553480156200001d57600080fd5b5060408051602081019091526000815262000038816200009d565b506200004433620000b6565b60056020526113887f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc55600160005260657f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b55620001eb565b8051620000b290600290602084019062000108565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011690620001ae565b90600052602060002090601f0160209004810192826200013a576000855562000185565b82601f106200015557805160ff191683800117855562000185565b8280016001018555821562000185579182015b828111156200018557825182559160200191906001019062000168565b506200019392915062000197565b5090565b5b8082111562000193576000815560010162000198565b600181811c90821680620001c357607f821691505b60208210811415620001e557634e487b7160e01b600052602260045260246000fd5b50919050565b61252680620001fb6000396000f3fe60806040526004361061019b5760003560e01c80636c5657ea116100ec578063b4c7f0661161008a578063e985e9c511610064578063e985e9c5146104cc578063f242432a14610515578063f2fde38b14610535578063f4a0a5281461055557600080fd5b8063b4c7f0661461045f578063bd85b0391461047f578063dad50c39146104ac57600080fd5b8063869f7594116100c6578063869f7594146103d45780638da5cb5b146104015780638ea5220f1461041f578063a22cb4651461043f57600080fd5b80636c5657ea1461037f578063710badfd1461039f578063715018a6146103bf57600080fd5b80633ad0d492116101595780634e1273f4116101335780634e1273f4146102ec5780634f8ee7f514610319578063610ab0751461032c5780636817c76c1461036957600080fd5b80633ad0d492146102925780633ccfd60b146102c25780633f0f255b146102d757600080fd5b8062fdd58e146101a057806301ffc9a7146101d35780630e89341c14610203578063162094c4146102305780631f53ac02146102525780632eb2c2d614610272575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611dcc565b610575565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004611f66565b61060c565b60405190151581526020016101ca565b34801561020f57600080fd5b5061022361021e366004611fc4565b61065e565b6040516101ca91906121bc565b34801561023c57600080fd5b5061025061024b366004611fdd565b610700565b005b34801561025e57600080fd5b5061025061026d366004611c45565b61074e565b34801561027e57600080fd5b5061025061028d366004611c93565b61079a565b34801561029e57600080fd5b506101f36102ad366004611c45565b60076020526000908152604090205460ff1681565b3480156102ce57600080fd5b50610250610831565b3480156102e357600080fd5b506102506109db565b3480156102f857600080fd5b5061030c610307366004611e7a565b610b89565b6040516101ca919061217b565b610250610327366004611fa0565b610cb3565b34801561033857600080fd5b506009546103519061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101ca565b34801561037557600080fd5b506101c060045481565b34801561038b57600080fd5b5061025061039a36600461202e565b610edb565b3480156103ab57600080fd5b506102506103ba366004611c45565b611013565b3480156103cb57600080fd5b50610250611065565b3480156103e057600080fd5b506101c06103ef366004611fc4565b60056020526000908152604090205481565b34801561040d57600080fd5b506003546001600160a01b0316610351565b34801561042b57600080fd5b50600a54610351906001600160a01b031681565b34801561044b57600080fd5b5061025061045a366004611da2565b611099565b34801561046b57600080fd5b5061025061047a366004611f4b565b6110a4565b34801561048b57600080fd5b506101c061049a366004611fc4565b60066020526000908152604090205481565b3480156104b857600080fd5b506102506104c7366004611df6565b6110e1565b3480156104d857600080fd5b506101f36104e7366004611c60565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561052157600080fd5b50610250610530366004611d3d565b61117c565b34801561054157600080fd5b50610250610550366004611c45565b611203565b34801561056157600080fd5b50610250610570366004611fc4565b61129e565b60006001600160a01b0383166105e65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061063d57506001600160e01b031982166303a24d0760e21b145b8061065857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600081815260086020526040902080546060919061067b9061236f565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061236f565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461072a5760405162461bcd60e51b81526004016105dd906122a6565b6000828152600860209081526040909120825161074992840190611a84565b505050565b6003546001600160a01b031633146107785760405162461bcd60e51b81526004016105dd906122a6565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0385163314806107b657506107b685336104e7565b61081d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105dd565b61082a85858585856112cd565b5050505050565b6003546001600160a01b0316331461085b5760405162461bcd60e51b81526004016105dd906122a6565b60095461010090046001600160a01b03166108a95760405162461bcd60e51b815260206004820152600e60248201526d139bc818db1d58881dd85b1b195d60921b60448201526064016105dd565b600a546001600160a01b03166108f15760405162461bcd60e51b815260206004820152600d60248201526c139bc819195d881dd85b1b195d609a1b60448201526064016105dd565b600047116109305760405162461bcd60e51b815260206004820152600c60248201526b042616c616e636520697320360a41b60448201526064016105dd565b600954479061010090046001600160a01b03166108fc6103e861095584610352612339565b61095f9190612317565b6040518115909202916000818181858888f19350505050158015610987573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6103e86109a5846096612339565b6109af9190612317565b6040518115909202916000818181858888f193505050501580156109d7573d6000803e3d6000fd5b5050565b60095460ff16610a265760405162461bcd60e51b81526020600482015260166024820152754d696e74696e67206d7573742062652061637469766560501b60448201526064016105dd565b60016000527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b5460066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315410610ac15760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016105dd565b3360009081526007602052604090205460ff16610b125760405162461bcd60e51b815260206004820152600f60248201526e139bdd081bdb881d1a19481b1a5cdd608a1b60448201526064016105dd565b6001600081815260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a318054909190610b4f9084906122ff565b9091555050336000818152600760209081526040808320805460ff1916905580519182019052908152610b87919060019081906114aa565b565b60608151835114610bee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105dd565b6000835167ffffffffffffffff811115610c0a57610c0a61241e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b8451811015610cab57610c7e858281518110610c5757610c57612408565b6020026020010151858381518110610c7157610c71612408565b6020026020010151610575565b828281518110610c9057610c90612408565b6020908102919091010152610ca4816123d7565b9050610c39565b509392505050565b60095460ff16610cfe5760405162461bcd60e51b81526020600482015260166024820152754d696e74696e67206d7573742062652061637469766560501b60448201526064016105dd565b60008080527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc54909190610d5a908390612358565b905060008361ffff16118015610d75575060038361ffff1611155b610dc15760405162461bcd60e51b815260206004820152601a60248201527f4d61782033204e46547320706572207472616e73616374696f6e00000000000060448201526064016105dd565b8261ffff16811015610e155760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016105dd565b8261ffff16600454610e279190612339565b341015610e765760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016105dd565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805461ffff86169290610eb59084906122ff565b9091555061074990503360008561ffff16604051806020016040528060008152506114aa565b6003546001600160a01b03163314610f055760405162461bcd60e51b81526004016105dd906122a6565b6000818152600660209081526040808320546005909252822054909190610f2d908390612358565b60095490915060ff1615610f7c5760405162461bcd60e51b81526020600482015260166024820152754d696e74696e6720697320696e2070726f677265737360501b60448201526064016105dd565b83811015610fc35760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f7567682072656d61696e696e6760601b60448201526064016105dd565b60008381526006602052604081208054869290610fe19084906122ff565b909155505060035461100d906001600160a01b03168486604051806020016040528060008152506114aa565b50505050565b6003546001600160a01b0316331461103d5760405162461bcd60e51b81526004016105dd906122a6565b600980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6003546001600160a01b0316331461108f5760405162461bcd60e51b81526004016105dd906122a6565b610b8760006115b4565b6109d7338383611606565b6003546001600160a01b031633146110ce5760405162461bcd60e51b81526004016105dd906122a6565b6009805460ff1916911515919091179055565b6003546001600160a01b0316331461110b5760405162461bcd60e51b81526004016105dd906122a6565b60005b8281101561100d57816007600086868581811061112d5761112d612408565b90506020020160208101906111429190611c45565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611174816123d7565b91505061110e565b6001600160a01b038516331480611198575061119885336104e7565b6111f65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105dd565b61082a85858585856116e7565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016105dd906122a6565b6001600160a01b0381166112925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105dd565b61129b816115b4565b50565b6003546001600160a01b031633146112c85760405162461bcd60e51b81526004016105dd906122a6565b600455565b815183511461132f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105dd565b6001600160a01b0384166113555760405162461bcd60e51b81526004016105dd90612217565b3360005b845181101561143c57600085828151811061137657611376612408565b60200260200101519050600085838151811061139457611394612408565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113e45760405162461bcd60e51b81526004016105dd9061225c565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114219084906122ff565b9250508190555050505080611435906123d7565b9050611359565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161148c92919061218e565b60405180910390a46114a2818787878787611804565b505050505050565b6001600160a01b03841661150a5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105dd565b336115248160008761151b8861196f565b61082a8861196f565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906115549084906122ff565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461082a816000878787876119ba565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561167a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105dd565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661170d5760405162461bcd60e51b81526004016105dd90612217565b3361171d81878761151b8861196f565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561175e5760405162461bcd60e51b81526004016105dd9061225c565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061179b9084906122ff565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46117fb8288888888886119ba565b50505050505050565b6001600160a01b0384163b156114a25760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061184890899089908890889088906004016120d8565b602060405180830381600087803b15801561186257600080fd5b505af1925050508015611892575060408051601f3d908101601f1916820190925261188f91810190611f83565b60015b61193f5761189e612434565b806308c379a014156118d857506118b3612450565b806118be57506118da565b8060405162461bcd60e51b81526004016105dd91906121bc565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105dd565b6001600160e01b0319811663bc197c8160e01b146117fb5760405162461bcd60e51b81526004016105dd906121cf565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106119a9576119a9612408565b602090810291909101015292915050565b6001600160a01b0384163b156114a25760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119fe9089908990889088908890600401612136565b602060405180830381600087803b158015611a1857600080fd5b505af1925050508015611a48575060408051601f3d908101601f19168201909252611a4591810190611f83565b60015b611a545761189e612434565b6001600160e01b0319811663f23a6e6160e01b146117fb5760405162461bcd60e51b81526004016105dd906121cf565b828054611a909061236f565b90600052602060002090601f016020900481019282611ab25760008555611af8565b82601f10611acb57805160ff1916838001178555611af8565b82800160010185558215611af8579182015b82811115611af8578251825591602001919060010190611add565b50611b04929150611b08565b5090565b5b80821115611b045760008155600101611b09565b600067ffffffffffffffff831115611b3757611b3761241e565b604051611b4e601f8501601f1916602001826123aa565b809150838152848484011115611b6357600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611b9257600080fd5b919050565b600082601f830112611ba857600080fd5b81356020611bb5826122db565b604051611bc282826123aa565b8381528281019150858301600585901b87018401881015611be257600080fd5b60005b85811015611c0157813584529284019290840190600101611be5565b5090979650505050505050565b80358015158114611b9257600080fd5b600082601f830112611c2f57600080fd5b611c3e83833560208501611b1d565b9392505050565b600060208284031215611c5757600080fd5b611c3e82611b7b565b60008060408385031215611c7357600080fd5b611c7c83611b7b565b9150611c8a60208401611b7b565b90509250929050565b600080600080600060a08688031215611cab57600080fd5b611cb486611b7b565b9450611cc260208701611b7b565b9350604086013567ffffffffffffffff80821115611cdf57600080fd5b611ceb89838a01611b97565b94506060880135915080821115611d0157600080fd5b611d0d89838a01611b97565b93506080880135915080821115611d2357600080fd5b50611d3088828901611c1e565b9150509295509295909350565b600080600080600060a08688031215611d5557600080fd5b611d5e86611b7b565b9450611d6c60208701611b7b565b93506040860135925060608601359150608086013567ffffffffffffffff811115611d9657600080fd5b611d3088828901611c1e565b60008060408385031215611db557600080fd5b611dbe83611b7b565b9150611c8a60208401611c0e565b60008060408385031215611ddf57600080fd5b611de883611b7b565b946020939093013593505050565b600080600060408486031215611e0b57600080fd5b833567ffffffffffffffff80821115611e2357600080fd5b818601915086601f830112611e3757600080fd5b813581811115611e4657600080fd5b8760208260051b8501011115611e5b57600080fd5b602092830195509350611e719186019050611c0e565b90509250925092565b60008060408385031215611e8d57600080fd5b823567ffffffffffffffff80821115611ea557600080fd5b818501915085601f830112611eb957600080fd5b81356020611ec6826122db565b604051611ed382826123aa565b8381528281019150858301600585901b870184018b1015611ef357600080fd5b600096505b84871015611f1d57611f0981611b7b565b835260019690960195918301918301611ef8565b5096505086013592505080821115611f3457600080fd5b50611f4185828601611b97565b9150509250929050565b600060208284031215611f5d57600080fd5b611c3e82611c0e565b600060208284031215611f7857600080fd5b8135611c3e816124da565b600060208284031215611f9557600080fd5b8151611c3e816124da565b600060208284031215611fb257600080fd5b813561ffff81168114611c3e57600080fd5b600060208284031215611fd657600080fd5b5035919050565b60008060408385031215611ff057600080fd5b82359150602083013567ffffffffffffffff81111561200e57600080fd5b8301601f8101851361201f57600080fd5b611f4185823560208401611b1d565b6000806040838503121561204157600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561208057815187529582019590820190600101612064565b509495945050505050565b6000815180845260005b818110156120b157602081850181015186830182015201612095565b818111156120c3576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061210490830186612050565b82810360608401526121168186612050565b9050828103608084015261212a818561208b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906121709083018461208b565b979650505050505050565b602081526000611c3e6020830184612050565b6040815260006121a16040830185612050565b82810360208401526121b38185612050565b95945050505050565b602081526000611c3e602083018461208b565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff8211156122f5576122f561241e565b5060051b60200190565b60008219821115612312576123126123f2565b500190565b60008261233457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612353576123536123f2565b500290565b60008282101561236a5761236a6123f2565b500390565b600181811c9082168061238357607f821691505b602082108114156123a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156123d0576123d061241e565b6040525050565b60006000198214156123eb576123eb6123f2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561244d5760046000803e5060005160e01c5b90565b600060443d101561245e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561248e57505050505090565b82850191508151818111156124a65750505050505090565b843d87010160208285010111156124c05750505050505090565b6124cf602082860101876123aa565b509095945050505050565b6001600160e01b03198116811461129b57600080fdfea26469706673582212207d5c7601d918b0f7bf0d233be895f6b8ce689951bdfde58311e9f98af851b35b64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061019b5760003560e01c80636c5657ea116100ec578063b4c7f0661161008a578063e985e9c511610064578063e985e9c5146104cc578063f242432a14610515578063f2fde38b14610535578063f4a0a5281461055557600080fd5b8063b4c7f0661461045f578063bd85b0391461047f578063dad50c39146104ac57600080fd5b8063869f7594116100c6578063869f7594146103d45780638da5cb5b146104015780638ea5220f1461041f578063a22cb4651461043f57600080fd5b80636c5657ea1461037f578063710badfd1461039f578063715018a6146103bf57600080fd5b80633ad0d492116101595780634e1273f4116101335780634e1273f4146102ec5780634f8ee7f514610319578063610ab0751461032c5780636817c76c1461036957600080fd5b80633ad0d492146102925780633ccfd60b146102c25780633f0f255b146102d757600080fd5b8062fdd58e146101a057806301ffc9a7146101d35780630e89341c14610203578063162094c4146102305780631f53ac02146102525780632eb2c2d614610272575b600080fd5b3480156101ac57600080fd5b506101c06101bb366004611dcc565b610575565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004611f66565b61060c565b60405190151581526020016101ca565b34801561020f57600080fd5b5061022361021e366004611fc4565b61065e565b6040516101ca91906121bc565b34801561023c57600080fd5b5061025061024b366004611fdd565b610700565b005b34801561025e57600080fd5b5061025061026d366004611c45565b61074e565b34801561027e57600080fd5b5061025061028d366004611c93565b61079a565b34801561029e57600080fd5b506101f36102ad366004611c45565b60076020526000908152604090205460ff1681565b3480156102ce57600080fd5b50610250610831565b3480156102e357600080fd5b506102506109db565b3480156102f857600080fd5b5061030c610307366004611e7a565b610b89565b6040516101ca919061217b565b610250610327366004611fa0565b610cb3565b34801561033857600080fd5b506009546103519061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101ca565b34801561037557600080fd5b506101c060045481565b34801561038b57600080fd5b5061025061039a36600461202e565b610edb565b3480156103ab57600080fd5b506102506103ba366004611c45565b611013565b3480156103cb57600080fd5b50610250611065565b3480156103e057600080fd5b506101c06103ef366004611fc4565b60056020526000908152604090205481565b34801561040d57600080fd5b506003546001600160a01b0316610351565b34801561042b57600080fd5b50600a54610351906001600160a01b031681565b34801561044b57600080fd5b5061025061045a366004611da2565b611099565b34801561046b57600080fd5b5061025061047a366004611f4b565b6110a4565b34801561048b57600080fd5b506101c061049a366004611fc4565b60066020526000908152604090205481565b3480156104b857600080fd5b506102506104c7366004611df6565b6110e1565b3480156104d857600080fd5b506101f36104e7366004611c60565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561052157600080fd5b50610250610530366004611d3d565b61117c565b34801561054157600080fd5b50610250610550366004611c45565b611203565b34801561056157600080fd5b50610250610570366004611fc4565b61129e565b60006001600160a01b0383166105e65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061063d57506001600160e01b031982166303a24d0760e21b145b8061065857506301ffc9a760e01b6001600160e01b03198316145b92915050565b600081815260086020526040902080546060919061067b9061236f565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061236f565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461072a5760405162461bcd60e51b81526004016105dd906122a6565b6000828152600860209081526040909120825161074992840190611a84565b505050565b6003546001600160a01b031633146107785760405162461bcd60e51b81526004016105dd906122a6565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0385163314806107b657506107b685336104e7565b61081d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105dd565b61082a85858585856112cd565b5050505050565b6003546001600160a01b0316331461085b5760405162461bcd60e51b81526004016105dd906122a6565b60095461010090046001600160a01b03166108a95760405162461bcd60e51b815260206004820152600e60248201526d139bc818db1d58881dd85b1b195d60921b60448201526064016105dd565b600a546001600160a01b03166108f15760405162461bcd60e51b815260206004820152600d60248201526c139bc819195d881dd85b1b195d609a1b60448201526064016105dd565b600047116109305760405162461bcd60e51b815260206004820152600c60248201526b042616c616e636520697320360a41b60448201526064016105dd565b600954479061010090046001600160a01b03166108fc6103e861095584610352612339565b61095f9190612317565b6040518115909202916000818181858888f19350505050158015610987573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6103e86109a5846096612339565b6109af9190612317565b6040518115909202916000818181858888f193505050501580156109d7573d6000803e3d6000fd5b5050565b60095460ff16610a265760405162461bcd60e51b81526020600482015260166024820152754d696e74696e67206d7573742062652061637469766560501b60448201526064016105dd565b60016000527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b5460066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a315410610ac15760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016105dd565b3360009081526007602052604090205460ff16610b125760405162461bcd60e51b815260206004820152600f60248201526e139bdd081bdb881d1a19481b1a5cdd608a1b60448201526064016105dd565b6001600081815260066020527f3e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a318054909190610b4f9084906122ff565b9091555050336000818152600760209081526040808320805460ff1916905580519182019052908152610b87919060019081906114aa565b565b60608151835114610bee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105dd565b6000835167ffffffffffffffff811115610c0a57610c0a61241e565b604051908082528060200260200182016040528015610c33578160200160208202803683370190505b50905060005b8451811015610cab57610c7e858281518110610c5757610c57612408565b6020026020010151858381518110610c7157610c71612408565b6020026020010151610575565b828281518110610c9057610c90612408565b6020908102919091010152610ca4816123d7565b9050610c39565b509392505050565b60095460ff16610cfe5760405162461bcd60e51b81526020600482015260166024820152754d696e74696e67206d7573742062652061637469766560501b60448201526064016105dd565b60008080527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc54909190610d5a908390612358565b905060008361ffff16118015610d75575060038361ffff1611155b610dc15760405162461bcd60e51b815260206004820152601a60248201527f4d61782033204e46547320706572207472616e73616374696f6e00000000000060448201526064016105dd565b8261ffff16811015610e155760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420776f756c6420657863656564206d617820737570706c790000000060448201526064016105dd565b8261ffff16600454610e279190612339565b341015610e765760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016105dd565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805461ffff86169290610eb59084906122ff565b9091555061074990503360008561ffff16604051806020016040528060008152506114aa565b6003546001600160a01b03163314610f055760405162461bcd60e51b81526004016105dd906122a6565b6000818152600660209081526040808320546005909252822054909190610f2d908390612358565b60095490915060ff1615610f7c5760405162461bcd60e51b81526020600482015260166024820152754d696e74696e6720697320696e2070726f677265737360501b60448201526064016105dd565b83811015610fc35760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f7567682072656d61696e696e6760601b60448201526064016105dd565b60008381526006602052604081208054869290610fe19084906122ff565b909155505060035461100d906001600160a01b03168486604051806020016040528060008152506114aa565b50505050565b6003546001600160a01b0316331461103d5760405162461bcd60e51b81526004016105dd906122a6565b600980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6003546001600160a01b0316331461108f5760405162461bcd60e51b81526004016105dd906122a6565b610b8760006115b4565b6109d7338383611606565b6003546001600160a01b031633146110ce5760405162461bcd60e51b81526004016105dd906122a6565b6009805460ff1916911515919091179055565b6003546001600160a01b0316331461110b5760405162461bcd60e51b81526004016105dd906122a6565b60005b8281101561100d57816007600086868581811061112d5761112d612408565b90506020020160208101906111429190611c45565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611174816123d7565b91505061110e565b6001600160a01b038516331480611198575061119885336104e7565b6111f65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105dd565b61082a85858585856116e7565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016105dd906122a6565b6001600160a01b0381166112925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105dd565b61129b816115b4565b50565b6003546001600160a01b031633146112c85760405162461bcd60e51b81526004016105dd906122a6565b600455565b815183511461132f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016105dd565b6001600160a01b0384166113555760405162461bcd60e51b81526004016105dd90612217565b3360005b845181101561143c57600085828151811061137657611376612408565b60200260200101519050600085838151811061139457611394612408565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156113e45760405162461bcd60e51b81526004016105dd9061225c565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906114219084906122ff565b9250508190555050505080611435906123d7565b9050611359565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161148c92919061218e565b60405180910390a46114a2818787878787611804565b505050505050565b6001600160a01b03841661150a5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105dd565b336115248160008761151b8861196f565b61082a8861196f565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906115549084906122ff565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461082a816000878787876119ba565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561167a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105dd565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661170d5760405162461bcd60e51b81526004016105dd90612217565b3361171d81878761151b8861196f565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561175e5760405162461bcd60e51b81526004016105dd9061225c565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061179b9084906122ff565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46117fb8288888888886119ba565b50505050505050565b6001600160a01b0384163b156114a25760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061184890899089908890889088906004016120d8565b602060405180830381600087803b15801561186257600080fd5b505af1925050508015611892575060408051601f3d908101601f1916820190925261188f91810190611f83565b60015b61193f5761189e612434565b806308c379a014156118d857506118b3612450565b806118be57506118da565b8060405162461bcd60e51b81526004016105dd91906121bc565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105dd565b6001600160e01b0319811663bc197c8160e01b146117fb5760405162461bcd60e51b81526004016105dd906121cf565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106119a9576119a9612408565b602090810291909101015292915050565b6001600160a01b0384163b156114a25760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119fe9089908990889088908890600401612136565b602060405180830381600087803b158015611a1857600080fd5b505af1925050508015611a48575060408051601f3d908101601f19168201909252611a4591810190611f83565b60015b611a545761189e612434565b6001600160e01b0319811663f23a6e6160e01b146117fb5760405162461bcd60e51b81526004016105dd906121cf565b828054611a909061236f565b90600052602060002090601f016020900481019282611ab25760008555611af8565b82601f10611acb57805160ff1916838001178555611af8565b82800160010185558215611af8579182015b82811115611af8578251825591602001919060010190611add565b50611b04929150611b08565b5090565b5b80821115611b045760008155600101611b09565b600067ffffffffffffffff831115611b3757611b3761241e565b604051611b4e601f8501601f1916602001826123aa565b809150838152848484011115611b6357600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b0381168114611b9257600080fd5b919050565b600082601f830112611ba857600080fd5b81356020611bb5826122db565b604051611bc282826123aa565b8381528281019150858301600585901b87018401881015611be257600080fd5b60005b85811015611c0157813584529284019290840190600101611be5565b5090979650505050505050565b80358015158114611b9257600080fd5b600082601f830112611c2f57600080fd5b611c3e83833560208501611b1d565b9392505050565b600060208284031215611c5757600080fd5b611c3e82611b7b565b60008060408385031215611c7357600080fd5b611c7c83611b7b565b9150611c8a60208401611b7b565b90509250929050565b600080600080600060a08688031215611cab57600080fd5b611cb486611b7b565b9450611cc260208701611b7b565b9350604086013567ffffffffffffffff80821115611cdf57600080fd5b611ceb89838a01611b97565b94506060880135915080821115611d0157600080fd5b611d0d89838a01611b97565b93506080880135915080821115611d2357600080fd5b50611d3088828901611c1e565b9150509295509295909350565b600080600080600060a08688031215611d5557600080fd5b611d5e86611b7b565b9450611d6c60208701611b7b565b93506040860135925060608601359150608086013567ffffffffffffffff811115611d9657600080fd5b611d3088828901611c1e565b60008060408385031215611db557600080fd5b611dbe83611b7b565b9150611c8a60208401611c0e565b60008060408385031215611ddf57600080fd5b611de883611b7b565b946020939093013593505050565b600080600060408486031215611e0b57600080fd5b833567ffffffffffffffff80821115611e2357600080fd5b818601915086601f830112611e3757600080fd5b813581811115611e4657600080fd5b8760208260051b8501011115611e5b57600080fd5b602092830195509350611e719186019050611c0e565b90509250925092565b60008060408385031215611e8d57600080fd5b823567ffffffffffffffff80821115611ea557600080fd5b818501915085601f830112611eb957600080fd5b81356020611ec6826122db565b604051611ed382826123aa565b8381528281019150858301600585901b870184018b1015611ef357600080fd5b600096505b84871015611f1d57611f0981611b7b565b835260019690960195918301918301611ef8565b5096505086013592505080821115611f3457600080fd5b50611f4185828601611b97565b9150509250929050565b600060208284031215611f5d57600080fd5b611c3e82611c0e565b600060208284031215611f7857600080fd5b8135611c3e816124da565b600060208284031215611f9557600080fd5b8151611c3e816124da565b600060208284031215611fb257600080fd5b813561ffff81168114611c3e57600080fd5b600060208284031215611fd657600080fd5b5035919050565b60008060408385031215611ff057600080fd5b82359150602083013567ffffffffffffffff81111561200e57600080fd5b8301601f8101851361201f57600080fd5b611f4185823560208401611b1d565b6000806040838503121561204157600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561208057815187529582019590820190600101612064565b509495945050505050565b6000815180845260005b818110156120b157602081850181015186830182015201612095565b818111156120c3576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a06040820181905260009061210490830186612050565b82810360608401526121168186612050565b9050828103608084015261212a818561208b565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906121709083018461208b565b979650505050505050565b602081526000611c3e6020830184612050565b6040815260006121a16040830185612050565b82810360208401526121b38185612050565b95945050505050565b602081526000611c3e602083018461208b565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff8211156122f5576122f561241e565b5060051b60200190565b60008219821115612312576123126123f2565b500190565b60008261233457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612353576123536123f2565b500290565b60008282101561236a5761236a6123f2565b500390565b600181811c9082168061238357607f821691505b602082108114156123a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156123d0576123d061241e565b6040525050565b60006000198214156123eb576123eb6123f2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561244d5760046000803e5060005160e01c5b90565b600060443d101561245e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561248e57505050505090565b82850191508151818111156124a65750505050505090565b843d87010160208285010111156124c05750505050505090565b6124cf602082860101876123aa565b509095945050505050565b6001600160e01b03198116811461129b57600080fdfea26469706673582212207d5c7601d918b0f7bf0d233be895f6b8ce689951bdfde58311e9f98af851b35b64736f6c63430008070033

Deployed Bytecode Sourcemap

36545:3866:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;-1:-1:-1;22978:231:0;;;;;:::i;:::-;;:::i;:::-;;;20771:25:1;;;20759:2;20744:18;22978:231:0;;;;;;;;22001:310;;;;;;;;;;-1:-1:-1;22001:310:0;;;;;:::i;:::-;;:::i;:::-;;;11594:14:1;;11587:22;11569:41;;11557:2;11542:18;22001:310:0;11429:187:1;37425:116:0;;;;;;;;;;-1:-1:-1;37425:116:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37601:143::-;;;;;;;;;;-1:-1:-1;37601:143:0;;;;;:::i;:::-;;:::i;:::-;;39854:102;;;;;;;;;;-1:-1:-1;39854:102:0;;;;;:::i;:::-;;:::i;24917:442::-;;;;;;;;;;-1:-1:-1;24917:442:0;;;;;:::i;:::-;;:::i;37000:44::-;;;;;;;;;;-1:-1:-1;37000:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39229:503;;;;;;;;;;;;;:::i;38350:435::-;;;;;;;;;;;;;:::i;23375:524::-;;;;;;;;;;-1:-1:-1;23375:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37752:590::-;;;;;;:::i;:::-;;:::i;37160:25::-;;;;;;;;;;-1:-1:-1;37160:25:0;;;;;;;-1:-1:-1;;;;;37160:25:0;;;;;;-1:-1:-1;;;;;9253:32:1;;;9235:51;;9223:2;9208:18;37160:25:0;9089:203:1;36791:45:0;;;;;;;;;;;;;;;;38793:428;;;;;;;;;;-1:-1:-1;38793:428:0;;;;;:::i;:::-;;:::i;39740:106::-;;;;;;;;;;-1:-1:-1;39740:106:0;;;;;:::i;:::-;;:::i;2606:103::-;;;;;;;;;;;;;:::i;36877:44::-;;;;;;;;;;-1:-1:-1;36877:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;1955:87;;;;;;;;;;-1:-1:-1;2028:6:0;;-1:-1:-1;;;;;2028:6:0;1955:87;;37192:24;;;;;;;;;;-1:-1:-1;37192:24:0;;;;-1:-1:-1;;;;;37192:24:0;;;23972:155;;;;;;;;;;-1:-1:-1;23972:155:0;;;;;:::i;:::-;;:::i;39964:91::-;;;;;;;;;;-1:-1:-1;39964:91:0;;;;;:::i;:::-;;:::i;36928:46::-;;;;;;;;;;-1:-1:-1;36928:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;40173:235;;;;;;;;;;-1:-1:-1;40173:235:0;;;;;:::i;:::-;;:::i;24199:168::-;;;;;;;;;;-1:-1:-1;24199:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;24322:27:0;;;24298:4;24322:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24199:168;24439:401;;;;;;;;;;-1:-1:-1;24439:401:0;;;;;:::i;:::-;;:::i;2864:201::-;;;;;;;;;;-1:-1:-1;2864:201:0;;;;;:::i;:::-;;:::i;40063:102::-;;;;;;;;;;-1:-1:-1;40063:102:0;;;;;:::i;:::-;;:::i;22978:231::-;23064:7;-1:-1:-1;;;;;23092:21:0;;23084:77;;;;-1:-1:-1;;;23084:77:0;;13928:2:1;23084:77:0;;;13910:21:1;13967:2;13947:18;;;13940:30;14006:34;13986:18;;;13979:62;-1:-1:-1;;;14057:18:1;;;14050:41;14108:19;;23084:77:0;;;;;;;;;-1:-1:-1;23179:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23179:22:0;;;;;;;;;;;;22978:231::o;22001:310::-;22103:4;-1:-1:-1;;;;;;22140:41:0;;-1:-1:-1;;;22140:41:0;;:110;;-1:-1:-1;;;;;;;22198:52:0;;-1:-1:-1;;;22198:52:0;22140:110;:163;;;-1:-1:-1;;;;;;;;;;13465:40:0;;;22267:36;22120:183;22001:310;-1:-1:-1;;22001:310:0:o;37425:116::-;37519:13;;;;:4;:13;;;;;37511:22;;37485:13;;37519;37511:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37425:116;;;:::o;37601:143::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;37714:13:::1;::::0;;;:4:::1;:13;::::0;;;;;;;:22;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;37601:143:::0;;:::o;39854:102::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;39926:9:::1;:22:::0;;-1:-1:-1;;;;;;39926:22:0::1;-1:-1:-1::0;;;;;39926:22:0;;;::::1;::::0;;;::::1;::::0;;39854:102::o;24917:442::-;-1:-1:-1;;;;;25150:20:0;;759:10;25150:20;;:60;;-1:-1:-1;25174:36:0;25191:4;759:10;24199:168;:::i;25174:36::-;25128:160;;;;-1:-1:-1;;;25128:160:0;;17313:2:1;25128:160:0;;;17295:21:1;17352:2;17332:18;;;17325:30;17391:34;17371:18;;;17364:62;-1:-1:-1;;;17442:18:1;;;17435:48;17500:19;;25128:160:0;17111:414:1;25128:160:0;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;39229:503::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;39309:10:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;39309:10:0::1;39279:97;;;::::0;-1:-1:-1;;;39279:97:0;;13585:2:1;39279:97:0::1;::::0;::::1;13567:21:1::0;13624:2;13604:18;;;13597:30;-1:-1:-1;;;13643:18:1;;;13636:44;13697:18;;39279:97:0::1;13383:338:1::0;39279:97:0::1;39417:9;::::0;-1:-1:-1;;;;;39417:9:0::1;39387:95;;;::::0;-1:-1:-1;;;39387:95:0;;16221:2:1;39387:95:0::1;::::0;::::1;16203:21:1::0;16260:2;16240:18;;;16233:30;-1:-1:-1;;;16279:18:1;;;16272:43;16332:18;;39387:95:0::1;16019:337:1::0;39387:95:0::1;39527:1;39503:21;:25;39495:50;;;::::0;-1:-1:-1;;;39495:50:0;;18143:2:1;39495:50:0::1;::::0;::::1;18125:21:1::0;18182:2;18162:18;;;18155:30;-1:-1:-1;;;18201:18:1;;;18194:42;18253:18;;39495:50:0::1;17941:336:1::0;39495:50:0::1;39618:10;::::0;39576:21:::1;::::0;39618:10:::1;::::0;::::1;-1:-1:-1::0;;;;;39618:10:0::1;39610:52;39657:4;39640:13;39576:21:::0;39650:3:::1;39640:13;:::i;:::-;39639:22;;;;:::i;:::-;39610:52;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;39681:9:0::1;::::0;-1:-1:-1;;;;;39681:9:0::1;39673:51;39719:4;39702:13;:7:::0;39712:3:::1;39702:13;:::i;:::-;39701:22;;;;:::i;:::-;39673:51;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;39268:464;39229:503::o:0;38350:435::-;38401:7;;;;38393:42;;;;-1:-1:-1;;;38393:42:0;;12825:2:1;38393:42:0;;;12807:21:1;12864:2;12844:18;;;12837:30;-1:-1:-1;;;12883:18:1;;;12876:52;12945:18;;38393:42:0;12623:346:1;38393:42:0;36681:1;38495:22;;;;38468:11;38495:22;38468:24;;;:49;38446:127;;;;-1:-1:-1;;;38446:127:0;;12468:2:1;38446:127:0;;;12450:21:1;12507:2;12487:18;;;12480:30;12546;12526:18;;;12519:58;12594:18;;38446:127:0;12266:352:1;38446:127:0;759:10;38592:26;;;;:12;:26;;;;;;;;38584:54;;;;-1:-1:-1;;;38584:54:0;;16563:2:1;38584:54:0;;;16545:21:1;16602:2;16582:18;;;16575:30;-1:-1:-1;;;16621:18:1;;;16614:45;16676:18;;38584:54:0;16361:339:1;38584:54:0;38679:1;38651:24;;;;:11;:24;;;:29;;:24;;;:29;;38679:1;;38651:29;:::i;:::-;;;;-1:-1:-1;;759:10:0;38720:5;38691:26;;;:12;:26;;;;;;;;:34;;-1:-1:-1;;38691:34:0;;;38738:39;;;;;;;;;;;;759:10;38691:34;;;;38738:5;:39::i;:::-;38350:435::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;-1:-1:-1;;;23565:83:0;;19255:2:1;23565:83:0;;;19237:21:1;19294:2;19274:18;;;19267:30;19333:34;19313:18;;;19306:62;-1:-1:-1;;;19384:18:1;;;19377:39;19433:19;;23565:83:0;19053:405:1;23565:83:0;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23694:30:0;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23778:3;;;:::i;:::-;;;23737:122;;;-1:-1:-1;23878:13:0;23375:524;-1:-1:-1;;;23375:524:0:o;37752:590::-;37824:7;;;;37816:42;;;;-1:-1:-1;;;37816:42:0;;12825:2:1;37816:42:0;;;12807:21:1;12864:2;12844:18;;;12837:30;-1:-1:-1;;;12883:18:1;;;12876:52;12945:18;;37816:42:0;12623:346:1;37816:42:0;37869:21;37893:23;;;;;37953:9;37893:23;37953:21;;;37893:23;;37869:21;37953:37;;37893:23;;37953:37;:::i;:::-;37927:63;;38020:1;38011:6;:10;;;:25;;;;;38035:1;38025:6;:11;;;;38011:25;38003:64;;;;-1:-1:-1;;;38003:64:0;;14747:2:1;38003:64:0;;;14729:21:1;14786:2;14766:18;;;14759:30;14825:28;14805:18;;;14798:56;14871:18;;38003:64:0;14545:350:1;38003:64:0;38105:6;38086:25;;:15;:25;;38078:66;;;;-1:-1:-1;;;38078:66:0;;12468:2:1;38078:66:0;;;12450:21:1;12507:2;12487:18;;;12480:30;12546;12526:18;;;12519:58;12594:18;;38078:66:0;12266:352:1;38078:66:0;38190:6;38178:18;;:9;;:18;;;;:::i;:::-;38165:9;:31;;38157:75;;;;-1:-1:-1;;;38157:75:0;;15861:2:1;38157:75:0;;;15843:21:1;15900:2;15880:18;;;15873:30;15939:33;15919:18;;;15912:61;15990:18;;38157:75:0;15659:355:1;38157:75:0;38245:23;;;;:11;:23;;;:33;;;;;;:23;:33;;;;;:::i;:::-;;;;-1:-1:-1;38291:43:0;;-1:-1:-1;759:10:0;36634:1;38323:6;38291:43;;;;;;;;;;;;;;:5;:43::i;38793:428::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;38882:21:::1;38906:20:::0;;;:11:::1;:20;::::0;;;;;;;;38963:9:::1;:18:::0;;;;;;38906:20;;38882:21;38963:34:::1;::::0;38906:20;;38963:34:::1;:::i;:::-;39019:7;::::0;38937:60;;-1:-1:-1;39019:7:0::1;;39018:8;39010:43;;;::::0;-1:-1:-1;;;39010:43:0;;20476:2:1;39010:43:0::1;::::0;::::1;20458:21:1::0;20515:2;20495:18;;;20488:30;-1:-1:-1;;;20534:18:1;;;20527:52;20596:18;;39010:43:0::1;20274:346:1::0;39010:43:0::1;39091:6;39072:15;:25;;39064:58;;;::::0;-1:-1:-1;;;39064:58:0;;15512:2:1;39064:58:0::1;::::0;::::1;15494:21:1::0;15551:2;15531:18;;;15524:30;-1:-1:-1;;;15570:18:1;;;15563:50;15630:18;;39064:58:0::1;15310:344:1::0;39064:58:0::1;39135:20;::::0;;;:11:::1;:20;::::0;;;;:30;;39159:6;;39135:20;:30:::1;::::0;39159:6;;39135:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;2028:6:0;;39178:35:::1;::::0;-1:-1:-1;;;;;2028:6:0;39193:7:::1;39202:6;39178:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;38871:350;;38793:428:::0;;:::o;39740:106::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;39814:10:::1;:24:::0;;-1:-1:-1;;;;;39814:24:0;;::::1;;;-1:-1:-1::0;;;;;;39814:24:0;;::::1;::::0;;;::::1;::::0;;39740:106::o;2606:103::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;2671:30:::1;2698:1;2671:18;:30::i;23972:155::-:0;24067:52;759:10;24100:8;24110;24067:18;:52::i;39964:91::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40029:7:::1;:18:::0;;-1:-1:-1;;40029:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39964:91::o;40173:235::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40300:9:::1;40295:106;40311:20:::0;;::::1;40295:106;;;40382:7;40353:12;:26;40366:9;;40376:1;40366:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40353:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40353:26:0;:36;;-1:-1:-1;;40353:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40333:3;::::1;::::0;::::1;:::i;:::-;;;;40295:106;;24439:401:::0;-1:-1:-1;;;;;24647:20:0;;759:10;24647:20;;:60;;-1:-1:-1;24671:36:0;24688:4;759:10;24199:168;:::i;24671:36::-;24625:151;;;;-1:-1:-1;;;24625:151:0;;15102:2:1;24625:151:0;;;15084:21:1;15141:2;15121:18;;;15114:30;15180:34;15160:18;;;15153:62;-1:-1:-1;;;15231:18:1;;;15224:39;15280:19;;24625:151:0;14900:405:1;24625:151:0;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;2864:201::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2953:22:0;::::1;2945:73;;;::::0;-1:-1:-1;;;2945:73:0;;14340:2:1;2945:73:0::1;::::0;::::1;14322:21:1::0;14379:2;14359:18;;;14352:30;14418:34;14398:18;;;14391:62;-1:-1:-1;;;14469:18:1;;;14462:36;14515:19;;2945:73:0::1;14138:402:1::0;2945:73:0::1;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;40063:102::-;2028:6;;-1:-1:-1;;;;;2028:6:0;759:10;2175:23;2167:68;;;;-1:-1:-1;;;2167:68:0;;;;;;;:::i;:::-;40135:9:::1;:22:::0;40063:102::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;-1:-1:-1;;;27206:81:0;;19665:2:1;27206:81:0;;;19647:21:1;19704:2;19684:18;;;19677:30;19743:34;19723:18;;;19716:62;-1:-1:-1;;;19794:18:1;;;19787:38;19842:19;;27206:81:0;19463:404:1;27206:81:0;-1:-1:-1;;;;;27306:16:0;;27298:66;;;;-1:-1:-1;;;27298:66:0;;;;;;;:::i;:::-;759:10;27377:16;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27628:19;27650:13;;;;;;;;;;-1:-1:-1;;;;;27650:19:0;;;;;;;;;;;;27601:10;;-1:-1:-1;27692:21:0;;;;27684:76;;;;-1:-1:-1;;;27684:76:0;;;;;;;:::i;:::-;27804:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27804:19:0;;;;;;;;;;27826:20;;;27804:42;;27876:17;;;;;;;:27;;27826:20;;27804:9;27876:27;;27826:20;;27876:27;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;-1:-1:-1;;;;;27932:47:0;27956:4;-1:-1:-1;;;;;27932:47:0;27946:8;-1:-1:-1;;;;;27932:47:0;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;29393:569::-;-1:-1:-1;;;;;29546:16:0;;29538:62;;;;-1:-1:-1;;;29538:62:0;;20074:2:1;29538:62:0;;;20056:21:1;20113:2;20093:18;;;20086:30;20152:34;20132:18;;;20125:62;-1:-1:-1;;;20203:18:1;;;20196:31;20244:19;;29538:62:0;19872:397:1;29538:62:0;759:10;29657:102;759:10;29613:16;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;29657:102::-;29772:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29772:17:0;;;;;;;;;:27;;29793:6;;29772:9;:27;;29793:6;;29772:27;:::i;:::-;;;;-1:-1:-1;;29815:52:0;;;20981:25:1;;;21037:2;21022:18;;21015:34;;;-1:-1:-1;;;;;29815:52:0;;;;29848:1;;29815:52;;;;;;20954:18:1;29815:52:0;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;3225:191::-;3318:6;;;-1:-1:-1;;;;;3335:17:0;;;-1:-1:-1;;;;;;3335:17:0;;;;;;;3368:40;;3318:6;;;3335:17;3318:6;;3368:40;;3299:16;;3368:40;3288:128;3225:191;:::o;33187:331::-;33342:8;-1:-1:-1;;;;;33333:17:0;:5;-1:-1:-1;;;;;33333:17:0;;;33325:71;;;;-1:-1:-1;;;33325:71:0;;18845:2:1;33325:71:0;;;18827:21:1;18884:2;18864:18;;;18857:30;18923:34;18903:18;;;18896:62;-1:-1:-1;;;18974:18:1;;;18967:39;19023:19;;33325:71:0;18643:405:1;33325:71:0;-1:-1:-1;;;;;33407:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33407:46:0;;;;;;;;;;33469:41;;11569::1;;;33469::0;;11542:18:1;33469:41:0;;;;;;;33187:331;;;:::o;25823:820::-;-1:-1:-1;;;;;26011:16:0;;26003:66;;;;-1:-1:-1;;;26003:66:0;;;;;;;:::i;:::-;759:10;26126:96;759:10;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;26126:96::-;26235:19;26257:13;;;;;;;;;;;-1:-1:-1;;;;;26257:19:0;;;;;;;;;;26295:21;;;;26287:76;;;;-1:-1:-1;;;26287:76:0;;;;;;;:::i;:::-;26399:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26399:19:0;;;;;;;;;;26421:20;;;26399:42;;26463:17;;;;;;;:27;;26421:20;;26399:9;26463:27;;26421:20;;26463:27;:::i;:::-;;;;-1:-1:-1;;26508:46:0;;;20981:25:1;;;21037:2;21022:18;;21015:34;;;-1:-1:-1;;;;;26508:46:0;;;;;;;;;;;;;;20954:18:1;26508:46:0;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;35455:813::-;-1:-1:-1;;;;;35695:13:0;;4566:20;4614:8;35691:570;;35731:79;;-1:-1:-1;;;35731:79:0;;-1:-1:-1;;;;;35731:43:0;;;;;:79;;35775:8;;35785:4;;35791:3;;35796:7;;35805:4;;35731:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35731:79:0;;;;;;;;-1:-1:-1;;35731:79:0;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;-1:-1:-1;;;36116:14:0;;;;;;;;:::i;35727:523::-;;;36172:62;;-1:-1:-1;;;36172:62:0;;12047:2:1;36172:62:0;;;12029:21:1;12086:2;12066:18;;;12059:30;12125:34;12105:18;;;12098:62;-1:-1:-1;;;12176:18:1;;;12169:50;12236:19;;36172:62:0;11845:416:1;35727:523:0;-1:-1:-1;;;;;;35892:60:0;;-1:-1:-1;;;35892:60:0;35888:159;;35977:50;;-1:-1:-1;;;35977:50:0;;;;;;;:::i;36276:198::-;36396:16;;;36410:1;36396:16;;;;;;;;;36342;;36371:22;;36396:16;;;;;;;;;;;;-1:-1:-1;36396:16:0;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36461:5;36276:198;-1:-1:-1;;36276:198:0:o;34703:744::-;-1:-1:-1;;;;;34918:13:0;;4566:20;4614:8;34914:526;;34954:72;;-1:-1:-1;;;34954:72:0;;-1:-1:-1;;;;;34954:38:0;;;;;:72;;34993:8;;35003:4;;35009:2;;35013:6;;35021:4;;34954:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34954:72:0;;;;;;;;-1:-1:-1;;34954:72:0;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;-1:-1:-1;;;;;;35076:55:0;;-1:-1:-1;;;35076:55:0;35072:154;;35156:50;;-1:-1:-1;;;35156:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:160::-;1470:20;;1526:13;;1519:21;1509:32;;1499:60;;1555:1;1552;1545:12;1570:220;1612:5;1665:3;1658:4;1650:6;1646:17;1642:27;1632:55;;1683:1;1680;1673:12;1632:55;1705:79;1780:3;1771:6;1758:20;1751:4;1743:6;1739:17;1705:79;:::i;:::-;1696:88;1570:220;-1:-1:-1;;;1570:220:1:o;1795:186::-;1854:6;1907:2;1895:9;1886:7;1882:23;1878:32;1875:52;;;1923:1;1920;1913:12;1875:52;1946:29;1965:9;1946:29;:::i;1986:260::-;2054:6;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;1986:260;;;;;:::o;2251:943::-;2405:6;2413;2421;2429;2437;2490:3;2478:9;2469:7;2465:23;2461:33;2458:53;;;2507:1;2504;2497:12;2458:53;2530:29;2549:9;2530:29;:::i;:::-;2520:39;;2578:38;2612:2;2601:9;2597:18;2578:38;:::i;:::-;2568:48;;2667:2;2656:9;2652:18;2639:32;2690:18;2731:2;2723:6;2720:14;2717:34;;;2747:1;2744;2737:12;2717:34;2770:61;2823:7;2814:6;2803:9;2799:22;2770:61;:::i;:::-;2760:71;;2884:2;2873:9;2869:18;2856:32;2840:48;;2913:2;2903:8;2900:16;2897:36;;;2929:1;2926;2919:12;2897:36;2952:63;3007:7;2996:8;2985:9;2981:24;2952:63;:::i;:::-;2942:73;;3068:3;3057:9;3053:19;3040:33;3024:49;;3098:2;3088:8;3085:16;3082:36;;;3114:1;3111;3104:12;3082:36;;3137:51;3180:7;3169:8;3158:9;3154:24;3137:51;:::i;:::-;3127:61;;;2251:943;;;;;;;;:::o;3199:606::-;3303:6;3311;3319;3327;3335;3388:3;3376:9;3367:7;3363:23;3359:33;3356:53;;;3405:1;3402;3395:12;3356:53;3428:29;3447:9;3428:29;:::i;:::-;3418:39;;3476:38;3510:2;3499:9;3495:18;3476:38;:::i;:::-;3466:48;;3561:2;3550:9;3546:18;3533:32;3523:42;;3612:2;3601:9;3597:18;3584:32;3574:42;;3667:3;3656:9;3652:19;3639:33;3695:18;3687:6;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3750:49;3791:7;3782:6;3771:9;3767:22;3750:49;:::i;3810:254::-;3875:6;3883;3936:2;3924:9;3915:7;3911:23;3907:32;3904:52;;;3952:1;3949;3942:12;3904:52;3975:29;3994:9;3975:29;:::i;:::-;3965:39;;4023:35;4054:2;4043:9;4039:18;4023:35;:::i;4069:254::-;4137:6;4145;4198:2;4186:9;4177:7;4173:23;4169:32;4166:52;;;4214:1;4211;4204:12;4166:52;4237:29;4256:9;4237:29;:::i;:::-;4227:39;4313:2;4298:18;;;;4285:32;;-1:-1:-1;;;4069:254:1:o;4328:689::-;4420:6;4428;4436;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;4545:9;4532:23;4574:18;4615:2;4607:6;4604:14;4601:34;;;4631:1;4628;4621:12;4601:34;4669:6;4658:9;4654:22;4644:32;;4714:7;4707:4;4703:2;4699:13;4695:27;4685:55;;4736:1;4733;4726:12;4685:55;4776:2;4763:16;4802:2;4794:6;4791:14;4788:34;;;4818:1;4815;4808:12;4788:34;4873:7;4866:4;4856:6;4853:1;4849:14;4845:2;4841:23;4837:34;4834:47;4831:67;;;4894:1;4891;4884:12;4831:67;4925:4;4917:13;;;;-1:-1:-1;4949:6:1;-1:-1:-1;4974:37:1;;4990:20;;;-1:-1:-1;4974:37:1;:::i;:::-;4964:47;;4328:689;;;;;:::o;5022:1219::-;5140:6;5148;5201:2;5189:9;5180:7;5176:23;5172:32;5169:52;;;5217:1;5214;5207:12;5169:52;5257:9;5244:23;5286:18;5327:2;5319:6;5316:14;5313:34;;;5343:1;5340;5333:12;5313:34;5381:6;5370:9;5366:22;5356:32;;5426:7;5419:4;5415:2;5411:13;5407:27;5397:55;;5448:1;5445;5438:12;5397:55;5484:2;5471:16;5506:4;5529:43;5569:2;5529:43;:::i;:::-;5601:2;5595:9;5613:31;5641:2;5633:6;5613:31;:::i;:::-;5679:18;;;5713:15;;;;-1:-1:-1;5748:11:1;;;5790:1;5786:10;;;5778:19;;5774:28;;5771:41;-1:-1:-1;5768:61:1;;;5825:1;5822;5815:12;5768:61;5847:1;5838:10;;5857:169;5871:2;5868:1;5865:9;5857:169;;;5928:23;5947:3;5928:23;:::i;:::-;5916:36;;5889:1;5882:9;;;;;5972:12;;;;6004;;5857:169;;;-1:-1:-1;6045:6:1;-1:-1:-1;;6089:18:1;;6076:32;;-1:-1:-1;;6120:16:1;;;6117:36;;;6149:1;6146;6139:12;6117:36;;6172:63;6227:7;6216:8;6205:9;6201:24;6172:63;:::i;:::-;6162:73;;;5022:1219;;;;;:::o;6246:180::-;6302:6;6355:2;6343:9;6334:7;6330:23;6326:32;6323:52;;;6371:1;6368;6361:12;6323:52;6394:26;6410:9;6394:26;:::i;6431:245::-;6489:6;6542:2;6530:9;6521:7;6517:23;6513:32;6510:52;;;6558:1;6555;6548:12;6510:52;6597:9;6584:23;6616:30;6640:5;6616:30;:::i;6681:249::-;6750:6;6803:2;6791:9;6782:7;6778:23;6774:32;6771:52;;;6819:1;6816;6809:12;6771:52;6851:9;6845:16;6870:30;6894:5;6870:30;:::i;6935:272::-;6993:6;7046:2;7034:9;7025:7;7021:23;7017:32;7014:52;;;7062:1;7059;7052:12;7014:52;7101:9;7088:23;7151:6;7144:5;7140:18;7133:5;7130:29;7120:57;;7173:1;7170;7163:12;7212:180;7271:6;7324:2;7312:9;7303:7;7299:23;7295:32;7292:52;;;7340:1;7337;7330:12;7292:52;-1:-1:-1;7363:23:1;;7212:180;-1:-1:-1;7212:180:1:o;7397:518::-;7475:6;7483;7536:2;7524:9;7515:7;7511:23;7507:32;7504:52;;;7552:1;7549;7542:12;7504:52;7588:9;7575:23;7565:33;;7649:2;7638:9;7634:18;7621:32;7676:18;7668:6;7665:30;7662:50;;;7708:1;7705;7698:12;7662:50;7731:22;;7784:4;7776:13;;7772:27;-1:-1:-1;7762:55:1;;7813:1;7810;7803:12;7762:55;7836:73;7901:7;7896:2;7883:16;7878:2;7874;7870:11;7836:73;:::i;7920:248::-;7988:6;7996;8049:2;8037:9;8028:7;8024:23;8020:32;8017:52;;;8065:1;8062;8055:12;8017:52;-1:-1:-1;;8088:23:1;;;8158:2;8143:18;;;8130:32;;-1:-1:-1;7920:248:1:o;8173:435::-;8226:3;8264:5;8258:12;8291:6;8286:3;8279:19;8317:4;8346:2;8341:3;8337:12;8330:19;;8383:2;8376:5;8372:14;8404:1;8414:169;8428:6;8425:1;8422:13;8414:169;;;8489:13;;8477:26;;8523:12;;;;8558:15;;;;8450:1;8443:9;8414:169;;;-1:-1:-1;8599:3:1;;8173:435;-1:-1:-1;;;;;8173:435:1:o;8613:471::-;8654:3;8692:5;8686:12;8719:6;8714:3;8707:19;8744:1;8754:162;8768:6;8765:1;8762:13;8754:162;;;8830:4;8886:13;;;8882:22;;8876:29;8858:11;;;8854:20;;8847:59;8783:12;8754:162;;;8934:6;8931:1;8928:13;8925:87;;;9000:1;8993:4;8984:6;8979:3;8975:16;8971:27;8964:38;8925:87;-1:-1:-1;9066:2:1;9045:15;-1:-1:-1;;9041:29:1;9032:39;;;;9073:4;9028:50;;8613:471;-1:-1:-1;;8613:471:1:o;9297:826::-;-1:-1:-1;;;;;9694:15:1;;;9676:34;;9746:15;;9741:2;9726:18;;9719:43;9656:3;9793:2;9778:18;;9771:31;;;9619:4;;9825:57;;9862:19;;9854:6;9825:57;:::i;:::-;9930:9;9922:6;9918:22;9913:2;9902:9;9898:18;9891:50;9964:44;10001:6;9993;9964:44;:::i;:::-;9950:58;;10057:9;10049:6;10045:22;10039:3;10028:9;10024:19;10017:51;10085:32;10110:6;10102;10085:32;:::i;:::-;10077:40;9297:826;-1:-1:-1;;;;;;;;9297:826:1:o;10128:560::-;-1:-1:-1;;;;;10425:15:1;;;10407:34;;10477:15;;10472:2;10457:18;;10450:43;10524:2;10509:18;;10502:34;;;10567:2;10552:18;;10545:34;;;10387:3;10610;10595:19;;10588:32;;;10350:4;;10637:45;;10662:19;;10654:6;10637:45;:::i;:::-;10629:53;10128:560;-1:-1:-1;;;;;;;10128:560:1:o;10693:261::-;10872:2;10861:9;10854:21;10835:4;10892:56;10944:2;10933:9;10929:18;10921:6;10892:56;:::i;10959:465::-;11216:2;11205:9;11198:21;11179:4;11242:56;11294:2;11283:9;11279:18;11271:6;11242:56;:::i;:::-;11346:9;11338:6;11334:22;11329:2;11318:9;11314:18;11307:50;11374:44;11411:6;11403;11374:44;:::i;:::-;11366:52;10959:465;-1:-1:-1;;;;;10959:465:1:o;11621:219::-;11770:2;11759:9;11752:21;11733:4;11790:44;11830:2;11819:9;11815:18;11807:6;11790:44;:::i;12974:404::-;13176:2;13158:21;;;13215:2;13195:18;;;13188:30;13254:34;13249:2;13234:18;;13227:62;-1:-1:-1;;;13320:2:1;13305:18;;13298:38;13368:3;13353:19;;12974:404::o;16705:401::-;16907:2;16889:21;;;16946:2;16926:18;;;16919:30;16985:34;16980:2;16965:18;;16958:62;-1:-1:-1;;;17051:2:1;17036:18;;17029:35;17096:3;17081:19;;16705:401::o;17530:406::-;17732:2;17714:21;;;17771:2;17751:18;;;17744:30;17810:34;17805:2;17790:18;;17783:62;-1:-1:-1;;;17876:2:1;17861:18;;17854:40;17926:3;17911:19;;17530:406::o;18282:356::-;18484:2;18466:21;;;18503:18;;;18496:30;18562:34;18557:2;18542:18;;18535:62;18629:2;18614:18;;18282:356::o;21060:183::-;21120:4;21153:18;21145:6;21142:30;21139:56;;;21175:18;;:::i;:::-;-1:-1:-1;21220:1:1;21216:14;21232:4;21212:25;;21060:183::o;21248:128::-;21288:3;21319:1;21315:6;21312:1;21309:13;21306:39;;;21325:18;;:::i;:::-;-1:-1:-1;21361:9:1;;21248:128::o;21381:217::-;21421:1;21447;21437:132;;21491:10;21486:3;21482:20;21479:1;21472:31;21526:4;21523:1;21516:15;21554:4;21551:1;21544:15;21437:132;-1:-1:-1;21583:9:1;;21381:217::o;21603:168::-;21643:7;21709:1;21705;21701:6;21697:14;21694:1;21691:21;21686:1;21679:9;21672:17;21668:45;21665:71;;;21716:18;;:::i;:::-;-1:-1:-1;21756:9:1;;21603:168::o;21776:125::-;21816:4;21844:1;21841;21838:8;21835:34;;;21849:18;;:::i;:::-;-1:-1:-1;21886:9:1;;21776:125::o;21906:380::-;21985:1;21981:12;;;;22028;;;22049:61;;22103:4;22095:6;22091:17;22081:27;;22049:61;22156:2;22148:6;22145:14;22125:18;22122:38;22119:161;;;22202:10;22197:3;22193:20;22190:1;22183:31;22237:4;22234:1;22227:15;22265:4;22262:1;22255:15;22119:161;;21906:380;;;:::o;22291:249::-;22401:2;22382:13;;-1:-1:-1;;22378:27:1;22366:40;;22436:18;22421:34;;22457:22;;;22418:62;22415:88;;;22483:18;;:::i;:::-;22519:2;22512:22;-1:-1:-1;;22291:249:1:o;22545:135::-;22584:3;-1:-1:-1;;22605:17:1;;22602:43;;;22625:18;;:::i;:::-;-1:-1:-1;22672:1:1;22661:13;;22545:135::o;22685:127::-;22746:10;22741:3;22737:20;22734:1;22727:31;22777:4;22774:1;22767:15;22801:4;22798:1;22791:15;22817:127;22878:10;22873:3;22869:20;22866:1;22859:31;22909:4;22906:1;22899:15;22933:4;22930:1;22923:15;22949:127;23010:10;23005:3;23001:20;22998:1;22991:31;23041:4;23038:1;23031:15;23065:4;23062:1;23055:15;23081:179;23116:3;23158:1;23140:16;23137:23;23134:120;;;23204:1;23201;23198;23183:23;-1:-1:-1;23241:1:1;23235:8;23230:3;23226:18;23134:120;23081:179;:::o;23265:671::-;23304:3;23346:4;23328:16;23325:26;23322:39;;;23265:671;:::o;23322:39::-;23388:2;23382:9;-1:-1:-1;;23453:16:1;23449:25;;23446:1;23382:9;23425:50;23504:4;23498:11;23528:16;23563:18;23634:2;23627:4;23619:6;23615:17;23612:25;23607:2;23599:6;23596:14;23593:45;23590:58;;;23641:5;;;;;23265:671;:::o;23590:58::-;23678:6;23672:4;23668:17;23657:28;;23714:3;23708:10;23741:2;23733:6;23730:14;23727:27;;;23747:5;;;;;;23265:671;:::o;23727:27::-;23831:2;23812:16;23806:4;23802:27;23798:36;23791:4;23782:6;23777:3;23773:16;23769:27;23766:69;23763:82;;;23838:5;;;;;;23265:671;:::o;23763:82::-;23854:57;23905:4;23896:6;23888;23884:19;23880:30;23874:4;23854:57;:::i;:::-;-1:-1:-1;23927:3:1;;23265:671;-1:-1:-1;;;;;23265:671:1:o;23941:131::-;-1:-1:-1;;;;;;24015:32:1;;24005:43;;23995:71;;24062:1;24059;24052:12

Swarm Source

ipfs://7d5c7601d918b0f7bf0d233be895f6b8ce689951bdfde58311e9f98af851b35b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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