ETH Price: $2,644.07 (+0.66%)

Token

Pepellars (PPLL)
 

Overview

Max Total Supply

1,179,884 PPLL

Holders

88

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
apeology.eth
0x808d7d9958874d800d2c4dd02336240384773372
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:
PEPELLARS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-15
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.13;


library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

// File: @openzeppelin/contracts/token/ERC1155/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 (last updated v4.6.0) (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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

        _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);

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _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);

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @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);

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/IncubateX.sol


pragma solidity ^0.8.0;







library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}






contract PEPELLARS is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply {
    using Strings for uint256;
    using SafeMath for uint256;
    

    string public constant name = "Pepellars";
    string public constant symbol = "PPLL";
    string baseURI = "";


    uint256 public MAX_SUPPLY = 1000000;
    uint256 public publicSaleLimit = 1000000;
    uint256 public walletLimit = 50000;

    address public deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    
    
    uint256 public price = .00018 ether; 

    uint256 public wlEndTime;
    uint256 public publicEndTime;


    
    uint256 public constant PEPELLAR = 1;
    uint256 public constant mPEPELLAR = 2;
    

    

    bool public paused = true;
    bool public publicMintActive = false;


    bytes32 private merkleRoot;

    enum Packs {
        HUNDRED,
        THOUSAND
    }
    
    


    constructor(string memory _uri) ERC1155("") {
        baseURI = _uri;
 
        
    }

    

    function setURIs(string memory _newuri) public onlyOwner {
        baseURI = _newuri;
    }

     function uri(uint256 tokenId) public view override returns (string memory) {
        return (
            string(
                abi.encodePacked(baseURI, Strings.toString(tokenId), ".json")
            )
        );
    }

    function getMerkleRoot() private view returns (bytes32) {
        return (merkleRoot);
    }

    

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }


    function whitelistMint(bytes32[] calldata merkleproof, uint256 amount) external payable {
        require(!paused, "contract is paused");
        require(block.timestamp < wlEndTime, "Whitelist mint has already ended");
        require(
            isValid(merkleproof, keccak256(abi.encodePacked(msg.sender))), "Not approved. Contact support."
        );
        require(balanceOf(msg.sender, PEPELLAR) + amount <= walletLimit, "Requested amount exceeds wallet limit");
        require(msg.value >= price * amount, "Insufficient value sent");
        
        _mint(msg.sender, PEPELLAR, amount, "");
        _mint(msg.sender, mPEPELLAR, amount, "");
        
        
/*
        if(_pack == Packs.THOUSAND){
            require(balanceOf(msg.sender, PEPELLAR) + 1000 <= walletLimit, "Requested amount exceeds wallet limit");
            require(totalSupply(PEPELLAR) + 1000 <= publicSaleLimit, "Requested amount exceeds public sale limit");
            require(msg.value >= price * 1000, "Insufficient value sent for thousand pack");
           
            _mint(msg.sender, PEPELLAR, 1000, "");
            _mint(msg.sender, mPEPELLAR, 1000, "");
        } else {
            require(balanceOf(msg.sender, PEPELLAR) + 100 <= walletLimit, "Requested amount exceeds wallet limit");
            require(totalSupply(PEPELLAR) + 100 <= publicSaleLimit, "Requested amount exceeds public sale limit");
            require(msg.value >= price * 100, "Insufficient value sent for hundred pack");
            _mint(msg.sender, PEPELLAR, 100, "");
        }*/


    }


    function isValid(bytes32[] memory merkleproof, bytes32 leaf)
        public
        view
        returns (bool)
    {
        return MerkleProof.verify(merkleproof, merkleRoot, leaf);
    }

   


    function mint(uint256 amount) public payable {
        require(!paused, "contract is paused");
        require(publicMintActive, "public mint has not begun");
        require(block.timestamp < publicEndTime, "Public mint has already ended");
        require(balanceOf(msg.sender, PEPELLAR) + amount <= walletLimit, "Requested amount exceeds wallet limit");
        require(msg.value >= price * amount, "Insufficient value sent");
        
        _mint(msg.sender, PEPELLAR, amount, "");
        _mint(msg.sender, mPEPELLAR, amount, "");
        /*
        if(_pack == Packs.THOUSAND){
            require(balanceOf(msg.sender, PEPELLAR) + 1000 <= walletLimit, "Requested amount exceeds wallet limit");
            require(msg.value >= price * 1000, "Insufficient value sent for thousand pack");
           
            _mint(msg.sender, PEPELLAR, 1000, "");
            _mint(msg.sender, mPEPELLAR, 1000, "");
        } else {
            require(balanceOf(msg.sender, PEPELLAR) + 100 <= walletLimit, "Requested amount exceeds wallet limit");
            require(msg.value >= price * 100, "Insufficient value sent for hundred pack");
            _mint(msg.sender, PEPELLAR, 100, "");
        }*/
        
    }


    function startWhitelistPhase() external onlyOwner {
        paused = false;
        wlEndTime = block.timestamp + 172800; //2 days
    }

    function startPublicPhase() external onlyOwner {
        if(paused){
            paused = false;
        }
        publicMintActive = true;
        publicEndTime = block.timestamp + 1728000; //20 days
    }
    
    
     function setPrice(uint256 _newPrice) external onlyOwner{
         price = _newPrice;
     }

     function setWalletLimit(uint256 _newLimit) external onlyOwner{
         walletLimit = _newLimit;
     }
     
     

    function pause(bool _state) external onlyOwner {
        paused = _state;
    }
    
   

    function setMerkleRoot(bytes32 _root) external onlyOwner{
        merkleRoot = _root;
       
    }


    function emergencyWithdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function airdrop(address beneficiary, uint256 tokenId, uint256 quantity) external onlyOwner{
        require(totalSupply(PEPELLAR) + quantity <= MAX_SUPPLY, "Max supply of Pepellar exceeded");
        _mint(beneficiary, tokenId, quantity, "");
    }

    function finalBurn() external onlyOwner {
        require(block.timestamp > publicEndTime, "Public mint has not ended");
        require(publicSaleLimit > totalSupply(PEPELLAR), "No Pepellar to burn");
        uint256 remainder = publicSaleLimit - totalSupply(PEPELLAR);
        _mint(deadAddress, PEPELLAR, remainder, "");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPELLAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalBurn","outputs":[],"stateMutability":"nonpayable","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":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mPEPELLAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelistPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","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":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a0604052600060809081526005906200001a9082620001ce565b50620f4240600681905560075561c350600855600980546001600160a01b03191661dead17905565a3b5840f4000600a55600d805461ffff191660011790553480156200006657600080fd5b50604051620033253803806200332583398101604081905262000089916200029a565b604080516020810190915260008152620000a381620000c5565b50620000af33620000d7565b6005620000bd8282620001ce565b50506200036f565b6002620000d38282620001ce565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015457607f821691505b6020821081036200017557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c957600081815260208120601f850160051c81016020861015620001a45750805b601f850160051c820191505b81811015620001c557828155600101620001b0565b5050505b505050565b81516001600160401b03811115620001ea57620001ea62000129565b6200020281620001fb84546200013f565b846200017b565b602080601f8311600181146200023a5760008415620002215750858301515b600019600386901b1c1916600185901b178555620001c5565b600085815260208120601f198616915b828110156200026b578886015182559484019460019091019084016200024a565b50858210156200028a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808385031215620002ae57600080fd5b82516001600160401b0380821115620002c657600080fd5b818501915085601f830112620002db57600080fd5b815181811115620002f057620002f062000129565b604051601f8201601f19908116603f011681019083821181831017156200031b576200031b62000129565b8160405282815288868487010111156200033457600080fd5b600093505b8284101562000358578484018601518185018701529285019262000339565b600086848301015280965050505050505092915050565b612fa6806200037f6000396000f3fe6080604052600436106102455760003560e01c80637cb6475911610139578063b8a20ed0116100b6578063e1bc29671161007a578063e1bc296714610696578063e985e9c5146106b6578063f1d5f517146106ff578063f242432a1461071f578063f2fde38b1461073f578063f5298aca1461075f57600080fd5b8063b8a20ed01461060a578063bd85b0391461062a578063d4bf5cc314610657578063db2e21bc1461066c578063deaf33b21461068157600080fd5b8063a0712d68116100fd578063a0712d681461058e578063a22cb465146105a1578063a5775a8d146105c1578063b67c25a3146105d6578063b717cc09146105f557600080fd5b80637cb64759146104ea5780638da5cb5b1461050a57806391b7f5ed1461052857806395d89b4114610548578063a035b1fe1461057857600080fd5b806332cb6b0c116101c75780635c975abb1161018b5780635c975abb146104705780636b20c4541461048a5780636e3de87c146104aa578063715018a6146104c057806374cd2aa5146104d557600080fd5b806332cb6b0c146103d25780633c8463a1146103e857806347a54148146103fe5780634e1273f4146104145780634f558e791461044157600080fd5b806327c8f8351161020e57806327c8f835146103315780632904e6d9146103695780632c27e5811461037c5780632eb2c2d6146103925780633031fa1a146103b257600080fd5b8062fdd58e1461024a57806301ffc9a71461027d57806302329a29146102ad57806306fdde03146102cf5780630e89341c14610311575b600080fd5b34801561025657600080fd5b5061026a6102653660046121db565b61077f565b6040519081526020015b60405180910390f35b34801561028957600080fd5b5061029d61029836600461221b565b610819565b6040519015158152602001610274565b3480156102b957600080fd5b506102cd6102c8366004612248565b610869565b005b3480156102db57600080fd5b5061030460405180604001604052806009815260200168506570656c6c61727360b81b81525081565b60405161027491906122b3565b34801561031d57600080fd5b5061030461032c3660046122c6565b6108a6565b34801561033d57600080fd5b50600954610351906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b6102cd6103773660046122df565b6108da565b34801561038857600080fd5b5061026a600c5481565b34801561039e57600080fd5b506102cd6103ad3660046124ac565b610b00565b3480156103be57600080fd5b506102cd6103cd366004612555565b610b97565b3480156103de57600080fd5b5061026a60065481565b3480156103f457600080fd5b5061026a60085481565b34801561040a57600080fd5b5061026a600b5481565b34801561042057600080fd5b5061043461042f36600461259d565b610bd1565b60405161027491906126a2565b34801561044d57600080fd5b5061029d61045c3660046122c6565b600090815260046020526040902054151590565b34801561047c57600080fd5b50600d5461029d9060ff1681565b34801561049657600080fd5b506102cd6104a53660046126b5565b610cfa565b3480156104b657600080fd5b5061026a60075481565b3480156104cc57600080fd5b506102cd610d3d565b3480156104e157600080fd5b506102cd610d73565b3480156104f657600080fd5b506102cd6105053660046122c6565b610ed1565b34801561051657600080fd5b506003546001600160a01b0316610351565b34801561053457600080fd5b506102cd6105433660046122c6565b610f00565b34801561055457600080fd5b50610304604051806040016040528060048152602001631414131360e21b81525081565b34801561058457600080fd5b5061026a600a5481565b6102cd61059c3660046122c6565b610f2f565b3480156105ad57600080fd5b506102cd6105bc366004612728565b6110e5565b3480156105cd57600080fd5b5061026a600181565b3480156105e257600080fd5b50600d5461029d90610100900460ff1681565b34801561060157600080fd5b506102cd6110f0565b34801561061657600080fd5b5061029d61062536600461275b565b611136565b34801561063657600080fd5b5061026a6106453660046122c6565b60009081526004602052604090205490565b34801561066357600080fd5b5061026a600281565b34801561067857600080fd5b506102cd61114c565b34801561068d57600080fd5b506102cd6111a2565b3480156106a257600080fd5b506102cd6106b13660046127fc565b611203565b3480156106c257600080fd5b5061029d6106d136600461282f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b506102cd61071a3660046122c6565b6112d0565b34801561072b57600080fd5b506102cd61073a366004612859565b6112ff565b34801561074b57600080fd5b506102cd61075a3660046128bd565b611386565b34801561076b57600080fd5b506102cd61077a3660046127fc565b61141e565b60006001600160a01b0383166107f05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061084a57506001600160e01b031982166303a24d0760e21b145b8061081357506301ffc9a760e01b6001600160e01b0319831614610813565b6003546001600160a01b031633146108935760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff1916911515919091179055565b606060056108b383611461565b6040516020016108c4929190612947565b6040516020818303038152906040529050919050565b600d5460ff16156109225760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600b5442106109735760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e742068617320616c726561647920656e64656460448201526064016107e7565b6109e9838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040516bffffffffffffffffffffffff193360601b16602082015260340191506109ce9050565b60405160208183030381529060405280519060200120611136565b610a355760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617070726f7665642e20436f6e7461637420737570706f72742e000060448201526064016107e7565b60085481610a4433600161077f565b610a4e91906129f4565b1115610a6c5760405162461bcd60e51b81526004016107e790612a07565b80600a54610a7a9190612a4c565b341015610ac35760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b610adf3360018360405180602001604052806000815250611569565b610afb3360028360405180602001604052806000815250611569565b505050565b6001600160a01b038516331480610b1c5750610b1c85336106d1565b610b835760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107e7565b610b90858585858561168c565b5050505050565b6003546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107e7906128d8565b6005610bcd8282612aa9565b5050565b60608151835114610c365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107e7565b600083516001600160401b03811115610c5157610c51612359565b604051908082528060200260200182016040528015610c7a578160200160208202803683370190505b50905060005b8451811015610cf257610cc5858281518110610c9e57610c9e612b68565b6020026020010151858381518110610cb857610cb8612b68565b602002602001015161077f565b828281518110610cd757610cd7612b68565b6020908102919091010152610ceb81612b7e565b9050610c80565b509392505050565b6001600160a01b038316331480610d165750610d1683336106d1565b610d325760405162461bcd60e51b81526004016107e790612b97565b610afb838383611836565b6003546001600160a01b03163314610d675760405162461bcd60e51b81526004016107e7906128d8565b610d7160006119d3565b565b6003546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107e7906128d8565b600c544211610dee5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e7420686173206e6f7420656e6465640000000000000060448201526064016107e7565b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460075411610e605760405162461bcd60e51b81526020600482015260136024820152722737902832b832b63630b9103a3790313ab93760691b60448201526064016107e7565b6001600090815260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554600754610e9b9190612be6565b9050610ece600960009054906101000a90046001600160a01b031660018360405180602001604052806000815250611569565b50565b6003546001600160a01b03163314610efb5760405162461bcd60e51b81526004016107e7906128d8565b600e55565b6003546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016107e7906128d8565b600a55565b600d5460ff1615610f775760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600d54610100900460ff16610fce5760405162461bcd60e51b815260206004820152601960248201527f7075626c6963206d696e7420686173206e6f7420626567756e0000000000000060448201526064016107e7565b600c54421061101f5760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e742068617320616c726561647920656e64656400000060448201526064016107e7565b6008548161102e33600161077f565b61103891906129f4565b11156110565760405162461bcd60e51b81526004016107e790612a07565b80600a546110649190612a4c565b3410156110ad5760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b6110c93360018360405180602001604052806000815250611569565b610ece3360028360405180602001604052806000815250611569565b610bcd338383611a25565b6003546001600160a01b0316331461111a5760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff19169055611131426202a3006129f4565b600b55565b600061114583600e5484611b05565b9392505050565b6003546001600160a01b031633146111765760405162461bcd60e51b81526004016107e7906128d8565b60405133904780156108fc02916000818181858888f19350505050158015610ece573d6000803e3d6000fd5b6003546001600160a01b031633146111cc5760405162461bcd60e51b81526004016107e7906128d8565b600d5460ff16156111e257600d805460ff191690555b600d805461ff0019166101001790556111fe42621a5e006129f4565b600c55565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016107e7906128d8565b600654600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546112679083906129f4565b11156112b55760405162461bcd60e51b815260206004820152601f60248201527f4d617820737570706c79206f6620506570656c6c61722065786365656465640060448201526064016107e7565b610afb83838360405180602001604052806000815250611569565b6003546001600160a01b031633146112fa5760405162461bcd60e51b81526004016107e7906128d8565b600855565b6001600160a01b03851633148061131b575061131b85336106d1565b6113795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107e7565b610b908585858585611b1b565b6003546001600160a01b031633146113b05760405162461bcd60e51b81526004016107e7906128d8565b6001600160a01b0381166114155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e7565b610ece816119d3565b6001600160a01b03831633148061143a575061143a83336106d1565b6114565760405162461bcd60e51b81526004016107e790612b97565b610afb838383611c53565b6060816000036114885750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114b2578061149c81612b7e565b91506114ab9050600a83612c0f565b915061148c565b6000816001600160401b038111156114cc576114cc612359565b6040519080825280601f01601f1916602001820160405280156114f6576020820181803683370190505b5090505b84156115615761150b600183612be6565b9150611518600a86612c23565b6115239060306129f4565b60f81b81838151811061153857611538612b68565b60200101906001600160f81b031916908160001a90535061155a600a86612c0f565b94506114fa565b949350505050565b6001600160a01b0384166115c95760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107e7565b3360006115d585611d6b565b905060006115e285611d6b565b90506115f383600089858589611db6565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116239084906129f4565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461168383600089898989611dc4565b50505050505050565b81518351146116ad5760405162461bcd60e51b81526004016107e790612c37565b6001600160a01b0384166116d35760405162461bcd60e51b81526004016107e790612c7f565b336116e2818787878787611db6565b60005b84518110156117c857600085828151811061170257611702612b68565b60200260200101519050600085838151811061172057611720612b68565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117705760405162461bcd60e51b81526004016107e790612cc4565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117ad9084906129f4565b92505081905550505050806117c190612b7e565b90506116e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611818929190612d0e565b60405180910390a461182e818787878787611f1f565b505050505050565b6001600160a01b03831661185c5760405162461bcd60e51b81526004016107e790612d3c565b805182511461187d5760405162461bcd60e51b81526004016107e790612c37565b60003390506118a081856000868660405180602001604052806000815250611db6565b60005b83518110156119655760008482815181106118c0576118c0612b68565b6020026020010151905060008483815181106118de576118de612b68565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561192e5760405162461bcd60e51b81526004016107e790612d7f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061195d81612b7e565b9150506118a3565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119b6929190612d0e565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611a985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107e7565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082611b128584611fda565b14949350505050565b6001600160a01b038416611b415760405162461bcd60e51b81526004016107e790612c7f565b336000611b4d85611d6b565b90506000611b5a85611d6b565b9050611b6a838989858589611db6565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015611bab5760405162461bcd60e51b81526004016107e790612cc4565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611be89084906129f4565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c48848a8a8a8a8a611dc4565b505050505050505050565b6001600160a01b038316611c795760405162461bcd60e51b81526004016107e790612d3c565b336000611c8584611d6b565b90506000611c9284611d6b565b9050611cb283876000858560405180602001604052806000815250611db6565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015611cf35760405162461bcd60e51b81526004016107e790612d7f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611683565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da557611da5612b68565b602090810291909101015292915050565b61182e868686868686612046565b6001600160a01b0384163b1561182e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611e089089908990889088908890600401612dc3565b6020604051808303816000875af1925050508015611e43575060408051601f3d908101601f19168201909252611e4091810190612e08565b60015b611eef57611e4f612e25565b806308c379a003611e885750611e63612e41565b80611e6e5750611e8a565b8060405162461bcd60e51b81526004016107e791906122b3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107e7565b6001600160e01b0319811663f23a6e6160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b6001600160a01b0384163b1561182e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611f639089908990889088908890600401612f12565b6020604051808303816000875af1925050508015611f9e575060408051601f3d908101601f19168201909252611f9b91810190612e08565b60015b611faa57611e4f612e25565b6001600160e01b0319811663bc197c8160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b600081815b8451811015610cf2576000858281518110611ffc57611ffc612b68565b602002602001015190508083116120225760008381526020829052604090209250612033565b600081815260208490526040902092505b508061203e81612b7e565b915050611fdf565b6001600160a01b0385166120cd5760005b83518110156120cb5782818151811061207257612072612b68565b60200260200101516004600086848151811061209057612090612b68565b6020026020010151815260200190815260200160002060008282546120b591906129f4565b909155506120c4905081612b7e565b9050612057565b505b6001600160a01b03841661182e5760005b83518110156116835760008482815181106120fb576120fb612b68565b60200260200101519050600084838151811061211957612119612b68565b602002602001015190506000600460008481526020019081526020016000205490508181101561219c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016107e7565b600092835260046020526040909220910390556121b881612b7e565b90506120de565b80356001600160a01b03811681146121d657600080fd5b919050565b600080604083850312156121ee57600080fd5b6121f7836121bf565b946020939093013593505050565b6001600160e01b031981168114610ece57600080fd5b60006020828403121561222d57600080fd5b813561114581612205565b803580151581146121d657600080fd5b60006020828403121561225a57600080fd5b61114582612238565b60005b8381101561227e578181015183820152602001612266565b50506000910152565b6000815180845261229f816020860160208601612263565b601f01601f19169290920160200192915050565b6020815260006111456020830184612287565b6000602082840312156122d857600080fd5b5035919050565b6000806000604084860312156122f457600080fd5b83356001600160401b038082111561230b57600080fd5b818601915086601f83011261231f57600080fd5b81358181111561232e57600080fd5b8760208260051b850101111561234357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561239457612394612359565b6040525050565b60006001600160401b038211156123b4576123b4612359565b5060051b60200190565b600082601f8301126123cf57600080fd5b813560206123dc8261239b565b6040516123e9828261236f565b83815260059390931b850182019282810191508684111561240957600080fd5b8286015b84811015612424578035835291830191830161240d565b509695505050505050565b60006001600160401b0383111561244857612448612359565b60405161245f601f8501601f19166020018261236f565b80915083815284848401111561247457600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261249d57600080fd5b6111458383356020850161242f565b600080600080600060a086880312156124c457600080fd5b6124cd866121bf565b94506124db602087016121bf565b935060408601356001600160401b03808211156124f757600080fd5b61250389838a016123be565b9450606088013591508082111561251957600080fd5b61252589838a016123be565b9350608088013591508082111561253b57600080fd5b506125488882890161248c565b9150509295509295909350565b60006020828403121561256757600080fd5b81356001600160401b0381111561257d57600080fd5b8201601f8101841361258e57600080fd5b6115618482356020840161242f565b600080604083850312156125b057600080fd5b82356001600160401b03808211156125c757600080fd5b818501915085601f8301126125db57600080fd5b813560206125e88261239b565b6040516125f5828261236f565b83815260059390931b850182019282810191508984111561261557600080fd5b948201945b8386101561263a5761262b866121bf565b8252948201949082019061261a565b9650508601359250508082111561265057600080fd5b5061265d858286016123be565b9150509250929050565b600081518084526020808501945080840160005b838110156126975781518752958201959082019060010161267b565b509495945050505050565b6020815260006111456020830184612667565b6000806000606084860312156126ca57600080fd5b6126d3846121bf565b925060208401356001600160401b03808211156126ef57600080fd5b6126fb878388016123be565b9350604086013591508082111561271157600080fd5b5061271e868287016123be565b9150509250925092565b6000806040838503121561273b57600080fd5b612744836121bf565b915061275260208401612238565b90509250929050565b6000806040838503121561276e57600080fd5b82356001600160401b0381111561278457600080fd5b8301601f8101851361279557600080fd5b803560206127a28261239b565b6040516127af828261236f565b83815260059390931b84018201928281019150888411156127cf57600080fd5b938201935b838510156127ed578435825293820193908201906127d4565b98969091013596505050505050565b60008060006060848603121561281157600080fd5b61281a846121bf565b95602085013595506040909401359392505050565b6000806040838503121561284257600080fd5b61284b836121bf565b9150612752602084016121bf565b600080600080600060a0868803121561287157600080fd5b61287a866121bf565b9450612888602087016121bf565b9350604086013592506060860135915060808601356001600160401b038111156128b157600080fd5b6125488882890161248c565b6000602082840312156128cf57600080fd5b611145826121bf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061292157607f821691505b60208210810361294157634e487b7160e01b600052602260045260246000fd5b50919050565b60008084546129558161290d565b6001828116801561296d5760018114612982576129b1565b60ff19841687528215158302870194506129b1565b8860005260208060002060005b858110156129a85781548a82015290840190820161298f565b50505082870194505b5050505083516129c5818360208801612263565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610813576108136129de565b60208082526025908201527f52657175657374656420616d6f756e7420657863656564732077616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b8082028115828204841417610813576108136129de565b601f821115610afb57600081815260208120601f850160051c81016020861015612a8a5750805b601f850160051c820191505b8181101561182e57828155600101612a96565b81516001600160401b03811115612ac257612ac2612359565b612ad681612ad0845461290d565b84612a63565b602080601f831160018114612b0b5760008415612af35750858301515b600019600386901b1c1916600185901b17855561182e565b600085815260208120601f198616915b82811015612b3a57888601518255948401946001909101908401612b1b565b5085821015612b585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201612b9057612b906129de565b5060010190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b81810381811115610813576108136129de565b634e487b7160e01b600052601260045260246000fd5b600082612c1e57612c1e612bf9565b500490565b600082612c3257612c32612bf9565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d216040830185612667565b8281036020840152612d338185612667565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612dfd90830184612287565b979650505050505050565b600060208284031215612e1a57600080fd5b815161114581612205565b600060033d1115612e3e5760046000803e5060005160e01c5b90565b600060443d1015612e4f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612e7e57505050505090565b8285019150815181811115612e965750505050505090565b843d8701016020828501011115612eb05750505050505090565b612ebf6020828601018761236f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612f3e90830186612667565b8281036060840152612f508186612667565b90508281036080840152612f648185612287565b9897505050505050505056fea264697066735822122095f0c5156356f6a4295d6076ab133ed2a212568249bb1aab310742c63633cce464736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a4b314c366f5671336d67514d39556a554579786d562f00000000000000000000

Deployed Bytecode

0x6080604052600436106102455760003560e01c80637cb6475911610139578063b8a20ed0116100b6578063e1bc29671161007a578063e1bc296714610696578063e985e9c5146106b6578063f1d5f517146106ff578063f242432a1461071f578063f2fde38b1461073f578063f5298aca1461075f57600080fd5b8063b8a20ed01461060a578063bd85b0391461062a578063d4bf5cc314610657578063db2e21bc1461066c578063deaf33b21461068157600080fd5b8063a0712d68116100fd578063a0712d681461058e578063a22cb465146105a1578063a5775a8d146105c1578063b67c25a3146105d6578063b717cc09146105f557600080fd5b80637cb64759146104ea5780638da5cb5b1461050a57806391b7f5ed1461052857806395d89b4114610548578063a035b1fe1461057857600080fd5b806332cb6b0c116101c75780635c975abb1161018b5780635c975abb146104705780636b20c4541461048a5780636e3de87c146104aa578063715018a6146104c057806374cd2aa5146104d557600080fd5b806332cb6b0c146103d25780633c8463a1146103e857806347a54148146103fe5780634e1273f4146104145780634f558e791461044157600080fd5b806327c8f8351161020e57806327c8f835146103315780632904e6d9146103695780632c27e5811461037c5780632eb2c2d6146103925780633031fa1a146103b257600080fd5b8062fdd58e1461024a57806301ffc9a71461027d57806302329a29146102ad57806306fdde03146102cf5780630e89341c14610311575b600080fd5b34801561025657600080fd5b5061026a6102653660046121db565b61077f565b6040519081526020015b60405180910390f35b34801561028957600080fd5b5061029d61029836600461221b565b610819565b6040519015158152602001610274565b3480156102b957600080fd5b506102cd6102c8366004612248565b610869565b005b3480156102db57600080fd5b5061030460405180604001604052806009815260200168506570656c6c61727360b81b81525081565b60405161027491906122b3565b34801561031d57600080fd5b5061030461032c3660046122c6565b6108a6565b34801561033d57600080fd5b50600954610351906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b6102cd6103773660046122df565b6108da565b34801561038857600080fd5b5061026a600c5481565b34801561039e57600080fd5b506102cd6103ad3660046124ac565b610b00565b3480156103be57600080fd5b506102cd6103cd366004612555565b610b97565b3480156103de57600080fd5b5061026a60065481565b3480156103f457600080fd5b5061026a60085481565b34801561040a57600080fd5b5061026a600b5481565b34801561042057600080fd5b5061043461042f36600461259d565b610bd1565b60405161027491906126a2565b34801561044d57600080fd5b5061029d61045c3660046122c6565b600090815260046020526040902054151590565b34801561047c57600080fd5b50600d5461029d9060ff1681565b34801561049657600080fd5b506102cd6104a53660046126b5565b610cfa565b3480156104b657600080fd5b5061026a60075481565b3480156104cc57600080fd5b506102cd610d3d565b3480156104e157600080fd5b506102cd610d73565b3480156104f657600080fd5b506102cd6105053660046122c6565b610ed1565b34801561051657600080fd5b506003546001600160a01b0316610351565b34801561053457600080fd5b506102cd6105433660046122c6565b610f00565b34801561055457600080fd5b50610304604051806040016040528060048152602001631414131360e21b81525081565b34801561058457600080fd5b5061026a600a5481565b6102cd61059c3660046122c6565b610f2f565b3480156105ad57600080fd5b506102cd6105bc366004612728565b6110e5565b3480156105cd57600080fd5b5061026a600181565b3480156105e257600080fd5b50600d5461029d90610100900460ff1681565b34801561060157600080fd5b506102cd6110f0565b34801561061657600080fd5b5061029d61062536600461275b565b611136565b34801561063657600080fd5b5061026a6106453660046122c6565b60009081526004602052604090205490565b34801561066357600080fd5b5061026a600281565b34801561067857600080fd5b506102cd61114c565b34801561068d57600080fd5b506102cd6111a2565b3480156106a257600080fd5b506102cd6106b13660046127fc565b611203565b3480156106c257600080fd5b5061029d6106d136600461282f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561070b57600080fd5b506102cd61071a3660046122c6565b6112d0565b34801561072b57600080fd5b506102cd61073a366004612859565b6112ff565b34801561074b57600080fd5b506102cd61075a3660046128bd565b611386565b34801561076b57600080fd5b506102cd61077a3660046127fc565b61141e565b60006001600160a01b0383166107f05760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061084a57506001600160e01b031982166303a24d0760e21b145b8061081357506301ffc9a760e01b6001600160e01b0319831614610813565b6003546001600160a01b031633146108935760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff1916911515919091179055565b606060056108b383611461565b6040516020016108c4929190612947565b6040516020818303038152906040529050919050565b600d5460ff16156109225760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600b5442106109735760405162461bcd60e51b815260206004820181905260248201527f57686974656c697374206d696e742068617320616c726561647920656e64656460448201526064016107e7565b6109e9838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040516bffffffffffffffffffffffff193360601b16602082015260340191506109ce9050565b60405160208183030381529060405280519060200120611136565b610a355760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617070726f7665642e20436f6e7461637420737570706f72742e000060448201526064016107e7565b60085481610a4433600161077f565b610a4e91906129f4565b1115610a6c5760405162461bcd60e51b81526004016107e790612a07565b80600a54610a7a9190612a4c565b341015610ac35760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b610adf3360018360405180602001604052806000815250611569565b610afb3360028360405180602001604052806000815250611569565b505050565b6001600160a01b038516331480610b1c5750610b1c85336106d1565b610b835760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016107e7565b610b90858585858561168c565b5050505050565b6003546001600160a01b03163314610bc15760405162461bcd60e51b81526004016107e7906128d8565b6005610bcd8282612aa9565b5050565b60608151835114610c365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107e7565b600083516001600160401b03811115610c5157610c51612359565b604051908082528060200260200182016040528015610c7a578160200160208202803683370190505b50905060005b8451811015610cf257610cc5858281518110610c9e57610c9e612b68565b6020026020010151858381518110610cb857610cb8612b68565b602002602001015161077f565b828281518110610cd757610cd7612b68565b6020908102919091010152610ceb81612b7e565b9050610c80565b509392505050565b6001600160a01b038316331480610d165750610d1683336106d1565b610d325760405162461bcd60e51b81526004016107e790612b97565b610afb838383611836565b6003546001600160a01b03163314610d675760405162461bcd60e51b81526004016107e7906128d8565b610d7160006119d3565b565b6003546001600160a01b03163314610d9d5760405162461bcd60e51b81526004016107e7906128d8565b600c544211610dee5760405162461bcd60e51b815260206004820152601960248201527f5075626c6963206d696e7420686173206e6f7420656e6465640000000000000060448201526064016107e7565b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe055460075411610e605760405162461bcd60e51b81526020600482015260136024820152722737902832b832b63630b9103a3790313ab93760691b60448201526064016107e7565b6001600090815260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554600754610e9b9190612be6565b9050610ece600960009054906101000a90046001600160a01b031660018360405180602001604052806000815250611569565b50565b6003546001600160a01b03163314610efb5760405162461bcd60e51b81526004016107e7906128d8565b600e55565b6003546001600160a01b03163314610f2a5760405162461bcd60e51b81526004016107e7906128d8565b600a55565b600d5460ff1615610f775760405162461bcd60e51b815260206004820152601260248201527118dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016107e7565b600d54610100900460ff16610fce5760405162461bcd60e51b815260206004820152601960248201527f7075626c6963206d696e7420686173206e6f7420626567756e0000000000000060448201526064016107e7565b600c54421061101f5760405162461bcd60e51b815260206004820152601d60248201527f5075626c6963206d696e742068617320616c726561647920656e64656400000060448201526064016107e7565b6008548161102e33600161077f565b61103891906129f4565b11156110565760405162461bcd60e51b81526004016107e790612a07565b80600a546110649190612a4c565b3410156110ad5760405162461bcd60e51b8152602060048201526017602482015276125b9cdd59999a58da595b9d081d985b1d59481cd95b9d604a1b60448201526064016107e7565b6110c93360018360405180602001604052806000815250611569565b610ece3360028360405180602001604052806000815250611569565b610bcd338383611a25565b6003546001600160a01b0316331461111a5760405162461bcd60e51b81526004016107e7906128d8565b600d805460ff19169055611131426202a3006129f4565b600b55565b600061114583600e5484611b05565b9392505050565b6003546001600160a01b031633146111765760405162461bcd60e51b81526004016107e7906128d8565b60405133904780156108fc02916000818181858888f19350505050158015610ece573d6000803e3d6000fd5b6003546001600160a01b031633146111cc5760405162461bcd60e51b81526004016107e7906128d8565b600d5460ff16156111e257600d805460ff191690555b600d805461ff0019166101001790556111fe42621a5e006129f4565b600c55565b6003546001600160a01b0316331461122d5760405162461bcd60e51b81526004016107e7906128d8565b600654600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546112679083906129f4565b11156112b55760405162461bcd60e51b815260206004820152601f60248201527f4d617820737570706c79206f6620506570656c6c61722065786365656465640060448201526064016107e7565b610afb83838360405180602001604052806000815250611569565b6003546001600160a01b031633146112fa5760405162461bcd60e51b81526004016107e7906128d8565b600855565b6001600160a01b03851633148061131b575061131b85336106d1565b6113795760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107e7565b610b908585858585611b1b565b6003546001600160a01b031633146113b05760405162461bcd60e51b81526004016107e7906128d8565b6001600160a01b0381166114155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e7565b610ece816119d3565b6001600160a01b03831633148061143a575061143a83336106d1565b6114565760405162461bcd60e51b81526004016107e790612b97565b610afb838383611c53565b6060816000036114885750506040805180820190915260018152600360fc1b602082015290565b8160005b81156114b2578061149c81612b7e565b91506114ab9050600a83612c0f565b915061148c565b6000816001600160401b038111156114cc576114cc612359565b6040519080825280601f01601f1916602001820160405280156114f6576020820181803683370190505b5090505b84156115615761150b600183612be6565b9150611518600a86612c23565b6115239060306129f4565b60f81b81838151811061153857611538612b68565b60200101906001600160f81b031916908160001a90535061155a600a86612c0f565b94506114fa565b949350505050565b6001600160a01b0384166115c95760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107e7565b3360006115d585611d6b565b905060006115e285611d6b565b90506115f383600089858589611db6565b6000868152602081815260408083206001600160a01b038b168452909152812080548792906116239084906129f4565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461168383600089898989611dc4565b50505050505050565b81518351146116ad5760405162461bcd60e51b81526004016107e790612c37565b6001600160a01b0384166116d35760405162461bcd60e51b81526004016107e790612c7f565b336116e2818787878787611db6565b60005b84518110156117c857600085828151811061170257611702612b68565b60200260200101519050600085838151811061172057611720612b68565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156117705760405162461bcd60e51b81526004016107e790612cc4565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906117ad9084906129f4565b92505081905550505050806117c190612b7e565b90506116e5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611818929190612d0e565b60405180910390a461182e818787878787611f1f565b505050505050565b6001600160a01b03831661185c5760405162461bcd60e51b81526004016107e790612d3c565b805182511461187d5760405162461bcd60e51b81526004016107e790612c37565b60003390506118a081856000868660405180602001604052806000815250611db6565b60005b83518110156119655760008482815181106118c0576118c0612b68565b6020026020010151905060008483815181106118de576118de612b68565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561192e5760405162461bcd60e51b81526004016107e790612d7f565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061195d81612b7e565b9150506118a3565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119b6929190612d0e565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611a985760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107e7565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082611b128584611fda565b14949350505050565b6001600160a01b038416611b415760405162461bcd60e51b81526004016107e790612c7f565b336000611b4d85611d6b565b90506000611b5a85611d6b565b9050611b6a838989858589611db6565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015611bab5760405162461bcd60e51b81526004016107e790612cc4565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611be89084906129f4565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611c48848a8a8a8a8a611dc4565b505050505050505050565b6001600160a01b038316611c795760405162461bcd60e51b81526004016107e790612d3c565b336000611c8584611d6b565b90506000611c9284611d6b565b9050611cb283876000858560405180602001604052806000815250611db6565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015611cf35760405162461bcd60e51b81526004016107e790612d7f565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611683565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611da557611da5612b68565b602090810291909101015292915050565b61182e868686868686612046565b6001600160a01b0384163b1561182e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611e089089908990889088908890600401612dc3565b6020604051808303816000875af1925050508015611e43575060408051601f3d908101601f19168201909252611e4091810190612e08565b60015b611eef57611e4f612e25565b806308c379a003611e885750611e63612e41565b80611e6e5750611e8a565b8060405162461bcd60e51b81526004016107e791906122b3565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016107e7565b6001600160e01b0319811663f23a6e6160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b6001600160a01b0384163b1561182e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611f639089908990889088908890600401612f12565b6020604051808303816000875af1925050508015611f9e575060408051601f3d908101601f19168201909252611f9b91810190612e08565b60015b611faa57611e4f612e25565b6001600160e01b0319811663bc197c8160e01b146116835760405162461bcd60e51b81526004016107e790612eca565b600081815b8451811015610cf2576000858281518110611ffc57611ffc612b68565b602002602001015190508083116120225760008381526020829052604090209250612033565b600081815260208490526040902092505b508061203e81612b7e565b915050611fdf565b6001600160a01b0385166120cd5760005b83518110156120cb5782818151811061207257612072612b68565b60200260200101516004600086848151811061209057612090612b68565b6020026020010151815260200190815260200160002060008282546120b591906129f4565b909155506120c4905081612b7e565b9050612057565b505b6001600160a01b03841661182e5760005b83518110156116835760008482815181106120fb576120fb612b68565b60200260200101519050600084838151811061211957612119612b68565b602002602001015190506000600460008481526020019081526020016000205490508181101561219c5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b60648201526084016107e7565b600092835260046020526040909220910390556121b881612b7e565b90506120de565b80356001600160a01b03811681146121d657600080fd5b919050565b600080604083850312156121ee57600080fd5b6121f7836121bf565b946020939093013593505050565b6001600160e01b031981168114610ece57600080fd5b60006020828403121561222d57600080fd5b813561114581612205565b803580151581146121d657600080fd5b60006020828403121561225a57600080fd5b61114582612238565b60005b8381101561227e578181015183820152602001612266565b50506000910152565b6000815180845261229f816020860160208601612263565b601f01601f19169290920160200192915050565b6020815260006111456020830184612287565b6000602082840312156122d857600080fd5b5035919050565b6000806000604084860312156122f457600080fd5b83356001600160401b038082111561230b57600080fd5b818601915086601f83011261231f57600080fd5b81358181111561232e57600080fd5b8760208260051b850101111561234357600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561239457612394612359565b6040525050565b60006001600160401b038211156123b4576123b4612359565b5060051b60200190565b600082601f8301126123cf57600080fd5b813560206123dc8261239b565b6040516123e9828261236f565b83815260059390931b850182019282810191508684111561240957600080fd5b8286015b84811015612424578035835291830191830161240d565b509695505050505050565b60006001600160401b0383111561244857612448612359565b60405161245f601f8501601f19166020018261236f565b80915083815284848401111561247457600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261249d57600080fd5b6111458383356020850161242f565b600080600080600060a086880312156124c457600080fd5b6124cd866121bf565b94506124db602087016121bf565b935060408601356001600160401b03808211156124f757600080fd5b61250389838a016123be565b9450606088013591508082111561251957600080fd5b61252589838a016123be565b9350608088013591508082111561253b57600080fd5b506125488882890161248c565b9150509295509295909350565b60006020828403121561256757600080fd5b81356001600160401b0381111561257d57600080fd5b8201601f8101841361258e57600080fd5b6115618482356020840161242f565b600080604083850312156125b057600080fd5b82356001600160401b03808211156125c757600080fd5b818501915085601f8301126125db57600080fd5b813560206125e88261239b565b6040516125f5828261236f565b83815260059390931b850182019282810191508984111561261557600080fd5b948201945b8386101561263a5761262b866121bf565b8252948201949082019061261a565b9650508601359250508082111561265057600080fd5b5061265d858286016123be565b9150509250929050565b600081518084526020808501945080840160005b838110156126975781518752958201959082019060010161267b565b509495945050505050565b6020815260006111456020830184612667565b6000806000606084860312156126ca57600080fd5b6126d3846121bf565b925060208401356001600160401b03808211156126ef57600080fd5b6126fb878388016123be565b9350604086013591508082111561271157600080fd5b5061271e868287016123be565b9150509250925092565b6000806040838503121561273b57600080fd5b612744836121bf565b915061275260208401612238565b90509250929050565b6000806040838503121561276e57600080fd5b82356001600160401b0381111561278457600080fd5b8301601f8101851361279557600080fd5b803560206127a28261239b565b6040516127af828261236f565b83815260059390931b84018201928281019150888411156127cf57600080fd5b938201935b838510156127ed578435825293820193908201906127d4565b98969091013596505050505050565b60008060006060848603121561281157600080fd5b61281a846121bf565b95602085013595506040909401359392505050565b6000806040838503121561284257600080fd5b61284b836121bf565b9150612752602084016121bf565b600080600080600060a0868803121561287157600080fd5b61287a866121bf565b9450612888602087016121bf565b9350604086013592506060860135915060808601356001600160401b038111156128b157600080fd5b6125488882890161248c565b6000602082840312156128cf57600080fd5b611145826121bf565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061292157607f821691505b60208210810361294157634e487b7160e01b600052602260045260246000fd5b50919050565b60008084546129558161290d565b6001828116801561296d5760018114612982576129b1565b60ff19841687528215158302870194506129b1565b8860005260208060002060005b858110156129a85781548a82015290840190820161298f565b50505082870194505b5050505083516129c5818360208801612263565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610813576108136129de565b60208082526025908201527f52657175657374656420616d6f756e7420657863656564732077616c6c6574206040820152641b1a5b5a5d60da1b606082015260800190565b8082028115828204841417610813576108136129de565b601f821115610afb57600081815260208120601f850160051c81016020861015612a8a5750805b601f850160051c820191505b8181101561182e57828155600101612a96565b81516001600160401b03811115612ac257612ac2612359565b612ad681612ad0845461290d565b84612a63565b602080601f831160018114612b0b5760008415612af35750858301515b600019600386901b1c1916600185901b17855561182e565b600085815260208120601f198616915b82811015612b3a57888601518255948401946001909101908401612b1b565b5085821015612b585787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201612b9057612b906129de565b5060010190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b81810381811115610813576108136129de565b634e487b7160e01b600052601260045260246000fd5b600082612c1e57612c1e612bf9565b500490565b600082612c3257612c32612bf9565b500690565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000612d216040830185612667565b8281036020840152612d338185612667565b95945050505050565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612dfd90830184612287565b979650505050505050565b600060208284031215612e1a57600080fd5b815161114581612205565b600060033d1115612e3e5760046000803e5060005160e01c5b90565b600060443d1015612e4f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612e7e57505050505090565b8285019150815181811115612e965750505050505090565b843d8701016020828501011115612eb05750505050505090565b612ebf6020828601018761236f565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090612f3e90830186612667565b8281036060840152612f508186612667565b90508281036080840152612f648185612287565b9897505050505050505056fea264697066735822122095f0c5156356f6a4295d6076ab133ed2a212568249bb1aab310742c63633cce464736f6c63430008120033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a4b314c366f5671336d67514d39556a554579786d562f00000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://QmReTuKqGVGcc54EHBYZGjMCJK1L6oVq3mgQM9UjUEyxmV/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d526554754b7147564763633534454842595a476a4d434a
Arg [3] : 4b314c366f5671336d67514d39556a554579786d562f00000000000000000000


Deployed Bytecode Sourcemap

54243:6439:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26399:231;;;;;;;;;;-1:-1:-1;26399:231:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;26399:231:0;;;;;;;;25422:310;;;;;;;;;;-1:-1:-1;25422:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;25422:310:0;1019:187:1;59745:81:0;;;;;;;;;;-1:-1:-1;59745:81:0;;;;;:::i;:::-;;:::i;:::-;;54394:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54394:41:0;;;;;;;;;;;;:::i;55368:228::-;;;;;;;;;;-1:-1:-1;55368:228:0;;;;;:::i;:::-;;:::i;54649:71::-;;;;;;;;;;-1:-1:-1;54649:71:0;;;;-1:-1:-1;;;;;54649:71:0;;;;;;-1:-1:-1;;;;;2666:32:1;;;2648:51;;2636:2;2621:18;54649:71:0;2502:203:1;56085:1588:0;;;;;;:::i;:::-;;:::i;54821:28::-;;;;;;;;;;;;;;;;28338:442;;;;;;;;;;-1:-1:-1;28338:442:0;;;;;:::i;:::-;;:::i;55266:93::-;;;;;;;;;;-1:-1:-1;55266:93:0;;;;;:::i;:::-;;:::i;54517:35::-;;;;;;;;;;;;;;;;54606:34;;;;;;;;;;;;;;;;54790:24;;;;;;;;;;;;;;;;26796:524;;;;;;;;;;-1:-1:-1;26796:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42730:122::-;;;;;;;;;;-1:-1:-1;42730:122:0;;;;;:::i;:::-;42787:4;42608:16;;;:12;:16;;;;;;-1:-1:-1;;;42730:122:0;54969:25;;;;;;;;;;-1:-1:-1;54969:25:0;;;;;;;;44646:359;;;;;;;;;;-1:-1:-1;44646:359:0;;;;;:::i;:::-;;:::i;54559:40::-;;;;;;;;;;;;;;;;5613:103;;;;;;;;;;;;;:::i;60343:334::-;;;;;;;;;;;;;:::i;59845:102::-;;;;;;;;;;-1:-1:-1;59845:102:0;;;;;:::i;:::-;;:::i;4962:87::-;;;;;;;;;;-1:-1:-1;5035:6:0;;-1:-1:-1;;;;;5035:6:0;4962:87;;59516:93;;;;;;;;;;-1:-1:-1;59516:93:0;;;;;:::i;:::-;;:::i;54442:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54442:38:0;;;;;54745:35;;;;;;;;;;;;;;;;57895:1233;;;;;;:::i;:::-;;:::i;27393:155::-;;;;;;;;;;-1:-1:-1;27393:155:0;;;;;:::i;:::-;;:::i;54866:36::-;;;;;;;;;;;;54901:1;54866:36;;55001;;;;;;;;;;-1:-1:-1;55001:36:0;;;;;;;;;;;59138:139;;;;;;;;;;;;;:::i;57683:195::-;;;;;;;;;;-1:-1:-1;57683:195:0;;;;;:::i;:::-;;:::i;42519:113::-;;;;;;;;;;-1:-1:-1;42519:113:0;;;;;:::i;:::-;42581:7;42608:16;;;:12;:16;;;;;;;42519:113;54909:37;;;;;;;;;;;;54945:1;54909:37;;59957:118;;;;;;;;;;;;;:::i;59285:212::-;;;;;;;;;;;;;:::i;60083:252::-;;;;;;;;;;-1:-1:-1;60083:252:0;;;;;:::i;:::-;;:::i;27620:168::-;;;;;;;;;;-1:-1:-1;27620:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;27743:27:0;;;27719:4;27743:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;27620:168;59618:105;;;;;;;;;;-1:-1:-1;59618:105:0;;;;;:::i;:::-;;:::i;27860:401::-;;;;;;;;;;-1:-1:-1;27860:401:0;;;;;:::i;:::-;;:::i;5871:201::-;;;;;;;;;;-1:-1:-1;5871:201:0;;;;;:::i;:::-;;:::i;44311:327::-;;;;;;;;;;-1:-1:-1;44311:327:0;;;;;:::i;:::-;;:::i;26399:231::-;26485:7;-1:-1:-1;;;;;26513:21:0;;26505:77;;;;-1:-1:-1;;;26505:77:0;;12469:2:1;26505:77:0;;;12451:21:1;12508:2;12488:18;;;12481:30;12547:34;12527:18;;;12520:62;-1:-1:-1;;;12598:18:1;;;12591:41;12649:19;;26505:77:0;;;;;;;;;-1:-1:-1;26600:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;26600:22:0;;;;;;;;;;26399:231;;;;;:::o;25422:310::-;25524:4;-1:-1:-1;;;;;;25561:41:0;;-1:-1:-1;;;25561:41:0;;:110;;-1:-1:-1;;;;;;;25619:52:0;;-1:-1:-1;;;25619:52:0;25561:110;:163;;;-1:-1:-1;;;;;;;;;;16824:40:0;;;25688:36;16715:157;59745:81;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59803:6:::1;:15:::0;;-1:-1:-1;;59803:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59745:81::o;55368:228::-;55428:13;55518:7;55527:25;55544:7;55527:16;:25::i;:::-;55501:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55454:134;;55368:228;;;:::o;56085:1588::-;56193:6;;;;56192:7;56184:38;;;;-1:-1:-1;;;56184:38:0;;14945:2:1;56184:38:0;;;14927:21:1;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:48;15061:18;;56184:38:0;14743:342:1;56184:38:0;56259:9;;56241:15;:27;56233:72;;;;-1:-1:-1;;;56233:72:0;;15292:2:1;56233:72:0;;;15274:21:1;;;15311:18;;;15304:30;15370:34;15350:18;;;15343:62;15422:18;;56233:72:0;15090:356:1;56233:72:0;56338:61;56346:11;;56338:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56369:28:0;;-1:-1:-1;;56386:10:0;15600:2:1;15596:15;15592:53;56369:28:0;;;15580:66:1;15662:12;;;-1:-1:-1;56369:28:0;;-1:-1:-1;15451:229:1;56369:28:0;;;;;;;;;;;;;56359:39;;;;;;56338:7;:61::i;:::-;56316:128;;;;-1:-1:-1;;;56316:128:0;;15887:2:1;56316:128:0;;;15869:21:1;15926:2;15906:18;;;15899:30;15965:32;15945:18;;;15938:60;16015:18;;56316:128:0;15685:354:1;56316:128:0;56507:11;;56497:6;56463:31;56473:10;54901:1;56463:9;:31::i;:::-;:40;;;;:::i;:::-;:55;;56455:105;;;;-1:-1:-1;;;56455:105:0;;;;;;;:::i;:::-;56600:6;56592:5;;:14;;;;:::i;:::-;56579:9;:27;;56571:63;;;;-1:-1:-1;;;56571:63:0;;17087:2:1;56571:63:0;;;17069:21:1;17126:2;17106:18;;;17099:30;-1:-1:-1;;;17145:18:1;;;17138:53;17208:18;;56571:63:0;16885:347:1;56571:63:0;56655:39;56661:10;54901:1;56683:6;56655:39;;;;;;;;;;;;:5;:39::i;:::-;56705:40;56711:10;54945:1;56734:6;56705:40;;;;;;;;;;;;:5;:40::i;:::-;56085:1588;;;:::o;28338:442::-;-1:-1:-1;;;;;28571:20:0;;3766:10;28571:20;;:60;;-1:-1:-1;28595:36:0;28612:4;3766:10;27620:168;:::i;28595:36::-;28549:160;;;;-1:-1:-1;;;28549:160:0;;17439:2:1;28549:160:0;;;17421:21:1;17478:2;17458:18;;;17451:30;17517:34;17497:18;;;17490:62;-1:-1:-1;;;17568:18:1;;;17561:48;17626:19;;28549:160:0;17237:414:1;28549:160:0;28720:52;28743:4;28749:2;28753:3;28758:7;28767:4;28720:22;:52::i;:::-;28338:442;;;;;:::o;55266:93::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;55334:7:::1;:17;55344:7:::0;55334;:17:::1;:::i;:::-;;55266:93:::0;:::o;26796:524::-;26952:16;27013:3;:10;26994:8;:15;:29;26986:83;;;;-1:-1:-1;;;26986:83:0;;19936:2:1;26986:83:0;;;19918:21:1;19975:2;19955:18;;;19948:30;20014:34;19994:18;;;19987:62;-1:-1:-1;;;20065:18:1;;;20058:39;20114:19;;26986:83:0;19734:405:1;26986:83:0;27082:30;27129:8;:15;-1:-1:-1;;;;;27115:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27115:30:0;;27082:63;;27163:9;27158:122;27182:8;:15;27178:1;:19;27158:122;;;27238:30;27248:8;27257:1;27248:11;;;;;;;;:::i;:::-;;;;;;;27261:3;27265:1;27261:6;;;;;;;;:::i;:::-;;;;;;;27238:9;:30::i;:::-;27219:13;27233:1;27219:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;27199:3;;;:::i;:::-;;;27158:122;;;-1:-1:-1;27299:13:0;26796:524;-1:-1:-1;;;26796:524:0:o;44646:359::-;-1:-1:-1;;;;;44811:23:0;;3766:10;44811:23;;:66;;-1:-1:-1;44838:39:0;44855:7;3766:10;27620:168;:::i;44838:39::-;44789:163;;;;-1:-1:-1;;;44789:163:0;;;;;;;:::i;:::-;44965:32;44976:7;44985:3;44990:6;44965:10;:32::i;5613:103::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;5678:30:::1;5705:1;5678:18;:30::i;:::-;5613:103::o:0;60343:334::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60420:13:::1;;60402:15;:31;60394:69;;;::::0;-1:-1:-1;;;60394:69:0;;21034:2:1;60394:69:0::1;::::0;::::1;21016:21:1::0;21073:2;21053:18;;;21046:30;21112:27;21092:18;;;21085:55;21157:18;;60394:69:0::1;20832:349:1::0;60394:69:0::1;54901:1;42581:7:::0;42608:16;:12;:16;;;;60482:15:::1;;:39;60474:71;;;::::0;-1:-1:-1;;;60474:71:0;;21388:2:1;60474:71:0::1;::::0;::::1;21370:21:1::0;21427:2;21407:18;;;21400:30;-1:-1:-1;;;21446:18:1;;;21439:49;21505:18;;60474:71:0::1;21186:343:1::0;60474:71:0::1;54901:1;60556:17;42608:16:::0;;;:12;:16;;;;60576:15:::1;;:39;;;;:::i;:::-;60556:59;;60626:43;60632:11;;;;;;;;;-1:-1:-1::0;;;;;60632:11:0::1;54901:1;60655:9;60626:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;60383:294;60343:334::o:0;59845:102::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59912:10:::1;:18:::0;59845:102::o;59516:93::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59583:5:::1;:17:::0;59516:93::o;57895:1233::-;57960:6;;;;57959:7;57951:38;;;;-1:-1:-1;;;57951:38:0;;14945:2:1;57951:38:0;;;14927:21:1;14984:2;14964:18;;;14957:30;-1:-1:-1;;;15003:18:1;;;14996:48;15061:18;;57951:38:0;14743:342:1;57951:38:0;58008:16;;;;;;;58000:54;;;;-1:-1:-1;;;58000:54:0;;21869:2:1;58000:54:0;;;21851:21:1;21908:2;21888:18;;;21881:30;21947:27;21927:18;;;21920:55;21992:18;;58000:54:0;21667:349:1;58000:54:0;58091:13;;58073:15;:31;58065:73;;;;-1:-1:-1;;;58065:73:0;;22223:2:1;58065:73:0;;;22205:21:1;22262:2;22242:18;;;22235:30;22301:31;22281:18;;;22274:59;22350:18;;58065:73:0;22021:353:1;58065:73:0;58201:11;;58191:6;58157:31;58167:10;54901:1;58157:9;:31::i;:::-;:40;;;;:::i;:::-;:55;;58149:105;;;;-1:-1:-1;;;58149:105:0;;;;;;;:::i;:::-;58294:6;58286:5;;:14;;;;:::i;:::-;58273:9;:27;;58265:63;;;;-1:-1:-1;;;58265:63:0;;17087:2:1;58265:63:0;;;17069:21:1;17126:2;17106:18;;;17099:30;-1:-1:-1;;;17145:18:1;;;17138:53;17208:18;;58265:63:0;16885:347:1;58265:63:0;58349:39;58355:10;54901:1;58377:6;58349:39;;;;;;;;;;;;:5;:39::i;:::-;58399:40;58405:10;54945:1;58428:6;58399:40;;;;;;;;;;;;:5;:40::i;27393:155::-;27488:52;3766:10;27521:8;27531;27488:18;:52::i;59138:139::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59199:6:::1;:14:::0;;-1:-1:-1;;59199:14:0::1;::::0;;59236:24:::1;:15;59254:6;59236:24;:::i;:::-;59224:9;:36:::0;59138:139::o;57683:195::-;57792:4;57821:49;57840:11;57853:10;;57865:4;57821:18;:49::i;:::-;57814:56;57683:195;-1:-1:-1;;;57683:195:0:o;59957:118::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60016:51:::1;::::0;60024:10:::1;::::0;60045:21:::1;60016:51:::0;::::1;;;::::0;::::1;::::0;;;60045:21;60024:10;60016:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;59285:212:::0;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59346:6:::1;::::0;::::1;;59343:51;;;59368:6;:14:::0;;-1:-1:-1;;59368:14:0::1;::::0;;59343:51:::1;59404:16;:23:::0;;-1:-1:-1;;59404:23:0::1;;;::::0;;59454:25:::1;:15;59472:7;59454:25;:::i;:::-;59438:13;:41:::0;59285:212::o;60083:252::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;60229:10:::1;::::0;54901:1:::1;42581:7:::0;42608:16;:12;:16;;;;60193:32:::1;::::0;60217:8;;60193:32:::1;:::i;:::-;:46;;60185:90;;;::::0;-1:-1:-1;;;60185:90:0;;22581:2:1;60185:90:0::1;::::0;::::1;22563:21:1::0;22620:2;22600:18;;;22593:30;22659:33;22639:18;;;22632:61;22710:18;;60185:90:0::1;22379:355:1::0;60185:90:0::1;60286:41;60292:11;60305:7;60314:8;60286:41;;;;;;;;;;;::::0;:5:::1;:41::i;59618:105::-:0;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;59691:11:::1;:23:::0;59618:105::o;27860:401::-;-1:-1:-1;;;;;28068:20:0;;3766:10;28068:20;;:60;;-1:-1:-1;28092:36:0;28109:4;3766:10;27620:168;:::i;28092:36::-;28046:151;;;;-1:-1:-1;;;28046:151:0;;22941:2:1;28046:151:0;;;22923:21:1;22980:2;22960:18;;;22953:30;23019:34;22999:18;;;22992:62;-1:-1:-1;;;23070:18:1;;;23063:39;23119:19;;28046:151:0;22739:405:1;28046:151:0;28208:45;28226:4;28232:2;28236;28240:6;28248:4;28208:17;:45::i;5871:201::-;5035:6;;-1:-1:-1;;;;;5035:6:0;3766:10;5182:23;5174:68;;;;-1:-1:-1;;;5174:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5960:22:0;::::1;5952:73;;;::::0;-1:-1:-1;;;5952:73:0;;23351:2:1;5952:73:0::1;::::0;::::1;23333:21:1::0;23390:2;23370:18;;;23363:30;23429:34;23409:18;;;23402:62;-1:-1:-1;;;23480:18:1;;;23473:36;23526:19;;5952:73:0::1;23149:402:1::0;5952:73:0::1;6036:28;6055:8;6036:18;:28::i;44311:327::-:0;-1:-1:-1;;;;;44451:23:0;;3766:10;44451:23;;:66;;-1:-1:-1;44478:39:0;44495:7;3766:10;27620:168;:::i;44478:39::-;44429:163;;;;-1:-1:-1;;;44429:163:0;;;;;;;:::i;:::-;44605:25;44611:7;44620:2;44624:5;44605;:25::i;1302:723::-;1358:13;1579:5;1588:1;1579:10;1575:53;;-1:-1:-1;;1606:10:0;;;;;;;;;;;;-1:-1:-1;;;1606:10:0;;;;;1302:723::o;1575:53::-;1653:5;1638:12;1694:78;1701:9;;1694:78;;1727:8;;;;:::i;:::-;;-1:-1:-1;1750:10:0;;-1:-1:-1;1758:2:0;1750:10;;:::i;:::-;;;1694:78;;;1782:19;1814:6;-1:-1:-1;;;;;1804:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1804:17:0;;1782:39;;1832:154;1839:10;;1832:154;;1866:11;1876:1;1866:11;;:::i;:::-;;-1:-1:-1;1935:10:0;1943:2;1935:5;:10;:::i;:::-;1922:24;;:2;:24;:::i;:::-;1909:39;;1892:6;1899;1892:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1892:56:0;;;;;;;;-1:-1:-1;1963:11:0;1972:2;1963:11;;:::i;:::-;;;1832:154;;;2010:6;1302:723;-1:-1:-1;;;;1302:723:0:o;33040:729::-;-1:-1:-1;;;;;33193:16:0;;33185:62;;;;-1:-1:-1;;;33185:62:0;;24132:2:1;33185:62:0;;;24114:21:1;24171:2;24151:18;;;24144:30;24210:34;24190:18;;;24183:62;-1:-1:-1;;;24261:18:1;;;24254:31;24302:19;;33185:62:0;23930:397:1;33185:62:0;3766:10;33260:16;33325:21;33343:2;33325:17;:21::i;:::-;33302:44;;33357:24;33384:25;33402:6;33384:17;:25::i;:::-;33357:52;;33422:66;33443:8;33461:1;33465:2;33469:3;33474:7;33483:4;33422:20;:66::i;:::-;33501:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33501:17:0;;;;;;;;;:27;;33522:6;;33501:9;:27;;33522:6;;33501:27;:::i;:::-;;;;-1:-1:-1;;33544:52:0;;;24506:25:1;;;24562:2;24547:18;;24540:34;;;-1:-1:-1;;;;;33544:52:0;;;;33577:1;;33544:52;;;;;;24479:18:1;33544:52:0;;;;;;;33687:74;33718:8;33736:1;33740:2;33744;33748:6;33756:4;33687:30;:74::i;:::-;33174:595;;;33040:729;;;;:::o;30576:1146::-;30803:7;:14;30789:3;:10;:28;30781:81;;;;-1:-1:-1;;;30781:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30881:16:0;;30873:66;;;;-1:-1:-1;;;30873:66:0;;;;;;;:::i;:::-;3766:10;30996:60;3766:10;31027:4;31033:2;31037:3;31042:7;31051:4;30996:20;:60::i;:::-;31074:9;31069:421;31093:3;:10;31089:1;:14;31069:421;;;31125:10;31138:3;31142:1;31138:6;;;;;;;;:::i;:::-;;;;;;;31125:19;;31159:14;31176:7;31184:1;31176:10;;;;;;;;:::i;:::-;;;;;;;;;;;;31203:19;31225:13;;;;;;;;;;-1:-1:-1;;;;;31225:19:0;;;;;;;;;;;;31176:10;;-1:-1:-1;31267:21:0;;;;31259:76;;;;-1:-1:-1;;;31259:76:0;;;;;;;:::i;:::-;31379:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31379:19:0;;;;;;;;;;31401:20;;;31379:42;;31451:17;;;;;;;:27;;31401:20;;31379:9;31451:27;;31401:20;;31451:27;:::i;:::-;;;;;;;;31110:380;;;31105:3;;;;:::i;:::-;;;31069:421;;;;31537:2;-1:-1:-1;;;;;31507:47:0;31531:4;-1:-1:-1;;;;;31507:47:0;31521:8;-1:-1:-1;;;;;31507:47:0;;31541:3;31546:7;31507:47;;;;;;;:::i;:::-;;;;;;;;31639:75;31675:8;31685:4;31691:2;31695:3;31700:7;31709:4;31639:35;:75::i;:::-;30770:952;30576:1146;;;;;:::o;36199:969::-;-1:-1:-1;;;;;36351:18:0;;36343:66;;;;-1:-1:-1;;;36343:66:0;;;;;;;:::i;:::-;36442:7;:14;36428:3;:10;:28;36420:81;;;;-1:-1:-1;;;36420:81:0;;;;;;;:::i;:::-;36514:16;3766:10;36514:31;;36558:66;36579:8;36589:4;36603:1;36607:3;36612:7;36558:66;;;;;;;;;;;;:20;:66::i;:::-;36642:9;36637:373;36661:3;:10;36657:1;:14;36637:373;;;36693:10;36706:3;36710:1;36706:6;;;;;;;;:::i;:::-;;;;;;;36693:19;;36727:14;36744:7;36752:1;36744:10;;;;;;;;:::i;:::-;;;;;;;;;;;;36771:19;36793:13;;;;;;;;;;-1:-1:-1;;;;;36793:19:0;;;;;;;;;;;;36744:10;;-1:-1:-1;36835:21:0;;;;36827:70;;;;-1:-1:-1;;;36827:70:0;;;;;;;:::i;:::-;36941:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36941:19:0;;;;;;;;;;36963:20;;36941:42;;36673:3;;;;:::i;:::-;;;;36637:373;;;;37065:1;-1:-1:-1;;;;;37027:55:0;37051:4;-1:-1:-1;;;;;37027:55:0;37041:8;-1:-1:-1;;;;;37027:55:0;;37069:3;37074:7;37027:55;;;;;;;:::i;:::-;;;;;;;;37095:65;;;;;;;;;37139:1;37095:65;;36332:836;36199:969;;;:::o;6232:191::-;6325:6;;;-1:-1:-1;;;;;6342:17:0;;;-1:-1:-1;;;;;;6342:17:0;;;;;;;6375:40;;6325:6;;;6342:17;6325:6;;6375:40;;6306:16;;6375:40;6295:128;6232:191;:::o;37310:331::-;37465:8;-1:-1:-1;;;;;37456:17:0;:5;-1:-1:-1;;;;;37456:17:0;;37448:71;;;;-1:-1:-1;;;37448:71:0;;27292:2:1;37448:71:0;;;27274:21:1;27331:2;27311:18;;;27304:30;27370:34;27350:18;;;27343:62;-1:-1:-1;;;27421:18:1;;;27414:39;27470:19;;37448:71:0;27090:405:1;37448:71:0;-1:-1:-1;;;;;37530:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37530:46:0;;;;;;;;;;37592:41;;1159::1;;;37592::0;;1132:18:1;37592:41:0;;;;;;;37310:331;;;:::o;94:190::-;219:4;272;243:25;256:5;263:4;243:12;:25::i;:::-;:33;;94:190;-1:-1:-1;;;;94:190:0:o;29244:974::-;-1:-1:-1;;;;;29432:16:0;;29424:66;;;;-1:-1:-1;;;29424:66:0;;;;;;;:::i;:::-;3766:10;29503:16;29568:21;29586:2;29568:17;:21::i;:::-;29545:44;;29600:24;29627:25;29645:6;29627:17;:25::i;:::-;29600:52;;29665:60;29686:8;29696:4;29702:2;29706:3;29711:7;29720:4;29665:20;:60::i;:::-;29738:19;29760:13;;;;;;;;;;;-1:-1:-1;;;;;29760:19:0;;;;;;;;;;29798:21;;;;29790:76;;;;-1:-1:-1;;;29790:76:0;;;;;;;:::i;:::-;29902:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29902:19:0;;;;;;;;;;29924:20;;;29902:42;;29966:17;;;;;;;:27;;29924:20;;29902:9;29966:27;;29924:20;;29966:27;:::i;:::-;;;;-1:-1:-1;;30011:46:0;;;24506:25:1;;;24562:2;24547:18;;24540:34;;;-1:-1:-1;;;;;30011:46:0;;;;;;;;;;;;;;24479:18:1;30011:46:0;;;;;;;30142:68;30173:8;30183:4;30189:2;30193;30197:6;30205:4;30142:30;:68::i;:::-;29413:805;;;;29244:974;;;;;:::o;35188:808::-;-1:-1:-1;;;;;35315:18:0;;35307:66;;;;-1:-1:-1;;;35307:66:0;;;;;;;:::i;:::-;3766:10;35386:16;35451:21;35469:2;35451:17;:21::i;:::-;35428:44;;35483:24;35510:25;35528:6;35510:17;:25::i;:::-;35483:52;;35548:66;35569:8;35579:4;35593:1;35597:3;35602:7;35548:66;;;;;;;;;;;;:20;:66::i;:::-;35627:19;35649:13;;;;;;;;;;;-1:-1:-1;;;;;35649:19:0;;;;;;;;;;35687:21;;;;35679:70;;;;-1:-1:-1;;;35679:70:0;;;;;;;:::i;:::-;35785:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35785:19:0;;;;;;;;;;;;35807:20;;;35785:42;;35856:54;;24506:25:1;;;24547:18;;;24540:34;;;35785:19:0;;35856:54;;;;;;24479:18:1;35856:54:0;;;;;;;35923:65;;;;;;;;;35967:1;35923:65;;;30576:1146;41574:198;41694:16;;;41708:1;41694:16;;;;;;;;;41640;;41669:22;;41694:16;;;;;;;;;;;;-1:-1:-1;41694:16:0;41669:41;;41732:7;41721:5;41727:1;41721:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;41759:5;41574:198;-1:-1:-1;;41574:198:0:o;55784:291::-;56001:66;56028:8;56038:4;56044:2;56048:3;56053:7;56062:4;56001:26;:66::i;40001:744::-;-1:-1:-1;;;;;40216:13:0;;7958:19;:23;40212:526;;40252:72;;-1:-1:-1;;;40252:72:0;;-1:-1:-1;;;;;40252:38:0;;;;;:72;;40291:8;;40301:4;;40307:2;;40311:6;;40319:4;;40252:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40252:72:0;;;;;;;;-1:-1:-1;;40252:72:0;;;;;;;;;;;;:::i;:::-;;;40248:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40600:6;40593:14;;-1:-1:-1;;;40593:14:0;;;;;;;;:::i;40248:479::-;;;40649:62;;-1:-1:-1;;;40649:62:0;;29382:2:1;40649:62:0;;;29364:21:1;29421:2;29401:18;;;29394:30;29460:34;29440:18;;;29433:62;-1:-1:-1;;;29511:18:1;;;29504:50;29571:19;;40649:62:0;29180:416:1;40248:479:0;-1:-1:-1;;;;;;40374:55:0;;-1:-1:-1;;;40374:55:0;40370:154;;40454:50;;-1:-1:-1;;;40454:50:0;;;;;;;:::i;40753:813::-;-1:-1:-1;;;;;40993:13:0;;7958:19;:23;40989:570;;41029:79;;-1:-1:-1;;;41029:79:0;;-1:-1:-1;;;;;41029:43:0;;;;;:79;;41073:8;;41083:4;;41089:3;;41094:7;;41103:4;;41029:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41029:79:0;;;;;;;;-1:-1:-1;;41029:79:0;;;;;;;;;;;;:::i;:::-;;;41025:523;;;;:::i;:::-;-1:-1:-1;;;;;;41190:60:0;;-1:-1:-1;;;41190:60:0;41186:159;;41275:50;;-1:-1:-1;;;41275:50:0;;;;;;;:::i;292:549::-;402:7;450:4;402:7;465:339;489:5;:12;485:1;:16;465:339;;;523:20;546:5;552:1;546:8;;;;;;;;:::i;:::-;;;;;;;523:31;;589:12;573;:28;569:224;;944:13;999:15;;;1035:4;1028:15;;;1082:4;1066:21;;622:57;;569:224;;;944:13;999:15;;;1035:4;1028:15;;;1082:4;1066:21;;720:57;;569:224;-1:-1:-1;503:3:0;;;;:::i;:::-;;;;465:339;;42927:931;-1:-1:-1;;;;;43249:18:0;;43245:160;;43289:9;43284:110;43308:3;:10;43304:1;:14;43284:110;;;43368:7;43376:1;43368:10;;;;;;;;:::i;:::-;;;;;;;43344:12;:20;43357:3;43361:1;43357:6;;;;;;;;:::i;:::-;;;;;;;43344:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;43320:3:0;;-1:-1:-1;43320:3:0;;:::i;:::-;;;43284:110;;;;43245:160;-1:-1:-1;;;;;43421:16:0;;43417:434;;43459:9;43454:386;43478:3;:10;43474:1;:14;43454:386;;;43514:10;43527:3;43531:1;43527:6;;;;;;;;:::i;:::-;;;;;;;43514:19;;43552:14;43569:7;43577:1;43569:10;;;;;;;;:::i;:::-;;;;;;;43552:27;;43598:14;43615:12;:16;43628:2;43615:16;;;;;;;;;;;;43598:33;;43668:6;43658;:16;;43650:69;;;;-1:-1:-1;;;43650:69:0;;31044:2:1;43650:69:0;;;31026:21:1;31083:2;31063:18;;;31056:30;31122:34;31102:18;;;31095:62;-1:-1:-1;;;31173:18:1;;;31166:38;31221:19;;43650:69:0;30842:404:1;43650:69:0;43771:16;;;;:12;:16;;;;;;43790:15;;43771:34;;43490:3;;;:::i;:::-;;;43454:386;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;1211:160::-;1276:20;;1332:13;;1325:21;1315:32;;1305:60;;1361:1;1358;1351:12;1376:180;1432:6;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1524:26;1540:9;1524:26;:::i;1561:250::-;1646:1;1656:113;1670:6;1667:1;1664:13;1656:113;;;1746:11;;;1740:18;1727:11;;;1720:39;1692:2;1685:10;1656:113;;;-1:-1:-1;;1803:1:1;1785:16;;1778:27;1561:250::o;1816:271::-;1858:3;1896:5;1890:12;1923:6;1918:3;1911:19;1939:76;2008:6;2001:4;1996:3;1992:14;1985:4;1978:5;1974:16;1939:76;:::i;:::-;2069:2;2048:15;-1:-1:-1;;2044:29:1;2035:39;;;;2076:4;2031:50;;1816:271;-1:-1:-1;;1816:271:1:o;2092:220::-;2241:2;2230:9;2223:21;2204:4;2261:45;2302:2;2291:9;2287:18;2279:6;2261:45;:::i;2317:180::-;2376:6;2429:2;2417:9;2408:7;2404:23;2400:32;2397:52;;;2445:1;2442;2435:12;2397:52;-1:-1:-1;2468:23:1;;2317:180;-1:-1:-1;2317:180:1:o;2710:689::-;2805:6;2813;2821;2874:2;2862:9;2853:7;2849:23;2845:32;2842:52;;;2890:1;2887;2880:12;2842:52;2930:9;2917:23;-1:-1:-1;;;;;3000:2:1;2992:6;2989:14;2986:34;;;3016:1;3013;3006:12;2986:34;3054:6;3043:9;3039:22;3029:32;;3099:7;3092:4;3088:2;3084:13;3080:27;3070:55;;3121:1;3118;3111:12;3070:55;3161:2;3148:16;3187:2;3179:6;3176:14;3173:34;;;3203:1;3200;3193:12;3173:34;3258:7;3251:4;3241:6;3238:1;3234:14;3230:2;3226:23;3222:34;3219:47;3216:67;;;3279:1;3276;3269:12;3216:67;3310:4;3302:13;;;;3334:6;;-1:-1:-1;3372:20:1;;;;3359:34;;2710:689;-1:-1:-1;;;;2710:689:1:o;3404:127::-;3465:10;3460:3;3456:20;3453:1;3446:31;3496:4;3493:1;3486:15;3520:4;3517:1;3510:15;3536:249;3646:2;3627:13;;-1:-1:-1;;3623:27:1;3611:40;;-1:-1:-1;;;;;3666:34:1;;3702:22;;;3663:62;3660:88;;;3728:18;;:::i;:::-;3764:2;3757:22;-1:-1:-1;;3536:249:1:o;3790:183::-;3850:4;-1:-1:-1;;;;;3875:6:1;3872:30;3869:56;;;3905:18;;:::i;:::-;-1:-1:-1;3950:1:1;3946:14;3962:4;3942:25;;3790:183::o;3978:724::-;4032:5;4085:3;4078:4;4070:6;4066:17;4062:27;4052:55;;4103:1;4100;4093:12;4052:55;4139:6;4126:20;4165:4;4188:43;4228:2;4188:43;:::i;:::-;4260:2;4254:9;4272:31;4300:2;4292:6;4272:31;:::i;:::-;4338:18;;;4430:1;4426:10;;;;4414:23;;4410:32;;;4372:15;;;;-1:-1:-1;4454:15:1;;;4451:35;;;4482:1;4479;4472:12;4451:35;4518:2;4510:6;4506:15;4530:142;4546:6;4541:3;4538:15;4530:142;;;4612:17;;4600:30;;4650:12;;;;4563;;4530:142;;;-1:-1:-1;4690:6:1;3978:724;-1:-1:-1;;;;;;3978:724:1:o;4707:468::-;4771:5;-1:-1:-1;;;;;4797:6:1;4794:30;4791:56;;;4827:18;;:::i;:::-;4876:2;4870:9;4888:69;4945:2;4924:15;;-1:-1:-1;;4920:29:1;4951:4;4916:40;4870:9;4888:69;:::i;:::-;4975:6;4966:15;;5005:6;4997;4990:22;5045:3;5036:6;5031:3;5027:16;5024:25;5021:45;;;5062:1;5059;5052:12;5021:45;5112:6;5107:3;5100:4;5092:6;5088:17;5075:44;5167:1;5160:4;5151:6;5143;5139:19;5135:30;5128:41;;4707:468;;;;;:::o;5180:220::-;5222:5;5275:3;5268:4;5260:6;5256:17;5252:27;5242:55;;5293:1;5290;5283:12;5242:55;5315:79;5390:3;5381:6;5368:20;5361:4;5353:6;5349:17;5315:79;:::i;5405:943::-;5559:6;5567;5575;5583;5591;5644:3;5632:9;5623:7;5619:23;5615:33;5612:53;;;5661:1;5658;5651:12;5612:53;5684:29;5703:9;5684:29;:::i;:::-;5674:39;;5732:38;5766:2;5755:9;5751:18;5732:38;:::i;:::-;5722:48;;5821:2;5810:9;5806:18;5793:32;-1:-1:-1;;;;;5885:2:1;5877:6;5874:14;5871:34;;;5901:1;5898;5891:12;5871:34;5924:61;5977:7;5968:6;5957:9;5953:22;5924:61;:::i;:::-;5914:71;;6038:2;6027:9;6023:18;6010:32;5994:48;;6067:2;6057:8;6054:16;6051:36;;;6083:1;6080;6073:12;6051:36;6106:63;6161:7;6150:8;6139:9;6135:24;6106:63;:::i;:::-;6096:73;;6222:3;6211:9;6207:19;6194:33;6178:49;;6252:2;6242:8;6239:16;6236:36;;;6268:1;6265;6258:12;6236:36;;6291:51;6334:7;6323:8;6312:9;6308:24;6291:51;:::i;:::-;6281:61;;;5405:943;;;;;;;;:::o;6353:450::-;6422:6;6475:2;6463:9;6454:7;6450:23;6446:32;6443:52;;;6491:1;6488;6481:12;6443:52;6531:9;6518:23;-1:-1:-1;;;;;6556:6:1;6553:30;6550:50;;;6596:1;6593;6586:12;6550:50;6619:22;;6672:4;6664:13;;6660:27;-1:-1:-1;6650:55:1;;6701:1;6698;6691:12;6650:55;6724:73;6789:7;6784:2;6771:16;6766:2;6762;6758:11;6724:73;:::i;6808:1208::-;6926:6;6934;6987:2;6975:9;6966:7;6962:23;6958:32;6955:52;;;7003:1;7000;6993:12;6955:52;7043:9;7030:23;-1:-1:-1;;;;;7113:2:1;7105:6;7102:14;7099:34;;;7129:1;7126;7119:12;7099:34;7167:6;7156:9;7152:22;7142:32;;7212:7;7205:4;7201:2;7197:13;7193:27;7183:55;;7234:1;7231;7224:12;7183:55;7270:2;7257:16;7292:4;7315:43;7355:2;7315:43;:::i;:::-;7387:2;7381:9;7399:31;7427:2;7419:6;7399:31;:::i;:::-;7465:18;;;7553:1;7549:10;;;;7541:19;;7537:28;;;7499:15;;;;-1:-1:-1;7577:19:1;;;7574:39;;;7609:1;7606;7599:12;7574:39;7633:11;;;;7653:148;7669:6;7664:3;7661:15;7653:148;;;7735:23;7754:3;7735:23;:::i;:::-;7723:36;;7686:12;;;;7779;;;;7653:148;;;7820:6;-1:-1:-1;;7864:18:1;;7851:32;;-1:-1:-1;;7895:16:1;;;7892:36;;;7924:1;7921;7914:12;7892:36;;7947:63;8002:7;7991:8;7980:9;7976:24;7947:63;:::i;:::-;7937:73;;;6808:1208;;;;;:::o;8021:435::-;8074:3;8112:5;8106:12;8139:6;8134:3;8127:19;8165:4;8194:2;8189:3;8185:12;8178:19;;8231:2;8224:5;8220:14;8252:1;8262:169;8276:6;8273:1;8270:13;8262:169;;;8337:13;;8325:26;;8371:12;;;;8406:15;;;;8298:1;8291:9;8262:169;;;-1:-1:-1;8447:3:1;;8021:435;-1:-1:-1;;;;;8021:435:1:o;8461:261::-;8640:2;8629:9;8622:21;8603:4;8660:56;8712:2;8701:9;8697:18;8689:6;8660:56;:::i;8727:669::-;8854:6;8862;8870;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;8962:29;8981:9;8962:29;:::i;:::-;8952:39;;9042:2;9031:9;9027:18;9014:32;-1:-1:-1;;;;;9106:2:1;9098:6;9095:14;9092:34;;;9122:1;9119;9112:12;9092:34;9145:61;9198:7;9189:6;9178:9;9174:22;9145:61;:::i;:::-;9135:71;;9259:2;9248:9;9244:18;9231:32;9215:48;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9327:63;9382:7;9371:8;9360:9;9356:24;9327:63;:::i;:::-;9317:73;;;8727:669;;;;;:::o;9586:254::-;9651:6;9659;9712:2;9700:9;9691:7;9687:23;9683:32;9680:52;;;9728:1;9725;9718:12;9680:52;9751:29;9770:9;9751:29;:::i;:::-;9741:39;;9799:35;9830:2;9819:9;9815:18;9799:35;:::i;:::-;9789:45;;9586:254;;;;;:::o;9845:1023::-;9938:6;9946;9999:2;9987:9;9978:7;9974:23;9970:32;9967:52;;;10015:1;10012;10005:12;9967:52;10055:9;10042:23;-1:-1:-1;;;;;10080:6:1;10077:30;10074:50;;;10120:1;10117;10110:12;10074:50;10143:22;;10196:4;10188:13;;10184:27;-1:-1:-1;10174:55:1;;10225:1;10222;10215:12;10174:55;10261:2;10248:16;10283:4;10306:43;10346:2;10306:43;:::i;:::-;10378:2;10372:9;10390:31;10418:2;10410:6;10390:31;:::i;:::-;10456:18;;;10544:1;10540:10;;;;10532:19;;10528:28;;;10490:15;;;;-1:-1:-1;10568:19:1;;;10565:39;;;10600:1;10597;10590:12;10565:39;10624:11;;;;10644:142;10660:6;10655:3;10652:15;10644:142;;;10726:17;;10714:30;;10677:12;;;;10764;;;;10644:142;;;10805:6;10843:18;;;;10830:32;;-1:-1:-1;;;;;;9845:1023:1:o;10873:322::-;10950:6;10958;10966;11019:2;11007:9;10998:7;10994:23;10990:32;10987:52;;;11035:1;11032;11025:12;10987:52;11058:29;11077:9;11058:29;:::i;:::-;11048:39;11134:2;11119:18;;11106:32;;-1:-1:-1;11185:2:1;11170:18;;;11157:32;;10873:322;-1:-1:-1;;;10873:322:1:o;11200:260::-;11268:6;11276;11329:2;11317:9;11308:7;11304:23;11300:32;11297:52;;;11345:1;11342;11335:12;11297:52;11368:29;11387:9;11368:29;:::i;:::-;11358:39;;11416:38;11450:2;11439:9;11435:18;11416:38;:::i;11465:606::-;11569:6;11577;11585;11593;11601;11654:3;11642:9;11633:7;11629:23;11625:33;11622:53;;;11671:1;11668;11661:12;11622:53;11694:29;11713:9;11694:29;:::i;:::-;11684:39;;11742:38;11776:2;11765:9;11761:18;11742:38;:::i;:::-;11732:48;;11827:2;11816:9;11812:18;11799:32;11789:42;;11878:2;11867:9;11863:18;11850:32;11840:42;;11933:3;11922:9;11918:19;11905:33;-1:-1:-1;;;;;11953:6:1;11950:30;11947:50;;;11993:1;11990;11983:12;11947:50;12016:49;12057:7;12048:6;12037:9;12033:22;12016:49;:::i;12076:186::-;12135:6;12188:2;12176:9;12167:7;12163:23;12159:32;12156:52;;;12204:1;12201;12194:12;12156:52;12227:29;12246:9;12227:29;:::i;12679:356::-;12881:2;12863:21;;;12900:18;;;12893:30;12959:34;12954:2;12939:18;;12932:62;13026:2;13011:18;;12679:356::o;13040:380::-;13119:1;13115:12;;;;13162;;;13183:61;;13237:4;13229:6;13225:17;13215:27;;13183:61;13290:2;13282:6;13279:14;13259:18;13256:38;13253:161;;13336:10;13331:3;13327:20;13324:1;13317:31;13371:4;13368:1;13361:15;13399:4;13396:1;13389:15;13253:161;;13040:380;;;:::o;13551:1187::-;13828:3;13857:1;13890:6;13884:13;13920:36;13946:9;13920:36;:::i;:::-;13975:1;13992:18;;;14019:133;;;;14166:1;14161:356;;;;13985:532;;14019:133;-1:-1:-1;;14052:24:1;;14040:37;;14125:14;;14118:22;14106:35;;14097:45;;;-1:-1:-1;14019:133:1;;14161:356;14192:6;14189:1;14182:17;14222:4;14267:2;14264:1;14254:16;14292:1;14306:165;14320:6;14317:1;14314:13;14306:165;;;14398:14;;14385:11;;;14378:35;14441:16;;;;14335:10;;14306:165;;;14310:3;;;14500:6;14495:3;14491:16;14484:23;;13985:532;;;;;14548:6;14542:13;14564:68;14623:8;14618:3;14611:4;14603:6;14599:17;14564:68;:::i;:::-;-1:-1:-1;;;14654:18:1;;14681:22;;;14730:1;14719:13;;13551:1187;-1:-1:-1;;;;13551:1187:1:o;16044:127::-;16105:10;16100:3;16096:20;16093:1;16086:31;16136:4;16133:1;16126:15;16160:4;16157:1;16150:15;16176:125;16241:9;;;16262:10;;;16259:36;;;16275:18;;:::i;16306:401::-;16508:2;16490:21;;;16547:2;16527:18;;;16520:30;16586:34;16581:2;16566:18;;16559:62;-1:-1:-1;;;16652:2:1;16637:18;;16630:35;16697:3;16682:19;;16306:401::o;16712:168::-;16785:9;;;16816;;16833:15;;;16827:22;;16813:37;16803:71;;16854:18;;:::i;17656:545::-;17758:2;17753:3;17750:11;17747:448;;;17794:1;17819:5;17815:2;17808:17;17864:4;17860:2;17850:19;17934:2;17922:10;17918:19;17915:1;17911:27;17905:4;17901:38;17970:4;17958:10;17955:20;17952:47;;;-1:-1:-1;17993:4:1;17952:47;18048:2;18043:3;18039:12;18036:1;18032:20;18026:4;18022:31;18012:41;;18103:82;18121:2;18114:5;18111:13;18103:82;;;18166:17;;;18147:1;18136:13;18103:82;;18377:1352;18503:3;18497:10;-1:-1:-1;;;;;18522:6:1;18519:30;18516:56;;;18552:18;;:::i;:::-;18581:97;18671:6;18631:38;18663:4;18657:11;18631:38;:::i;:::-;18625:4;18581:97;:::i;:::-;18733:4;;18797:2;18786:14;;18814:1;18809:663;;;;19516:1;19533:6;19530:89;;;-1:-1:-1;19585:19:1;;;19579:26;19530:89;-1:-1:-1;;18334:1:1;18330:11;;;18326:24;18322:29;18312:40;18358:1;18354:11;;;18309:57;19632:81;;18779:944;;18809:663;13498:1;13491:14;;;13535:4;13522:18;;-1:-1:-1;;18845:20:1;;;18963:236;18977:7;18974:1;18971:14;18963:236;;;19066:19;;;19060:26;19045:42;;19158:27;;;;19126:1;19114:14;;;;18993:19;;18963:236;;;18967:3;19227:6;19218:7;19215:19;19212:201;;;19288:19;;;19282:26;-1:-1:-1;;19371:1:1;19367:14;;;19383:3;19363:24;19359:37;19355:42;19340:58;19325:74;;19212:201;-1:-1:-1;;;;;19459:1:1;19443:14;;;19439:22;19426:36;;-1:-1:-1;18377:1352:1:o;20144:127::-;20205:10;20200:3;20196:20;20193:1;20186:31;20236:4;20233:1;20226:15;20260:4;20257:1;20250:15;20276:135;20315:3;20336:17;;;20333:43;;20356:18;;:::i;:::-;-1:-1:-1;20403:1:1;20392:13;;20276:135::o;20416:411::-;20618:2;20600:21;;;20657:2;20637:18;;;20630:30;20696:34;20691:2;20676:18;;20669:62;-1:-1:-1;;;20762:2:1;20747:18;;20740:45;20817:3;20802:19;;20416:411::o;21534:128::-;21601:9;;;21622:11;;;21619:37;;;21636:18;;:::i;23556:127::-;23617:10;23612:3;23608:20;23605:1;23598:31;23648:4;23645:1;23638:15;23672:4;23669:1;23662:15;23688:120;23728:1;23754;23744:35;;23759:18;;:::i;:::-;-1:-1:-1;23793:9:1;;23688:120::o;23813:112::-;23845:1;23871;23861:35;;23876:18;;:::i;:::-;-1:-1:-1;23910:9:1;;23813:112::o;24585:404::-;24787:2;24769:21;;;24826:2;24806:18;;;24799:30;24865:34;24860:2;24845:18;;24838:62;-1:-1:-1;;;24931:2:1;24916:18;;24909:38;24979:3;24964:19;;24585:404::o;24994:401::-;25196:2;25178:21;;;25235:2;25215:18;;;25208:30;25274:34;25269:2;25254:18;;25247:62;-1:-1:-1;;;25340:2:1;25325:18;;25318:35;25385:3;25370:19;;24994:401::o;25400:406::-;25602:2;25584:21;;;25641:2;25621:18;;;25614:30;25680:34;25675:2;25660:18;;25653:62;-1:-1:-1;;;25746:2:1;25731:18;;25724:40;25796:3;25781:19;;25400:406::o;25811:465::-;26068:2;26057:9;26050:21;26031:4;26094:56;26146:2;26135:9;26131:18;26123:6;26094:56;:::i;:::-;26198:9;26190:6;26186:22;26181:2;26170:9;26166:18;26159:50;26226:44;26263:6;26255;26226:44;:::i;:::-;26218:52;25811:465;-1:-1:-1;;;;;25811:465:1:o;26281:399::-;26483:2;26465:21;;;26522:2;26502:18;;;26495:30;26561:34;26556:2;26541:18;;26534:62;-1:-1:-1;;;26627:2:1;26612:18;;26605:33;26670:3;26655:19;;26281:399::o;26685:400::-;26887:2;26869:21;;;26926:2;26906:18;;;26899:30;26965:34;26960:2;26945:18;;26938:62;-1:-1:-1;;;27031:2:1;27016:18;;27009:34;27075:3;27060:19;;26685:400::o;27500:561::-;-1:-1:-1;;;;;27797:15:1;;;27779:34;;27849:15;;27844:2;27829:18;;27822:43;27896:2;27881:18;;27874:34;;;27939:2;27924:18;;27917:34;;;27759:3;27982;27967:19;;27960:32;;;27722:4;;28009:46;;28035:19;;28027:6;28009:46;:::i;:::-;28001:54;27500:561;-1:-1:-1;;;;;;;27500:561:1:o;28066:249::-;28135:6;28188:2;28176:9;28167:7;28163:23;28159:32;28156:52;;;28204:1;28201;28194:12;28156:52;28236:9;28230:16;28255:30;28279:5;28255:30;:::i;28320:179::-;28355:3;28397:1;28379:16;28376:23;28373:120;;;28443:1;28440;28437;28422:23;-1:-1:-1;28480:1:1;28474:8;28469:3;28465:18;28373:120;28320:179;:::o;28504:671::-;28543:3;28585:4;28567:16;28564:26;28561:39;;;28504:671;:::o;28561:39::-;28627:2;28621:9;-1:-1:-1;;28692:16:1;28688:25;;28685:1;28621:9;28664:50;28743:4;28737:11;28767:16;-1:-1:-1;;;;;28873:2:1;28866:4;28858:6;28854:17;28851:25;28846:2;28838:6;28835:14;28832:45;28829:58;;;28880:5;;;;;28504:671;:::o;28829:58::-;28917:6;28911:4;28907:17;28896:28;;28953:3;28947:10;28980:2;28972:6;28969:14;28966:27;;;28986:5;;;;;;28504:671;:::o;28966:27::-;29070:2;29051:16;29045:4;29041:27;29037:36;29030:4;29021:6;29016:3;29012:16;29008:27;29005:69;29002:82;;;29077:5;;;;;;28504:671;:::o;29002:82::-;29093:57;29144:4;29135:6;29127;29123:19;29119:30;29113:4;29093:57;:::i;:::-;-1:-1:-1;29166:3:1;;28504:671;-1:-1:-1;;;;;28504:671:1:o;29601:404::-;29803:2;29785:21;;;29842:2;29822:18;;;29815:30;29881:34;29876:2;29861:18;;29854:62;-1:-1:-1;;;29947:2:1;29932:18;;29925:38;29995:3;29980:19;;29601:404::o;30010:827::-;-1:-1:-1;;;;;30407:15:1;;;30389:34;;30459:15;;30454:2;30439:18;;30432:43;30369:3;30506:2;30491:18;;30484:31;;;30332:4;;30538:57;;30575:19;;30567:6;30538:57;:::i;:::-;30643:9;30635:6;30631:22;30626:2;30615:9;30611:18;30604:50;30677:44;30714:6;30706;30677:44;:::i;:::-;30663:58;;30770:9;30762:6;30758:22;30752:3;30741:9;30737:19;30730:51;30798:33;30824:6;30816;30798:33;:::i;:::-;30790:41;30010:827;-1:-1:-1;;;;;;;;30010:827:1:o

Swarm Source

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