ETH Price: $3,417.24 (-1.80%)
Gas: 6 Gwei

Token

 

Overview

Max Total Supply

900

Holders

853

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x79a752ad1CAFdCb189EA5A8d25bb112C57e767d9
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:
WOS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/WivesOfSoloman.sol


pragma solidity >=0.7.0 <=0.9.0;




contract WOS is ERC1155, Ownable {
    uint256 public constant nftId = 0;
    uint256 public constant giveAwayId = 0;
    uint256 public quantity = 900;
    uint256 public giveAwayQuantity = 100;
    uint256 public amountMinted = 0;
     uint256 public giveAwayAmountMinted = 0;
    mapping(address => bool) public availedNftUsers;
    bool public paused = true;
    string public baseExtension = ".json";
    string baseURI = "";

    constructor(string memory _initBaseURI) ERC1155(_initBaseURI) {
           setBaseURI(_initBaseURI);
            _mint(msg.sender, nftId, 1, "");
            amountMinted += 1;
            availedNftUsers[msg.sender] = true;
    }
 
    function mint() public payable {
        require(!paused,"Contract is Paused");
        require(!availedNftUsers[msg.sender], "Already Minted NFT");
        uint256 remainingSupply = quantity - amountMinted;
        require(remainingSupply - 1 <= quantity,"Not Enough Supply Left");
        _mint(msg.sender, nftId, 1, "");
        amountMinted += 1;
        availedNftUsers[msg.sender] = true;
    }
    
    function giveAway(address _recipient,uint256 _quantity) public payable onlyOwner {
        require(!paused,"Contract is Paused");
        uint256 remainingSupply = giveAwayQuantity - giveAwayAmountMinted;
        require(remainingSupply - _quantity <= giveAwayQuantity, "Not Enough GiveAway Supply Left");
        _mint(_recipient,giveAwayId, _quantity, "");
        giveAwayAmountMinted += _quantity;
    }


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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":"amountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"availedNftUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"giveAwayAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveAwayId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveAwayQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"nftId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"quantity","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":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526103846004556064600555600060065560006007556001600960006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000081929190620007eb565b5060405180602001604052806000815250600b9080519060200190620000a9929190620007eb565b50348015620000b757600080fd5b5060405162004942380380620049428339818101604052810190620000dd919062000962565b80620000ef81620001c160201b60201c565b506200011062000104620001dd60201b60201c565b620001e560201b60201c565b6200012181620002ab60201b60201c565b620001463360006001604051806020016040528060008152506200035660201b60201c565b6001600660008282546200015b919062000cc7565b925050819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001115565b8060029080519060200190620001d9929190620007eb565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bb620001dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e16200051b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200033a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003319062000bbf565b60405180910390fd5b80600b908051906020019062000352929190620007eb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620003c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c09062000be1565b60405180910390fd5b6000620003db620001dd60201b60201c565b90506200041481600087620003f6886200054560201b60201c565b62000407886200054560201b60201c565b87620005c660201b60201c565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000475919062000cc7565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051620004f592919062000c03565b60405180910390a46200051481600087878787620005ce60201b60201c565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606000600167ffffffffffffffff81111562000567576200056662000ebd565b5b604051908082528060200260200182016040528015620005965781602001602082028036833780820191505090505b5090508281600081518110620005b157620005b062000e8e565b5b60200260200101818152505080915050919050565b505050505050565b620005fa8473ffffffffffffffffffffffffffffffffffffffff16620007d860201b620011b11760201c565b15620007d0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200064395949392919062000af3565b602060405180830381600087803b1580156200065e57600080fd5b505af19250505080156200069257506040513d601f19601f820116820180604052508101906200068f919062000930565b60015b6200074457620006a162000eec565b806308c379a01415620007055750620006b962001059565b80620006c6575062000707565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fc919062000b57565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073b9062000b7b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620007ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c59062000b9d565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054620007f99062000dc4565b90600052602060002090601f0160209004810192826200081d576000855562000869565b82601f106200083857805160ff191683800117855562000869565b8280016001018555821562000869579182015b82811115620008685782518255916020019190600101906200084b565b5b5090506200087891906200087c565b5090565b5b80821115620008975760008160009055506001016200087d565b5090565b6000620008b2620008ac8462000c59565b62000c30565b905082815260208101848484011115620008d157620008d062000f16565b5b620008de84828562000d8e565b509392505050565b600081519050620008f781620010fb565b92915050565b600082601f83011262000915576200091462000f11565b5b8151620009278482602086016200089b565b91505092915050565b60006020828403121562000949576200094862000f20565b5b60006200095984828501620008e6565b91505092915050565b6000602082840312156200097b576200097a62000f20565b5b600082015167ffffffffffffffff8111156200099c576200099b62000f1b565b5b620009aa84828501620008fd565b91505092915050565b620009be8162000d24565b82525050565b6000620009d18262000c8f565b620009dd818562000ca5565b9350620009ef81856020860162000d8e565b620009fa8162000f25565b840191505092915050565b600062000a128262000c9a565b62000a1e818562000cb6565b935062000a3081856020860162000d8e565b62000a3b8162000f25565b840191505092915050565b600062000a5560348362000cb6565b915062000a628262000f43565b604082019050919050565b600062000a7c60288362000cb6565b915062000a898262000f92565b604082019050919050565b600062000aa360208362000cb6565b915062000ab08262000fe1565b602082019050919050565b600062000aca60218362000cb6565b915062000ad7826200100a565b604082019050919050565b62000aed8162000d84565b82525050565b600060a08201905062000b0a6000830188620009b3565b62000b196020830187620009b3565b62000b28604083018662000ae2565b62000b37606083018562000ae2565b818103608083015262000b4b8184620009c4565b90509695505050505050565b6000602082019050818103600083015262000b73818462000a05565b905092915050565b6000602082019050818103600083015262000b968162000a46565b9050919050565b6000602082019050818103600083015262000bb88162000a6d565b9050919050565b6000602082019050818103600083015262000bda8162000a94565b9050919050565b6000602082019050818103600083015262000bfc8162000abb565b9050919050565b600060408201905062000c1a600083018562000ae2565b62000c29602083018462000ae2565b9392505050565b600062000c3c62000c4f565b905062000c4a828262000dfa565b919050565b6000604051905090565b600067ffffffffffffffff82111562000c775762000c7662000ebd565b5b62000c828262000f25565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000cd48262000d84565b915062000ce18362000d84565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d195762000d1862000e30565b5b828201905092915050565b600062000d318262000d64565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000dae57808201518184015260208101905062000d91565b8381111562000dbe576000848401525b50505050565b6000600282049050600182168062000ddd57607f821691505b6020821081141562000df45762000df362000e5f565b5b50919050565b62000e058262000f25565b810181811067ffffffffffffffff8211171562000e275762000e2662000ebd565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111562000f0e5760046000803e62000f0b60005162000f36565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156200106b57620010f8565b6200107562000c4f565b60043d036004823e80513d602482011167ffffffffffffffff821117156200109f575050620010f8565b808201805167ffffffffffffffff811115620010bf5750505050620010f8565b80602083010160043d038501811115620010de575050505050620010f8565b620010ef8260200185018662000dfa565b82955050505050505b90565b620011068162000d38565b81146200111257600080fd5b50565b61381d80620011256000396000f3fe60806040526004361061014a5760003560e01c80635c975abb116100b6578063c66828621161006f578063c668286214610472578063c6bc51821461049d578063ca800144146104c8578063e985e9c5146104e4578063f242432a14610521578063f2fde38b1461054a5761014a565b80635c975abb14610386578063715018a6146103b15780637af284d5146103c85780638da5cb5b146103f3578063a22cb4651461041e578063a302620b146104475761014a565b806317fc45e21161010857806317fc45e2146102645780632265bd6d1461028f5780632eb2c2d6146102ba57806333741972146102e35780634e1273f41461032057806355f804b31461035d5761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806302329a29146101c957806302e15ecb146101f25780630e89341c1461021d5780631249c58b1461025a575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612520565b610573565b6040516101839190612ddf565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612605565b61063c565b6040516101c09190612b82565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb91906125d8565b61071e565b005b3480156101fe57600080fd5b506102076107b7565b6040516102149190612ddf565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f91906126a8565b6107bd565b6040516102519190612b9d565b60405180910390f35b610262610851565b005b34801561027057600080fd5b50610279610a25565b6040516102869190612ddf565b60405180910390f35b34801561029b57600080fd5b506102a4610a2b565b6040516102b19190612ddf565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061237a565b610a31565b005b3480156102ef57600080fd5b5061030a6004803603810190610305919061230d565b610ad2565b6040516103179190612b82565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190612560565b610af2565b6040516103549190612b29565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061265f565b610c0b565b005b34801561039257600080fd5b5061039b610ca1565b6040516103a89190612b82565b60405180910390f35b3480156103bd57600080fd5b506103c6610cb4565b005b3480156103d457600080fd5b506103dd610d3c565b6040516103ea9190612ddf565b60405180910390f35b3480156103ff57600080fd5b50610408610d42565b6040516104159190612a4c565b60405180910390f35b34801561042a57600080fd5b50610445600480360381019061044091906124e0565b610d6c565b005b34801561045357600080fd5b5061045c610d82565b6040516104699190612ddf565b60405180910390f35b34801561047e57600080fd5b50610487610d87565b6040516104949190612b9d565b60405180910390f35b3480156104a957600080fd5b506104b2610e15565b6040516104bf9190612ddf565b60405180910390f35b6104e260048036038101906104dd9190612520565b610e1a565b005b3480156104f057600080fd5b5061050b6004803603810190610506919061233a565b610f84565b6040516105189190612b82565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190612449565b611018565b005b34801561055657600080fd5b50610571600480360381019061056c919061230d565b6110b9565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105db90612bff565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107175750610716826111c4565b5b9050919050565b61072661122e565b73ffffffffffffffffffffffffffffffffffffffff16610744610d42565b73ffffffffffffffffffffffffffffffffffffffff161461079a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079190612cff565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60055481565b6060600280546107cc906130b3565b80601f01602080910402602001604051908101604052809291908181526020018280546107f8906130b3565b80156108455780601f1061081a57610100808354040283529160200191610845565b820191906000526020600020905b81548152906001019060200180831161082857829003601f168201915b50505050509050919050565b600960009054906101000a900460ff16156108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890612d1f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590612c7f565b60405180910390fd5b60006006546004546109409190612fc9565b90506004546001826109529190612fc9565b1115610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90612d9f565b60405180910390fd5b6109b0336000600160405180602001604052806000815250611236565b6001600660008282546109c39190612f73565b925050819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60045481565b60075481565b610a3961122e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e85610a7961122e565b610f84565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590612cbf565b60405180910390fd5b610acb85858585856113cc565b5050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b60608151835114610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90612d5f565b60405180910390fd5b6000835167ffffffffffffffff811115610b5557610b546131ec565b5b604051908082528060200260200182016040528015610b835781602001602082028036833780820191505090505b50905060005b8451811015610c0057610bd0858281518110610ba857610ba76131bd565b5b6020026020010151858381518110610bc357610bc26131bd565b5b6020026020010151610573565b828281518110610be357610be26131bd565b5b60200260200101818152505080610bf990613116565b9050610b89565b508091505092915050565b610c1361122e565b73ffffffffffffffffffffffffffffffffffffffff16610c31610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90612cff565b60405180910390fd5b80600b9080519060200190610c9d929190611fe5565b5050565b600960009054906101000a900460ff1681565b610cbc61122e565b73ffffffffffffffffffffffffffffffffffffffff16610cda610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612cff565b60405180910390fd5b610d3a60006116e0565b565b60065481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d7e610d7761122e565b83836117a6565b5050565b600081565b600a8054610d94906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc0906130b3565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b505050505081565b600081565b610e2261122e565b73ffffffffffffffffffffffffffffffffffffffff16610e40610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612cff565b60405180910390fd5b600960009054906101000a900460ff1615610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90612d1f565b60405180910390fd5b6000600754600554610ef89190612fc9565b90506005548282610f099190612fc9565b1115610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190612c3f565b60405180910390fd5b610f668360008460405180602001604052806000815250611236565b8160076000828254610f789190612f73565b92505081905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61102061122e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061106657506110658561106061122e565b610f84565b5b6110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90612c5f565b60405180910390fd5b6110b28585858585611913565b5050505050565b6110c161122e565b73ffffffffffffffffffffffffffffffffffffffff166110df610d42565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c90612c1f565b60405180910390fd5b6111ae816116e0565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90612dbf565b60405180910390fd5b60006112b061122e565b90506112d1816000876112c288611b95565b6112cb88611b95565b87611c0f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113309190612f73565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516113ae929190612dfa565b60405180910390a46113c581600087878787611c17565b5050505050565b8151835114611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790612d7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790612c9f565b60405180910390fd5b600061148a61122e565b905061149a818787878787611c0f565b60005b845181101561164b5760008582815181106114bb576114ba6131bd565b5b6020026020010151905060008583815181106114da576114d96131bd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290612cdf565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116309190612f73565b925050819055505050508061164490613116565b905061149d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116c2929190612b4b565b60405180910390a46116d8818787878787611dfe565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612d3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119069190612b82565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90612c9f565b60405180910390fd5b600061198d61122e565b90506119ad81878761199e88611b95565b6119a788611b95565b87611c0f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90612cdf565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af99190612f73565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611b76929190612dfa565b60405180910390a4611b8c828888888888611c17565b50505050505050565b60606000600167ffffffffffffffff811115611bb457611bb36131ec565b5b604051908082528060200260200182016040528015611be25781602001602082028036833780820191505090505b5090508281600081518110611bfa57611bf96131bd565b5b60200260200101818152505080915050919050565b505050505050565b611c368473ffffffffffffffffffffffffffffffffffffffff166111b1565b15611df6578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611c7c959493929190612acf565b602060405180830381600087803b158015611c9657600080fd5b505af1925050508015611cc757506040513d601f19601f82011682018060405250810190611cc49190612632565b60015b611d6d57611cd361321b565b806308c379a01415611d305750611ce86136f5565b80611cf35750611d32565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279190612b9d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490612bbf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90612bdf565b60405180910390fd5b505b505050505050565b611e1d8473ffffffffffffffffffffffffffffffffffffffff166111b1565b15611fdd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e63959493929190612a67565b602060405180830381600087803b158015611e7d57600080fd5b505af1925050508015611eae57506040513d601f19601f82011682018060405250810190611eab9190612632565b60015b611f5457611eba61321b565b806308c379a01415611f175750611ecf6136f5565b80611eda5750611f19565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e9190612b9d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90612bbf565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290612bdf565b60405180910390fd5b505b505050505050565b828054611ff1906130b3565b90600052602060002090601f016020900481019282612013576000855561205a565b82601f1061202c57805160ff191683800117855561205a565b8280016001018555821561205a579182015b8281111561205957825182559160200191906001019061203e565b5b509050612067919061206b565b5090565b5b8082111561208457600081600090555060010161206c565b5090565b600061209b61209684612e48565b612e23565b905080838252602082019050828560208602820111156120be576120bd613242565b5b60005b858110156120ee57816120d488826121ec565b8452602084019350602083019250506001810190506120c1565b5050509392505050565b600061210b61210684612e74565b612e23565b9050808382526020820190508285602086028201111561212e5761212d613242565b5b60005b8581101561215e578161214488826122f8565b845260208401935060208301925050600181019050612131565b5050509392505050565b600061217b61217684612ea0565b612e23565b90508281526020810184848401111561219757612196613247565b5b6121a2848285613071565b509392505050565b60006121bd6121b884612ed1565b612e23565b9050828152602081018484840111156121d9576121d8613247565b5b6121e4848285613071565b509392505050565b6000813590506121fb8161378b565b92915050565b600082601f8301126122165761221561323d565b5b8135612226848260208601612088565b91505092915050565b600082601f8301126122445761224361323d565b5b81356122548482602086016120f8565b91505092915050565b60008135905061226c816137a2565b92915050565b600081359050612281816137b9565b92915050565b600081519050612296816137b9565b92915050565b600082601f8301126122b1576122b061323d565b5b81356122c1848260208601612168565b91505092915050565b600082601f8301126122df576122de61323d565b5b81356122ef8482602086016121aa565b91505092915050565b600081359050612307816137d0565b92915050565b60006020828403121561232357612322613251565b5b6000612331848285016121ec565b91505092915050565b6000806040838503121561235157612350613251565b5b600061235f858286016121ec565b9250506020612370858286016121ec565b9150509250929050565b600080600080600060a0868803121561239657612395613251565b5b60006123a4888289016121ec565b95505060206123b5888289016121ec565b945050604086013567ffffffffffffffff8111156123d6576123d561324c565b5b6123e28882890161222f565b935050606086013567ffffffffffffffff8111156124035761240261324c565b5b61240f8882890161222f565b925050608086013567ffffffffffffffff8111156124305761242f61324c565b5b61243c8882890161229c565b9150509295509295909350565b600080600080600060a0868803121561246557612464613251565b5b6000612473888289016121ec565b9550506020612484888289016121ec565b9450506040612495888289016122f8565b93505060606124a6888289016122f8565b925050608086013567ffffffffffffffff8111156124c7576124c661324c565b5b6124d38882890161229c565b9150509295509295909350565b600080604083850312156124f7576124f6613251565b5b6000612505858286016121ec565b92505060206125168582860161225d565b9150509250929050565b6000806040838503121561253757612536613251565b5b6000612545858286016121ec565b9250506020612556858286016122f8565b9150509250929050565b6000806040838503121561257757612576613251565b5b600083013567ffffffffffffffff8111156125955761259461324c565b5b6125a185828601612201565b925050602083013567ffffffffffffffff8111156125c2576125c161324c565b5b6125ce8582860161222f565b9150509250929050565b6000602082840312156125ee576125ed613251565b5b60006125fc8482850161225d565b91505092915050565b60006020828403121561261b5761261a613251565b5b600061262984828501612272565b91505092915050565b60006020828403121561264857612647613251565b5b600061265684828501612287565b91505092915050565b60006020828403121561267557612674613251565b5b600082013567ffffffffffffffff8111156126935761269261324c565b5b61269f848285016122ca565b91505092915050565b6000602082840312156126be576126bd613251565b5b60006126cc848285016122f8565b91505092915050565b60006126e18383612a2e565b60208301905092915050565b6126f681612ffd565b82525050565b600061270782612f12565b6127118185612f40565b935061271c83612f02565b8060005b8381101561274d57815161273488826126d5565b975061273f83612f33565b925050600181019050612720565b5085935050505092915050565b6127638161300f565b82525050565b600061277482612f1d565b61277e8185612f51565b935061278e818560208601613080565b61279781613256565b840191505092915050565b60006127ad82612f28565b6127b78185612f62565b93506127c7818560208601613080565b6127d081613256565b840191505092915050565b60006127e8603483612f62565b91506127f382613274565b604082019050919050565b600061280b602883612f62565b9150612816826132c3565b604082019050919050565b600061282e602b83612f62565b915061283982613312565b604082019050919050565b6000612851602683612f62565b915061285c82613361565b604082019050919050565b6000612874601f83612f62565b915061287f826133b0565b602082019050919050565b6000612897602983612f62565b91506128a2826133d9565b604082019050919050565b60006128ba601283612f62565b91506128c582613428565b602082019050919050565b60006128dd602583612f62565b91506128e882613451565b604082019050919050565b6000612900603283612f62565b915061290b826134a0565b604082019050919050565b6000612923602a83612f62565b915061292e826134ef565b604082019050919050565b6000612946602083612f62565b91506129518261353e565b602082019050919050565b6000612969601283612f62565b915061297482613567565b602082019050919050565b600061298c602983612f62565b915061299782613590565b604082019050919050565b60006129af602983612f62565b91506129ba826135df565b604082019050919050565b60006129d2602883612f62565b91506129dd8261362e565b604082019050919050565b60006129f5601683612f62565b9150612a008261367d565b602082019050919050565b6000612a18602183612f62565b9150612a23826136a6565b604082019050919050565b612a3781613067565b82525050565b612a4681613067565b82525050565b6000602082019050612a6160008301846126ed565b92915050565b600060a082019050612a7c60008301886126ed565b612a8960208301876126ed565b8181036040830152612a9b81866126fc565b90508181036060830152612aaf81856126fc565b90508181036080830152612ac38184612769565b90509695505050505050565b600060a082019050612ae460008301886126ed565b612af160208301876126ed565b612afe6040830186612a3d565b612b0b6060830185612a3d565b8181036080830152612b1d8184612769565b90509695505050505050565b60006020820190508181036000830152612b4381846126fc565b905092915050565b60006040820190508181036000830152612b6581856126fc565b90508181036020830152612b7981846126fc565b90509392505050565b6000602082019050612b97600083018461275a565b92915050565b60006020820190508181036000830152612bb781846127a2565b905092915050565b60006020820190508181036000830152612bd8816127db565b9050919050565b60006020820190508181036000830152612bf8816127fe565b9050919050565b60006020820190508181036000830152612c1881612821565b9050919050565b60006020820190508181036000830152612c3881612844565b9050919050565b60006020820190508181036000830152612c5881612867565b9050919050565b60006020820190508181036000830152612c788161288a565b9050919050565b60006020820190508181036000830152612c98816128ad565b9050919050565b60006020820190508181036000830152612cb8816128d0565b9050919050565b60006020820190508181036000830152612cd8816128f3565b9050919050565b60006020820190508181036000830152612cf881612916565b9050919050565b60006020820190508181036000830152612d1881612939565b9050919050565b60006020820190508181036000830152612d388161295c565b9050919050565b60006020820190508181036000830152612d588161297f565b9050919050565b60006020820190508181036000830152612d78816129a2565b9050919050565b60006020820190508181036000830152612d98816129c5565b9050919050565b60006020820190508181036000830152612db8816129e8565b9050919050565b60006020820190508181036000830152612dd881612a0b565b9050919050565b6000602082019050612df46000830184612a3d565b92915050565b6000604082019050612e0f6000830185612a3d565b612e1c6020830184612a3d565b9392505050565b6000612e2d612e3e565b9050612e3982826130e5565b919050565b6000604051905090565b600067ffffffffffffffff821115612e6357612e626131ec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e8f57612e8e6131ec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ebb57612eba6131ec565b5b612ec482613256565b9050602081019050919050565b600067ffffffffffffffff821115612eec57612eeb6131ec565b5b612ef582613256565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f7e82613067565b9150612f8983613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fbe57612fbd61315f565b5b828201905092915050565b6000612fd482613067565b9150612fdf83613067565b925082821015612ff257612ff161315f565b5b828203905092915050565b600061300882613047565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561309e578082015181840152602081019050613083565b838111156130ad576000848401525b50505050565b600060028204905060018216806130cb57607f821691505b602082108114156130df576130de61318e565b5b50919050565b6130ee82613256565b810181811067ffffffffffffffff8211171561310d5761310c6131ec565b5b80604052505050565b600061312182613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131545761315361315f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561323a5760046000803e613237600051613267565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820476976654177617920537570706c79204c65667400600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f416c7265616479204d696e746564204e46540000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820537570706c79204c65667400000000000000000000600082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561370557613788565b61370d612e3e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613735575050613788565b808201805167ffffffffffffffff8111156137535750505050613788565b80602083010160043d038501811115613770575050505050613788565b61377f826020018501866130e5565b82955050505050505b90565b61379481612ffd565b811461379f57600080fd5b50565b6137ab8161300f565b81146137b657600080fd5b50565b6137c28161301b565b81146137cd57600080fd5b50565b6137d981613067565b81146137e457600080fd5b5056fea26469706673582212209cd294acaaaa631c89fb1025953d2bc57f14a6dd7d6019fdb086e69d40dbc53964736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d585867335a684b4645696150354c56674655386377796e6a7a6b363538367875673333775a626a636b6b4d4d0000000000000000000000

Deployed Bytecode

0x60806040526004361061014a5760003560e01c80635c975abb116100b6578063c66828621161006f578063c668286214610472578063c6bc51821461049d578063ca800144146104c8578063e985e9c5146104e4578063f242432a14610521578063f2fde38b1461054a5761014a565b80635c975abb14610386578063715018a6146103b15780637af284d5146103c85780638da5cb5b146103f3578063a22cb4651461041e578063a302620b146104475761014a565b806317fc45e21161010857806317fc45e2146102645780632265bd6d1461028f5780632eb2c2d6146102ba57806333741972146102e35780634e1273f41461032057806355f804b31461035d5761014a565b8062fdd58e1461014f57806301ffc9a71461018c57806302329a29146101c957806302e15ecb146101f25780630e89341c1461021d5780631249c58b1461025a575b600080fd5b34801561015b57600080fd5b5061017660048036038101906101719190612520565b610573565b6040516101839190612ddf565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190612605565b61063c565b6040516101c09190612b82565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb91906125d8565b61071e565b005b3480156101fe57600080fd5b506102076107b7565b6040516102149190612ddf565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f91906126a8565b6107bd565b6040516102519190612b9d565b60405180910390f35b610262610851565b005b34801561027057600080fd5b50610279610a25565b6040516102869190612ddf565b60405180910390f35b34801561029b57600080fd5b506102a4610a2b565b6040516102b19190612ddf565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061237a565b610a31565b005b3480156102ef57600080fd5b5061030a6004803603810190610305919061230d565b610ad2565b6040516103179190612b82565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190612560565b610af2565b6040516103549190612b29565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061265f565b610c0b565b005b34801561039257600080fd5b5061039b610ca1565b6040516103a89190612b82565b60405180910390f35b3480156103bd57600080fd5b506103c6610cb4565b005b3480156103d457600080fd5b506103dd610d3c565b6040516103ea9190612ddf565b60405180910390f35b3480156103ff57600080fd5b50610408610d42565b6040516104159190612a4c565b60405180910390f35b34801561042a57600080fd5b50610445600480360381019061044091906124e0565b610d6c565b005b34801561045357600080fd5b5061045c610d82565b6040516104699190612ddf565b60405180910390f35b34801561047e57600080fd5b50610487610d87565b6040516104949190612b9d565b60405180910390f35b3480156104a957600080fd5b506104b2610e15565b6040516104bf9190612ddf565b60405180910390f35b6104e260048036038101906104dd9190612520565b610e1a565b005b3480156104f057600080fd5b5061050b6004803603810190610506919061233a565b610f84565b6040516105189190612b82565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190612449565b611018565b005b34801561055657600080fd5b50610571600480360381019061056c919061230d565b6110b9565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105db90612bff565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107175750610716826111c4565b5b9050919050565b61072661122e565b73ffffffffffffffffffffffffffffffffffffffff16610744610d42565b73ffffffffffffffffffffffffffffffffffffffff161461079a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079190612cff565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b60055481565b6060600280546107cc906130b3565b80601f01602080910402602001604051908101604052809291908181526020018280546107f8906130b3565b80156108455780601f1061081a57610100808354040283529160200191610845565b820191906000526020600020905b81548152906001019060200180831161082857829003601f168201915b50505050509050919050565b600960009054906101000a900460ff16156108a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089890612d1f565b60405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590612c7f565b60405180910390fd5b60006006546004546109409190612fc9565b90506004546001826109529190612fc9565b1115610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90612d9f565b60405180910390fd5b6109b0336000600160405180602001604052806000815250611236565b6001600660008282546109c39190612f73565b925050819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60045481565b60075481565b610a3961122e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e85610a7961122e565b610f84565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590612cbf565b60405180910390fd5b610acb85858585856113cc565b5050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b60608151835114610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f90612d5f565b60405180910390fd5b6000835167ffffffffffffffff811115610b5557610b546131ec565b5b604051908082528060200260200182016040528015610b835781602001602082028036833780820191505090505b50905060005b8451811015610c0057610bd0858281518110610ba857610ba76131bd565b5b6020026020010151858381518110610bc357610bc26131bd565b5b6020026020010151610573565b828281518110610be357610be26131bd565b5b60200260200101818152505080610bf990613116565b9050610b89565b508091505092915050565b610c1361122e565b73ffffffffffffffffffffffffffffffffffffffff16610c31610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90612cff565b60405180910390fd5b80600b9080519060200190610c9d929190611fe5565b5050565b600960009054906101000a900460ff1681565b610cbc61122e565b73ffffffffffffffffffffffffffffffffffffffff16610cda610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612cff565b60405180910390fd5b610d3a60006116e0565b565b60065481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d7e610d7761122e565b83836117a6565b5050565b600081565b600a8054610d94906130b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc0906130b3565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b505050505081565b600081565b610e2261122e565b73ffffffffffffffffffffffffffffffffffffffff16610e40610d42565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90612cff565b60405180910390fd5b600960009054906101000a900460ff1615610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90612d1f565b60405180910390fd5b6000600754600554610ef89190612fc9565b90506005548282610f099190612fc9565b1115610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190612c3f565b60405180910390fd5b610f668360008460405180602001604052806000815250611236565b8160076000828254610f789190612f73565b92505081905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61102061122e565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061106657506110658561106061122e565b610f84565b5b6110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90612c5f565b60405180910390fd5b6110b28585858585611913565b5050505050565b6110c161122e565b73ffffffffffffffffffffffffffffffffffffffff166110df610d42565b73ffffffffffffffffffffffffffffffffffffffff1614611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612cff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c90612c1f565b60405180910390fd5b6111ae816116e0565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90612dbf565b60405180910390fd5b60006112b061122e565b90506112d1816000876112c288611b95565b6112cb88611b95565b87611c0f565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113309190612f73565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516113ae929190612dfa565b60405180910390a46113c581600087878787611c17565b5050505050565b8151835114611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790612d7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790612c9f565b60405180910390fd5b600061148a61122e565b905061149a818787878787611c0f565b60005b845181101561164b5760008582815181106114bb576114ba6131bd565b5b6020026020010151905060008583815181106114da576114d96131bd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290612cdf565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116309190612f73565b925050819055505050508061164490613116565b905061149d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116c2929190612b4b565b60405180910390a46116d8818787878787611dfe565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90612d3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119069190612b82565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90612c9f565b60405180910390fd5b600061198d61122e565b90506119ad81878761199e88611b95565b6119a788611b95565b87611c0f565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90612cdf565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af99190612f73565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611b76929190612dfa565b60405180910390a4611b8c828888888888611c17565b50505050505050565b60606000600167ffffffffffffffff811115611bb457611bb36131ec565b5b604051908082528060200260200182016040528015611be25781602001602082028036833780820191505090505b5090508281600081518110611bfa57611bf96131bd565b5b60200260200101818152505080915050919050565b505050505050565b611c368473ffffffffffffffffffffffffffffffffffffffff166111b1565b15611df6578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611c7c959493929190612acf565b602060405180830381600087803b158015611c9657600080fd5b505af1925050508015611cc757506040513d601f19601f82011682018060405250810190611cc49190612632565b60015b611d6d57611cd361321b565b806308c379a01415611d305750611ce86136f5565b80611cf35750611d32565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279190612b9d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490612bbf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90612bdf565b60405180910390fd5b505b505050505050565b611e1d8473ffffffffffffffffffffffffffffffffffffffff166111b1565b15611fdd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e63959493929190612a67565b602060405180830381600087803b158015611e7d57600080fd5b505af1925050508015611eae57506040513d601f19601f82011682018060405250810190611eab9190612632565b60015b611f5457611eba61321b565b806308c379a01415611f175750611ecf6136f5565b80611eda5750611f19565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e9190612b9d565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90612bbf565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd290612bdf565b60405180910390fd5b505b505050505050565b828054611ff1906130b3565b90600052602060002090601f016020900481019282612013576000855561205a565b82601f1061202c57805160ff191683800117855561205a565b8280016001018555821561205a579182015b8281111561205957825182559160200191906001019061203e565b5b509050612067919061206b565b5090565b5b8082111561208457600081600090555060010161206c565b5090565b600061209b61209684612e48565b612e23565b905080838252602082019050828560208602820111156120be576120bd613242565b5b60005b858110156120ee57816120d488826121ec565b8452602084019350602083019250506001810190506120c1565b5050509392505050565b600061210b61210684612e74565b612e23565b9050808382526020820190508285602086028201111561212e5761212d613242565b5b60005b8581101561215e578161214488826122f8565b845260208401935060208301925050600181019050612131565b5050509392505050565b600061217b61217684612ea0565b612e23565b90508281526020810184848401111561219757612196613247565b5b6121a2848285613071565b509392505050565b60006121bd6121b884612ed1565b612e23565b9050828152602081018484840111156121d9576121d8613247565b5b6121e4848285613071565b509392505050565b6000813590506121fb8161378b565b92915050565b600082601f8301126122165761221561323d565b5b8135612226848260208601612088565b91505092915050565b600082601f8301126122445761224361323d565b5b81356122548482602086016120f8565b91505092915050565b60008135905061226c816137a2565b92915050565b600081359050612281816137b9565b92915050565b600081519050612296816137b9565b92915050565b600082601f8301126122b1576122b061323d565b5b81356122c1848260208601612168565b91505092915050565b600082601f8301126122df576122de61323d565b5b81356122ef8482602086016121aa565b91505092915050565b600081359050612307816137d0565b92915050565b60006020828403121561232357612322613251565b5b6000612331848285016121ec565b91505092915050565b6000806040838503121561235157612350613251565b5b600061235f858286016121ec565b9250506020612370858286016121ec565b9150509250929050565b600080600080600060a0868803121561239657612395613251565b5b60006123a4888289016121ec565b95505060206123b5888289016121ec565b945050604086013567ffffffffffffffff8111156123d6576123d561324c565b5b6123e28882890161222f565b935050606086013567ffffffffffffffff8111156124035761240261324c565b5b61240f8882890161222f565b925050608086013567ffffffffffffffff8111156124305761242f61324c565b5b61243c8882890161229c565b9150509295509295909350565b600080600080600060a0868803121561246557612464613251565b5b6000612473888289016121ec565b9550506020612484888289016121ec565b9450506040612495888289016122f8565b93505060606124a6888289016122f8565b925050608086013567ffffffffffffffff8111156124c7576124c661324c565b5b6124d38882890161229c565b9150509295509295909350565b600080604083850312156124f7576124f6613251565b5b6000612505858286016121ec565b92505060206125168582860161225d565b9150509250929050565b6000806040838503121561253757612536613251565b5b6000612545858286016121ec565b9250506020612556858286016122f8565b9150509250929050565b6000806040838503121561257757612576613251565b5b600083013567ffffffffffffffff8111156125955761259461324c565b5b6125a185828601612201565b925050602083013567ffffffffffffffff8111156125c2576125c161324c565b5b6125ce8582860161222f565b9150509250929050565b6000602082840312156125ee576125ed613251565b5b60006125fc8482850161225d565b91505092915050565b60006020828403121561261b5761261a613251565b5b600061262984828501612272565b91505092915050565b60006020828403121561264857612647613251565b5b600061265684828501612287565b91505092915050565b60006020828403121561267557612674613251565b5b600082013567ffffffffffffffff8111156126935761269261324c565b5b61269f848285016122ca565b91505092915050565b6000602082840312156126be576126bd613251565b5b60006126cc848285016122f8565b91505092915050565b60006126e18383612a2e565b60208301905092915050565b6126f681612ffd565b82525050565b600061270782612f12565b6127118185612f40565b935061271c83612f02565b8060005b8381101561274d57815161273488826126d5565b975061273f83612f33565b925050600181019050612720565b5085935050505092915050565b6127638161300f565b82525050565b600061277482612f1d565b61277e8185612f51565b935061278e818560208601613080565b61279781613256565b840191505092915050565b60006127ad82612f28565b6127b78185612f62565b93506127c7818560208601613080565b6127d081613256565b840191505092915050565b60006127e8603483612f62565b91506127f382613274565b604082019050919050565b600061280b602883612f62565b9150612816826132c3565b604082019050919050565b600061282e602b83612f62565b915061283982613312565b604082019050919050565b6000612851602683612f62565b915061285c82613361565b604082019050919050565b6000612874601f83612f62565b915061287f826133b0565b602082019050919050565b6000612897602983612f62565b91506128a2826133d9565b604082019050919050565b60006128ba601283612f62565b91506128c582613428565b602082019050919050565b60006128dd602583612f62565b91506128e882613451565b604082019050919050565b6000612900603283612f62565b915061290b826134a0565b604082019050919050565b6000612923602a83612f62565b915061292e826134ef565b604082019050919050565b6000612946602083612f62565b91506129518261353e565b602082019050919050565b6000612969601283612f62565b915061297482613567565b602082019050919050565b600061298c602983612f62565b915061299782613590565b604082019050919050565b60006129af602983612f62565b91506129ba826135df565b604082019050919050565b60006129d2602883612f62565b91506129dd8261362e565b604082019050919050565b60006129f5601683612f62565b9150612a008261367d565b602082019050919050565b6000612a18602183612f62565b9150612a23826136a6565b604082019050919050565b612a3781613067565b82525050565b612a4681613067565b82525050565b6000602082019050612a6160008301846126ed565b92915050565b600060a082019050612a7c60008301886126ed565b612a8960208301876126ed565b8181036040830152612a9b81866126fc565b90508181036060830152612aaf81856126fc565b90508181036080830152612ac38184612769565b90509695505050505050565b600060a082019050612ae460008301886126ed565b612af160208301876126ed565b612afe6040830186612a3d565b612b0b6060830185612a3d565b8181036080830152612b1d8184612769565b90509695505050505050565b60006020820190508181036000830152612b4381846126fc565b905092915050565b60006040820190508181036000830152612b6581856126fc565b90508181036020830152612b7981846126fc565b90509392505050565b6000602082019050612b97600083018461275a565b92915050565b60006020820190508181036000830152612bb781846127a2565b905092915050565b60006020820190508181036000830152612bd8816127db565b9050919050565b60006020820190508181036000830152612bf8816127fe565b9050919050565b60006020820190508181036000830152612c1881612821565b9050919050565b60006020820190508181036000830152612c3881612844565b9050919050565b60006020820190508181036000830152612c5881612867565b9050919050565b60006020820190508181036000830152612c788161288a565b9050919050565b60006020820190508181036000830152612c98816128ad565b9050919050565b60006020820190508181036000830152612cb8816128d0565b9050919050565b60006020820190508181036000830152612cd8816128f3565b9050919050565b60006020820190508181036000830152612cf881612916565b9050919050565b60006020820190508181036000830152612d1881612939565b9050919050565b60006020820190508181036000830152612d388161295c565b9050919050565b60006020820190508181036000830152612d588161297f565b9050919050565b60006020820190508181036000830152612d78816129a2565b9050919050565b60006020820190508181036000830152612d98816129c5565b9050919050565b60006020820190508181036000830152612db8816129e8565b9050919050565b60006020820190508181036000830152612dd881612a0b565b9050919050565b6000602082019050612df46000830184612a3d565b92915050565b6000604082019050612e0f6000830185612a3d565b612e1c6020830184612a3d565b9392505050565b6000612e2d612e3e565b9050612e3982826130e5565b919050565b6000604051905090565b600067ffffffffffffffff821115612e6357612e626131ec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e8f57612e8e6131ec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612ebb57612eba6131ec565b5b612ec482613256565b9050602081019050919050565b600067ffffffffffffffff821115612eec57612eeb6131ec565b5b612ef582613256565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f7e82613067565b9150612f8983613067565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fbe57612fbd61315f565b5b828201905092915050565b6000612fd482613067565b9150612fdf83613067565b925082821015612ff257612ff161315f565b5b828203905092915050565b600061300882613047565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561309e578082015181840152602081019050613083565b838111156130ad576000848401525b50505050565b600060028204905060018216806130cb57607f821691505b602082108114156130df576130de61318e565b5b50919050565b6130ee82613256565b810181811067ffffffffffffffff8211171561310d5761310c6131ec565b5b80604052505050565b600061312182613067565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131545761315361315f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561323a5760046000803e613237600051613267565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820476976654177617920537570706c79204c65667400600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f416c7265616479204d696e746564204e46540000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973205061757365640000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820537570706c79204c65667400000000000000000000600082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561370557613788565b61370d612e3e565b60043d036004823e80513d602482011167ffffffffffffffff82111715613735575050613788565b808201805167ffffffffffffffff8111156137535750505050613788565b80602083010160043d038501811115613770575050505050613788565b61377f826020018501866130e5565b82955050505050505b90565b61379481612ffd565b811461379f57600080fd5b50565b6137ab8161300f565b81146137b657600080fd5b50565b6137c28161301b565b81146137cd57600080fd5b50565b6137d981613067565b81146137e457600080fd5b5056fea26469706673582212209cd294acaaaa631c89fb1025953d2bc57f14a6dd7d6019fdb086e69d40dbc53964736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d585867335a684b4645696150354c56674655386377796e6a7a6b363538367875673333775a626a636b6b4d4d0000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmXXg3ZhKFEiaP5LVgFU8cwynjzk6586xug33wZbjckkMM

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d585867335a684b4645696150354c56674655386377796e
Arg [3] : 6a7a6b363538367875673333775a626a636b6b4d4d0000000000000000000000


Deployed Bytecode Sourcemap

38723:1732:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25135:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24158:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40371:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38884:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24879:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39415:408;;;:::i;:::-;;38848:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38967:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27074:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39013:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25532:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40258:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39067:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4763:103;;;;;;;;;;;;;:::i;:::-;;38928:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26129:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38803:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39099:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38763:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39835:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26356:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26596:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5021:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25135:231;25221:7;25268:1;25249:21;;:7;:21;;;;25241:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25336:9;:13;25346:2;25336:13;;;;;;;;;;;:22;25350:7;25336:22;;;;;;;;;;;;;;;;25329:29;;25135:231;;;;:::o;24158:310::-;24260:4;24312:26;24297:41;;;:11;:41;;;;:110;;;;24370:37;24355:52;;;:11;:52;;;;24297:110;:163;;;;24424:36;24448:11;24424:23;:36::i;:::-;24297:163;24277:183;;24158:310;;;:::o;40371:79::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40436:6:::1;40427;;:15;;;;;;;;;;;;;;;;;;40371:79:::0;:::o;38884:37::-;;;;:::o;24879:105::-;24939:13;24972:4;24965:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24879:105;;;:::o;39415:408::-;39466:6;;;;;;;;;;;39465:7;39457:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39514:15;:27;39530:10;39514:27;;;;;;;;;;;;;;;;;;;;;;;;;39513:28;39505:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39575:23;39612:12;;39601:8;;:23;;;;:::i;:::-;39575:49;;39666:8;;39661:1;39643:15;:19;;;;:::i;:::-;:31;;39635:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39711:31;39717:10;38795:1;39736;39711:31;;;;;;;;;;;;:5;:31::i;:::-;39769:1;39753:12;;:17;;;;;;;:::i;:::-;;;;;;;;39811:4;39781:15;:27;39797:10;39781:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;39446:377;39415:408::o;38848:29::-;;;;:::o;38967:39::-;;;;:::o;27074:442::-;27315:12;:10;:12::i;:::-;27307:20;;:4;:20;;;:60;;;;27331:36;27348:4;27354:12;:10;:12::i;:::-;27331:16;:36::i;:::-;27307:60;27285:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27456:52;27479:4;27485:2;27489:3;27494:7;27503:4;27456:22;:52::i;:::-;27074:442;;;;;:::o;39013:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;25532:524::-;25688:16;25749:3;:10;25730:8;:15;:29;25722:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25818:30;25865:8;:15;25851:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25818:63;;25899:9;25894:122;25918:8;:15;25914:1;:19;25894:122;;;25974:30;25984:8;25993:1;25984:11;;;;;;;;:::i;:::-;;;;;;;;25997:3;26001:1;25997:6;;;;;;;;:::i;:::-;;;;;;;;25974:9;:30::i;:::-;25955:13;25969:1;25955:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25935:3;;;;:::i;:::-;;;25894:122;;;;26035:13;26028:20;;;25532:524;;;;:::o;40258:105::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40344:11:::1;40334:7;:21;;;;;;;;;;;;:::i;:::-;;40258:105:::0;:::o;39067:25::-;;;;;;;;;;;;;:::o;4763:103::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;38928:31::-;;;;:::o;4112:87::-;4158:7;4185:6;;;;;;;;;;;4178:13;;4112:87;:::o;26129:155::-;26224:52;26243:12;:10;:12::i;:::-;26257:8;26267;26224:18;:52::i;:::-;26129:155;;:::o;38803:38::-;38840:1;38803:38;:::o;39099:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38763:33::-;38795:1;38763:33;:::o;39835:413::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39936:6:::1;;;;;;;;;;;39935:7;39927:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;39975:23;40020:20;;40001:16;;:39;;;;:::i;:::-;39975:65;;40090:16;;40077:9;40059:15;:27;;;;:::i;:::-;:47;;40051:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;40153:43;40159:10;38840:1;40182:9;40153:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;40231:9;40207:20;;:33;;;;;;;:::i;:::-;;;;;;;;39916:332;39835:413:::0;;:::o;26356:168::-;26455:4;26479:18;:27;26498:7;26479:27;;;;;;;;;;;;;;;:37;26507:8;26479:37;;;;;;;;;;;;;;;;;;;;;;;;;26472:44;;26356:168;;;;:::o;26596:401::-;26812:12;:10;:12::i;:::-;26804:20;;:4;:20;;;:60;;;;26828:36;26845:4;26851:12;:10;:12::i;:::-;26828:16;:36::i;:::-;26804:60;26782:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26944:45;26962:4;26968:2;26972;26976:6;26984:4;26944:17;:45::i;:::-;26596:401;;;;;:::o;5021:201::-;4343:12;:10;:12::i;:::-;4332:23;;:7;:5;:7::i;:::-;:23;;;4324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5130:1:::1;5110:22;;:8;:22;;;;5102:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:28;5205:8;5186:18;:28::i;:::-;5021:201:::0;:::o;6400:387::-;6460:4;6668:12;6735:7;6723:20;6715:28;;6778:1;6771:4;:8;6764:15;;;6400:387;;;:::o;15513:157::-;15598:4;15637:25;15622:40;;;:11;:40;;;;15615:47;;15513:157;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;31550:569::-;31717:1;31703:16;;:2;:16;;;;31695:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31770:16;31789:12;:10;:12::i;:::-;31770:31;;31814:102;31835:8;31853:1;31857:2;31861:21;31879:2;31861:17;:21::i;:::-;31884:25;31902:6;31884:17;:25::i;:::-;31911:4;31814:20;:102::i;:::-;31950:6;31929:9;:13;31939:2;31929:13;;;;;;;;;;;:17;31943:2;31929:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32009:2;31972:52;;32005:1;31972:52;;31987:8;31972:52;;;32013:2;32017:6;31972:52;;;;;;;:::i;:::-;;;;;;;;32037:74;32068:8;32086:1;32090:2;32094;32098:6;32106:4;32037:30;:74::i;:::-;31684:435;31550:569;;;;:::o;29158:1074::-;29385:7;:14;29371:3;:10;:28;29363:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29477:1;29463:16;;:2;:16;;;;29455:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29534:16;29553:12;:10;:12::i;:::-;29534:31;;29578:60;29599:8;29609:4;29615:2;29619:3;29624:7;29633:4;29578:20;:60::i;:::-;29656:9;29651:421;29675:3;:10;29671:1;:14;29651:421;;;29707:10;29720:3;29724:1;29720:6;;;;;;;;:::i;:::-;;;;;;;;29707:19;;29741:14;29758:7;29766:1;29758:10;;;;;;;;:::i;:::-;;;;;;;;29741:27;;29785:19;29807:9;:13;29817:2;29807:13;;;;;;;;;;;:19;29821:4;29807:19;;;;;;;;;;;;;;;;29785:41;;29864:6;29849:11;:21;;29841:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29997:6;29983:11;:20;29961:9;:13;29971:2;29961:13;;;;;;;;;;;:19;29975:4;29961:19;;;;;;;;;;;;;;;:42;;;;30054:6;30033:9;:13;30043:2;30033:13;;;;;;;;;;;:17;30047:2;30033:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29692:380;;;29687:3;;;;:::i;:::-;;;29651:421;;;;30119:2;30089:47;;30113:4;30089:47;;30103:8;30089:47;;;30123:3;30128:7;30089:47;;;;;;;:::i;:::-;;;;;;;;30149:75;30185:8;30195:4;30201:2;30205:3;30210:7;30219:4;30149:35;:75::i;:::-;29352:880;29158:1074;;;;;:::o;5382:191::-;5456:16;5475:6;;;;;;;;;;;5456:25;;5501:8;5492:6;;:17;;;;;;;;;;;;;;;;;;5556:8;5525:40;;5546:8;5525:40;;;;;;;;;;;;5445:128;5382:191;:::o;35344:331::-;35499:8;35490:17;;:5;:17;;;;35482:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35602:8;35564:18;:25;35583:5;35564:25;;;;;;;;;;;;;;;:35;35590:8;35564:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35648:8;35626:41;;35641:5;35626:41;;;35658:8;35626:41;;;;;;:::i;:::-;;;;;;;;35344:331;;;:::o;27980:820::-;28182:1;28168:16;;:2;:16;;;;28160:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:16;28258:12;:10;:12::i;:::-;28239:31;;28283:96;28304:8;28314:4;28320:2;28324:21;28342:2;28324:17;:21::i;:::-;28347:25;28365:6;28347:17;:25::i;:::-;28374:4;28283:20;:96::i;:::-;28392:19;28414:9;:13;28424:2;28414:13;;;;;;;;;;;:19;28428:4;28414:19;;;;;;;;;;;;;;;;28392:41;;28467:6;28452:11;:21;;28444:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28592:6;28578:11;:20;28556:9;:13;28566:2;28556:13;;;;;;;;;;;:19;28570:4;28556:19;;;;;;;;;;;;;;;:42;;;;28641:6;28620:9;:13;28630:2;28620:13;;;;;;;;;;;:17;28634:2;28620:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28696:2;28665:46;;28690:4;28665:46;;28680:8;28665:46;;;28700:2;28704:6;28665:46;;;;;;;:::i;:::-;;;;;;;;28724:68;28755:8;28765:4;28771:2;28775;28779:6;28787:4;28724:30;:68::i;:::-;28149:651;;27980:820;;;;;:::o;38433:198::-;38499:16;38528:22;38567:1;38553:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38528:41;;38591:7;38580:5;38586:1;38580:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38618:5;38611:12;;;38433:198;;;:::o;36631:221::-;;;;;;;:::o;36860:744::-;37075:15;:2;:13;;;:15::i;:::-;37071:526;;;37128:2;37111:38;;;37150:8;37160:4;37166:2;37170:6;37178:4;37111:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37107:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37459:6;37452:14;;;;;;;;;;;:::i;:::-;;;;;;;;37107:479;;;37508:62;;;;;;;;;;:::i;:::-;;;;;;;;37107:479;37245:43;;;37233:55;;;:8;:55;;;;37229:154;;37313:50;;;;;;;;;;:::i;:::-;;;;;;;;37229:154;37184:214;37071:526;36860:744;;;;;;:::o;37612:813::-;37852:15;:2;:13;;;:15::i;:::-;37848:570;;;37905:2;37888:43;;;37932:8;37942:4;37948:3;37953:7;37962:4;37888:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37884:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38280:6;38273:14;;;;;;;;;;;:::i;:::-;;;;;;;;37884:523;;;38329:62;;;;;;;;;;:::i;:::-;;;;;;;;37884:523;38061:48;;;38049:60;;;:8;:60;;;;38045:159;;38134:50;;;;;;;;;;:::i;:::-;;;;;;;;38045:159;37968:251;37848:570;37612:813;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:323::-;9888:6;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10063:1;10088:50;10130:7;10121:6;10110:9;10106:22;10088:50;:::i;:::-;10078:60;;10034:114;9832:323;;;;:::o;10161:327::-;10219:6;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:52;10463:7;10454:6;10443:9;10439:22;10419:52;:::i;:::-;10409:62;;10365:116;10161:327;;;;:::o;10494:349::-;10563:6;10612:2;10600:9;10591:7;10587:23;10583:32;10580:119;;;10618:79;;:::i;:::-;10580:119;10738:1;10763:63;10818:7;10809:6;10798:9;10794:22;10763:63;:::i;:::-;10753:73;;10709:127;10494:349;;;;:::o;10849:509::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11121:1;11110:9;11106:17;11093:31;11151:18;11143:6;11140:30;11137:117;;;11173:79;;:::i;:::-;11137:117;11278:63;11333:7;11324:6;11313:9;11309:22;11278:63;:::i;:::-;11268:73;;11064:287;10849:509;;;;:::o;11364:329::-;11423:6;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:53;11668:7;11659:6;11648:9;11644:22;11623:53;:::i;:::-;11613:63;;11569:117;11364:329;;;;:::o;11699:179::-;11768:10;11789:46;11831:3;11823:6;11789:46;:::i;:::-;11867:4;11862:3;11858:14;11844:28;;11699:179;;;;:::o;11884:118::-;11971:24;11989:5;11971:24;:::i;:::-;11966:3;11959:37;11884:118;;:::o;12038:732::-;12157:3;12186:54;12234:5;12186:54;:::i;:::-;12256:86;12335:6;12330:3;12256:86;:::i;:::-;12249:93;;12366:56;12416:5;12366:56;:::i;:::-;12445:7;12476:1;12461:284;12486:6;12483:1;12480:13;12461:284;;;12562:6;12556:13;12589:63;12648:3;12633:13;12589:63;:::i;:::-;12582:70;;12675:60;12728:6;12675:60;:::i;:::-;12665:70;;12521:224;12508:1;12505;12501:9;12496:14;;12461:284;;;12465:14;12761:3;12754:10;;12162:608;;;12038:732;;;;:::o;12776:109::-;12857:21;12872:5;12857:21;:::i;:::-;12852:3;12845:34;12776:109;;:::o;12891:360::-;12977:3;13005:38;13037:5;13005:38;:::i;:::-;13059:70;13122:6;13117:3;13059:70;:::i;:::-;13052:77;;13138:52;13183:6;13178:3;13171:4;13164:5;13160:16;13138:52;:::i;:::-;13215:29;13237:6;13215:29;:::i;:::-;13210:3;13206:39;13199:46;;12981:270;12891:360;;;;:::o;13257:364::-;13345:3;13373:39;13406:5;13373:39;:::i;:::-;13428:71;13492:6;13487:3;13428:71;:::i;:::-;13421:78;;13508:52;13553:6;13548:3;13541:4;13534:5;13530:16;13508:52;:::i;:::-;13585:29;13607:6;13585:29;:::i;:::-;13580:3;13576:39;13569:46;;13349:272;13257:364;;;;:::o;13627:366::-;13769:3;13790:67;13854:2;13849:3;13790:67;:::i;:::-;13783:74;;13866:93;13955:3;13866:93;:::i;:::-;13984:2;13979:3;13975:12;13968:19;;13627:366;;;:::o;13999:::-;14141:3;14162:67;14226:2;14221:3;14162:67;:::i;:::-;14155:74;;14238:93;14327:3;14238:93;:::i;:::-;14356:2;14351:3;14347:12;14340:19;;13999:366;;;:::o;14371:::-;14513:3;14534:67;14598:2;14593:3;14534:67;:::i;:::-;14527:74;;14610:93;14699:3;14610:93;:::i;:::-;14728:2;14723:3;14719:12;14712:19;;14371:366;;;:::o;14743:::-;14885:3;14906:67;14970:2;14965:3;14906:67;:::i;:::-;14899:74;;14982:93;15071:3;14982:93;:::i;:::-;15100:2;15095:3;15091:12;15084:19;;14743:366;;;:::o;15115:::-;15257:3;15278:67;15342:2;15337:3;15278:67;:::i;:::-;15271:74;;15354:93;15443:3;15354:93;:::i;:::-;15472:2;15467:3;15463:12;15456:19;;15115:366;;;:::o;15487:::-;15629:3;15650:67;15714:2;15709:3;15650:67;:::i;:::-;15643:74;;15726:93;15815:3;15726:93;:::i;:::-;15844:2;15839:3;15835:12;15828:19;;15487:366;;;:::o;15859:::-;16001:3;16022:67;16086:2;16081:3;16022:67;:::i;:::-;16015:74;;16098:93;16187:3;16098:93;:::i;:::-;16216:2;16211:3;16207:12;16200:19;;15859:366;;;:::o;16231:::-;16373:3;16394:67;16458:2;16453:3;16394:67;:::i;:::-;16387:74;;16470:93;16559:3;16470:93;:::i;:::-;16588:2;16583:3;16579:12;16572:19;;16231:366;;;:::o;16603:::-;16745:3;16766:67;16830:2;16825:3;16766:67;:::i;:::-;16759:74;;16842:93;16931:3;16842:93;:::i;:::-;16960:2;16955:3;16951:12;16944:19;;16603:366;;;:::o;16975:::-;17117:3;17138:67;17202:2;17197:3;17138:67;:::i;:::-;17131:74;;17214:93;17303:3;17214:93;:::i;:::-;17332:2;17327:3;17323:12;17316:19;;16975:366;;;:::o;17347:::-;17489:3;17510:67;17574:2;17569:3;17510:67;:::i;:::-;17503:74;;17586:93;17675:3;17586:93;:::i;:::-;17704:2;17699:3;17695:12;17688:19;;17347:366;;;:::o;17719:::-;17861:3;17882:67;17946:2;17941:3;17882:67;:::i;:::-;17875:74;;17958:93;18047:3;17958:93;:::i;:::-;18076:2;18071:3;18067:12;18060:19;;17719:366;;;:::o;18091:::-;18233:3;18254:67;18318:2;18313:3;18254:67;:::i;:::-;18247:74;;18330:93;18419:3;18330:93;:::i;:::-;18448:2;18443:3;18439:12;18432:19;;18091:366;;;:::o;18463:::-;18605:3;18626:67;18690:2;18685:3;18626:67;:::i;:::-;18619:74;;18702:93;18791:3;18702:93;:::i;:::-;18820:2;18815:3;18811:12;18804:19;;18463:366;;;:::o;18835:::-;18977:3;18998:67;19062:2;19057:3;18998:67;:::i;:::-;18991:74;;19074:93;19163:3;19074:93;:::i;:::-;19192:2;19187:3;19183:12;19176:19;;18835:366;;;:::o;19207:::-;19349:3;19370:67;19434:2;19429:3;19370:67;:::i;:::-;19363:74;;19446:93;19535:3;19446:93;:::i;:::-;19564:2;19559:3;19555:12;19548:19;;19207:366;;;:::o;19579:::-;19721:3;19742:67;19806:2;19801:3;19742:67;:::i;:::-;19735:74;;19818:93;19907:3;19818:93;:::i;:::-;19936:2;19931:3;19927:12;19920:19;;19579:366;;;:::o;19951:108::-;20028:24;20046:5;20028:24;:::i;:::-;20023:3;20016:37;19951:108;;:::o;20065:118::-;20152:24;20170:5;20152:24;:::i;:::-;20147:3;20140:37;20065:118;;:::o;20189:222::-;20282:4;20320:2;20309:9;20305:18;20297:26;;20333:71;20401:1;20390:9;20386:17;20377:6;20333:71;:::i;:::-;20189:222;;;;:::o;20417:1053::-;20740:4;20778:3;20767:9;20763:19;20755:27;;20792:71;20860:1;20849:9;20845:17;20836:6;20792:71;:::i;:::-;20873:72;20941:2;20930:9;20926:18;20917:6;20873:72;:::i;:::-;20992:9;20986:4;20982:20;20977:2;20966:9;20962:18;20955:48;21020:108;21123:4;21114:6;21020:108;:::i;:::-;21012:116;;21175:9;21169:4;21165:20;21160:2;21149:9;21145:18;21138:48;21203:108;21306:4;21297:6;21203:108;:::i;:::-;21195:116;;21359:9;21353:4;21349:20;21343:3;21332:9;21328:19;21321:49;21387:76;21458:4;21449:6;21387:76;:::i;:::-;21379:84;;20417:1053;;;;;;;;:::o;21476:751::-;21699:4;21737:3;21726:9;21722:19;21714:27;;21751:71;21819:1;21808:9;21804:17;21795:6;21751:71;:::i;:::-;21832:72;21900:2;21889:9;21885:18;21876:6;21832:72;:::i;:::-;21914;21982:2;21971:9;21967:18;21958:6;21914:72;:::i;:::-;21996;22064:2;22053:9;22049:18;22040:6;21996:72;:::i;:::-;22116:9;22110:4;22106:20;22100:3;22089:9;22085:19;22078:49;22144:76;22215:4;22206:6;22144:76;:::i;:::-;22136:84;;21476:751;;;;;;;;:::o;22233:373::-;22376:4;22414:2;22403:9;22399:18;22391:26;;22463:9;22457:4;22453:20;22449:1;22438:9;22434:17;22427:47;22491:108;22594:4;22585:6;22491:108;:::i;:::-;22483:116;;22233:373;;;;:::o;22612:634::-;22833:4;22871:2;22860:9;22856:18;22848:26;;22920:9;22914:4;22910:20;22906:1;22895:9;22891:17;22884:47;22948:108;23051:4;23042:6;22948:108;:::i;:::-;22940:116;;23103:9;23097:4;23093:20;23088:2;23077:9;23073:18;23066:48;23131:108;23234:4;23225:6;23131:108;:::i;:::-;23123:116;;22612:634;;;;;:::o;23252:210::-;23339:4;23377:2;23366:9;23362:18;23354:26;;23390:65;23452:1;23441:9;23437:17;23428:6;23390:65;:::i;:::-;23252:210;;;;:::o;23468:313::-;23581:4;23619:2;23608:9;23604:18;23596:26;;23668:9;23662:4;23658:20;23654:1;23643:9;23639:17;23632:47;23696:78;23769:4;23760:6;23696:78;:::i;:::-;23688:86;;23468:313;;;;:::o;23787:419::-;23953:4;23991:2;23980:9;23976:18;23968:26;;24040:9;24034:4;24030:20;24026:1;24015:9;24011:17;24004:47;24068:131;24194:4;24068:131;:::i;:::-;24060:139;;23787:419;;;:::o;24212:::-;24378:4;24416:2;24405:9;24401:18;24393:26;;24465:9;24459:4;24455:20;24451:1;24440:9;24436:17;24429:47;24493:131;24619:4;24493:131;:::i;:::-;24485:139;;24212:419;;;:::o;24637:::-;24803:4;24841:2;24830:9;24826:18;24818:26;;24890:9;24884:4;24880:20;24876:1;24865:9;24861:17;24854:47;24918:131;25044:4;24918:131;:::i;:::-;24910:139;;24637:419;;;:::o;25062:::-;25228:4;25266:2;25255:9;25251:18;25243:26;;25315:9;25309:4;25305:20;25301:1;25290:9;25286:17;25279:47;25343:131;25469:4;25343:131;:::i;:::-;25335:139;;25062:419;;;:::o;25487:::-;25653:4;25691:2;25680:9;25676:18;25668:26;;25740:9;25734:4;25730:20;25726:1;25715:9;25711:17;25704:47;25768:131;25894:4;25768:131;:::i;:::-;25760:139;;25487:419;;;:::o;25912:::-;26078:4;26116:2;26105:9;26101:18;26093:26;;26165:9;26159:4;26155:20;26151:1;26140:9;26136:17;26129:47;26193:131;26319:4;26193:131;:::i;:::-;26185:139;;25912:419;;;:::o;26337:::-;26503:4;26541:2;26530:9;26526:18;26518:26;;26590:9;26584:4;26580:20;26576:1;26565:9;26561:17;26554:47;26618:131;26744:4;26618:131;:::i;:::-;26610:139;;26337:419;;;:::o;26762:::-;26928:4;26966:2;26955:9;26951:18;26943:26;;27015:9;27009:4;27005:20;27001:1;26990:9;26986:17;26979:47;27043:131;27169:4;27043:131;:::i;:::-;27035:139;;26762:419;;;:::o;27187:::-;27353:4;27391:2;27380:9;27376:18;27368:26;;27440:9;27434:4;27430:20;27426:1;27415:9;27411:17;27404:47;27468:131;27594:4;27468:131;:::i;:::-;27460:139;;27187:419;;;:::o;27612:::-;27778:4;27816:2;27805:9;27801:18;27793:26;;27865:9;27859:4;27855:20;27851:1;27840:9;27836:17;27829:47;27893:131;28019:4;27893:131;:::i;:::-;27885:139;;27612:419;;;:::o;28037:::-;28203:4;28241:2;28230:9;28226:18;28218:26;;28290:9;28284:4;28280:20;28276:1;28265:9;28261:17;28254:47;28318:131;28444:4;28318:131;:::i;:::-;28310:139;;28037:419;;;:::o;28462:::-;28628:4;28666:2;28655:9;28651:18;28643:26;;28715:9;28709:4;28705:20;28701:1;28690:9;28686:17;28679:47;28743:131;28869:4;28743:131;:::i;:::-;28735:139;;28462:419;;;:::o;28887:::-;29053:4;29091:2;29080:9;29076:18;29068:26;;29140:9;29134:4;29130:20;29126:1;29115:9;29111:17;29104:47;29168:131;29294:4;29168:131;:::i;:::-;29160:139;;28887:419;;;:::o;29312:::-;29478:4;29516:2;29505:9;29501:18;29493:26;;29565:9;29559:4;29555:20;29551:1;29540:9;29536:17;29529:47;29593:131;29719:4;29593:131;:::i;:::-;29585:139;;29312:419;;;:::o;29737:::-;29903:4;29941:2;29930:9;29926:18;29918:26;;29990:9;29984:4;29980:20;29976:1;29965:9;29961:17;29954:47;30018:131;30144:4;30018:131;:::i;:::-;30010:139;;29737:419;;;:::o;30162:::-;30328:4;30366:2;30355:9;30351:18;30343:26;;30415:9;30409:4;30405:20;30401:1;30390:9;30386:17;30379:47;30443:131;30569:4;30443:131;:::i;:::-;30435:139;;30162:419;;;:::o;30587:::-;30753:4;30791:2;30780:9;30776:18;30768:26;;30840:9;30834:4;30830:20;30826:1;30815:9;30811:17;30804:47;30868:131;30994:4;30868:131;:::i;:::-;30860:139;;30587:419;;;:::o;31012:222::-;31105:4;31143:2;31132:9;31128:18;31120:26;;31156:71;31224:1;31213:9;31209:17;31200:6;31156:71;:::i;:::-;31012:222;;;;:::o;31240:332::-;31361:4;31399:2;31388:9;31384:18;31376:26;;31412:71;31480:1;31469:9;31465:17;31456:6;31412:71;:::i;:::-;31493:72;31561:2;31550:9;31546:18;31537:6;31493:72;:::i;:::-;31240:332;;;;;:::o;31578:129::-;31612:6;31639:20;;:::i;:::-;31629:30;;31668:33;31696:4;31688:6;31668:33;:::i;:::-;31578:129;;;:::o;31713:75::-;31746:6;31779:2;31773:9;31763:19;;31713:75;:::o;31794:311::-;31871:4;31961:18;31953:6;31950:30;31947:56;;;31983:18;;:::i;:::-;31947:56;32033:4;32025:6;32021:17;32013:25;;32093:4;32087;32083:15;32075:23;;31794:311;;;:::o;32111:::-;32188:4;32278:18;32270:6;32267:30;32264:56;;;32300:18;;:::i;:::-;32264:56;32350:4;32342:6;32338:17;32330:25;;32410:4;32404;32400:15;32392:23;;32111:311;;;:::o;32428:307::-;32489:4;32579:18;32571:6;32568:30;32565:56;;;32601:18;;:::i;:::-;32565:56;32639:29;32661:6;32639:29;:::i;:::-;32631:37;;32723:4;32717;32713:15;32705:23;;32428:307;;;:::o;32741:308::-;32803:4;32893:18;32885:6;32882:30;32879:56;;;32915:18;;:::i;:::-;32879:56;32953:29;32975:6;32953:29;:::i;:::-;32945:37;;33037:4;33031;33027:15;33019:23;;32741:308;;;:::o;33055:132::-;33122:4;33145:3;33137:11;;33175:4;33170:3;33166:14;33158:22;;33055:132;;;:::o;33193:114::-;33260:6;33294:5;33288:12;33278:22;;33193:114;;;:::o;33313:98::-;33364:6;33398:5;33392:12;33382:22;;33313:98;;;:::o;33417:99::-;33469:6;33503:5;33497:12;33487:22;;33417:99;;;:::o;33522:113::-;33592:4;33624;33619:3;33615:14;33607:22;;33522:113;;;:::o;33641:184::-;33740:11;33774:6;33769:3;33762:19;33814:4;33809:3;33805:14;33790:29;;33641:184;;;;:::o;33831:168::-;33914:11;33948:6;33943:3;33936:19;33988:4;33983:3;33979:14;33964:29;;33831:168;;;;:::o;34005:169::-;34089:11;34123:6;34118:3;34111:19;34163:4;34158:3;34154:14;34139:29;;34005:169;;;;:::o;34180:305::-;34220:3;34239:20;34257:1;34239:20;:::i;:::-;34234:25;;34273:20;34291:1;34273:20;:::i;:::-;34268:25;;34427:1;34359:66;34355:74;34352:1;34349:81;34346:107;;;34433:18;;:::i;:::-;34346:107;34477:1;34474;34470:9;34463:16;;34180:305;;;;:::o;34491:191::-;34531:4;34551:20;34569:1;34551:20;:::i;:::-;34546:25;;34585:20;34603:1;34585:20;:::i;:::-;34580:25;;34624:1;34621;34618:8;34615:34;;;34629:18;;:::i;:::-;34615:34;34674:1;34671;34667:9;34659:17;;34491:191;;;;:::o;34688:96::-;34725:7;34754:24;34772:5;34754:24;:::i;:::-;34743:35;;34688:96;;;:::o;34790:90::-;34824:7;34867:5;34860:13;34853:21;34842:32;;34790:90;;;:::o;34886:149::-;34922:7;34962:66;34955:5;34951:78;34940:89;;34886:149;;;:::o;35041:126::-;35078:7;35118:42;35111:5;35107:54;35096:65;;35041:126;;;:::o;35173:77::-;35210:7;35239:5;35228:16;;35173:77;;;:::o;35256:154::-;35340:6;35335:3;35330;35317:30;35402:1;35393:6;35388:3;35384:16;35377:27;35256:154;;;:::o;35416:307::-;35484:1;35494:113;35508:6;35505:1;35502:13;35494:113;;;35593:1;35588:3;35584:11;35578:18;35574:1;35569:3;35565:11;35558:39;35530:2;35527:1;35523:10;35518:15;;35494:113;;;35625:6;35622:1;35619:13;35616:101;;;35705:1;35696:6;35691:3;35687:16;35680:27;35616:101;35465:258;35416:307;;;:::o;35729:320::-;35773:6;35810:1;35804:4;35800:12;35790:22;;35857:1;35851:4;35847:12;35878:18;35868:81;;35934:4;35926:6;35922:17;35912:27;;35868:81;35996:2;35988:6;35985:14;35965:18;35962:38;35959:84;;;36015:18;;:::i;:::-;35959:84;35780:269;35729:320;;;:::o;36055:281::-;36138:27;36160:4;36138:27;:::i;:::-;36130:6;36126:40;36268:6;36256:10;36253:22;36232:18;36220:10;36217:34;36214:62;36211:88;;;36279:18;;:::i;:::-;36211:88;36319:10;36315:2;36308:22;36098:238;36055:281;;:::o;36342:233::-;36381:3;36404:24;36422:5;36404:24;:::i;:::-;36395:33;;36450:66;36443:5;36440:77;36437:103;;;36520:18;;:::i;:::-;36437:103;36567:1;36560:5;36556:13;36549:20;;36342:233;;;:::o;36581:180::-;36629:77;36626:1;36619:88;36726:4;36723:1;36716:15;36750:4;36747:1;36740:15;36767:180;36815:77;36812:1;36805:88;36912:4;36909:1;36902:15;36936:4;36933:1;36926:15;36953:180;37001:77;36998:1;36991:88;37098:4;37095:1;37088:15;37122:4;37119:1;37112:15;37139:180;37187:77;37184:1;37177:88;37284:4;37281:1;37274:15;37308:4;37305:1;37298:15;37325:183;37360:3;37398:1;37380:16;37377:23;37374:128;;;37436:1;37433;37430;37415:23;37458:34;37489:1;37483:8;37458:34;:::i;:::-;37451:41;;37374:128;37325:183;:::o;37514:117::-;37623:1;37620;37613:12;37637:117;37746:1;37743;37736:12;37760:117;37869:1;37866;37859:12;37883:117;37992:1;37989;37982:12;38006:117;38115:1;38112;38105:12;38129:102;38170:6;38221:2;38217:7;38212:2;38205:5;38201:14;38197:28;38187:38;;38129:102;;;:::o;38237:106::-;38281:8;38330:5;38325:3;38321:15;38300:36;;38237:106;;;:::o;38349:239::-;38489:34;38485:1;38477:6;38473:14;38466:58;38558:22;38553:2;38545:6;38541:15;38534:47;38349:239;:::o;38594:227::-;38734:34;38730:1;38722:6;38718:14;38711:58;38803:10;38798:2;38790:6;38786:15;38779:35;38594:227;:::o;38827:230::-;38967:34;38963:1;38955:6;38951:14;38944:58;39036:13;39031:2;39023:6;39019:15;39012:38;38827:230;:::o;39063:225::-;39203:34;39199:1;39191:6;39187:14;39180:58;39272:8;39267:2;39259:6;39255:15;39248:33;39063:225;:::o;39294:181::-;39434:33;39430:1;39422:6;39418:14;39411:57;39294:181;:::o;39481:228::-;39621:34;39617:1;39609:6;39605:14;39598:58;39690:11;39685:2;39677:6;39673:15;39666:36;39481:228;:::o;39715:168::-;39855:20;39851:1;39843:6;39839:14;39832:44;39715:168;:::o;39889:224::-;40029:34;40025:1;40017:6;40013:14;40006:58;40098:7;40093:2;40085:6;40081:15;40074:32;39889:224;:::o;40119:237::-;40259:34;40255:1;40247:6;40243:14;40236:58;40328:20;40323:2;40315:6;40311:15;40304:45;40119:237;:::o;40362:229::-;40502:34;40498:1;40490:6;40486:14;40479:58;40571:12;40566:2;40558:6;40554:15;40547:37;40362:229;:::o;40597:182::-;40737:34;40733:1;40725:6;40721:14;40714:58;40597:182;:::o;40785:168::-;40925:20;40921:1;40913:6;40909:14;40902:44;40785:168;:::o;40959:228::-;41099:34;41095:1;41087:6;41083:14;41076:58;41168:11;41163:2;41155:6;41151:15;41144:36;40959:228;:::o;41193:::-;41333:34;41329:1;41321:6;41317:14;41310:58;41402:11;41397:2;41389:6;41385:15;41378:36;41193:228;:::o;41427:227::-;41567:34;41563:1;41555:6;41551:14;41544:58;41636:10;41631:2;41623:6;41619:15;41612:35;41427:227;:::o;41660:172::-;41800:24;41796:1;41788:6;41784:14;41777:48;41660:172;:::o;41838:220::-;41978:34;41974:1;41966:6;41962:14;41955:58;42047:3;42042:2;42034:6;42030:15;42023:28;41838:220;:::o;42064:711::-;42103:3;42141:4;42123:16;42120:26;42117:39;;;42149:5;;42117:39;42178:20;;:::i;:::-;42253:1;42235:16;42231:24;42228:1;42222:4;42207:49;42286:4;42280:11;42385:16;42378:4;42370:6;42366:17;42363:39;42330:18;42322:6;42319:30;42303:113;42300:146;;;42431:5;;;;42300:146;42477:6;42471:4;42467:17;42513:3;42507:10;42540:18;42532:6;42529:30;42526:43;;;42562:5;;;;;;42526:43;42610:6;42603:4;42598:3;42594:14;42590:27;42669:1;42651:16;42647:24;42641:4;42637:35;42632:3;42629:44;42626:57;;;42676:5;;;;;;;42626:57;42693;42741:6;42735:4;42731:17;42723:6;42719:30;42713:4;42693:57;:::i;:::-;42766:3;42759:10;;42107:668;;;;;42064:711;;:::o;42781:122::-;42854:24;42872:5;42854:24;:::i;:::-;42847:5;42844:35;42834:63;;42893:1;42890;42883:12;42834:63;42781:122;:::o;42909:116::-;42979:21;42994:5;42979:21;:::i;:::-;42972:5;42969:32;42959:60;;43015:1;43012;43005:12;42959:60;42909:116;:::o;43031:120::-;43103:23;43120:5;43103:23;:::i;:::-;43096:5;43093:34;43083:62;;43141:1;43138;43131:12;43083:62;43031:120;:::o;43157:122::-;43230:24;43248:5;43230:24;:::i;:::-;43223:5;43220:35;43210:63;;43269:1;43266;43259:12;43210:63;43157:122;:::o

Swarm Source

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