ETH Price: $3,395.53 (-1.84%)
Gas: 6 Gwei

Token

Midget Monsters (Monster)
 

Overview

Max Total Supply

264 Monster

Holders

114

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Villains by Felt Zine: Deployer
Balance
3 Monster
0x5e080d8b14c1da5936509c2c9ef0168a19304202
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:
MidgetMonsters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-16
*/

// File: @openzeppelin/contracts/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



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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// File: @openzeppelin/contracts/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/token/ERC721/IERC721.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/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/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/Address.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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



pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}



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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/PixelDoors.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;

contract PixelDoorsv2 { // This doesn't have to match the real contract name. Call it what you like.
   function walletOfOwner (address _owner) public view returns (uint256[] memory) {} 
   function ownerOf (uint256) public view returns (address) {}
}

contract MidgetMonsters is ERC721Enumerable, Ownable {
    PixelDoorsv2 bridge = PixelDoorsv2(0x9fBe628683527bc7Be4C31472BCB0c2c6eC2dCCa);
    
    //
     using Strings for uint256;

    string public baseURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.04 ether;
    uint256 public maxSupply = 10000;
    uint256 public maxMintAmount = 20;
    uint256 public nftPerAddressLimit = 100;
    bool public paused = false;
    mapping(address => uint256) public addressMintedBalance;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
     )  ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        mint(msg.sender, 1);
        Reward_Special_PixelDoors_Owners ();
        paused = true;
  }
    
    function IsSenderPixelDoorOwner (address _user) private view returns (bool) {
        uint256[] memory values = bridge.walletOfOwner(_user);
        if (values.length > 0) { 
            return true;
        }
        else {
            return false;
        }
    }

    function IsThisAdressAPixelDoorOwner (address Provided_Address_To_Check) public view returns (bool) {
        return IsSenderPixelDoorOwner(Provided_Address_To_Check);
    }
    
    function Reward_Special_PixelDoors_Owners () private { //Airdropping special doors as promised (only 2.5k minted at time of launch)
        mint(bridge.ownerOf(1),1);
        mint(bridge.ownerOf(1000),1);
        mint(bridge.ownerOf(2000),1);
        mint(bridge.ownerOf(2325),1); //Community helper
    }
  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public
  function mint(address _user, uint256 _mintAmount) public payable {
    require(!paused, "The contract is paused!");
    uint256 supply = totalSupply();
    if (IsSenderPixelDoorOwner(_user)) {
        if (supply <= 200) {
            cost = 0 ether;
            maxMintAmount = 1;
            nftPerAddressLimit = 3;
        }
        else {
        cost = 0.02 ether;
        maxMintAmount = 20;
        nftPerAddressLimit = 100;
        }
    }
    else {
    cost = 0.04  ether;
    maxMintAmount = 20;
    nftPerAddressLimit = 100;
    }
    require(_mintAmount > 0, "Need to mint at least 1 NFT");
    require(_mintAmount <= maxMintAmount, "Max mint amount per session exceeded");
    require(supply + _mintAmount <= maxSupply, "Max NFT limit exceeded");

    if (msg.sender != owner()) {
        uint256 ownerMintedCount = addressMintedBalance[_user];
        require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "Max NFT per address exceeded");
        require(msg.value >= cost * _mintAmount, "Insufficient funds");
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[_user]++;
      _safeMint(_user, supply + i);
    }
  }

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

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner() {
    nftPerAddressLimit = _limit;
  }
  
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }

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

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"Provided_Address_To_Check","type":"address"}],"name":"IsThisAdressAPixelDoorOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052739fbe628683527bc7be4c31472bcb0c2c6ec2dcca600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000a6929190620014e7565b50668e1bc9bf040000600e55612710600f55601460105560646011556000601260006101000a81548160ff021916908315150217905550348015620000ea57600080fd5b5060405162006e6038038062006e608339818101604052810190620001109190620017bd565b828281600090805190602001906200012a929190620014e7565b50806001908051906020019062000143929190620014e7565b505050620001666200015a620001be60201b60201c565b620001c660201b60201c565b62000177816200028c60201b60201c565b6200018a3360016200033760201b60201c565b6200019a620006d760201b60201c565b6001601260006101000a81548160ff0219169083151502179055505050506200241b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200029c620001be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c2620009ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200031b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003129062001c9d565b60405180910390fd5b80600c908051906020019062000333929190620014e7565b5050565b601260009054906101000a900460ff16156200038a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003819062001cbf565b60405180910390fd5b60006200039c62000a1660201b60201c565b9050620003af8362000a2360201b60201c565b15620004015760c88111620003dc576000600e8190555060016010819055506003601181905550620003fb565b66470de4df820000600e81905550601460108190555060646011819055505b62000420565b668e1bc9bf040000600e81905550601460108190555060646011819055505b6000821162000466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200045d9062001d03565b60405180910390fd5b601054821115620004ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a59062001bf3565b60405180910390fd5b600f548282620004bf919062001de0565b111562000503576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fa9062001c59565b60405180910390fd5b62000513620009ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000636576000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826200059b919062001de0565b1115620005df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d69062001ce1565b60405180910390fd5b82600e54620005ef919062001e3d565b34101562000634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062b9062001c15565b60405180910390fd5b505b6000600190505b828111620006d157601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190620006979062002035565b9190505550620006bb848284620006af919062001de0565b62000aff60201b60201c565b8080620006c89062002035565b9150506200063d565b50505050565b6200079b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e60016040518263ffffffff1660e01b815260040162000739919062001b58565b60206040518083038186803b1580156200075257600080fd5b505afa15801562000767573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200078d919062001708565b60016200033760201b60201c565b62000860600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6103e86040518263ffffffff1660e01b8152600401620007fe919062001b3b565b60206040518083038186803b1580156200081757600080fd5b505afa1580156200082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000852919062001708565b60016200033760201b60201c565b62000925600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6107d06040518263ffffffff1660e01b8152600401620008c3919062001b75565b60206040518083038186803b158015620008dc57600080fd5b505afa158015620008f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000917919062001708565b60016200033760201b60201c565b620009ea600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e6109156040518263ffffffff1660e01b815260040162000988919062001b92565b60206040518083038186803b158015620009a157600080fd5b505afa158015620009b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009dc919062001708565b60016200033760201b60201c565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300846040518263ffffffff1660e01b815260040162000a83919062001aca565b60006040518083038186803b15801562000a9c57600080fd5b505afa15801562000ab1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019062000adc91906200173a565b905060008151111562000af457600191505062000afa565b60009150505b919050565b62000b2182826040518060200160405280600081525062000b2560201b60201c565b5050565b62000b37838362000b9360201b60201c565b62000b4c600084848462000d7960201b60201c565b62000b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b859062001baf565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfd9062001c7b565b60405180910390fd5b62000c178162000f3360201b60201c565b1562000c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c519062001bd1565b60405180910390fd5b62000c6e6000838362000f9f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000cc0919062001de0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000da78473ffffffffffffffffffffffffffffffffffffffff16620010e660201b62001d991760201c565b1562000f26578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000dd9620001be60201b60201c565b8786866040518563ffffffff1660e01b815260040162000dfd949392919062001ae7565b602060405180830381600087803b15801562000e1857600080fd5b505af192505050801562000e4c57506040513d601f19601f8201168201806040525081019062000e4991906200178b565b60015b62000ed5573d806000811462000e7f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e84565b606091505b5060008151141562000ecd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ec49062001baf565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000f2b565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000fb7838383620010f960201b62001dac1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620010045762000ffe81620010fe60201b60201c565b6200104c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200104b576200104a83826200114760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001099576200109381620012c460201b60201c565b620010e1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620010e057620010df8282620013a060201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162001161846200142c60201b620015481760201c565b6200116d919062001e9e565b905060006007600084815260200190815260200160002054905081811462001253576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620012da919062001e9e565b90506000600960008481526020019081526020016000205490506000600883815481106200130d576200130c62002110565b5b90600052602060002001549050806008838154811062001332576200133162002110565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480620013845762001383620020e1565b5b6001900381819060005260206000200160009055905550505050565b6000620013b8836200142c60201b620015481760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620014a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014979062001c37565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b828054620014f59062001fc9565b90600052602060002090601f01602090048101928262001519576000855562001565565b82601f106200153457805160ff191683800117855562001565565b8280016001018555821562001565579182015b828111156200156457825182559160200191906001019062001547565b5b50905062001574919062001578565b5090565b5b808211156200159357600081600090555060010162001579565b5090565b6000620015ae620015a88462001d4e565b62001d25565b90508083825260208201905082856020860282011115620015d457620015d362002173565b5b60005b85811015620016085781620015ed8882620016f1565b845260208401935060208301925050600181019050620015d7565b5050509392505050565b600062001629620016238462001d7d565b62001d25565b90508281526020810184848401111562001648576200164762002178565b5b6200165584828562001f93565b509392505050565b6000815190506200166e81620023cd565b92915050565b600082601f8301126200168c576200168b6200216e565b5b81516200169e84826020860162001597565b91505092915050565b600081519050620016b881620023e7565b92915050565b600082601f830112620016d657620016d56200216e565b5b8151620016e884826020860162001612565b91505092915050565b600081519050620017028162002401565b92915050565b60006020828403121562001721576200172062002182565b5b600062001731848285016200165d565b91505092915050565b60006020828403121562001753576200175262002182565b5b600082015167ffffffffffffffff8111156200177457620017736200217d565b5b620017828482850162001674565b91505092915050565b600060208284031215620017a457620017a362002182565b5b6000620017b484828501620016a7565b91505092915050565b600080600060608486031215620017d957620017d862002182565b5b600084015167ffffffffffffffff811115620017fa57620017f96200217d565b5b6200180886828701620016be565b935050602084015167ffffffffffffffff8111156200182c576200182b6200217d565b5b6200183a86828701620016be565b925050604084015167ffffffffffffffff8111156200185e576200185d6200217d565b5b6200186c86828701620016be565b9150509250925092565b620018818162001ed9565b82525050565b6000620018948262001db3565b620018a0818562001dbe565b9350620018b281856020860162001f93565b620018bd8162002187565b840191505092915050565b620018d38162001f43565b82525050565b620018e48162001f57565b82525050565b620018f58162001f6b565b82525050565b620019068162001f7f565b82525050565b60006200191b60328362001dcf565b9150620019288262002198565b604082019050919050565b600062001942601c8362001dcf565b91506200194f82620021e7565b602082019050919050565b60006200196960248362001dcf565b9150620019768262002210565b604082019050919050565b60006200199060128362001dcf565b91506200199d826200225f565b602082019050919050565b6000620019b7602a8362001dcf565b9150620019c48262002288565b604082019050919050565b6000620019de60168362001dcf565b9150620019eb82620022d7565b602082019050919050565b600062001a0560208362001dcf565b915062001a128262002300565b602082019050919050565b600062001a2c60208362001dcf565b915062001a398262002329565b602082019050919050565b600062001a5360178362001dcf565b915062001a608262002352565b602082019050919050565b600062001a7a601c8362001dcf565b915062001a87826200237b565b602082019050919050565b600062001aa1601b8362001dcf565b915062001aae82620023a4565b602082019050919050565b62001ac48162001f39565b82525050565b600060208201905062001ae1600083018462001876565b92915050565b600060808201905062001afe600083018762001876565b62001b0d602083018662001876565b62001b1c604083018562001ab9565b818103606083015262001b30818462001887565b905095945050505050565b600060208201905062001b526000830184620018c8565b92915050565b600060208201905062001b6f6000830184620018d9565b92915050565b600060208201905062001b8c6000830184620018ea565b92915050565b600060208201905062001ba96000830184620018fb565b92915050565b6000602082019050818103600083015262001bca816200190c565b9050919050565b6000602082019050818103600083015262001bec8162001933565b9050919050565b6000602082019050818103600083015262001c0e816200195a565b9050919050565b6000602082019050818103600083015262001c308162001981565b9050919050565b6000602082019050818103600083015262001c5281620019a8565b9050919050565b6000602082019050818103600083015262001c7481620019cf565b9050919050565b6000602082019050818103600083015262001c9681620019f6565b9050919050565b6000602082019050818103600083015262001cb88162001a1d565b9050919050565b6000602082019050818103600083015262001cda8162001a44565b9050919050565b6000602082019050818103600083015262001cfc8162001a6b565b9050919050565b6000602082019050818103600083015262001d1e8162001a92565b9050919050565b600062001d3162001d44565b905062001d3f828262001fff565b919050565b6000604051905090565b600067ffffffffffffffff82111562001d6c5762001d6b6200213f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562001d9b5762001d9a6200213f565b5b62001da68262002187565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001ded8262001f39565b915062001dfa8362001f39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001e325762001e3162002083565b5b828201905092915050565b600062001e4a8262001f39565b915062001e578362001f39565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001e935762001e9262002083565b5b828202905092915050565b600062001eab8262001f39565b915062001eb88362001f39565b92508282101562001ece5762001ecd62002083565b5b828203905092915050565b600062001ee68262001f19565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062001f508262001f39565b9050919050565b600062001f648262001f39565b9050919050565b600062001f788262001f39565b9050919050565b600062001f8c8262001f39565b9050919050565b60005b8381101562001fb357808201518184015260208101905062001f96565b8381111562001fc3576000848401525b50505050565b6000600282049050600182168062001fe257607f821691505b6020821081141562001ff95762001ff8620020b2565b5b50919050565b6200200a8262002187565b810181811067ffffffffffffffff821117156200202c576200202b6200213f565b5b80604052505050565b6000620020428262001f39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562002078576200207762002083565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b620023d88162001ed9565b8114620023e457600080fd5b50565b620023f28162001eed565b8114620023fe57600080fd5b50565b6200240c8162001f39565b81146200241857600080fd5b50565b614a35806200242b6000396000f3fe60806040526004361061021a5760003560e01c806355f804b311610123578063a22cb465116100ab578063d0eb26b01161006f578063d0eb26b0146107dd578063d5abeb0114610806578063da3ef23f14610831578063e985e9c51461085a578063f2fde38b146108975761021a565b8063a22cb465146106f8578063b88d4fde14610721578063ba7d2c761461074a578063c668286214610775578063c87b56dd146107a05761021a565b806370a08231116100f257806370a0823114610625578063715018a6146106625780637f00c7a6146106795780638da5cb5b146106a257806395d89b41146106cd5761021a565b806355f804b3146105695780635c975abb146105925780636352211e146105bd5780636c0360eb146105fa5761021a565b8063239c70ae116101a657806340c10f191161017557806340c10f191461048157806342842e0e1461049d578063438b6300146104c657806344a0d68a146105035780634f6ccce71461052c5761021a565b8063239c70ae146103e657806323b872dd146104115780632f745c591461043a5780633ccfd60b146104775761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806313faede61461031657806318160ddd1461034157806318cae2691461036c57806321ea86c6146103a95761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061341d565b6108c0565b6040516102539190613afb565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906133f0565b61093a565b005b34801561029157600080fd5b5061029a6109d3565b6040516102a79190613b16565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906134c0565b610a65565b6040516102e49190613a72565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613367565b610aea565b005b34801561032257600080fd5b5061032b610c02565b6040516103389190613e38565b60405180910390f35b34801561034d57600080fd5b50610356610c08565b6040516103639190613e38565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906131e4565b610c15565b6040516103a09190613e38565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906131e4565b610c2d565b6040516103dd9190613afb565b60405180910390f35b3480156103f257600080fd5b506103fb610c3f565b6040516104089190613e38565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613251565b610c45565b005b34801561044657600080fd5b50610461600480360381019061045c9190613367565b610ca5565b60405161046e9190613e38565b60405180910390f35b61047f610d4a565b005b61049b60048036038101906104969190613367565b610e3f565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190613251565b61119a565b005b3480156104d257600080fd5b506104ed60048036038101906104e891906131e4565b6111ba565b6040516104fa9190613ad9565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906134c0565b611268565b005b34801561053857600080fd5b50610553600480360381019061054e91906134c0565b6112ee565b6040516105609190613e38565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613477565b61135f565b005b34801561059e57600080fd5b506105a76113f5565b6040516105b49190613afb565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df91906134c0565b611408565b6040516105f19190613a72565b60405180910390f35b34801561060657600080fd5b5061060f6114ba565b60405161061c9190613b16565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906131e4565b611548565b6040516106599190613e38565b60405180910390f35b34801561066e57600080fd5b50610677611600565b005b34801561068557600080fd5b506106a0600480360381019061069b91906134c0565b611688565b005b3480156106ae57600080fd5b506106b761170e565b6040516106c49190613a72565b60405180910390f35b3480156106d957600080fd5b506106e2611738565b6040516106ef9190613b16565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613327565b6117ca565b005b34801561072d57600080fd5b50610748600480360381019061074391906132a4565b61194b565b005b34801561075657600080fd5b5061075f6119ad565b60405161076c9190613e38565b60405180910390f35b34801561078157600080fd5b5061078a6119b3565b6040516107979190613b16565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906134c0565b611a41565b6040516107d49190613b16565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906134c0565b611aeb565b005b34801561081257600080fd5b5061081b611b71565b6040516108289190613e38565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613477565b611b77565b005b34801561086657600080fd5b50610881600480360381019061087c9190613211565b611c0d565b60405161088e9190613afb565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906131e4565b611ca1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610933575061093282611db1565b5b9050919050565b610942611e93565b73ffffffffffffffffffffffffffffffffffffffff1661096061170e565b73ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90613d18565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6060600080546109e29061416d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061416d565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b6000610a7082611e9b565b610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613cf8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af582611408565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613db8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b85611e93565b73ffffffffffffffffffffffffffffffffffffffff161480610bb45750610bb381610bae611e93565b611c0d565b5b610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613c58565b60405180910390fd5b610bfd8383611f07565b505050565b600e5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b6000610c3882611fc0565b9050919050565b60105481565b610c56610c50611e93565b82612094565b610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90613dd8565b60405180910390fd5b610ca0838383612172565b505050565b6000610cb083611548565b8210610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613b38565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d52611e93565b73ffffffffffffffffffffffffffffffffffffffff16610d7061170e565b73ffffffffffffffffffffffffffffffffffffffff1614610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613d18565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610dec90613a5d565b60006040518083038185875af1925050503d8060008114610e29576040519150601f19603f3d011682016040523d82523d6000602084013e610e2e565b606091505b5050905080610e3c57600080fd5b50565b601260009054906101000a900460ff1615610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613d38565b60405180910390fd5b6000610e99610c08565b9050610ea483611fc0565b15610ef25760c88111610ece576000600e8190555060016010819055506003601181905550610eed565b66470de4df820000600e81905550601460108190555060646011819055505b610f11565b668e1bc9bf040000600e81905550601460108190555060646011819055505b60008211610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613e18565b60405180910390fd5b601054821115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090613c18565b60405180910390fd5b600f548282610fa89190613fa2565b1115610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090613cb8565b60405180910390fd5b610ff161170e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611109576000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826110769190613fa2565b11156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90613d98565b60405180910390fd5b82600e546110c59190614029565b341015611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613c38565b60405180910390fd5b505b6000600190505b82811161119457601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611167906141d0565b919050555061118184828461117c9190613fa2565b6123ce565b808061118c906141d0565b915050611110565b50505050565b6111b58383836040518060200160405280600081525061194b565b505050565b606060006111c783611548565b905060008167ffffffffffffffff8111156111e5576111e4614335565b5b6040519080825280602002602001820160405280156112135781602001602082028036833780820191505090505b50905060005b8281101561125d5761122b8582610ca5565b82828151811061123e5761123d614306565b5b6020026020010181815250508080611255906141d0565b915050611219565b508092505050919050565b611270611e93565b73ffffffffffffffffffffffffffffffffffffffff1661128e61170e565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613d18565b60405180910390fd5b80600e8190555050565b60006112f8610c08565b8210611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613df8565b60405180910390fd5b6008828154811061134d5761134c614306565b5b90600052602060002001549050919050565b611367611e93565b73ffffffffffffffffffffffffffffffffffffffff1661138561170e565b73ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613d18565b60405180910390fd5b80600c90805190602001906113f1929190612f45565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613c98565b60405180910390fd5b80915050919050565b600c80546114c79061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546114f39061416d565b80156115405780601f1061151557610100808354040283529160200191611540565b820191906000526020600020905b81548152906001019060200180831161152357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613c78565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611608611e93565b73ffffffffffffffffffffffffffffffffffffffff1661162661170e565b73ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613d18565b60405180910390fd5b61168660006123ec565b565b611690611e93565b73ffffffffffffffffffffffffffffffffffffffff166116ae61170e565b73ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613d18565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117479061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546117739061416d565b80156117c05780601f10611795576101008083540402835291602001916117c0565b820191906000526020600020905b8154815290600101906020018083116117a357829003601f168201915b5050505050905090565b6117d2611e93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183790613bd8565b60405180910390fd5b806005600061184d611e93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fa611e93565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193f9190613afb565b60405180910390a35050565b61195c611956611e93565b83612094565b61199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613dd8565b60405180910390fd5b6119a7848484846124b2565b50505050565b60115481565b600d80546119c09061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546119ec9061416d565b8015611a395780601f10611a0e57610100808354040283529160200191611a39565b820191906000526020600020905b815481529060010190602001808311611a1c57829003601f168201915b505050505081565b6060611a4c82611e9b565b611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613d78565b60405180910390fd5b6000611a9561250e565b90506000815111611ab55760405180602001604052806000815250611ae3565b80611abf846125a0565b600d604051602001611ad393929190613a2c565b6040516020818303038152906040525b915050919050565b611af3611e93565b73ffffffffffffffffffffffffffffffffffffffff16611b1161170e565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613d18565b60405180910390fd5b8060118190555050565b600f5481565b611b7f611e93565b73ffffffffffffffffffffffffffffffffffffffff16611b9d61170e565b73ffffffffffffffffffffffffffffffffffffffff1614611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613d18565b60405180910390fd5b80600d9080519060200190611c09929190612f45565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ca9611e93565b73ffffffffffffffffffffffffffffffffffffffff16611cc761170e565b73ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613b78565b60405180910390fd5b611d96816123ec565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e8c5750611e8b82612701565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7a83611408565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300846040518263ffffffff1660e01b815260040161201e9190613a72565b60006040518083038186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061207391906133a7565b905060008151111561208957600191505061208f565b60009150505b919050565b600061209f82611e9b565b6120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613bf8565b60405180910390fd5b60006120e983611408565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061215857508373ffffffffffffffffffffffffffffffffffffffff1661214084610a65565b73ffffffffffffffffffffffffffffffffffffffff16145b8061216957506121688185611c0d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661219282611408565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90613d58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90613bb8565b60405180910390fd5b61226383838361276b565b61226e600082611f07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122be9190614083565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123159190613fa2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123e882826040518060200160405280600081525061287f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124bd848484612172565b6124c9848484846128da565b612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613b58565b60405180910390fd5b50505050565b6060600c805461251d9061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546125499061416d565b80156125965780601f1061256b57610100808354040283529160200191612596565b820191906000526020600020905b81548152906001019060200180831161257957829003601f168201915b5050505050905090565b606060008214156125e8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126fc565b600082905060005b6000821461261a578080612603906141d0565b915050600a826126139190613ff8565b91506125f0565b60008167ffffffffffffffff81111561263657612635614335565b5b6040519080825280601f01601f1916602001820160405280156126685781602001600182028036833780820191505090505b5090505b600085146126f5576001826126819190614083565b9150600a856126909190614219565b603061269c9190613fa2565b60f81b8183815181106126b2576126b1614306565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126ee9190613ff8565b945061266c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612776838383611dac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b9576127b481612a71565b6127f8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127f7576127f68382612aba565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561283b5761283681612c27565b61287a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612879576128788282612cf8565b5b5b505050565b6128898383612d77565b61289660008484846128da565b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90613b58565b60405180910390fd5b505050565b60006128fb8473ffffffffffffffffffffffffffffffffffffffff16611d99565b15612a64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612924611e93565b8786866040518563ffffffff1660e01b81526004016129469493929190613a8d565b602060405180830381600087803b15801561296057600080fd5b505af192505050801561299157506040513d601f19601f8201168201806040525081019061298e919061344a565b60015b612a14573d80600081146129c1576040519150601f19603f3d011682016040523d82523d6000602084013e6129c6565b606091505b50600081511415612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0390613b58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a69565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ac784611548565b612ad19190614083565b9050600060076000848152602001908152602001600020549050818114612bb6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c3b9190614083565b9050600060096000848152602001908152602001600020549050600060088381548110612c6b57612c6a614306565b5b906000526020600020015490508060088381548110612c8d57612c8c614306565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cdc57612cdb6142d7565b5b6001900381819060005260206000200160009055905550505050565b6000612d0383611548565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90613cd8565b60405180910390fd5b612df081611e9b565b15612e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2790613b98565b60405180910390fd5b612e3c6000838361276b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e8c9190613fa2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f519061416d565b90600052602060002090601f016020900481019282612f735760008555612fba565b82601f10612f8c57805160ff1916838001178555612fba565b82800160010185558215612fba579182015b82811115612fb9578251825591602001919060010190612f9e565b5b509050612fc79190612fcb565b5090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000612ffb612ff684613e78565b613e53565b9050808382526020820190508285602086028201111561301e5761301d614369565b5b60005b8581101561304e578161303488826131cf565b845260208401935060208301925050600181019050613021565b5050509392505050565b600061306b61306684613ea4565b613e53565b9050828152602081018484840111156130875761308661436e565b5b61309284828561412b565b509392505050565b60006130ad6130a884613ed5565b613e53565b9050828152602081018484840111156130c9576130c861436e565b5b6130d484828561412b565b509392505050565b6000813590506130eb816149a3565b92915050565b600082601f83011261310657613105614364565b5b8151613116848260208601612fe8565b91505092915050565b60008135905061312e816149ba565b92915050565b600081359050613143816149d1565b92915050565b600081519050613158816149d1565b92915050565b600082601f83011261317357613172614364565b5b8135613183848260208601613058565b91505092915050565b600082601f8301126131a1576131a0614364565b5b81356131b184826020860161309a565b91505092915050565b6000813590506131c9816149e8565b92915050565b6000815190506131de816149e8565b92915050565b6000602082840312156131fa576131f9614378565b5b6000613208848285016130dc565b91505092915050565b6000806040838503121561322857613227614378565b5b6000613236858286016130dc565b9250506020613247858286016130dc565b9150509250929050565b60008060006060848603121561326a57613269614378565b5b6000613278868287016130dc565b9350506020613289868287016130dc565b925050604061329a868287016131ba565b9150509250925092565b600080600080608085870312156132be576132bd614378565b5b60006132cc878288016130dc565b94505060206132dd878288016130dc565b93505060406132ee878288016131ba565b925050606085013567ffffffffffffffff81111561330f5761330e614373565b5b61331b8782880161315e565b91505092959194509250565b6000806040838503121561333e5761333d614378565b5b600061334c858286016130dc565b925050602061335d8582860161311f565b9150509250929050565b6000806040838503121561337e5761337d614378565b5b600061338c858286016130dc565b925050602061339d858286016131ba565b9150509250929050565b6000602082840312156133bd576133bc614378565b5b600082015167ffffffffffffffff8111156133db576133da614373565b5b6133e7848285016130f1565b91505092915050565b60006020828403121561340657613405614378565b5b60006134148482850161311f565b91505092915050565b60006020828403121561343357613432614378565b5b600061344184828501613134565b91505092915050565b6000602082840312156134605761345f614378565b5b600061346e84828501613149565b91505092915050565b60006020828403121561348d5761348c614378565b5b600082013567ffffffffffffffff8111156134ab576134aa614373565b5b6134b78482850161318c565b91505092915050565b6000602082840312156134d6576134d5614378565b5b60006134e4848285016131ba565b91505092915050565b60006134f98383613a0e565b60208301905092915050565b61350e816140b7565b82525050565b600061351f82613f2b565b6135298185613f59565b935061353483613f06565b8060005b8381101561356557815161354c88826134ed565b975061355783613f4c565b925050600181019050613538565b5085935050505092915050565b61357b816140c9565b82525050565b600061358c82613f36565b6135968185613f6a565b93506135a681856020860161413a565b6135af8161437d565b840191505092915050565b60006135c582613f41565b6135cf8185613f86565b93506135df81856020860161413a565b6135e88161437d565b840191505092915050565b60006135fe82613f41565b6136088185613f97565b935061361881856020860161413a565b80840191505092915050565b600081546136318161416d565b61363b8186613f97565b9450600182166000811461365657600181146136675761369a565b60ff1983168652818601935061369a565b61367085613f16565b60005b8381101561369257815481890152600182019150602081019050613673565b838801955050505b50505092915050565b60006136b0602b83613f86565b91506136bb8261438e565b604082019050919050565b60006136d3603283613f86565b91506136de826143dd565b604082019050919050565b60006136f6602683613f86565b91506137018261442c565b604082019050919050565b6000613719601c83613f86565b91506137248261447b565b602082019050919050565b600061373c602483613f86565b9150613747826144a4565b604082019050919050565b600061375f601983613f86565b915061376a826144f3565b602082019050919050565b6000613782602c83613f86565b915061378d8261451c565b604082019050919050565b60006137a5602483613f86565b91506137b08261456b565b604082019050919050565b60006137c8601283613f86565b91506137d3826145ba565b602082019050919050565b60006137eb603883613f86565b91506137f6826145e3565b604082019050919050565b600061380e602a83613f86565b915061381982614632565b604082019050919050565b6000613831602983613f86565b915061383c82614681565b604082019050919050565b6000613854601683613f86565b915061385f826146d0565b602082019050919050565b6000613877602083613f86565b9150613882826146f9565b602082019050919050565b600061389a602c83613f86565b91506138a582614722565b604082019050919050565b60006138bd602083613f86565b91506138c882614771565b602082019050919050565b60006138e0601783613f86565b91506138eb8261479a565b602082019050919050565b6000613903602983613f86565b915061390e826147c3565b604082019050919050565b6000613926602f83613f86565b915061393182614812565b604082019050919050565b6000613949601c83613f86565b915061395482614861565b602082019050919050565b600061396c602183613f86565b91506139778261488a565b604082019050919050565b600061398f600083613f7b565b915061399a826148d9565b600082019050919050565b60006139b2603183613f86565b91506139bd826148dc565b604082019050919050565b60006139d5602c83613f86565b91506139e08261492b565b604082019050919050565b60006139f8601b83613f86565b9150613a038261497a565b602082019050919050565b613a1781614121565b82525050565b613a2681614121565b82525050565b6000613a3882866135f3565b9150613a4482856135f3565b9150613a508284613624565b9150819050949350505050565b6000613a6882613982565b9150819050919050565b6000602082019050613a876000830184613505565b92915050565b6000608082019050613aa26000830187613505565b613aaf6020830186613505565b613abc6040830185613a1d565b8181036060830152613ace8184613581565b905095945050505050565b60006020820190508181036000830152613af38184613514565b905092915050565b6000602082019050613b106000830184613572565b92915050565b60006020820190508181036000830152613b3081846135ba565b905092915050565b60006020820190508181036000830152613b51816136a3565b9050919050565b60006020820190508181036000830152613b71816136c6565b9050919050565b60006020820190508181036000830152613b91816136e9565b9050919050565b60006020820190508181036000830152613bb18161370c565b9050919050565b60006020820190508181036000830152613bd18161372f565b9050919050565b60006020820190508181036000830152613bf181613752565b9050919050565b60006020820190508181036000830152613c1181613775565b9050919050565b60006020820190508181036000830152613c3181613798565b9050919050565b60006020820190508181036000830152613c51816137bb565b9050919050565b60006020820190508181036000830152613c71816137de565b9050919050565b60006020820190508181036000830152613c9181613801565b9050919050565b60006020820190508181036000830152613cb181613824565b9050919050565b60006020820190508181036000830152613cd181613847565b9050919050565b60006020820190508181036000830152613cf18161386a565b9050919050565b60006020820190508181036000830152613d118161388d565b9050919050565b60006020820190508181036000830152613d31816138b0565b9050919050565b60006020820190508181036000830152613d51816138d3565b9050919050565b60006020820190508181036000830152613d71816138f6565b9050919050565b60006020820190508181036000830152613d9181613919565b9050919050565b60006020820190508181036000830152613db18161393c565b9050919050565b60006020820190508181036000830152613dd18161395f565b9050919050565b60006020820190508181036000830152613df1816139a5565b9050919050565b60006020820190508181036000830152613e11816139c8565b9050919050565b60006020820190508181036000830152613e31816139eb565b9050919050565b6000602082019050613e4d6000830184613a1d565b92915050565b6000613e5d613e6e565b9050613e69828261419f565b919050565b6000604051905090565b600067ffffffffffffffff821115613e9357613e92614335565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ebf57613ebe614335565b5b613ec88261437d565b9050602081019050919050565b600067ffffffffffffffff821115613ef057613eef614335565b5b613ef98261437d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fad82614121565b9150613fb883614121565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fed57613fec61424a565b5b828201905092915050565b600061400382614121565b915061400e83614121565b92508261401e5761401d614279565b5b828204905092915050565b600061403482614121565b915061403f83614121565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140785761407761424a565b5b828202905092915050565b600061408e82614121565b915061409983614121565b9250828210156140ac576140ab61424a565b5b828203905092915050565b60006140c282614101565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561415857808201518184015260208101905061413d565b83811115614167576000848401525b50505050565b6000600282049050600182168061418557607f821691505b60208210811415614199576141986142a8565b5b50919050565b6141a88261437d565b810181811067ffffffffffffffff821117156141c7576141c6614335565b5b80604052505050565b60006141db82614121565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420e5761420d61424a565b5b600182019050919050565b600061422482614121565b915061422f83614121565b92508261423f5761423e614279565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6149ac816140b7565b81146149b757600080fd5b50565b6149c3816140c9565b81146149ce57600080fd5b50565b6149da816140d5565b81146149e557600080fd5b50565b6149f181614121565b81146149fc57600080fd5b5056fea26469706673582212204e0951f4a6a13fa47505ef11c1c22f25dc35706ebb4a27c53fd97f2c655fb28464736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f4d6964676574204d6f6e7374657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d6f6e7374657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f697066732f2f516d58394e6e5545426e32386341793739345562724352563270525136787338543642645968713536745a5764352f00000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c806355f804b311610123578063a22cb465116100ab578063d0eb26b01161006f578063d0eb26b0146107dd578063d5abeb0114610806578063da3ef23f14610831578063e985e9c51461085a578063f2fde38b146108975761021a565b8063a22cb465146106f8578063b88d4fde14610721578063ba7d2c761461074a578063c668286214610775578063c87b56dd146107a05761021a565b806370a08231116100f257806370a0823114610625578063715018a6146106625780637f00c7a6146106795780638da5cb5b146106a257806395d89b41146106cd5761021a565b806355f804b3146105695780635c975abb146105925780636352211e146105bd5780636c0360eb146105fa5761021a565b8063239c70ae116101a657806340c10f191161017557806340c10f191461048157806342842e0e1461049d578063438b6300146104c657806344a0d68a146105035780634f6ccce71461052c5761021a565b8063239c70ae146103e657806323b872dd146104115780632f745c591461043a5780633ccfd60b146104775761021a565b8063095ea7b3116101ed578063095ea7b3146102ed57806313faede61461031657806318160ddd1461034157806318cae2691461036c57806321ea86c6146103a95761021a565b806301ffc9a71461021f57806302329a291461025c57806306fdde0314610285578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061341d565b6108c0565b6040516102539190613afb565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e91906133f0565b61093a565b005b34801561029157600080fd5b5061029a6109d3565b6040516102a79190613b16565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906134c0565b610a65565b6040516102e49190613a72565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613367565b610aea565b005b34801561032257600080fd5b5061032b610c02565b6040516103389190613e38565b60405180910390f35b34801561034d57600080fd5b50610356610c08565b6040516103639190613e38565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906131e4565b610c15565b6040516103a09190613e38565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906131e4565b610c2d565b6040516103dd9190613afb565b60405180910390f35b3480156103f257600080fd5b506103fb610c3f565b6040516104089190613e38565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190613251565b610c45565b005b34801561044657600080fd5b50610461600480360381019061045c9190613367565b610ca5565b60405161046e9190613e38565b60405180910390f35b61047f610d4a565b005b61049b60048036038101906104969190613367565b610e3f565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190613251565b61119a565b005b3480156104d257600080fd5b506104ed60048036038101906104e891906131e4565b6111ba565b6040516104fa9190613ad9565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906134c0565b611268565b005b34801561053857600080fd5b50610553600480360381019061054e91906134c0565b6112ee565b6040516105609190613e38565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613477565b61135f565b005b34801561059e57600080fd5b506105a76113f5565b6040516105b49190613afb565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df91906134c0565b611408565b6040516105f19190613a72565b60405180910390f35b34801561060657600080fd5b5061060f6114ba565b60405161061c9190613b16565b60405180910390f35b34801561063157600080fd5b5061064c600480360381019061064791906131e4565b611548565b6040516106599190613e38565b60405180910390f35b34801561066e57600080fd5b50610677611600565b005b34801561068557600080fd5b506106a0600480360381019061069b91906134c0565b611688565b005b3480156106ae57600080fd5b506106b761170e565b6040516106c49190613a72565b60405180910390f35b3480156106d957600080fd5b506106e2611738565b6040516106ef9190613b16565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190613327565b6117ca565b005b34801561072d57600080fd5b50610748600480360381019061074391906132a4565b61194b565b005b34801561075657600080fd5b5061075f6119ad565b60405161076c9190613e38565b60405180910390f35b34801561078157600080fd5b5061078a6119b3565b6040516107979190613b16565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906134c0565b611a41565b6040516107d49190613b16565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff91906134c0565b611aeb565b005b34801561081257600080fd5b5061081b611b71565b6040516108289190613e38565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613477565b611b77565b005b34801561086657600080fd5b50610881600480360381019061087c9190613211565b611c0d565b60405161088e9190613afb565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b991906131e4565b611ca1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610933575061093282611db1565b5b9050919050565b610942611e93565b73ffffffffffffffffffffffffffffffffffffffff1661096061170e565b73ffffffffffffffffffffffffffffffffffffffff16146109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90613d18565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6060600080546109e29061416d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e9061416d565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b6000610a7082611e9b565b610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613cf8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af582611408565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90613db8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b85611e93565b73ffffffffffffffffffffffffffffffffffffffff161480610bb45750610bb381610bae611e93565b611c0d565b5b610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea90613c58565b60405180910390fd5b610bfd8383611f07565b505050565b600e5481565b6000600880549050905090565b60136020528060005260406000206000915090505481565b6000610c3882611fc0565b9050919050565b60105481565b610c56610c50611e93565b82612094565b610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90613dd8565b60405180910390fd5b610ca0838383612172565b505050565b6000610cb083611548565b8210610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce890613b38565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d52611e93565b73ffffffffffffffffffffffffffffffffffffffff16610d7061170e565b73ffffffffffffffffffffffffffffffffffffffff1614610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613d18565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610dec90613a5d565b60006040518083038185875af1925050503d8060008114610e29576040519150601f19603f3d011682016040523d82523d6000602084013e610e2e565b606091505b5050905080610e3c57600080fd5b50565b601260009054906101000a900460ff1615610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613d38565b60405180910390fd5b6000610e99610c08565b9050610ea483611fc0565b15610ef25760c88111610ece576000600e8190555060016010819055506003601181905550610eed565b66470de4df820000600e81905550601460108190555060646011819055505b610f11565b668e1bc9bf040000600e81905550601460108190555060646011819055505b60008211610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90613e18565b60405180910390fd5b601054821115610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090613c18565b60405180910390fd5b600f548282610fa89190613fa2565b1115610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe090613cb8565b60405180910390fd5b610ff161170e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611109576000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060115483826110769190613fa2565b11156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90613d98565b60405180910390fd5b82600e546110c59190614029565b341015611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613c38565b60405180910390fd5b505b6000600190505b82811161119457601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611167906141d0565b919050555061118184828461117c9190613fa2565b6123ce565b808061118c906141d0565b915050611110565b50505050565b6111b58383836040518060200160405280600081525061194b565b505050565b606060006111c783611548565b905060008167ffffffffffffffff8111156111e5576111e4614335565b5b6040519080825280602002602001820160405280156112135781602001602082028036833780820191505090505b50905060005b8281101561125d5761122b8582610ca5565b82828151811061123e5761123d614306565b5b6020026020010181815250508080611255906141d0565b915050611219565b508092505050919050565b611270611e93565b73ffffffffffffffffffffffffffffffffffffffff1661128e61170e565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613d18565b60405180910390fd5b80600e8190555050565b60006112f8610c08565b8210611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613df8565b60405180910390fd5b6008828154811061134d5761134c614306565b5b90600052602060002001549050919050565b611367611e93565b73ffffffffffffffffffffffffffffffffffffffff1661138561170e565b73ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613d18565b60405180910390fd5b80600c90805190602001906113f1929190612f45565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890613c98565b60405180910390fd5b80915050919050565b600c80546114c79061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546114f39061416d565b80156115405780601f1061151557610100808354040283529160200191611540565b820191906000526020600020905b81548152906001019060200180831161152357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090613c78565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611608611e93565b73ffffffffffffffffffffffffffffffffffffffff1661162661170e565b73ffffffffffffffffffffffffffffffffffffffff161461167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167390613d18565b60405180910390fd5b61168660006123ec565b565b611690611e93565b73ffffffffffffffffffffffffffffffffffffffff166116ae61170e565b73ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90613d18565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117479061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546117739061416d565b80156117c05780601f10611795576101008083540402835291602001916117c0565b820191906000526020600020905b8154815290600101906020018083116117a357829003601f168201915b5050505050905090565b6117d2611e93565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183790613bd8565b60405180910390fd5b806005600061184d611e93565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fa611e93565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193f9190613afb565b60405180910390a35050565b61195c611956611e93565b83612094565b61199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290613dd8565b60405180910390fd5b6119a7848484846124b2565b50505050565b60115481565b600d80546119c09061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546119ec9061416d565b8015611a395780601f10611a0e57610100808354040283529160200191611a39565b820191906000526020600020905b815481529060010190602001808311611a1c57829003601f168201915b505050505081565b6060611a4c82611e9b565b611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613d78565b60405180910390fd5b6000611a9561250e565b90506000815111611ab55760405180602001604052806000815250611ae3565b80611abf846125a0565b600d604051602001611ad393929190613a2c565b6040516020818303038152906040525b915050919050565b611af3611e93565b73ffffffffffffffffffffffffffffffffffffffff16611b1161170e565b73ffffffffffffffffffffffffffffffffffffffff1614611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e90613d18565b60405180910390fd5b8060118190555050565b600f5481565b611b7f611e93565b73ffffffffffffffffffffffffffffffffffffffff16611b9d61170e565b73ffffffffffffffffffffffffffffffffffffffff1614611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea90613d18565b60405180910390fd5b80600d9080519060200190611c09929190612f45565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ca9611e93565b73ffffffffffffffffffffffffffffffffffffffff16611cc761170e565b73ffffffffffffffffffffffffffffffffffffffff1614611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1490613d18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613b78565b60405180910390fd5b611d96816123ec565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e8c5750611e8b82612701565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7a83611408565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663438b6300846040518263ffffffff1660e01b815260040161201e9190613a72565b60006040518083038186803b15801561203657600080fd5b505afa15801561204a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061207391906133a7565b905060008151111561208957600191505061208f565b60009150505b919050565b600061209f82611e9b565b6120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613bf8565b60405180910390fd5b60006120e983611408565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061215857508373ffffffffffffffffffffffffffffffffffffffff1661214084610a65565b73ffffffffffffffffffffffffffffffffffffffff16145b8061216957506121688185611c0d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661219282611408565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90613d58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90613bb8565b60405180910390fd5b61226383838361276b565b61226e600082611f07565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122be9190614083565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123159190613fa2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123e882826040518060200160405280600081525061287f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124bd848484612172565b6124c9848484846128da565b612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ff90613b58565b60405180910390fd5b50505050565b6060600c805461251d9061416d565b80601f01602080910402602001604051908101604052809291908181526020018280546125499061416d565b80156125965780601f1061256b57610100808354040283529160200191612596565b820191906000526020600020905b81548152906001019060200180831161257957829003601f168201915b5050505050905090565b606060008214156125e8576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126fc565b600082905060005b6000821461261a578080612603906141d0565b915050600a826126139190613ff8565b91506125f0565b60008167ffffffffffffffff81111561263657612635614335565b5b6040519080825280601f01601f1916602001820160405280156126685781602001600182028036833780820191505090505b5090505b600085146126f5576001826126819190614083565b9150600a856126909190614219565b603061269c9190613fa2565b60f81b8183815181106126b2576126b1614306565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126ee9190613ff8565b945061266c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612776838383611dac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127b9576127b481612a71565b6127f8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127f7576127f68382612aba565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561283b5761283681612c27565b61287a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612879576128788282612cf8565b5b5b505050565b6128898383612d77565b61289660008484846128da565b6128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90613b58565b60405180910390fd5b505050565b60006128fb8473ffffffffffffffffffffffffffffffffffffffff16611d99565b15612a64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612924611e93565b8786866040518563ffffffff1660e01b81526004016129469493929190613a8d565b602060405180830381600087803b15801561296057600080fd5b505af192505050801561299157506040513d601f19601f8201168201806040525081019061298e919061344a565b60015b612a14573d80600081146129c1576040519150601f19603f3d011682016040523d82523d6000602084013e6129c6565b606091505b50600081511415612a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0390613b58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a69565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ac784611548565b612ad19190614083565b9050600060076000848152602001908152602001600020549050818114612bb6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c3b9190614083565b9050600060096000848152602001908152602001600020549050600060088381548110612c6b57612c6a614306565b5b906000526020600020015490508060088381548110612c8d57612c8c614306565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cdc57612cdb6142d7565b5b6001900381819060005260206000200160009055905550505050565b6000612d0383611548565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90613cd8565b60405180910390fd5b612df081611e9b565b15612e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2790613b98565b60405180910390fd5b612e3c6000838361276b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e8c9190613fa2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f519061416d565b90600052602060002090601f016020900481019282612f735760008555612fba565b82601f10612f8c57805160ff1916838001178555612fba565b82800160010185558215612fba579182015b82811115612fb9578251825591602001919060010190612f9e565b5b509050612fc79190612fcb565b5090565b5b80821115612fe4576000816000905550600101612fcc565b5090565b6000612ffb612ff684613e78565b613e53565b9050808382526020820190508285602086028201111561301e5761301d614369565b5b60005b8581101561304e578161303488826131cf565b845260208401935060208301925050600181019050613021565b5050509392505050565b600061306b61306684613ea4565b613e53565b9050828152602081018484840111156130875761308661436e565b5b61309284828561412b565b509392505050565b60006130ad6130a884613ed5565b613e53565b9050828152602081018484840111156130c9576130c861436e565b5b6130d484828561412b565b509392505050565b6000813590506130eb816149a3565b92915050565b600082601f83011261310657613105614364565b5b8151613116848260208601612fe8565b91505092915050565b60008135905061312e816149ba565b92915050565b600081359050613143816149d1565b92915050565b600081519050613158816149d1565b92915050565b600082601f83011261317357613172614364565b5b8135613183848260208601613058565b91505092915050565b600082601f8301126131a1576131a0614364565b5b81356131b184826020860161309a565b91505092915050565b6000813590506131c9816149e8565b92915050565b6000815190506131de816149e8565b92915050565b6000602082840312156131fa576131f9614378565b5b6000613208848285016130dc565b91505092915050565b6000806040838503121561322857613227614378565b5b6000613236858286016130dc565b9250506020613247858286016130dc565b9150509250929050565b60008060006060848603121561326a57613269614378565b5b6000613278868287016130dc565b9350506020613289868287016130dc565b925050604061329a868287016131ba565b9150509250925092565b600080600080608085870312156132be576132bd614378565b5b60006132cc878288016130dc565b94505060206132dd878288016130dc565b93505060406132ee878288016131ba565b925050606085013567ffffffffffffffff81111561330f5761330e614373565b5b61331b8782880161315e565b91505092959194509250565b6000806040838503121561333e5761333d614378565b5b600061334c858286016130dc565b925050602061335d8582860161311f565b9150509250929050565b6000806040838503121561337e5761337d614378565b5b600061338c858286016130dc565b925050602061339d858286016131ba565b9150509250929050565b6000602082840312156133bd576133bc614378565b5b600082015167ffffffffffffffff8111156133db576133da614373565b5b6133e7848285016130f1565b91505092915050565b60006020828403121561340657613405614378565b5b60006134148482850161311f565b91505092915050565b60006020828403121561343357613432614378565b5b600061344184828501613134565b91505092915050565b6000602082840312156134605761345f614378565b5b600061346e84828501613149565b91505092915050565b60006020828403121561348d5761348c614378565b5b600082013567ffffffffffffffff8111156134ab576134aa614373565b5b6134b78482850161318c565b91505092915050565b6000602082840312156134d6576134d5614378565b5b60006134e4848285016131ba565b91505092915050565b60006134f98383613a0e565b60208301905092915050565b61350e816140b7565b82525050565b600061351f82613f2b565b6135298185613f59565b935061353483613f06565b8060005b8381101561356557815161354c88826134ed565b975061355783613f4c565b925050600181019050613538565b5085935050505092915050565b61357b816140c9565b82525050565b600061358c82613f36565b6135968185613f6a565b93506135a681856020860161413a565b6135af8161437d565b840191505092915050565b60006135c582613f41565b6135cf8185613f86565b93506135df81856020860161413a565b6135e88161437d565b840191505092915050565b60006135fe82613f41565b6136088185613f97565b935061361881856020860161413a565b80840191505092915050565b600081546136318161416d565b61363b8186613f97565b9450600182166000811461365657600181146136675761369a565b60ff1983168652818601935061369a565b61367085613f16565b60005b8381101561369257815481890152600182019150602081019050613673565b838801955050505b50505092915050565b60006136b0602b83613f86565b91506136bb8261438e565b604082019050919050565b60006136d3603283613f86565b91506136de826143dd565b604082019050919050565b60006136f6602683613f86565b91506137018261442c565b604082019050919050565b6000613719601c83613f86565b91506137248261447b565b602082019050919050565b600061373c602483613f86565b9150613747826144a4565b604082019050919050565b600061375f601983613f86565b915061376a826144f3565b602082019050919050565b6000613782602c83613f86565b915061378d8261451c565b604082019050919050565b60006137a5602483613f86565b91506137b08261456b565b604082019050919050565b60006137c8601283613f86565b91506137d3826145ba565b602082019050919050565b60006137eb603883613f86565b91506137f6826145e3565b604082019050919050565b600061380e602a83613f86565b915061381982614632565b604082019050919050565b6000613831602983613f86565b915061383c82614681565b604082019050919050565b6000613854601683613f86565b915061385f826146d0565b602082019050919050565b6000613877602083613f86565b9150613882826146f9565b602082019050919050565b600061389a602c83613f86565b91506138a582614722565b604082019050919050565b60006138bd602083613f86565b91506138c882614771565b602082019050919050565b60006138e0601783613f86565b91506138eb8261479a565b602082019050919050565b6000613903602983613f86565b915061390e826147c3565b604082019050919050565b6000613926602f83613f86565b915061393182614812565b604082019050919050565b6000613949601c83613f86565b915061395482614861565b602082019050919050565b600061396c602183613f86565b91506139778261488a565b604082019050919050565b600061398f600083613f7b565b915061399a826148d9565b600082019050919050565b60006139b2603183613f86565b91506139bd826148dc565b604082019050919050565b60006139d5602c83613f86565b91506139e08261492b565b604082019050919050565b60006139f8601b83613f86565b9150613a038261497a565b602082019050919050565b613a1781614121565b82525050565b613a2681614121565b82525050565b6000613a3882866135f3565b9150613a4482856135f3565b9150613a508284613624565b9150819050949350505050565b6000613a6882613982565b9150819050919050565b6000602082019050613a876000830184613505565b92915050565b6000608082019050613aa26000830187613505565b613aaf6020830186613505565b613abc6040830185613a1d565b8181036060830152613ace8184613581565b905095945050505050565b60006020820190508181036000830152613af38184613514565b905092915050565b6000602082019050613b106000830184613572565b92915050565b60006020820190508181036000830152613b3081846135ba565b905092915050565b60006020820190508181036000830152613b51816136a3565b9050919050565b60006020820190508181036000830152613b71816136c6565b9050919050565b60006020820190508181036000830152613b91816136e9565b9050919050565b60006020820190508181036000830152613bb18161370c565b9050919050565b60006020820190508181036000830152613bd18161372f565b9050919050565b60006020820190508181036000830152613bf181613752565b9050919050565b60006020820190508181036000830152613c1181613775565b9050919050565b60006020820190508181036000830152613c3181613798565b9050919050565b60006020820190508181036000830152613c51816137bb565b9050919050565b60006020820190508181036000830152613c71816137de565b9050919050565b60006020820190508181036000830152613c9181613801565b9050919050565b60006020820190508181036000830152613cb181613824565b9050919050565b60006020820190508181036000830152613cd181613847565b9050919050565b60006020820190508181036000830152613cf18161386a565b9050919050565b60006020820190508181036000830152613d118161388d565b9050919050565b60006020820190508181036000830152613d31816138b0565b9050919050565b60006020820190508181036000830152613d51816138d3565b9050919050565b60006020820190508181036000830152613d71816138f6565b9050919050565b60006020820190508181036000830152613d9181613919565b9050919050565b60006020820190508181036000830152613db18161393c565b9050919050565b60006020820190508181036000830152613dd18161395f565b9050919050565b60006020820190508181036000830152613df1816139a5565b9050919050565b60006020820190508181036000830152613e11816139c8565b9050919050565b60006020820190508181036000830152613e31816139eb565b9050919050565b6000602082019050613e4d6000830184613a1d565b92915050565b6000613e5d613e6e565b9050613e69828261419f565b919050565b6000604051905090565b600067ffffffffffffffff821115613e9357613e92614335565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613ebf57613ebe614335565b5b613ec88261437d565b9050602081019050919050565b600067ffffffffffffffff821115613ef057613eef614335565b5b613ef98261437d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fad82614121565b9150613fb883614121565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fed57613fec61424a565b5b828201905092915050565b600061400382614121565b915061400e83614121565b92508261401e5761401d614279565b5b828204905092915050565b600061403482614121565b915061403f83614121565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140785761407761424a565b5b828202905092915050565b600061408e82614121565b915061409983614121565b9250828210156140ac576140ab61424a565b5b828203905092915050565b60006140c282614101565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561415857808201518184015260208101905061413d565b83811115614167576000848401525b50505050565b6000600282049050600182168061418557607f821691505b60208210811415614199576141986142a8565b5b50919050565b6141a88261437d565b810181811067ffffffffffffffff821117156141c7576141c6614335565b5b80604052505050565b60006141db82614121565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420e5761420d61424a565b5b600182019050919050565b600061422482614121565b915061422f83614121565b92508261423f5761423e614279565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6149ac816140b7565b81146149b757600080fd5b50565b6149c3816140c9565b81146149ce57600080fd5b50565b6149da816140d5565b81146149e557600080fd5b50565b6149f181614121565b81146149fc57600080fd5b5056fea26469706673582212204e0951f4a6a13fa47505ef11c1c22f25dc35706ebb4a27c53fd97f2c655fb28464736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f4d6964676574204d6f6e7374657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d6f6e7374657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005368747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f697066732f2f516d58394e6e5545426e32386341793739345562724352563270525136787338543642645968713536745a5764352f00000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Midget Monsters
Arg [1] : _symbol (string): Monster
Arg [2] : _initBaseURI (string): https://gateway.pinata.cloud//ipfs//QmX9NnUEBn28cAy794UbrCRV2pRQ6xs8T6BdYhq56tZWd5/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 4d6964676574204d6f6e73746572730000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 4d6f6e7374657200000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000053
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f2f6970
Arg [9] : 66732f2f516d58394e6e5545426e323863417937393455627243525632705251
Arg [10] : 36787338543642645968713536745a5764352f00000000000000000000000000


Deployed Bytecode Sourcemap

43484:4553:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36971:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47796:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24863:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26422:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25945:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43750:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37611:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43947:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44589:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43828:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27312:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37279:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47876:158;;;:::i;:::-;;45226:1205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27722:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46437:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47354:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37801:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47566:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43914:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24557:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43678:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:94;;;;;;;;;;;;;:::i;:::-;;47442:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1837:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26715:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27978:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43868:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43706:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46791:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47240:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43789:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47670:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27081:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2737:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36971:224;37073:4;37112:35;37097:50;;;:11;:50;;;;:90;;;;37151:36;37175:11;37151:23;:36::i;:::-;37097:90;37090:97;;36971:224;;;:::o;47796:73::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47857:6:::1;47848;;:15;;;;;;;;;;;;;;;;;;47796:73:::0;:::o;24863:100::-;24917:13;24950:5;24943:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24863:100;:::o;26422:221::-;26498:7;26526:16;26534:7;26526;:16::i;:::-;26518:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26611:15;:24;26627:7;26611:24;;;;;;;;;;;;;;;;;;;;;26604:31;;26422:221;;;:::o;25945:411::-;26026:13;26042:23;26057:7;26042:14;:23::i;:::-;26026:39;;26090:5;26084:11;;:2;:11;;;;26076:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:5;26168:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26193:37;26210:5;26217:12;:10;:12::i;:::-;26193:16;:37::i;:::-;26168:62;26146:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26327:21;26336:2;26340:7;26327:8;:21::i;:::-;26015:341;25945:411;;:::o;43750:32::-;;;;:::o;37611:113::-;37672:7;37699:10;:17;;;;37692:24;;37611:113;:::o;43947:55::-;;;;;;;;;;;;;;;;;:::o;44589:175::-;44683:4;44707:49;44730:25;44707:22;:49::i;:::-;44700:56;;44589:175;;;:::o;43828:33::-;;;;:::o;27312:339::-;27507:41;27526:12;:10;:12::i;:::-;27540:7;27507:18;:41::i;:::-;27499:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27615:28;27625:4;27631:2;27635:7;27615:9;:28::i;:::-;27312:339;;;:::o;37279:256::-;37376:7;37412:23;37429:5;37412:16;:23::i;:::-;37404:5;:31;37396:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37501:12;:19;37514:5;37501:19;;;;;;;;;;;;;;;:26;37521:5;37501:26;;;;;;;;;;;;37494:33;;37279:256;;;;:::o;47876:158::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47929:12:::1;47955:10;47947:24;;47979:21;47947:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47928:77;;;48020:7;48012:16;;;::::0;::::1;;47921:113;47876:158::o:0;45226:1205::-;45307:6;;;;;;;;;;;45306:7;45298:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;45348:14;45365:13;:11;:13::i;:::-;45348:30;;45389:29;45412:5;45389:22;:29::i;:::-;45385:401;;;45445:3;45435:6;:13;45431:248;;45472:7;45465:4;:14;;;;45510:1;45494:13;:17;;;;45547:1;45526:18;:22;;;;45431:248;;;45593:10;45586:4;:17;;;;45630:2;45614:13;:18;;;;45664:3;45643:18;:24;;;;45431:248;45385:401;;;45711:11;45704:4;:18;;;;45745:2;45729:13;:18;;;;45775:3;45754:18;:24;;;;45385:401;45814:1;45800:11;:15;45792:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45877:13;;45862:11;:28;;45854:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45970:9;;45955:11;45946:6;:20;;;;:::i;:::-;:33;;45938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46033:7;:5;:7::i;:::-;46019:21;;:10;:21;;;46015:277;;46053:24;46080:20;:27;46101:5;46080:27;;;;;;;;;;;;;;;;46053:54;;46160:18;;46145:11;46126:16;:30;;;;:::i;:::-;:52;;46118:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;46250:11;46243:4;;:18;;;;:::i;:::-;46230:9;:31;;46222:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46042:250;46015:277;46305:9;46317:1;46305:13;;46300:126;46325:11;46320:1;:16;46300:126;;46352:20;:27;46373:5;46352:27;;;;;;;;;;;;;;;;:29;;;;;;;;;:::i;:::-;;;;;;46390:28;46400:5;46416:1;46407:6;:10;;;;:::i;:::-;46390:9;:28::i;:::-;46338:3;;;;;:::i;:::-;;;;46300:126;;;;45291:1140;45226:1205;;:::o;27722:185::-;27860:39;27877:4;27883:2;27887:7;27860:39;;;;;;;;;;;;:16;:39::i;:::-;27722:185;;;:::o;46437:348::-;46512:16;46540:23;46566:17;46576:6;46566:9;:17::i;:::-;46540:43;;46590:25;46632:15;46618:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46590:58;;46660:9;46655:103;46675:15;46671:1;:19;46655:103;;;46720:30;46740:6;46748:1;46720:19;:30::i;:::-;46706:8;46715:1;46706:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;46692:3;;;;;:::i;:::-;;;;46655:103;;;;46771:8;46764:15;;;;46437:348;;;:::o;47354:82::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47422:8:::1;47415:4;:15;;;;47354:82:::0;:::o;37801:233::-;37876:7;37912:30;:28;:30::i;:::-;37904:5;:38;37896:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38009:10;38020:5;38009:17;;;;;;;;:::i;:::-;;;;;;;;;;38002:24;;37801:233;;;:::o;47566:98::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47647:11:::1;47637:7;:21;;;;;;;;;;;;:::i;:::-;;47566:98:::0;:::o;43914:26::-;;;;;;;;;;;;;:::o;24557:239::-;24629:7;24649:13;24665:7;:16;24673:7;24665:16;;;;;;;;;;;;;;;;;;;;;24649:32;;24717:1;24700:19;;:5;:19;;;;24692:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24783:5;24776:12;;;24557:239;;;:::o;43678:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24287:208::-;24359:7;24404:1;24387:19;;:5;:19;;;;24379:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24471:9;:16;24481:5;24471:16;;;;;;;;;;;;;;;;24464:23;;24287:208;;;:::o;2488:94::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2553:21:::1;2571:1;2553:9;:21::i;:::-;2488:94::o:0;47442:118::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47537:17:::1;47521:13;:33;;;;47442:118:::0;:::o;1837:87::-;1883:7;1910:6;;;;;;;;;;;1903:13;;1837:87;:::o;25032:104::-;25088:13;25121:7;25114:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25032:104;:::o;26715:295::-;26830:12;:10;:12::i;:::-;26818:24;;:8;:24;;;;26810:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26930:8;26885:18;:32;26904:12;:10;:12::i;:::-;26885:32;;;;;;;;;;;;;;;:42;26918:8;26885:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26983:8;26954:48;;26969:12;:10;:12::i;:::-;26954:48;;;26993:8;26954:48;;;;;;:::i;:::-;;;;;;;;26715:295;;:::o;27978:328::-;28153:41;28172:12;:10;:12::i;:::-;28186:7;28153:18;:41::i;:::-;28145:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28259:39;28273:4;28279:2;28283:7;28292:5;28259:13;:39::i;:::-;27978:328;;;;:::o;43868:39::-;;;;:::o;43706:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46791:427::-;46889:13;46930:16;46938:7;46930;:16::i;:::-;46914:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47024:28;47055:10;:8;:10::i;:::-;47024:41;;47110:1;47085:14;47079:28;:32;:133;;;;;;;;;;;;;;;;;47147:14;47163:18;:7;:16;:18::i;:::-;47183:13;47130:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47079:133;47072:140;;;46791:427;;;:::o;47240:106::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47334:6:::1;47313:18;:27;;;;47240:106:::0;:::o;43789:32::-;;;;:::o;47670:122::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47769:17:::1;47753:13;:33;;;;;;;;;;;;:::i;:::-;;47670:122:::0;:::o;27081:164::-;27178:4;27202:18;:25;27221:5;27202:25;;;;;;;;;;;;;;;:35;27228:8;27202:35;;;;;;;;;;;;;;;;;;;;;;;;;27195:42;;27081:164;;;;:::o;2737:192::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:::1;2826:22;;:8;:22;;;;2818:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:19;2912:8;2902:9;:19::i;:::-;2737:192:::0;:::o;13556:387::-;13616:4;13824:12;13891:7;13879:20;13871:28;;13934:1;13927:4;:8;13920:15;;;13556:387;;;:::o;35908:126::-;;;;:::o;23918:305::-;24020:4;24072:25;24057:40;;;:11;:40;;;;:105;;;;24129:33;24114:48;;;:11;:48;;;;24057:105;:158;;;;24179:36;24203:11;24179:23;:36::i;:::-;24057:158;24037:178;;23918:305;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;29816:127::-;29881:4;29933:1;29905:30;;:7;:16;29913:7;29905:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29898:37;;29816:127;;;:::o;33798:174::-;33900:2;33873:15;:24;33889:7;33873:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33956:7;33952:2;33918:46;;33927:23;33942:7;33927:14;:23::i;:::-;33918:46;;;;;;;;;;;;33798:174;;:::o;44307:274::-;44377:4;44394:23;44420:6;;;;;;;;;;;:20;;;44441:5;44420:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44394:53;;44478:1;44462:6;:13;:17;44458:116;;;44504:4;44497:11;;;;;44458:116;44557:5;44550:12;;;44307:274;;;;:::o;30110:348::-;30203:4;30228:16;30236:7;30228;:16::i;:::-;30220:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30304:13;30320:23;30335:7;30320:14;:23::i;:::-;30304:39;;30373:5;30362:16;;:7;:16;;;:51;;;;30406:7;30382:31;;:20;30394:7;30382:11;:20::i;:::-;:31;;;30362:51;:87;;;;30417:32;30434:5;30441:7;30417:16;:32::i;:::-;30362:87;30354:96;;;30110:348;;;;:::o;33102:578::-;33261:4;33234:31;;:23;33249:7;33234:14;:23::i;:::-;:31;;;33226:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33344:1;33330:16;;:2;:16;;;;33322:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33400:39;33421:4;33427:2;33431:7;33400:20;:39::i;:::-;33504:29;33521:1;33525:7;33504:8;:29::i;:::-;33565:1;33546:9;:15;33556:4;33546:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33594:1;33577:9;:13;33587:2;33577:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33625:2;33606:7;:16;33614:7;33606:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33664:7;33660:2;33645:27;;33654:4;33645:27;;;;;;;;;;;;33102:578;;;:::o;30800:110::-;30876:26;30886:2;30890:7;30876:26;;;;;;;;;;;;:9;:26::i;:::-;30800:110;;:::o;2937:173::-;2993:16;3012:6;;;;;;;;;;;2993:25;;3038:8;3029:6;;:17;;;;;;;;;;;;;;;;;;3093:8;3062:40;;3083:8;3062:40;;;;;;;;;;;;2982:128;2937:173;:::o;29188:315::-;29345:28;29355:4;29361:2;29365:7;29345:9;:28::i;:::-;29392:48;29415:4;29421:2;29425:7;29434:5;29392:22;:48::i;:::-;29384:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29188:315;;;;:::o;45105:102::-;45165:13;45194:7;45187:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45105:102;:::o;11031:723::-;11087:13;11317:1;11308:5;:10;11304:53;;;11335:10;;;;;;;;;;;;;;;;;;;;;11304:53;11367:12;11382:5;11367:20;;11398:14;11423:78;11438:1;11430:4;:9;11423:78;;11456:8;;;;;:::i;:::-;;;;11487:2;11479:10;;;;;:::i;:::-;;;11423:78;;;11511:19;11543:6;11533:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11511:39;;11561:154;11577:1;11568:5;:10;11561:154;;11605:1;11595:11;;;;;:::i;:::-;;;11672:2;11664:5;:10;;;;:::i;:::-;11651:2;:24;;;;:::i;:::-;11638:39;;11621:6;11628;11621:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11701:2;11692:11;;;;;:::i;:::-;;;11561:154;;;11739:6;11725:21;;;;;11031:723;;;;:::o;10556:157::-;10641:4;10680:25;10665:40;;;:11;:40;;;;10658:47;;10556:157;;;:::o;38647:589::-;38791:45;38818:4;38824:2;38828:7;38791:26;:45::i;:::-;38869:1;38853:18;;:4;:18;;;38849:187;;;38888:40;38920:7;38888:31;:40::i;:::-;38849:187;;;38958:2;38950:10;;:4;:10;;;38946:90;;38977:47;39010:4;39016:7;38977:32;:47::i;:::-;38946:90;38849:187;39064:1;39050:16;;:2;:16;;;39046:183;;;39083:45;39120:7;39083:36;:45::i;:::-;39046:183;;;39156:4;39150:10;;:2;:10;;;39146:83;;39177:40;39205:2;39209:7;39177:27;:40::i;:::-;39146:83;39046:183;38647:589;;;:::o;31137:321::-;31267:18;31273:2;31277:7;31267:5;:18::i;:::-;31318:54;31349:1;31353:2;31357:7;31366:5;31318:22;:54::i;:::-;31296:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31137:321;;;:::o;34537:799::-;34692:4;34713:15;:2;:13;;;:15::i;:::-;34709:620;;;34765:2;34749:36;;;34786:12;:10;:12::i;:::-;34800:4;34806:7;34815:5;34749:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34745:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35008:1;34991:6;:13;:18;34987:272;;;35034:60;;;;;;;;;;:::i;:::-;;;;;;;;34987:272;35209:6;35203:13;35194:6;35190:2;35186:15;35179:38;34745:529;34882:41;;;34872:51;;;:6;:51;;;;34865:58;;;;;34709:620;35313:4;35306:11;;34537:799;;;;;;;:::o;39959:164::-;40063:10;:17;;;;40036:15;:24;40052:7;40036:24;;;;;;;;;;;:44;;;;40091:10;40107:7;40091:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39959:164;:::o;40750:988::-;41016:22;41066:1;41041:22;41058:4;41041:16;:22::i;:::-;:26;;;;:::i;:::-;41016:51;;41078:18;41099:17;:26;41117:7;41099:26;;;;;;;;;;;;41078:47;;41246:14;41232:10;:28;41228:328;;41277:19;41299:12;:18;41312:4;41299:18;;;;;;;;;;;;;;;:34;41318:14;41299:34;;;;;;;;;;;;41277:56;;41383:11;41350:12;:18;41363:4;41350:18;;;;;;;;;;;;;;;:30;41369:10;41350:30;;;;;;;;;;;:44;;;;41500:10;41467:17;:30;41485:11;41467:30;;;;;;;;;;;:43;;;;41262:294;41228:328;41652:17;:26;41670:7;41652:26;;;;;;;;;;;41645:33;;;41696:12;:18;41709:4;41696:18;;;;;;;;;;;;;;;:34;41715:14;41696:34;;;;;;;;;;;41689:41;;;40831:907;;40750:988;;:::o;42033:1079::-;42286:22;42331:1;42311:10;:17;;;;:21;;;;:::i;:::-;42286:46;;42343:18;42364:15;:24;42380:7;42364:24;;;;;;;;;;;;42343:45;;42715:19;42737:10;42748:14;42737:26;;;;;;;;:::i;:::-;;;;;;;;;;42715:48;;42801:11;42776:10;42787;42776:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42912:10;42881:15;:28;42897:11;42881:28;;;;;;;;;;;:41;;;;43053:15;:24;43069:7;43053:24;;;;;;;;;;;43046:31;;;43088:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42104:1008;;;42033:1079;:::o;39537:221::-;39622:14;39639:20;39656:2;39639:16;:20::i;:::-;39622:37;;39697:7;39670:12;:16;39683:2;39670:16;;;;;;;;;;;;;;;:24;39687:6;39670:24;;;;;;;;;;;:34;;;;39744:6;39715:17;:26;39733:7;39715:26;;;;;;;;;;;:35;;;;39611:147;39537:221;;:::o;31794:382::-;31888:1;31874:16;;:2;:16;;;;31866:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31947:16;31955:7;31947;:16::i;:::-;31946:17;31938:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32009:45;32038:1;32042:2;32046:7;32009:20;:45::i;:::-;32084:1;32067:9;:13;32077:2;32067:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32115:2;32096:7;:16;32104:7;32096:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32160:7;32156:2;32135:33;;32152:1;32135:33;;;;;;;;;;;;31794:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:112;;;1047:79;;:::i;:::-;1016:112;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;774:410;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:112;;;1465:79;;:::i;:::-;1434:112;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;1190:412;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1608:139;;;;:::o;1770:385::-;1852:5;1901:3;1894:4;1886:6;1882:17;1878:27;1868:122;;1909:79;;:::i;:::-;1868:122;2019:6;2013:13;2044:105;2145:3;2137:6;2130:4;2122:6;2118:17;2044:105;:::i;:::-;2035:114;;1858:297;1770:385;;;;:::o;2161:133::-;2204:5;2242:6;2229:20;2220:29;;2258:30;2282:5;2258:30;:::i;:::-;2161:133;;;;:::o;2300:137::-;2345:5;2383:6;2370:20;2361:29;;2399:32;2425:5;2399:32;:::i;:::-;2300:137;;;;:::o;2443:141::-;2499:5;2530:6;2524:13;2515:22;;2546:32;2572:5;2546:32;:::i;:::-;2443:141;;;;:::o;2603:338::-;2658:5;2707:3;2700:4;2692:6;2688:17;2684:27;2674:122;;2715:79;;:::i;:::-;2674:122;2832:6;2819:20;2857:78;2931:3;2923:6;2916:4;2908:6;2904:17;2857:78;:::i;:::-;2848:87;;2664:277;2603:338;;;;:::o;2961:340::-;3017:5;3066:3;3059:4;3051:6;3047:17;3043:27;3033:122;;3074:79;;:::i;:::-;3033:122;3191:6;3178:20;3216:79;3291:3;3283:6;3276:4;3268:6;3264:17;3216:79;:::i;:::-;3207:88;;3023:278;2961:340;;;;:::o;3307:139::-;3353:5;3391:6;3378:20;3369:29;;3407:33;3434:5;3407:33;:::i;:::-;3307:139;;;;:::o;3452:143::-;3509:5;3540:6;3534:13;3525:22;;3556:33;3583:5;3556:33;:::i;:::-;3452:143;;;;:::o;3601:329::-;3660:6;3709:2;3697:9;3688:7;3684:23;3680:32;3677:119;;;3715:79;;:::i;:::-;3677:119;3835:1;3860:53;3905:7;3896:6;3885:9;3881:22;3860:53;:::i;:::-;3850:63;;3806:117;3601:329;;;;:::o;3936:474::-;4004:6;4012;4061:2;4049:9;4040:7;4036:23;4032:32;4029:119;;;4067:79;;:::i;:::-;4029:119;4187:1;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4158:117;4314:2;4340:53;4385:7;4376:6;4365:9;4361:22;4340:53;:::i;:::-;4330:63;;4285:118;3936:474;;;;;:::o;4416:619::-;4493:6;4501;4509;4558:2;4546:9;4537:7;4533:23;4529:32;4526:119;;;4564:79;;:::i;:::-;4526:119;4684:1;4709:53;4754:7;4745:6;4734:9;4730:22;4709:53;:::i;:::-;4699:63;;4655:117;4811:2;4837:53;4882:7;4873:6;4862:9;4858:22;4837:53;:::i;:::-;4827:63;;4782:118;4939:2;4965:53;5010:7;5001:6;4990:9;4986:22;4965:53;:::i;:::-;4955:63;;4910:118;4416:619;;;;;:::o;5041:943::-;5136:6;5144;5152;5160;5209:3;5197:9;5188:7;5184:23;5180:33;5177:120;;;5216:79;;:::i;:::-;5177:120;5336:1;5361:53;5406:7;5397:6;5386:9;5382:22;5361:53;:::i;:::-;5351:63;;5307:117;5463:2;5489:53;5534:7;5525:6;5514:9;5510:22;5489:53;:::i;:::-;5479:63;;5434:118;5591:2;5617:53;5662:7;5653:6;5642:9;5638:22;5617:53;:::i;:::-;5607:63;;5562:118;5747:2;5736:9;5732:18;5719:32;5778:18;5770:6;5767:30;5764:117;;;5800:79;;:::i;:::-;5764:117;5905:62;5959:7;5950:6;5939:9;5935:22;5905:62;:::i;:::-;5895:72;;5690:287;5041:943;;;;;;;:::o;5990:468::-;6055:6;6063;6112:2;6100:9;6091:7;6087:23;6083:32;6080:119;;;6118:79;;:::i;:::-;6080:119;6238:1;6263:53;6308:7;6299:6;6288:9;6284:22;6263:53;:::i;:::-;6253:63;;6209:117;6365:2;6391:50;6433:7;6424:6;6413:9;6409:22;6391:50;:::i;:::-;6381:60;;6336:115;5990:468;;;;;:::o;6464:474::-;6532:6;6540;6589:2;6577:9;6568:7;6564:23;6560:32;6557:119;;;6595:79;;:::i;:::-;6557:119;6715:1;6740:53;6785:7;6776:6;6765:9;6761:22;6740:53;:::i;:::-;6730:63;;6686:117;6842:2;6868:53;6913:7;6904:6;6893:9;6889:22;6868:53;:::i;:::-;6858:63;;6813:118;6464:474;;;;;:::o;6944:554::-;7039:6;7088:2;7076:9;7067:7;7063:23;7059:32;7056:119;;;7094:79;;:::i;:::-;7056:119;7235:1;7224:9;7220:17;7214:24;7265:18;7257:6;7254:30;7251:117;;;7287:79;;:::i;:::-;7251:117;7392:89;7473:7;7464:6;7453:9;7449:22;7392:89;:::i;:::-;7382:99;;7185:306;6944:554;;;;:::o;7504:323::-;7560:6;7609:2;7597:9;7588:7;7584:23;7580:32;7577:119;;;7615:79;;:::i;:::-;7577:119;7735:1;7760:50;7802:7;7793:6;7782:9;7778:22;7760:50;:::i;:::-;7750:60;;7706:114;7504:323;;;;:::o;7833:327::-;7891:6;7940:2;7928:9;7919:7;7915:23;7911:32;7908:119;;;7946:79;;:::i;:::-;7908:119;8066:1;8091:52;8135:7;8126:6;8115:9;8111:22;8091:52;:::i;:::-;8081:62;;8037:116;7833:327;;;;:::o;8166:349::-;8235:6;8284:2;8272:9;8263:7;8259:23;8255:32;8252:119;;;8290:79;;:::i;:::-;8252:119;8410:1;8435:63;8490:7;8481:6;8470:9;8466:22;8435:63;:::i;:::-;8425:73;;8381:127;8166:349;;;;:::o;8521:509::-;8590:6;8639:2;8627:9;8618:7;8614:23;8610:32;8607:119;;;8645:79;;:::i;:::-;8607:119;8793:1;8782:9;8778:17;8765:31;8823:18;8815:6;8812:30;8809:117;;;8845:79;;:::i;:::-;8809:117;8950:63;9005:7;8996:6;8985:9;8981:22;8950:63;:::i;:::-;8940:73;;8736:287;8521:509;;;;:::o;9036:329::-;9095:6;9144:2;9132:9;9123:7;9119:23;9115:32;9112:119;;;9150:79;;:::i;:::-;9112:119;9270:1;9295:53;9340:7;9331:6;9320:9;9316:22;9295:53;:::i;:::-;9285:63;;9241:117;9036:329;;;;:::o;9371:179::-;9440:10;9461:46;9503:3;9495:6;9461:46;:::i;:::-;9539:4;9534:3;9530:14;9516:28;;9371:179;;;;:::o;9556:118::-;9643:24;9661:5;9643:24;:::i;:::-;9638:3;9631:37;9556:118;;:::o;9710:732::-;9829:3;9858:54;9906:5;9858:54;:::i;:::-;9928:86;10007:6;10002:3;9928:86;:::i;:::-;9921:93;;10038:56;10088:5;10038:56;:::i;:::-;10117:7;10148:1;10133:284;10158:6;10155:1;10152:13;10133:284;;;10234:6;10228:13;10261:63;10320:3;10305:13;10261:63;:::i;:::-;10254:70;;10347:60;10400:6;10347:60;:::i;:::-;10337:70;;10193:224;10180:1;10177;10173:9;10168:14;;10133:284;;;10137:14;10433:3;10426:10;;9834:608;;;9710:732;;;;:::o;10448:109::-;10529:21;10544:5;10529:21;:::i;:::-;10524:3;10517:34;10448:109;;:::o;10563:360::-;10649:3;10677:38;10709:5;10677:38;:::i;:::-;10731:70;10794:6;10789:3;10731:70;:::i;:::-;10724:77;;10810:52;10855:6;10850:3;10843:4;10836:5;10832:16;10810:52;:::i;:::-;10887:29;10909:6;10887:29;:::i;:::-;10882:3;10878:39;10871:46;;10653:270;10563:360;;;;:::o;10929:364::-;11017:3;11045:39;11078:5;11045:39;:::i;:::-;11100:71;11164:6;11159:3;11100:71;:::i;:::-;11093:78;;11180:52;11225:6;11220:3;11213:4;11206:5;11202:16;11180:52;:::i;:::-;11257:29;11279:6;11257:29;:::i;:::-;11252:3;11248:39;11241:46;;11021:272;10929:364;;;;:::o;11299:377::-;11405:3;11433:39;11466:5;11433:39;:::i;:::-;11488:89;11570:6;11565:3;11488:89;:::i;:::-;11481:96;;11586:52;11631:6;11626:3;11619:4;11612:5;11608:16;11586:52;:::i;:::-;11663:6;11658:3;11654:16;11647:23;;11409:267;11299:377;;;;:::o;11706:845::-;11809:3;11846:5;11840:12;11875:36;11901:9;11875:36;:::i;:::-;11927:89;12009:6;12004:3;11927:89;:::i;:::-;11920:96;;12047:1;12036:9;12032:17;12063:1;12058:137;;;;12209:1;12204:341;;;;12025:520;;12058:137;12142:4;12138:9;12127;12123:25;12118:3;12111:38;12178:6;12173:3;12169:16;12162:23;;12058:137;;12204:341;12271:38;12303:5;12271:38;:::i;:::-;12331:1;12345:154;12359:6;12356:1;12353:13;12345:154;;;12433:7;12427:14;12423:1;12418:3;12414:11;12407:35;12483:1;12474:7;12470:15;12459:26;;12381:4;12378:1;12374:12;12369:17;;12345:154;;;12528:6;12523:3;12519:16;12512:23;;12211:334;;12025:520;;11813:738;;11706:845;;;;:::o;12557:366::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12557:366;;;:::o;12929:::-;13071:3;13092:67;13156:2;13151:3;13092:67;:::i;:::-;13085:74;;13168:93;13257:3;13168:93;:::i;:::-;13286:2;13281:3;13277:12;13270:19;;12929:366;;;:::o;13301:::-;13443:3;13464:67;13528:2;13523:3;13464:67;:::i;:::-;13457:74;;13540:93;13629:3;13540:93;:::i;:::-;13658:2;13653:3;13649:12;13642:19;;13301:366;;;:::o;13673:::-;13815:3;13836:67;13900:2;13895:3;13836:67;:::i;:::-;13829:74;;13912:93;14001:3;13912:93;:::i;:::-;14030:2;14025:3;14021:12;14014:19;;13673:366;;;:::o;14045:::-;14187:3;14208:67;14272:2;14267:3;14208:67;:::i;:::-;14201:74;;14284:93;14373:3;14284:93;:::i;:::-;14402:2;14397:3;14393:12;14386:19;;14045:366;;;:::o;14417:::-;14559:3;14580:67;14644:2;14639:3;14580:67;:::i;:::-;14573:74;;14656:93;14745:3;14656:93;:::i;:::-;14774:2;14769:3;14765:12;14758:19;;14417:366;;;:::o;14789:::-;14931:3;14952:67;15016:2;15011:3;14952:67;:::i;:::-;14945:74;;15028:93;15117:3;15028:93;:::i;:::-;15146:2;15141:3;15137:12;15130:19;;14789:366;;;:::o;15161:::-;15303:3;15324:67;15388:2;15383:3;15324:67;:::i;:::-;15317:74;;15400:93;15489:3;15400:93;:::i;:::-;15518:2;15513:3;15509:12;15502:19;;15161:366;;;:::o;15533:::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15533:366;;;:::o;15905:::-;16047:3;16068:67;16132:2;16127:3;16068:67;:::i;:::-;16061:74;;16144:93;16233:3;16144:93;:::i;:::-;16262:2;16257:3;16253:12;16246:19;;15905:366;;;:::o;16277:::-;16419:3;16440:67;16504:2;16499:3;16440:67;:::i;:::-;16433:74;;16516:93;16605:3;16516:93;:::i;:::-;16634:2;16629:3;16625:12;16618:19;;16277:366;;;:::o;16649:::-;16791:3;16812:67;16876:2;16871:3;16812:67;:::i;:::-;16805:74;;16888:93;16977:3;16888:93;:::i;:::-;17006:2;17001:3;16997:12;16990:19;;16649:366;;;:::o;17021:::-;17163:3;17184:67;17248:2;17243:3;17184:67;:::i;:::-;17177:74;;17260:93;17349:3;17260:93;:::i;:::-;17378:2;17373:3;17369:12;17362:19;;17021:366;;;:::o;17393:::-;17535:3;17556:67;17620:2;17615:3;17556:67;:::i;:::-;17549:74;;17632:93;17721:3;17632:93;:::i;:::-;17750:2;17745:3;17741:12;17734:19;;17393:366;;;:::o;17765:::-;17907:3;17928:67;17992:2;17987:3;17928:67;:::i;:::-;17921:74;;18004:93;18093:3;18004:93;:::i;:::-;18122:2;18117:3;18113:12;18106:19;;17765:366;;;:::o;18137:::-;18279:3;18300:67;18364:2;18359:3;18300:67;:::i;:::-;18293:74;;18376:93;18465:3;18376:93;:::i;:::-;18494:2;18489:3;18485:12;18478:19;;18137:366;;;:::o;18509:::-;18651:3;18672:67;18736:2;18731:3;18672:67;:::i;:::-;18665:74;;18748:93;18837:3;18748:93;:::i;:::-;18866:2;18861:3;18857:12;18850:19;;18509:366;;;:::o;18881:::-;19023:3;19044:67;19108:2;19103:3;19044:67;:::i;:::-;19037:74;;19120:93;19209:3;19120:93;:::i;:::-;19238:2;19233:3;19229:12;19222:19;;18881:366;;;:::o;19253:::-;19395:3;19416:67;19480:2;19475:3;19416:67;:::i;:::-;19409:74;;19492:93;19581:3;19492:93;:::i;:::-;19610:2;19605:3;19601:12;19594:19;;19253:366;;;:::o;19625:::-;19767:3;19788:67;19852:2;19847:3;19788:67;:::i;:::-;19781:74;;19864:93;19953:3;19864:93;:::i;:::-;19982:2;19977:3;19973:12;19966:19;;19625:366;;;:::o;19997:::-;20139:3;20160:67;20224:2;20219:3;20160:67;:::i;:::-;20153:74;;20236:93;20325:3;20236:93;:::i;:::-;20354:2;20349:3;20345:12;20338:19;;19997:366;;;:::o;20369:398::-;20528:3;20549:83;20630:1;20625:3;20549:83;:::i;:::-;20542:90;;20641:93;20730:3;20641:93;:::i;:::-;20759:1;20754:3;20750:11;20743:18;;20369:398;;;:::o;20773:366::-;20915:3;20936:67;21000:2;20995:3;20936:67;:::i;:::-;20929:74;;21012:93;21101:3;21012:93;:::i;:::-;21130:2;21125:3;21121:12;21114:19;;20773:366;;;:::o;21145:::-;21287:3;21308:67;21372:2;21367:3;21308:67;:::i;:::-;21301:74;;21384:93;21473:3;21384:93;:::i;:::-;21502:2;21497:3;21493:12;21486:19;;21145:366;;;:::o;21517:::-;21659:3;21680:67;21744:2;21739:3;21680:67;:::i;:::-;21673:74;;21756:93;21845:3;21756:93;:::i;:::-;21874:2;21869:3;21865:12;21858:19;;21517:366;;;:::o;21889:108::-;21966:24;21984:5;21966:24;:::i;:::-;21961:3;21954:37;21889:108;;:::o;22003:118::-;22090:24;22108:5;22090:24;:::i;:::-;22085:3;22078:37;22003:118;;:::o;22127:589::-;22352:3;22374:95;22465:3;22456:6;22374:95;:::i;:::-;22367:102;;22486:95;22577:3;22568:6;22486:95;:::i;:::-;22479:102;;22598:92;22686:3;22677:6;22598:92;:::i;:::-;22591:99;;22707:3;22700:10;;22127:589;;;;;;:::o;22722:379::-;22906:3;22928:147;23071:3;22928:147;:::i;:::-;22921:154;;23092:3;23085:10;;22722:379;;;:::o;23107:222::-;23200:4;23238:2;23227:9;23223:18;23215:26;;23251:71;23319:1;23308:9;23304:17;23295:6;23251:71;:::i;:::-;23107:222;;;;:::o;23335:640::-;23530:4;23568:3;23557:9;23553:19;23545:27;;23582:71;23650:1;23639:9;23635:17;23626:6;23582:71;:::i;:::-;23663:72;23731:2;23720:9;23716:18;23707:6;23663:72;:::i;:::-;23745;23813:2;23802:9;23798:18;23789:6;23745:72;:::i;:::-;23864:9;23858:4;23854:20;23849:2;23838:9;23834:18;23827:48;23892:76;23963:4;23954:6;23892:76;:::i;:::-;23884:84;;23335:640;;;;;;;:::o;23981:373::-;24124:4;24162:2;24151:9;24147:18;24139:26;;24211:9;24205:4;24201:20;24197:1;24186:9;24182:17;24175:47;24239:108;24342:4;24333:6;24239:108;:::i;:::-;24231:116;;23981:373;;;;:::o;24360:210::-;24447:4;24485:2;24474:9;24470:18;24462:26;;24498:65;24560:1;24549:9;24545:17;24536:6;24498:65;:::i;:::-;24360:210;;;;:::o;24576:313::-;24689:4;24727:2;24716:9;24712:18;24704:26;;24776:9;24770:4;24766:20;24762:1;24751:9;24747:17;24740:47;24804:78;24877:4;24868:6;24804:78;:::i;:::-;24796:86;;24576:313;;;;:::o;24895:419::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;24895:419;;;:::o;25320:::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:::-;32711:4;32749:2;32738:9;32734:18;32726:26;;32798:9;32792:4;32788:20;32784:1;32773:9;32769:17;32762:47;32826:131;32952:4;32826:131;:::i;:::-;32818:139;;32545:419;;;:::o;32970:::-;33136:4;33174:2;33163:9;33159:18;33151:26;;33223:9;33217:4;33213:20;33209:1;33198:9;33194:17;33187:47;33251:131;33377:4;33251:131;:::i;:::-;33243:139;;32970:419;;;:::o;33395:::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:::-;33986:4;34024:2;34013:9;34009:18;34001:26;;34073:9;34067:4;34063:20;34059:1;34048:9;34044:17;34037:47;34101:131;34227:4;34101:131;:::i;:::-;34093:139;;33820:419;;;:::o;34245:::-;34411:4;34449:2;34438:9;34434:18;34426:26;;34498:9;34492:4;34488:20;34484:1;34473:9;34469:17;34462:47;34526:131;34652:4;34526:131;:::i;:::-;34518:139;;34245:419;;;:::o;34670:::-;34836:4;34874:2;34863:9;34859:18;34851:26;;34923:9;34917:4;34913:20;34909:1;34898:9;34894:17;34887:47;34951:131;35077:4;34951:131;:::i;:::-;34943:139;;34670:419;;;:::o;35095:222::-;35188:4;35226:2;35215:9;35211:18;35203:26;;35239:71;35307:1;35296:9;35292:17;35283:6;35239:71;:::i;:::-;35095:222;;;;:::o;35323:129::-;35357:6;35384:20;;:::i;:::-;35374:30;;35413:33;35441:4;35433:6;35413:33;:::i;:::-;35323:129;;;:::o;35458:75::-;35491:6;35524:2;35518:9;35508:19;;35458:75;:::o;35539:311::-;35616:4;35706:18;35698:6;35695:30;35692:56;;;35728:18;;:::i;:::-;35692:56;35778:4;35770:6;35766:17;35758:25;;35838:4;35832;35828:15;35820:23;;35539:311;;;:::o;35856:307::-;35917:4;36007:18;35999:6;35996:30;35993:56;;;36029:18;;:::i;:::-;35993:56;36067:29;36089:6;36067:29;:::i;:::-;36059:37;;36151:4;36145;36141:15;36133:23;;35856:307;;;:::o;36169:308::-;36231:4;36321:18;36313:6;36310:30;36307:56;;;36343:18;;:::i;:::-;36307:56;36381:29;36403:6;36381:29;:::i;:::-;36373:37;;36465:4;36459;36455:15;36447:23;;36169:308;;;:::o;36483:132::-;36550:4;36573:3;36565:11;;36603:4;36598:3;36594:14;36586:22;;36483:132;;;:::o;36621:141::-;36670:4;36693:3;36685:11;;36716:3;36713:1;36706:14;36750:4;36747:1;36737:18;36729:26;;36621:141;;;:::o;36768:114::-;36835:6;36869:5;36863:12;36853:22;;36768:114;;;:::o;36888:98::-;36939:6;36973:5;36967:12;36957:22;;36888:98;;;:::o;36992:99::-;37044:6;37078:5;37072:12;37062:22;;36992:99;;;:::o;37097:113::-;37167:4;37199;37194:3;37190:14;37182:22;;37097:113;;;:::o;37216:184::-;37315:11;37349:6;37344:3;37337:19;37389:4;37384:3;37380:14;37365:29;;37216:184;;;;:::o;37406:168::-;37489:11;37523:6;37518:3;37511:19;37563:4;37558:3;37554:14;37539:29;;37406:168;;;;:::o;37580:147::-;37681:11;37718:3;37703:18;;37580:147;;;;:::o;37733:169::-;37817:11;37851:6;37846:3;37839:19;37891:4;37886:3;37882:14;37867:29;;37733:169;;;;:::o;37908:148::-;38010:11;38047:3;38032:18;;37908:148;;;;:::o;38062:305::-;38102:3;38121:20;38139:1;38121:20;:::i;:::-;38116:25;;38155:20;38173:1;38155:20;:::i;:::-;38150:25;;38309:1;38241:66;38237:74;38234:1;38231:81;38228:107;;;38315:18;;:::i;:::-;38228:107;38359:1;38356;38352:9;38345:16;;38062:305;;;;:::o;38373:185::-;38413:1;38430:20;38448:1;38430:20;:::i;:::-;38425:25;;38464:20;38482:1;38464:20;:::i;:::-;38459:25;;38503:1;38493:35;;38508:18;;:::i;:::-;38493:35;38550:1;38547;38543:9;38538:14;;38373:185;;;;:::o;38564:348::-;38604:7;38627:20;38645:1;38627:20;:::i;:::-;38622:25;;38661:20;38679:1;38661:20;:::i;:::-;38656:25;;38849:1;38781:66;38777:74;38774:1;38771:81;38766:1;38759:9;38752:17;38748:105;38745:131;;;38856:18;;:::i;:::-;38745:131;38904:1;38901;38897:9;38886:20;;38564:348;;;;:::o;38918:191::-;38958:4;38978:20;38996:1;38978:20;:::i;:::-;38973:25;;39012:20;39030:1;39012:20;:::i;:::-;39007:25;;39051:1;39048;39045:8;39042:34;;;39056:18;;:::i;:::-;39042:34;39101:1;39098;39094:9;39086:17;;38918:191;;;;:::o;39115:96::-;39152:7;39181:24;39199:5;39181:24;:::i;:::-;39170:35;;39115:96;;;:::o;39217:90::-;39251:7;39294:5;39287:13;39280:21;39269:32;;39217:90;;;:::o;39313:149::-;39349:7;39389:66;39382:5;39378:78;39367:89;;39313:149;;;:::o;39468:126::-;39505:7;39545:42;39538:5;39534:54;39523:65;;39468:126;;;:::o;39600:77::-;39637:7;39666:5;39655:16;;39600:77;;;:::o;39683:154::-;39767:6;39762:3;39757;39744:30;39829:1;39820:6;39815:3;39811:16;39804:27;39683:154;;;:::o;39843:307::-;39911:1;39921:113;39935:6;39932:1;39929:13;39921:113;;;40020:1;40015:3;40011:11;40005:18;40001:1;39996:3;39992:11;39985:39;39957:2;39954:1;39950:10;39945:15;;39921:113;;;40052:6;40049:1;40046:13;40043:101;;;40132:1;40123:6;40118:3;40114:16;40107:27;40043:101;39892:258;39843:307;;;:::o;40156:320::-;40200:6;40237:1;40231:4;40227:12;40217:22;;40284:1;40278:4;40274:12;40305:18;40295:81;;40361:4;40353:6;40349:17;40339:27;;40295:81;40423:2;40415:6;40412:14;40392:18;40389:38;40386:84;;;40442:18;;:::i;:::-;40386:84;40207:269;40156:320;;;:::o;40482:281::-;40565:27;40587:4;40565:27;:::i;:::-;40557:6;40553:40;40695:6;40683:10;40680:22;40659:18;40647:10;40644:34;40641:62;40638:88;;;40706:18;;:::i;:::-;40638:88;40746:10;40742:2;40735:22;40525:238;40482:281;;:::o;40769:233::-;40808:3;40831:24;40849:5;40831:24;:::i;:::-;40822:33;;40877:66;40870:5;40867:77;40864:103;;;40947:18;;:::i;:::-;40864:103;40994:1;40987:5;40983:13;40976:20;;40769:233;;;:::o;41008:176::-;41040:1;41057:20;41075:1;41057:20;:::i;:::-;41052:25;;41091:20;41109:1;41091:20;:::i;:::-;41086:25;;41130:1;41120:35;;41135:18;;:::i;:::-;41120:35;41176:1;41173;41169:9;41164:14;;41008:176;;;;:::o;41190:180::-;41238:77;41235:1;41228:88;41335:4;41332:1;41325:15;41359:4;41356:1;41349:15;41376:180;41424:77;41421:1;41414:88;41521:4;41518:1;41511:15;41545:4;41542:1;41535:15;41562:180;41610:77;41607:1;41600:88;41707:4;41704:1;41697:15;41731:4;41728:1;41721:15;41748:180;41796:77;41793:1;41786:88;41893:4;41890:1;41883:15;41917:4;41914:1;41907:15;41934:180;41982:77;41979:1;41972:88;42079:4;42076:1;42069:15;42103:4;42100:1;42093:15;42120:180;42168:77;42165:1;42158:88;42265:4;42262:1;42255:15;42289:4;42286:1;42279:15;42306:117;42415:1;42412;42405:12;42429:117;42538:1;42535;42528:12;42552:117;42661:1;42658;42651:12;42675:117;42784:1;42781;42774:12;42798:117;42907:1;42904;42897:12;42921:102;42962:6;43013:2;43009:7;43004:2;42997:5;42993:14;42989:28;42979:38;;42921:102;;;:::o;43029:230::-;43169:34;43165:1;43157:6;43153:14;43146:58;43238:13;43233:2;43225:6;43221:15;43214:38;43029:230;:::o;43265:237::-;43405:34;43401:1;43393:6;43389:14;43382:58;43474:20;43469:2;43461:6;43457:15;43450:45;43265:237;:::o;43508:225::-;43648:34;43644:1;43636:6;43632:14;43625:58;43717:8;43712:2;43704:6;43700:15;43693:33;43508:225;:::o;43739:178::-;43879:30;43875:1;43867:6;43863:14;43856:54;43739:178;:::o;43923:223::-;44063:34;44059:1;44051:6;44047:14;44040:58;44132:6;44127:2;44119:6;44115:15;44108:31;43923:223;:::o;44152:175::-;44292:27;44288:1;44280:6;44276:14;44269:51;44152:175;:::o;44333:231::-;44473:34;44469:1;44461:6;44457:14;44450:58;44542:14;44537:2;44529:6;44525:15;44518:39;44333:231;:::o;44570:223::-;44710:34;44706:1;44698:6;44694:14;44687:58;44779:6;44774:2;44766:6;44762:15;44755:31;44570:223;:::o;44799:168::-;44939:20;44935:1;44927:6;44923:14;44916:44;44799:168;:::o;44973:243::-;45113:34;45109:1;45101:6;45097:14;45090:58;45182:26;45177:2;45169:6;45165:15;45158:51;44973:243;:::o;45222:229::-;45362:34;45358:1;45350:6;45346:14;45339:58;45431:12;45426:2;45418:6;45414:15;45407:37;45222:229;:::o;45457:228::-;45597:34;45593:1;45585:6;45581:14;45574:58;45666:11;45661:2;45653:6;45649:15;45642:36;45457:228;:::o;45691:172::-;45831:24;45827:1;45819:6;45815:14;45808:48;45691:172;:::o;45869:182::-;46009:34;46005:1;45997:6;45993:14;45986:58;45869:182;:::o;46057:231::-;46197:34;46193:1;46185:6;46181:14;46174:58;46266:14;46261:2;46253:6;46249:15;46242:39;46057:231;:::o;46294:182::-;46434:34;46430:1;46422:6;46418:14;46411:58;46294:182;:::o;46482:173::-;46622:25;46618:1;46610:6;46606:14;46599:49;46482:173;:::o;46661:228::-;46801:34;46797:1;46789:6;46785:14;46778:58;46870:11;46865:2;46857:6;46853:15;46846:36;46661:228;:::o;46895:234::-;47035:34;47031:1;47023:6;47019:14;47012:58;47104:17;47099:2;47091:6;47087:15;47080:42;46895:234;:::o;47135:178::-;47275:30;47271:1;47263:6;47259:14;47252:54;47135:178;:::o;47319:220::-;47459:34;47455:1;47447:6;47443:14;47436:58;47528:3;47523:2;47515:6;47511:15;47504:28;47319:220;:::o;47545:114::-;;:::o;47665:236::-;47805:34;47801:1;47793:6;47789:14;47782:58;47874:19;47869:2;47861:6;47857:15;47850:44;47665:236;:::o;47907:231::-;48047:34;48043:1;48035:6;48031:14;48024:58;48116:14;48111:2;48103:6;48099:15;48092:39;47907:231;:::o;48144:177::-;48284:29;48280:1;48272:6;48268:14;48261:53;48144:177;:::o;48327:122::-;48400:24;48418:5;48400:24;:::i;:::-;48393:5;48390:35;48380:63;;48439:1;48436;48429:12;48380:63;48327:122;:::o;48455:116::-;48525:21;48540:5;48525:21;:::i;:::-;48518:5;48515:32;48505:60;;48561:1;48558;48551:12;48505:60;48455:116;:::o;48577:120::-;48649:23;48666:5;48649:23;:::i;:::-;48642:5;48639:34;48629:62;;48687:1;48684;48677:12;48629:62;48577:120;:::o;48703:122::-;48776:24;48794:5;48776:24;:::i;:::-;48769:5;48766:35;48756:63;;48815:1;48812;48805:12;48756:63;48703:122;:::o

Swarm Source

ipfs://4e0951f4a6a13fa47505ef11c1c22f25dc35706ebb4a27c53fd97f2c655fb284
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.