ETH Price: $3,391.75 (-1.60%)
Gas: 1 Gwei

Token

IdentitiesbySketcha (IDS)
 

Overview

Max Total Supply

806 IDS

Holders

472

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 IDS
0x5d0abbd188fddb20ca2b0e0da901759c61e017a0
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:
IdentitiesBySketcha

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-23
*/

// SPDX-License-Identifier: MIT

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

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

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

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

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

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


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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}


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

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

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

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(to).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 {}
}


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


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//   ___     __               __   __ __   __                  __              _______ __           __         __          
//  |   |.--|  |.-----.-----.|  |_|__|  |_|__|.-----.-----.   |  |--.--.--.   |   _   |  |--.-----.|  |_.----.|  |--.---.-.
//  |.  ||  _  ||  -__|     ||   _|  |   _|  ||  -__|__ --|   |  _  |  |  |   |   1___|    <|  -__||   _|  __||     |  _  |
//  |.  ||_____||_____|__|__||____|__|____|__||_____|_____|   |_____|___  |   |____   |__|__|_____||____|____||__|__|___._|
//  |:  |                                                           |_____|   |:  1   |                                    
//  |::.|                                                                     |::.. . |                                    
//  `---'                                                                     `-------'                                    
                                                                                                                        

pragma solidity >=0.7.0 <0.9.0;

contract IdentitiesBySketcha is ERC721, ERC721Enumerable, Ownable {
    using Strings for uint256;
    using SafeMath for uint256;
    string public baseURI;
    string public baseExtension = ".json";
    uint256 public cost = 0.09 ether;
    uint256 public whitelistCost = 0.06 ether;
    mapping(address => bool) public whitelisted;
    bool public paused = true;
    bool public pauseWhitelistMint = true;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
    }

    // internal
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
        if(!pauseWhitelistMint && paused) {
            require(whitelisted[to] != false);
        }
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function mint(address _to, uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(!paused);
        require(_mintAmount > 0);
        require(_mintAmount < 4);
        require((cost.mul(_mintAmount)) <= msg.value);
        require(supply + _mintAmount < 2334);
        require((walletOfOwner(_to).length + _mintAmount) < 4);
        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(_to, supply + i);
        }
    }

    function mintFromWhiteList(address _to, uint256 _mintAmount) public payable {
        uint256 supply = totalSupply();
        require(!pauseWhitelistMint);
        require(whitelisted[_to] != false);
        require(_mintAmount > 0);
        require(_mintAmount < 2);
        require((whitelistCost.mul(_mintAmount)) <= msg.value);
        require(supply + _mintAmount < 2334);
        require((walletOfOwner(_to).length + _mintAmount) < 2);
        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(_to, 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))
        : "";
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setWhitelistCost(uint256 _newCost) public onlyOwner {
        whitelistCost = _newCost;
    }

    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 setPauseWhitelistMint(bool _state) public onlyOwner {
        pauseWhitelistMint = _state;
    }

    function whitelistUser(address _user) public onlyOwner {
        require(whitelisted[_user] != true);
        whitelisted[_user] = true;
    }

    function whitelistUsers(address[] memory _users) public onlyOwner {
        for (uint256 i; i < _users.length; i++) {
            require(whitelisted[_users[i]] != true);
            whitelisted[_users[i]] = true;
        }
    }

    function removeWhitelistUser(address _user) public onlyOwner {
        whitelisted[_user] = false;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }
}

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":"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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintFromWhiteList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"pauseWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_state","type":"bool"}],"name":"setPauseWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWhitelistCost","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":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002e5565b5067013fbe85edc90000600d5566d529ae9e860000600e556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000ac57600080fd5b5060405162005062380380620050628339818101604052810190620000d2919062000413565b82828160009080519060200190620000ec929190620002e5565b50806001908051906020019062000105929190620002e5565b505050620001286200011c6200014260201b60201c565b6200014a60201b60201c565b62000139816200021060201b60201c565b505050620006d3565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002206200014260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000246620002bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200029f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029690620004f3565b60405180910390fd5b80600b9080519060200190620002b7929190620002e5565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002f390620005bb565b90600052602060002090601f01602090048101928262000317576000855562000363565b82601f106200033257805160ff191683800117855562000363565b8280016001018555821562000363579182015b828111156200036257825182559160200191906001019062000345565b5b50905062000372919062000376565b5090565b5b808211156200039157600081600090555060010162000377565b5090565b6000620003ac620003a6846200053e565b62000515565b905082815260208101848484011115620003cb57620003ca6200068a565b5b620003d884828562000585565b509392505050565b600082601f830112620003f857620003f762000685565b5b81516200040a84826020860162000395565b91505092915050565b6000806000606084860312156200042f576200042e62000694565b5b600084015167ffffffffffffffff81111562000450576200044f6200068f565b5b6200045e86828701620003e0565b935050602084015167ffffffffffffffff8111156200048257620004816200068f565b5b6200049086828701620003e0565b925050604084015167ffffffffffffffff811115620004b457620004b36200068f565b5b620004c286828701620003e0565b9150509250925092565b6000620004db60208362000574565b9150620004e882620006aa565b602082019050919050565b600060208201905081810360008301526200050e81620004cc565b9050919050565b60006200052162000534565b90506200052f8282620005f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055c576200055b62000656565b5b620005678262000699565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005a557808201518184015260208101905062000588565b83811115620005b5576000848401525b50505050565b60006002820490506001821680620005d457607f821691505b60208210811415620005eb57620005ea62000627565b5b50919050565b620005fc8262000699565b810181811067ffffffffffffffff821117156200061e576200061d62000656565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61497f80620006e36000396000f3fe6080604052600436106102305760003560e01c80636352211e1161012e578063be24be5a116100ab578063da3ef23f1161006f578063da3ef23f14610822578063e7b99ec71461084b578063e985e9c514610876578063edec5f27146108b3578063f2fde38b146108dc57610230565b8063be24be5a14610738578063c668286214610754578063c87b56dd1461077f578063d49479eb146107bc578063d936547e146107e557610230565b8063853828b6116100f2578063853828b6146106865780638da5cb5b1461069057806395d89b41146106bb578063a22cb465146106e6578063b88d4fde1461070f57610230565b80636352211e146105a157806368b1d994146105de5780636c0360eb1461060757806370a0823114610632578063715018a61461066f57610230565b806330cc7ae0116101bc57806344a0d68a1161018057806344a0d68a146104be5780634a4c560d146104e75780634f6ccce71461051057806355f804b31461054d5780635c975abb1461057657610230565b806330cc7ae0146103e857806335ac3bcc1461041157806340c10f191461043c57806342842e0e14610458578063438b63001461048157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd1461035757806323b872dd146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061365b565b610905565b6040516102699190613c2f565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061362e565b610917565b005b3480156102a757600080fd5b506102b06109b0565b6040516102bd9190613c4a565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906136fe565b610a42565b6040516102fa9190613ba6565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906135a5565b610ac7565b005b34801561033857600080fd5b50610341610bdf565b60405161034e9190613eac565b60405180910390f35b34801561036357600080fd5b5061036c610be5565b6040516103799190613eac565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610bf2565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906135a5565b610c52565b6040516103df9190613eac565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613422565b610cf7565b005b34801561041d57600080fd5b50610426610dce565b6040516104339190613c2f565b60405180910390f35b610456600480360381019061045191906135a5565b610de1565b005b34801561046457600080fd5b5061047f600480360381019061047a919061348f565b610eb8565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613422565b610ed8565b6040516104b59190613c0d565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e091906136fe565b610f86565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613422565b61100c565b005b34801561051c57600080fd5b50610537600480360381019061053291906136fe565b611141565b6040516105449190613eac565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906136b5565b6111b2565b005b34801561058257600080fd5b5061058b611248565b6040516105989190613c2f565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906136fe565b61125b565b6040516105d59190613ba6565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061362e565b61130d565b005b34801561061357600080fd5b5061061c6113a6565b6040516106299190613c4a565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613422565b611434565b6040516106669190613eac565b60405180910390f35b34801561067b57600080fd5b506106846114ec565b005b61068e611574565b005b34801561069c57600080fd5b506106a5611630565b6040516106b29190613ba6565b60405180910390f35b3480156106c757600080fd5b506106d061165a565b6040516106dd9190613c4a565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613565565b6116ec565b005b34801561071b57600080fd5b50610736600480360381019061073191906134e2565b61186d565b005b610752600480360381019061074d91906135a5565b6118cf565b005b34801561076057600080fd5b50610769611a04565b6040516107769190613c4a565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a191906136fe565b611a92565b6040516107b39190613c4a565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de91906136fe565b611b3c565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613422565b611bc2565b6040516108199190613c2f565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906136b5565b611be2565b005b34801561085757600080fd5b50610860611c78565b60405161086d9190613eac565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061344f565b611c7e565b6040516108aa9190613c2f565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906135e5565b611d12565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613422565b611e9b565b005b600061091082611f93565b9050919050565b61091f61200d565b73ffffffffffffffffffffffffffffffffffffffff1661093d611630565b73ffffffffffffffffffffffffffffffffffffffff1614610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90613dec565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109bf906141d6565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb906141d6565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000610a4d82612015565b610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613dcc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad28261125b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90613e4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6261200d565b73ffffffffffffffffffffffffffffffffffffffff161480610b915750610b9081610b8b61200d565b611c7e565b5b610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613d4c565b60405180910390fd5b610bda8383612081565b505050565b600d5481565b6000600880549050905090565b610c03610bfd61200d565b8261213a565b610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613e6c565b60405180910390fd5b610c4d838383612218565b505050565b6000610c5d83611434565b8210610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613c6c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cff61200d565b73ffffffffffffffffffffffffffffffffffffffff16610d1d611630565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613dec565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b6000610deb610be5565b9050601060009054906101000a900460ff1615610e0757600080fd5b60008211610e1457600080fd5b60048210610e2157600080fd5b34610e3783600d5461247490919063ffffffff16565b1115610e4257600080fd5b61091e8282610e51919061400b565b10610e5b57600080fd5b600482610e6785610ed8565b51610e72919061400b565b10610e7c57600080fd5b6000600190505b828111610eb257610e9f848284610e9a919061400b565b61248a565b8080610eaa90614239565b915050610e83565b50505050565b610ed38383836040518060200160405280600081525061186d565b505050565b60606000610ee583611434565b905060008167ffffffffffffffff811115610f0357610f0261439e565b5b604051908082528060200260200182016040528015610f315781602001602082028036833780820191505090505b50905060005b82811015610f7b57610f498582610c52565b828281518110610f5c57610f5b61436f565b5b6020026020010181815250508080610f7390614239565b915050610f37565b508092505050919050565b610f8e61200d565b73ffffffffffffffffffffffffffffffffffffffff16610fac611630565b73ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613dec565b60405180910390fd5b80600d8190555050565b61101461200d565b73ffffffffffffffffffffffffffffffffffffffff16611032611630565b73ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613dec565b60405180910390fd5b60011515600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156110e657600080fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061114b610be5565b821061118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613e8c565b60405180910390fd5b600882815481106111a05761119f61436f565b5b90600052602060002001549050919050565b6111ba61200d565b73ffffffffffffffffffffffffffffffffffffffff166111d8611630565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613dec565b60405180910390fd5b80600b9080519060200190611244929190613198565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613d8c565b60405180910390fd5b80915050919050565b61131561200d565b73ffffffffffffffffffffffffffffffffffffffff16611333611630565b73ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090613dec565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b600b80546113b3906141d6565b80601f01602080910402602001604051908101604052809291908181526020018280546113df906141d6565b801561142c5780601f106114015761010080835404028352916020019161142c565b820191906000526020600020905b81548152906001019060200180831161140f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613d6c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f461200d565b73ffffffffffffffffffffffffffffffffffffffff16611512611630565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90613dec565b60405180910390fd5b61157260006124a8565b565b61157c61200d565b73ffffffffffffffffffffffffffffffffffffffff1661159a611630565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613dec565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061162e57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611669906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611695906141d6565b80156116e25780601f106116b7576101008083540402835291602001916116e2565b820191906000526020600020905b8154815290600101906020018083116116c557829003601f168201915b5050505050905090565b6116f461200d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613d0c565b60405180910390fd5b806005600061176f61200d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181c61200d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118619190613c2f565b60405180910390a35050565b61187e61187861200d565b8361213a565b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613e6c565b60405180910390fd5b6118c98484848461256e565b50505050565b60006118d9610be5565b9050601060019054906101000a900460ff16156118f557600080fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561195357600080fd5b6000821161196057600080fd5b6002821061196d57600080fd5b3461198383600e5461247490919063ffffffff16565b111561198e57600080fd5b61091e828261199d919061400b565b106119a757600080fd5b6002826119b385610ed8565b516119be919061400b565b106119c857600080fd5b6000600190505b8281116119fe576119eb8482846119e6919061400b565b61248a565b80806119f690614239565b9150506119cf565b50505050565b600c8054611a11906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3d906141d6565b8015611a8a5780601f10611a5f57610100808354040283529160200191611a8a565b820191906000526020600020905b815481529060010190602001808311611a6d57829003601f168201915b505050505081565b6060611a9d82612015565b611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613e2c565b60405180910390fd5b6000611ae66125ca565b90506000815111611b065760405180602001604052806000815250611b34565b80611b108461265c565b600c604051602001611b2493929190613b75565b6040516020818303038152906040525b915050919050565b611b4461200d565b73ffffffffffffffffffffffffffffffffffffffff16611b62611630565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613dec565b60405180910390fd5b80600e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611bea61200d565b73ffffffffffffffffffffffffffffffffffffffff16611c08611630565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590613dec565b60405180910390fd5b80600c9080519060200190611c74929190613198565b5050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d1a61200d565b73ffffffffffffffffffffffffffffffffffffffff16611d38611630565b73ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613dec565b60405180910390fd5b60005b8151811015611e975760011515600f6000848481518110611db557611db461436f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e1257600080fd5b6001600f6000848481518110611e2b57611e2a61436f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e8f90614239565b915050611d91565b5050565b611ea361200d565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611630565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613cac565b60405180910390fd5b611f90816124a8565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120065750612005826127bd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120f48361125b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061214582612015565b612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613d2c565b60405180910390fd5b600061218f8361125b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121fe57508373ffffffffffffffffffffffffffffffffffffffff166121e684610a42565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220f575061220e8185611c7e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122388261125b565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590613e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590613cec565b60405180910390fd5b61230983838361289f565b612314600082612081565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236491906140ec565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123bb919061400b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836124829190614092565b905092915050565b6124a482826040518060200160405280600081525061293c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612579848484612218565b61258584848484612997565b6125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb90613c8c565b60405180910390fd5b50505050565b6060600b80546125d9906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054612605906141d6565b80156126525780601f1061262757610100808354040283529160200191612652565b820191906000526020600020905b81548152906001019060200180831161263557829003601f168201915b5050505050905090565b606060008214156126a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127b8565b600082905060005b600082146126d65780806126bf90614239565b915050600a826126cf9190614061565b91506126ac565b60008167ffffffffffffffff8111156126f2576126f161439e565b5b6040519080825280601f01601f1916602001820160405280156127245781602001600182028036833780820191505090505b5090505b600085146127b15760018261273d91906140ec565b9150600a8561274c9190614282565b6030612758919061400b565b60f81b81838151811061276e5761276d61436f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127aa9190614061565b9450612728565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061288857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612898575061289782612b2e565b5b9050919050565b601060019054906101000a900460ff161580156128c85750601060009054906101000a900460ff165b1561292c5760001515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561292b57600080fd5b5b612937838383612b98565b505050565b6129468383612cac565b6129536000848484612997565b612992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298990613c8c565b60405180910390fd5b505050565b60006129b88473ffffffffffffffffffffffffffffffffffffffff16612e7a565b15612b21578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e161200d565b8786866040518563ffffffff1660e01b8152600401612a039493929190613bc1565b602060405180830381600087803b158015612a1d57600080fd5b505af1925050508015612a4e57506040513d601f19601f82011682018060405250810190612a4b9190613688565b60015b612ad1573d8060008114612a7e576040519150601f19603f3d011682016040523d82523d6000602084013e612a83565b606091505b50600081511415612ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac090613c8c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b26565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ba3838383612e8d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be657612be181612e92565b612c25565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c2457612c238382612edb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6857612c6381613048565b612ca7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ca657612ca58282613119565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390613dac565b60405180910390fd5b612d2581612015565b15612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90613ccc565b60405180910390fd5b612d716000838361289f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc1919061400b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ee884611434565b612ef291906140ec565b9050600060076000848152602001908152602001600020549050818114612fd7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305c91906140ec565b905060006009600084815260200190815260200160002054905060006008838154811061308c5761308b61436f565b5b9060005260206000200154905080600883815481106130ae576130ad61436f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130fd576130fc614340565b5b6001900381819060005260206000200160009055905550505050565b600061312483611434565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546131a4906141d6565b90600052602060002090601f0160209004810192826131c6576000855561320d565b82601f106131df57805160ff191683800117855561320d565b8280016001018555821561320d579182015b8281111561320c5782518255916020019190600101906131f1565b5b50905061321a919061321e565b5090565b5b8082111561323757600081600090555060010161321f565b5090565b600061324e61324984613eec565b613ec7565b90508083825260208201905082856020860282011115613271576132706143d2565b5b60005b858110156132a15781613287888261332f565b845260208401935060208301925050600181019050613274565b5050509392505050565b60006132be6132b984613f18565b613ec7565b9050828152602081018484840111156132da576132d96143d7565b5b6132e5848285614194565b509392505050565b60006133006132fb84613f49565b613ec7565b90508281526020810184848401111561331c5761331b6143d7565b5b613327848285614194565b509392505050565b60008135905061333e816148ed565b92915050565b600082601f830112613359576133586143cd565b5b813561336984826020860161323b565b91505092915050565b60008135905061338181614904565b92915050565b6000813590506133968161491b565b92915050565b6000815190506133ab8161491b565b92915050565b600082601f8301126133c6576133c56143cd565b5b81356133d68482602086016132ab565b91505092915050565b600082601f8301126133f4576133f36143cd565b5b81356134048482602086016132ed565b91505092915050565b60008135905061341c81614932565b92915050565b600060208284031215613438576134376143e1565b5b60006134468482850161332f565b91505092915050565b60008060408385031215613466576134656143e1565b5b60006134748582860161332f565b92505060206134858582860161332f565b9150509250929050565b6000806000606084860312156134a8576134a76143e1565b5b60006134b68682870161332f565b93505060206134c78682870161332f565b92505060406134d88682870161340d565b9150509250925092565b600080600080608085870312156134fc576134fb6143e1565b5b600061350a8782880161332f565b945050602061351b8782880161332f565b935050604061352c8782880161340d565b925050606085013567ffffffffffffffff81111561354d5761354c6143dc565b5b613559878288016133b1565b91505092959194509250565b6000806040838503121561357c5761357b6143e1565b5b600061358a8582860161332f565b925050602061359b85828601613372565b9150509250929050565b600080604083850312156135bc576135bb6143e1565b5b60006135ca8582860161332f565b92505060206135db8582860161340d565b9150509250929050565b6000602082840312156135fb576135fa6143e1565b5b600082013567ffffffffffffffff811115613619576136186143dc565b5b61362584828501613344565b91505092915050565b600060208284031215613644576136436143e1565b5b600061365284828501613372565b91505092915050565b600060208284031215613671576136706143e1565b5b600061367f84828501613387565b91505092915050565b60006020828403121561369e5761369d6143e1565b5b60006136ac8482850161339c565b91505092915050565b6000602082840312156136cb576136ca6143e1565b5b600082013567ffffffffffffffff8111156136e9576136e86143dc565b5b6136f5848285016133df565b91505092915050565b600060208284031215613714576137136143e1565b5b60006137228482850161340d565b91505092915050565b60006137378383613b57565b60208301905092915050565b61374c81614120565b82525050565b600061375d82613f9f565b6137678185613fcd565b935061377283613f7a565b8060005b838110156137a357815161378a888261372b565b975061379583613fc0565b925050600181019050613776565b5085935050505092915050565b6137b981614132565b82525050565b60006137ca82613faa565b6137d48185613fde565b93506137e48185602086016141a3565b6137ed816143e6565b840191505092915050565b600061380382613fb5565b61380d8185613fef565b935061381d8185602086016141a3565b613826816143e6565b840191505092915050565b600061383c82613fb5565b6138468185614000565b93506138568185602086016141a3565b80840191505092915050565b6000815461386f816141d6565b6138798186614000565b9450600182166000811461389457600181146138a5576138d8565b60ff198316865281860193506138d8565b6138ae85613f8a565b60005b838110156138d0578154818901526001820191506020810190506138b1565b838801955050505b50505092915050565b60006138ee602b83613fef565b91506138f9826143f7565b604082019050919050565b6000613911603283613fef565b915061391c82614446565b604082019050919050565b6000613934602683613fef565b915061393f82614495565b604082019050919050565b6000613957601c83613fef565b9150613962826144e4565b602082019050919050565b600061397a602483613fef565b91506139858261450d565b604082019050919050565b600061399d601983613fef565b91506139a88261455c565b602082019050919050565b60006139c0602c83613fef565b91506139cb82614585565b604082019050919050565b60006139e3603883613fef565b91506139ee826145d4565b604082019050919050565b6000613a06602a83613fef565b9150613a1182614623565b604082019050919050565b6000613a29602983613fef565b9150613a3482614672565b604082019050919050565b6000613a4c602083613fef565b9150613a57826146c1565b602082019050919050565b6000613a6f602c83613fef565b9150613a7a826146ea565b604082019050919050565b6000613a92602083613fef565b9150613a9d82614739565b602082019050919050565b6000613ab5602983613fef565b9150613ac082614762565b604082019050919050565b6000613ad8602f83613fef565b9150613ae3826147b1565b604082019050919050565b6000613afb602183613fef565b9150613b0682614800565b604082019050919050565b6000613b1e603183613fef565b9150613b298261484f565b604082019050919050565b6000613b41602c83613fef565b9150613b4c8261489e565b604082019050919050565b613b608161418a565b82525050565b613b6f8161418a565b82525050565b6000613b818286613831565b9150613b8d8285613831565b9150613b998284613862565b9150819050949350505050565b6000602082019050613bbb6000830184613743565b92915050565b6000608082019050613bd66000830187613743565b613be36020830186613743565b613bf06040830185613b66565b8181036060830152613c0281846137bf565b905095945050505050565b60006020820190508181036000830152613c278184613752565b905092915050565b6000602082019050613c4460008301846137b0565b92915050565b60006020820190508181036000830152613c6481846137f8565b905092915050565b60006020820190508181036000830152613c85816138e1565b9050919050565b60006020820190508181036000830152613ca581613904565b9050919050565b60006020820190508181036000830152613cc581613927565b9050919050565b60006020820190508181036000830152613ce58161394a565b9050919050565b60006020820190508181036000830152613d058161396d565b9050919050565b60006020820190508181036000830152613d2581613990565b9050919050565b60006020820190508181036000830152613d45816139b3565b9050919050565b60006020820190508181036000830152613d65816139d6565b9050919050565b60006020820190508181036000830152613d85816139f9565b9050919050565b60006020820190508181036000830152613da581613a1c565b9050919050565b60006020820190508181036000830152613dc581613a3f565b9050919050565b60006020820190508181036000830152613de581613a62565b9050919050565b60006020820190508181036000830152613e0581613a85565b9050919050565b60006020820190508181036000830152613e2581613aa8565b9050919050565b60006020820190508181036000830152613e4581613acb565b9050919050565b60006020820190508181036000830152613e6581613aee565b9050919050565b60006020820190508181036000830152613e8581613b11565b9050919050565b60006020820190508181036000830152613ea581613b34565b9050919050565b6000602082019050613ec16000830184613b66565b92915050565b6000613ed1613ee2565b9050613edd8282614208565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0757613f0661439e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3357613f3261439e565b5b613f3c826143e6565b9050602081019050919050565b600067ffffffffffffffff821115613f6457613f6361439e565b5b613f6d826143e6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140168261418a565b91506140218361418a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614056576140556142b3565b5b828201905092915050565b600061406c8261418a565b91506140778361418a565b925082614087576140866142e2565b5b828204905092915050565b600061409d8261418a565b91506140a88361418a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140e1576140e06142b3565b5b828202905092915050565b60006140f78261418a565b91506141028361418a565b925082821015614115576141146142b3565b5b828203905092915050565b600061412b8261416a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141c15780820151818401526020810190506141a6565b838111156141d0576000848401525b50505050565b600060028204905060018216806141ee57607f821691505b6020821081141561420257614201614311565b5b50919050565b614211826143e6565b810181811067ffffffffffffffff821117156142305761422f61439e565b5b80604052505050565b60006142448261418a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614277576142766142b3565b5b600182019050919050565b600061428d8261418a565b91506142988361418a565b9250826142a8576142a76142e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6148f681614120565b811461490157600080fd5b50565b61490d81614132565b811461491857600080fd5b50565b6149248161413e565b811461492f57600080fd5b50565b61493b8161418a565b811461494657600080fd5b5056fea26469706673582212208fd6b1209769a73a7b8b9703030591dce1c0853d7b049817141bdad21fce198b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134964656e7469746965736279536b657463686100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000349445300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d57747a63437479685035485257764271724e6f4c51354878335867706f63456b7656576a41567944315871522f00000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80636352211e1161012e578063be24be5a116100ab578063da3ef23f1161006f578063da3ef23f14610822578063e7b99ec71461084b578063e985e9c514610876578063edec5f27146108b3578063f2fde38b146108dc57610230565b8063be24be5a14610738578063c668286214610754578063c87b56dd1461077f578063d49479eb146107bc578063d936547e146107e557610230565b8063853828b6116100f2578063853828b6146106865780638da5cb5b1461069057806395d89b41146106bb578063a22cb465146106e6578063b88d4fde1461070f57610230565b80636352211e146105a157806368b1d994146105de5780636c0360eb1461060757806370a0823114610632578063715018a61461066f57610230565b806330cc7ae0116101bc57806344a0d68a1161018057806344a0d68a146104be5780634a4c560d146104e75780634f6ccce71461051057806355f804b31461054d5780635c975abb1461057657610230565b806330cc7ae0146103e857806335ac3bcc1461041157806340c10f191461043c57806342842e0e14610458578063438b63001461048157610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd1461035757806323b872dd146103825780632f745c59146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061365b565b610905565b6040516102699190613c2f565b60405180910390f35b34801561027e57600080fd5b506102996004803603810190610294919061362e565b610917565b005b3480156102a757600080fd5b506102b06109b0565b6040516102bd9190613c4a565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906136fe565b610a42565b6040516102fa9190613ba6565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906135a5565b610ac7565b005b34801561033857600080fd5b50610341610bdf565b60405161034e9190613eac565b60405180910390f35b34801561036357600080fd5b5061036c610be5565b6040516103799190613eac565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061348f565b610bf2565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906135a5565b610c52565b6040516103df9190613eac565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613422565b610cf7565b005b34801561041d57600080fd5b50610426610dce565b6040516104339190613c2f565b60405180910390f35b610456600480360381019061045191906135a5565b610de1565b005b34801561046457600080fd5b5061047f600480360381019061047a919061348f565b610eb8565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613422565b610ed8565b6040516104b59190613c0d565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e091906136fe565b610f86565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613422565b61100c565b005b34801561051c57600080fd5b50610537600480360381019061053291906136fe565b611141565b6040516105449190613eac565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906136b5565b6111b2565b005b34801561058257600080fd5b5061058b611248565b6040516105989190613c2f565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c391906136fe565b61125b565b6040516105d59190613ba6565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061362e565b61130d565b005b34801561061357600080fd5b5061061c6113a6565b6040516106299190613c4a565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613422565b611434565b6040516106669190613eac565b60405180910390f35b34801561067b57600080fd5b506106846114ec565b005b61068e611574565b005b34801561069c57600080fd5b506106a5611630565b6040516106b29190613ba6565b60405180910390f35b3480156106c757600080fd5b506106d061165a565b6040516106dd9190613c4a565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613565565b6116ec565b005b34801561071b57600080fd5b50610736600480360381019061073191906134e2565b61186d565b005b610752600480360381019061074d91906135a5565b6118cf565b005b34801561076057600080fd5b50610769611a04565b6040516107769190613c4a565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a191906136fe565b611a92565b6040516107b39190613c4a565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de91906136fe565b611b3c565b005b3480156107f157600080fd5b5061080c60048036038101906108079190613422565b611bc2565b6040516108199190613c2f565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906136b5565b611be2565b005b34801561085757600080fd5b50610860611c78565b60405161086d9190613eac565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061344f565b611c7e565b6040516108aa9190613c2f565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906135e5565b611d12565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613422565b611e9b565b005b600061091082611f93565b9050919050565b61091f61200d565b73ffffffffffffffffffffffffffffffffffffffff1661093d611630565b73ffffffffffffffffffffffffffffffffffffffff1614610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098a90613dec565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109bf906141d6565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb906141d6565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000610a4d82612015565b610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613dcc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad28261125b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a90613e4c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6261200d565b73ffffffffffffffffffffffffffffffffffffffff161480610b915750610b9081610b8b61200d565b611c7e565b5b610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613d4c565b60405180910390fd5b610bda8383612081565b505050565b600d5481565b6000600880549050905090565b610c03610bfd61200d565b8261213a565b610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613e6c565b60405180910390fd5b610c4d838383612218565b505050565b6000610c5d83611434565b8210610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613c6c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cff61200d565b73ffffffffffffffffffffffffffffffffffffffff16610d1d611630565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613dec565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b6000610deb610be5565b9050601060009054906101000a900460ff1615610e0757600080fd5b60008211610e1457600080fd5b60048210610e2157600080fd5b34610e3783600d5461247490919063ffffffff16565b1115610e4257600080fd5b61091e8282610e51919061400b565b10610e5b57600080fd5b600482610e6785610ed8565b51610e72919061400b565b10610e7c57600080fd5b6000600190505b828111610eb257610e9f848284610e9a919061400b565b61248a565b8080610eaa90614239565b915050610e83565b50505050565b610ed38383836040518060200160405280600081525061186d565b505050565b60606000610ee583611434565b905060008167ffffffffffffffff811115610f0357610f0261439e565b5b604051908082528060200260200182016040528015610f315781602001602082028036833780820191505090505b50905060005b82811015610f7b57610f498582610c52565b828281518110610f5c57610f5b61436f565b5b6020026020010181815250508080610f7390614239565b915050610f37565b508092505050919050565b610f8e61200d565b73ffffffffffffffffffffffffffffffffffffffff16610fac611630565b73ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613dec565b60405180910390fd5b80600d8190555050565b61101461200d565b73ffffffffffffffffffffffffffffffffffffffff16611032611630565b73ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f90613dec565b60405180910390fd5b60011515600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156110e657600080fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061114b610be5565b821061118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613e8c565b60405180910390fd5b600882815481106111a05761119f61436f565b5b90600052602060002001549050919050565b6111ba61200d565b73ffffffffffffffffffffffffffffffffffffffff166111d8611630565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590613dec565b60405180910390fd5b80600b9080519060200190611244929190613198565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613d8c565b60405180910390fd5b80915050919050565b61131561200d565b73ffffffffffffffffffffffffffffffffffffffff16611333611630565b73ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138090613dec565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b600b80546113b3906141d6565b80601f01602080910402602001604051908101604052809291908181526020018280546113df906141d6565b801561142c5780601f106114015761010080835404028352916020019161142c565b820191906000526020600020905b81548152906001019060200180831161140f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613d6c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f461200d565b73ffffffffffffffffffffffffffffffffffffffff16611512611630565b73ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155f90613dec565b60405180910390fd5b61157260006124a8565b565b61157c61200d565b73ffffffffffffffffffffffffffffffffffffffff1661159a611630565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613dec565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061162e57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611669906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611695906141d6565b80156116e25780601f106116b7576101008083540402835291602001916116e2565b820191906000526020600020905b8154815290600101906020018083116116c557829003601f168201915b5050505050905090565b6116f461200d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613d0c565b60405180910390fd5b806005600061176f61200d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181c61200d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118619190613c2f565b60405180910390a35050565b61187e61187861200d565b8361213a565b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613e6c565b60405180910390fd5b6118c98484848461256e565b50505050565b60006118d9610be5565b9050601060019054906101000a900460ff16156118f557600080fd5b60001515600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561195357600080fd5b6000821161196057600080fd5b6002821061196d57600080fd5b3461198383600e5461247490919063ffffffff16565b111561198e57600080fd5b61091e828261199d919061400b565b106119a757600080fd5b6002826119b385610ed8565b516119be919061400b565b106119c857600080fd5b6000600190505b8281116119fe576119eb8482846119e6919061400b565b61248a565b80806119f690614239565b9150506119cf565b50505050565b600c8054611a11906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3d906141d6565b8015611a8a5780601f10611a5f57610100808354040283529160200191611a8a565b820191906000526020600020905b815481529060010190602001808311611a6d57829003601f168201915b505050505081565b6060611a9d82612015565b611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad390613e2c565b60405180910390fd5b6000611ae66125ca565b90506000815111611b065760405180602001604052806000815250611b34565b80611b108461265c565b600c604051602001611b2493929190613b75565b6040516020818303038152906040525b915050919050565b611b4461200d565b73ffffffffffffffffffffffffffffffffffffffff16611b62611630565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90613dec565b60405180910390fd5b80600e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611bea61200d565b73ffffffffffffffffffffffffffffffffffffffff16611c08611630565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590613dec565b60405180910390fd5b80600c9080519060200190611c74929190613198565b5050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d1a61200d565b73ffffffffffffffffffffffffffffffffffffffff16611d38611630565b73ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613dec565b60405180910390fd5b60005b8151811015611e975760011515600f6000848481518110611db557611db461436f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e1257600080fd5b6001600f6000848481518110611e2b57611e2a61436f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e8f90614239565b915050611d91565b5050565b611ea361200d565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611630565b73ffffffffffffffffffffffffffffffffffffffff1614611f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0e90613dec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e90613cac565b60405180910390fd5b611f90816124a8565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120065750612005826127bd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120f48361125b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061214582612015565b612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b90613d2c565b60405180910390fd5b600061218f8361125b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121fe57508373ffffffffffffffffffffffffffffffffffffffff166121e684610a42565b73ffffffffffffffffffffffffffffffffffffffff16145b8061220f575061220e8185611c7e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122388261125b565b73ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590613e0c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590613cec565b60405180910390fd5b61230983838361289f565b612314600082612081565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236491906140ec565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123bb919061400b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836124829190614092565b905092915050565b6124a482826040518060200160405280600081525061293c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612579848484612218565b61258584848484612997565b6125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb90613c8c565b60405180910390fd5b50505050565b6060600b80546125d9906141d6565b80601f0160208091040260200160405190810160405280929190818152602001828054612605906141d6565b80156126525780601f1061262757610100808354040283529160200191612652565b820191906000526020600020905b81548152906001019060200180831161263557829003601f168201915b5050505050905090565b606060008214156126a4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127b8565b600082905060005b600082146126d65780806126bf90614239565b915050600a826126cf9190614061565b91506126ac565b60008167ffffffffffffffff8111156126f2576126f161439e565b5b6040519080825280601f01601f1916602001820160405280156127245781602001600182028036833780820191505090505b5090505b600085146127b15760018261273d91906140ec565b9150600a8561274c9190614282565b6030612758919061400b565b60f81b81838151811061276e5761276d61436f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127aa9190614061565b9450612728565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061288857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612898575061289782612b2e565b5b9050919050565b601060019054906101000a900460ff161580156128c85750601060009054906101000a900460ff165b1561292c5760001515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561292b57600080fd5b5b612937838383612b98565b505050565b6129468383612cac565b6129536000848484612997565b612992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298990613c8c565b60405180910390fd5b505050565b60006129b88473ffffffffffffffffffffffffffffffffffffffff16612e7a565b15612b21578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e161200d565b8786866040518563ffffffff1660e01b8152600401612a039493929190613bc1565b602060405180830381600087803b158015612a1d57600080fd5b505af1925050508015612a4e57506040513d601f19601f82011682018060405250810190612a4b9190613688565b60015b612ad1573d8060008114612a7e576040519150601f19603f3d011682016040523d82523d6000602084013e612a83565b606091505b50600081511415612ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac090613c8c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b26565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ba3838383612e8d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be657612be181612e92565b612c25565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c2457612c238382612edb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6857612c6381613048565b612ca7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ca657612ca58282613119565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390613dac565b60405180910390fd5b612d2581612015565b15612d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5c90613ccc565b60405180910390fd5b612d716000838361289f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dc1919061400b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ee884611434565b612ef291906140ec565b9050600060076000848152602001908152602001600020549050818114612fd7576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061305c91906140ec565b905060006009600084815260200190815260200160002054905060006008838154811061308c5761308b61436f565b5b9060005260206000200154905080600883815481106130ae576130ad61436f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130fd576130fc614340565b5b6001900381819060005260206000200160009055905550505050565b600061312483611434565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546131a4906141d6565b90600052602060002090601f0160209004810192826131c6576000855561320d565b82601f106131df57805160ff191683800117855561320d565b8280016001018555821561320d579182015b8281111561320c5782518255916020019190600101906131f1565b5b50905061321a919061321e565b5090565b5b8082111561323757600081600090555060010161321f565b5090565b600061324e61324984613eec565b613ec7565b90508083825260208201905082856020860282011115613271576132706143d2565b5b60005b858110156132a15781613287888261332f565b845260208401935060208301925050600181019050613274565b5050509392505050565b60006132be6132b984613f18565b613ec7565b9050828152602081018484840111156132da576132d96143d7565b5b6132e5848285614194565b509392505050565b60006133006132fb84613f49565b613ec7565b90508281526020810184848401111561331c5761331b6143d7565b5b613327848285614194565b509392505050565b60008135905061333e816148ed565b92915050565b600082601f830112613359576133586143cd565b5b813561336984826020860161323b565b91505092915050565b60008135905061338181614904565b92915050565b6000813590506133968161491b565b92915050565b6000815190506133ab8161491b565b92915050565b600082601f8301126133c6576133c56143cd565b5b81356133d68482602086016132ab565b91505092915050565b600082601f8301126133f4576133f36143cd565b5b81356134048482602086016132ed565b91505092915050565b60008135905061341c81614932565b92915050565b600060208284031215613438576134376143e1565b5b60006134468482850161332f565b91505092915050565b60008060408385031215613466576134656143e1565b5b60006134748582860161332f565b92505060206134858582860161332f565b9150509250929050565b6000806000606084860312156134a8576134a76143e1565b5b60006134b68682870161332f565b93505060206134c78682870161332f565b92505060406134d88682870161340d565b9150509250925092565b600080600080608085870312156134fc576134fb6143e1565b5b600061350a8782880161332f565b945050602061351b8782880161332f565b935050604061352c8782880161340d565b925050606085013567ffffffffffffffff81111561354d5761354c6143dc565b5b613559878288016133b1565b91505092959194509250565b6000806040838503121561357c5761357b6143e1565b5b600061358a8582860161332f565b925050602061359b85828601613372565b9150509250929050565b600080604083850312156135bc576135bb6143e1565b5b60006135ca8582860161332f565b92505060206135db8582860161340d565b9150509250929050565b6000602082840312156135fb576135fa6143e1565b5b600082013567ffffffffffffffff811115613619576136186143dc565b5b61362584828501613344565b91505092915050565b600060208284031215613644576136436143e1565b5b600061365284828501613372565b91505092915050565b600060208284031215613671576136706143e1565b5b600061367f84828501613387565b91505092915050565b60006020828403121561369e5761369d6143e1565b5b60006136ac8482850161339c565b91505092915050565b6000602082840312156136cb576136ca6143e1565b5b600082013567ffffffffffffffff8111156136e9576136e86143dc565b5b6136f5848285016133df565b91505092915050565b600060208284031215613714576137136143e1565b5b60006137228482850161340d565b91505092915050565b60006137378383613b57565b60208301905092915050565b61374c81614120565b82525050565b600061375d82613f9f565b6137678185613fcd565b935061377283613f7a565b8060005b838110156137a357815161378a888261372b565b975061379583613fc0565b925050600181019050613776565b5085935050505092915050565b6137b981614132565b82525050565b60006137ca82613faa565b6137d48185613fde565b93506137e48185602086016141a3565b6137ed816143e6565b840191505092915050565b600061380382613fb5565b61380d8185613fef565b935061381d8185602086016141a3565b613826816143e6565b840191505092915050565b600061383c82613fb5565b6138468185614000565b93506138568185602086016141a3565b80840191505092915050565b6000815461386f816141d6565b6138798186614000565b9450600182166000811461389457600181146138a5576138d8565b60ff198316865281860193506138d8565b6138ae85613f8a565b60005b838110156138d0578154818901526001820191506020810190506138b1565b838801955050505b50505092915050565b60006138ee602b83613fef565b91506138f9826143f7565b604082019050919050565b6000613911603283613fef565b915061391c82614446565b604082019050919050565b6000613934602683613fef565b915061393f82614495565b604082019050919050565b6000613957601c83613fef565b9150613962826144e4565b602082019050919050565b600061397a602483613fef565b91506139858261450d565b604082019050919050565b600061399d601983613fef565b91506139a88261455c565b602082019050919050565b60006139c0602c83613fef565b91506139cb82614585565b604082019050919050565b60006139e3603883613fef565b91506139ee826145d4565b604082019050919050565b6000613a06602a83613fef565b9150613a1182614623565b604082019050919050565b6000613a29602983613fef565b9150613a3482614672565b604082019050919050565b6000613a4c602083613fef565b9150613a57826146c1565b602082019050919050565b6000613a6f602c83613fef565b9150613a7a826146ea565b604082019050919050565b6000613a92602083613fef565b9150613a9d82614739565b602082019050919050565b6000613ab5602983613fef565b9150613ac082614762565b604082019050919050565b6000613ad8602f83613fef565b9150613ae3826147b1565b604082019050919050565b6000613afb602183613fef565b9150613b0682614800565b604082019050919050565b6000613b1e603183613fef565b9150613b298261484f565b604082019050919050565b6000613b41602c83613fef565b9150613b4c8261489e565b604082019050919050565b613b608161418a565b82525050565b613b6f8161418a565b82525050565b6000613b818286613831565b9150613b8d8285613831565b9150613b998284613862565b9150819050949350505050565b6000602082019050613bbb6000830184613743565b92915050565b6000608082019050613bd66000830187613743565b613be36020830186613743565b613bf06040830185613b66565b8181036060830152613c0281846137bf565b905095945050505050565b60006020820190508181036000830152613c278184613752565b905092915050565b6000602082019050613c4460008301846137b0565b92915050565b60006020820190508181036000830152613c6481846137f8565b905092915050565b60006020820190508181036000830152613c85816138e1565b9050919050565b60006020820190508181036000830152613ca581613904565b9050919050565b60006020820190508181036000830152613cc581613927565b9050919050565b60006020820190508181036000830152613ce58161394a565b9050919050565b60006020820190508181036000830152613d058161396d565b9050919050565b60006020820190508181036000830152613d2581613990565b9050919050565b60006020820190508181036000830152613d45816139b3565b9050919050565b60006020820190508181036000830152613d65816139d6565b9050919050565b60006020820190508181036000830152613d85816139f9565b9050919050565b60006020820190508181036000830152613da581613a1c565b9050919050565b60006020820190508181036000830152613dc581613a3f565b9050919050565b60006020820190508181036000830152613de581613a62565b9050919050565b60006020820190508181036000830152613e0581613a85565b9050919050565b60006020820190508181036000830152613e2581613aa8565b9050919050565b60006020820190508181036000830152613e4581613acb565b9050919050565b60006020820190508181036000830152613e6581613aee565b9050919050565b60006020820190508181036000830152613e8581613b11565b9050919050565b60006020820190508181036000830152613ea581613b34565b9050919050565b6000602082019050613ec16000830184613b66565b92915050565b6000613ed1613ee2565b9050613edd8282614208565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0757613f0661439e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3357613f3261439e565b5b613f3c826143e6565b9050602081019050919050565b600067ffffffffffffffff821115613f6457613f6361439e565b5b613f6d826143e6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140168261418a565b91506140218361418a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614056576140556142b3565b5b828201905092915050565b600061406c8261418a565b91506140778361418a565b925082614087576140866142e2565b5b828204905092915050565b600061409d8261418a565b91506140a88361418a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140e1576140e06142b3565b5b828202905092915050565b60006140f78261418a565b91506141028361418a565b925082821015614115576141146142b3565b5b828203905092915050565b600061412b8261416a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141c15780820151818401526020810190506141a6565b838111156141d0576000848401525b50505050565b600060028204905060018216806141ee57607f821691505b6020821081141561420257614201614311565b5b50919050565b614211826143e6565b810181811067ffffffffffffffff821117156142305761422f61439e565b5b80604052505050565b60006142448261418a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614277576142766142b3565b5b600182019050919050565b600061428d8261418a565b91506142988361418a565b9250826142a8576142a76142e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6148f681614120565b811461490157600080fd5b50565b61490d81614132565b811461491857600080fd5b50565b6149248161413e565b811461492f57600080fd5b50565b61493b8161418a565b811461494657600080fd5b5056fea26469706673582212208fd6b1209769a73a7b8b9703030591dce1c0853d7b049817141bdad21fce198b64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134964656e7469746965736279536b657463686100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000349445300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d57747a63437479685035485257764271724e6f4c51354878335867706f63456b7656576a41567944315871522f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): IdentitiesbySketcha
Arg [1] : _symbol (string): IDS
Arg [2] : _initBaseURI (string): ipfs://QmWtzcCtyhP5HRWvBqrNoLQ5Hx3XgpocEkvVWjAVyD1XqR/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 4964656e7469746965736279536b657463686100000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4944530000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d57747a63437479685035485257764271724e6f4c513548
Arg [9] : 78335867706f63456b7656576a41567944315871522f00000000000000000000


Deployed Bytecode Sourcemap

49965:4391:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51008:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53519:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23890:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25449:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24972:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50175:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36555:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26339:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36223:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54116:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50344:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51195:483;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26749:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52256:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53065:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53721:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36745:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53271:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50312:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23584:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53606:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50103:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23314:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20193:94;;;;;;;;;;;;;:::i;:::-;;54230:123;;;:::i;:::-;;19542:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24059:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25742:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27005:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51686:562;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50131:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52627:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53159:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50262:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53383:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50214:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26108:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53874:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20442:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51008:179;51119:4;51143:36;51167:11;51143:23;:36::i;:::-;51136:43;;51008:179;;;:::o;53519:79::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53584:6:::1;53575;;:15;;;;;;;;;;;;;;;;;;53519:79:::0;:::o;23890:100::-;23944:13;23977:5;23970:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23890:100;:::o;25449:221::-;25525:7;25553:16;25561:7;25553;:16::i;:::-;25545:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25638:15;:24;25654:7;25638:24;;;;;;;;;;;;;;;;;;;;;25631:31;;25449:221;;;:::o;24972:411::-;25053:13;25069:23;25084:7;25069:14;:23::i;:::-;25053:39;;25117:5;25111:11;;:2;:11;;;;25103:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25211:5;25195:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25220:37;25237:5;25244:12;:10;:12::i;:::-;25220:16;:37::i;:::-;25195:62;25173:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25354:21;25363:2;25367:7;25354:8;:21::i;:::-;25042:341;24972:411;;:::o;50175:32::-;;;;:::o;36555:113::-;36616:7;36643:10;:17;;;;36636:24;;36555:113;:::o;26339:339::-;26534:41;26553:12;:10;:12::i;:::-;26567:7;26534:18;:41::i;:::-;26526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26642:28;26652:4;26658:2;26662:7;26642:9;:28::i;:::-;26339:339;;;:::o;36223:256::-;36320:7;36356:23;36373:5;36356:16;:23::i;:::-;36348:5;:31;36340:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36445:12;:19;36458:5;36445:19;;;;;;;;;;;;;;;:26;36465:5;36445:26;;;;;;;;;;;;36438:33;;36223:256;;;;:::o;54116:106::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54209:5:::1;54188:11;:18;54200:5;54188:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;54116:106:::0;:::o;50344:37::-;;;;;;;;;;;;;:::o;51195:483::-;51269:14;51286:13;:11;:13::i;:::-;51269:30;;51319:6;;;;;;;;;;;51318:7;51310:16;;;;;;51359:1;51345:11;:15;51337:24;;;;;;51394:1;51380:11;:15;51372:24;;;;;;51442:9;51416:21;51425:11;51416:4;;:8;;:21;;;;:::i;:::-;51415:36;;51407:45;;;;;;51494:4;51480:11;51471:6;:20;;;;:::i;:::-;:27;51463:36;;;;;;51562:1;51547:11;51519:18;51533:3;51519:13;:18::i;:::-;:25;:39;;;;:::i;:::-;51518:45;51510:54;;;;;;51580:9;51592:1;51580:13;;51575:96;51600:11;51595:1;:16;51575:96;;51633:26;51643:3;51657:1;51648:6;:10;;;;:::i;:::-;51633:9;:26::i;:::-;51613:3;;;;;:::i;:::-;;;;51575:96;;;;51258:420;51195:483;;:::o;26749:185::-;26887:39;26904:4;26910:2;26914:7;26887:39;;;;;;;;;;;;:16;:39::i;:::-;26749:185;;;:::o;52256:363::-;52316:16;52350:23;52376:17;52386:6;52376:9;:17::i;:::-;52350:43;;52404:25;52446:15;52432:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52404:58;;52478:9;52473:113;52493:15;52489:1;:19;52473:113;;;52544:30;52564:6;52572:1;52544:19;:30::i;:::-;52530:8;52539:1;52530:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;52510:3;;;;;:::i;:::-;;;;52473:113;;;;52603:8;52596:15;;;;52256:363;;;:::o;53065:86::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53135:8:::1;53128:4;:15;;;;53065:86:::0;:::o;53721:145::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53817:4:::1;53795:26;;:11;:18;53807:5;53795:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;53787:35;;;::::0;::::1;;53854:4;53833:11;:18;53845:5;53833:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;53721:145:::0;:::o;36745:233::-;36820:7;36856:30;:28;:30::i;:::-;36848:5;:38;36840:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36953:10;36964:5;36953:17;;;;;;;;:::i;:::-;;;;;;;;;;36946:24;;36745:233;;;:::o;53271:104::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53356:11:::1;53346:7;:21;;;;;;;;;;;;:::i;:::-;;53271:104:::0;:::o;50312:25::-;;;;;;;;;;;;;:::o;23584:239::-;23656:7;23676:13;23692:7;:16;23700:7;23692:16;;;;;;;;;;;;;;;;;;;;;23676:32;;23744:1;23727:19;;:5;:19;;;;23719:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23810:5;23803:12;;;23584:239;;;:::o;53606:107::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53699:6:::1;53678:18;;:27;;;;;;;;;;;;;;;;;;53606:107:::0;:::o;50103:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23314:208::-;23386:7;23431:1;23414:19;;:5;:19;;;;23406:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23498:9;:16;23508:5;23498:16;;;;;;;;;;;;;;;;23491:23;;23314:208;;;:::o;20193:94::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20258:21:::1;20276:1;20258:9;:21::i;:::-;20193:94::o:0;54230:123::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54305:10:::1;54297:24;;:47;54322:21;54297:47;;;;;;;;;;;;;;;;;;;;;;;54289:56;;;::::0;::::1;;54230:123::o:0;19542:87::-;19588:7;19615:6;;;;;;;;;;;19608:13;;19542:87;:::o;24059:104::-;24115:13;24148:7;24141:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24059:104;:::o;25742:295::-;25857:12;:10;:12::i;:::-;25845:24;;:8;:24;;;;25837:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25957:8;25912:18;:32;25931:12;:10;:12::i;:::-;25912:32;;;;;;;;;;;;;;;:42;25945:8;25912:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26010:8;25981:48;;25996:12;:10;:12::i;:::-;25981:48;;;26020:8;25981:48;;;;;;:::i;:::-;;;;;;;;25742:295;;:::o;27005:328::-;27180:41;27199:12;:10;:12::i;:::-;27213:7;27180:18;:41::i;:::-;27172:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27286:39;27300:4;27306:2;27310:7;27319:5;27286:13;:39::i;:::-;27005:328;;;;:::o;51686:562::-;51773:14;51790:13;:11;:13::i;:::-;51773:30;;51823:18;;;;;;;;;;;51822:19;51814:28;;;;;;51881:5;51861:25;;:11;:16;51873:3;51861:16;;;;;;;;;;;;;;;;;;;;;;;;;:25;;;;51853:34;;;;;;51920:1;51906:11;:15;51898:24;;;;;;51955:1;51941:11;:15;51933:24;;;;;;52012:9;51977:30;51995:11;51977:13;;:17;;:30;;;;:::i;:::-;51976:45;;51968:54;;;;;;52064:4;52050:11;52041:6;:20;;;;:::i;:::-;:27;52033:36;;;;;;52132:1;52117:11;52089:18;52103:3;52089:13;:18::i;:::-;:25;:39;;;;:::i;:::-;52088:45;52080:54;;;;;;52150:9;52162:1;52150:13;;52145:96;52170:11;52165:1;:16;52145:96;;52203:26;52213:3;52227:1;52218:6;:10;;;;:::i;:::-;52203:9;:26::i;:::-;52183:3;;;;;:::i;:::-;;;;52145:96;;;;51762:486;51686:562;;:::o;50131:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52627:430::-;52700:13;52753:16;52761:7;52753;:16::i;:::-;52731:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;52857:28;52888:10;:8;:10::i;:::-;52857:41;;52947:1;52922:14;52916:28;:32;:133;;;;;;;;;;;;;;;;;52984:14;53000:18;:7;:16;:18::i;:::-;53020:13;52967:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52916:133;52909:140;;;52627:430;;;:::o;53159:104::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53247:8:::1;53231:13;:24;;;;53159:104:::0;:::o;50262:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;53383:128::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53486:17:::1;53470:13;:33;;;;;;;;;;;;:::i;:::-;;53383:128:::0;:::o;50214:41::-;;;;:::o;26108:164::-;26205:4;26229:18;:25;26248:5;26229:25;;;;;;;;;;;;;;;:35;26255:8;26229:35;;;;;;;;;;;;;;;;;;;;;;;;;26222:42;;26108:164;;;;:::o;53874:234::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53956:9:::1;53951:150;53971:6;:13;53967:1;:17;53951:150;;;54040:4;54014:30;;:11;:22;54026:6;54033:1;54026:9;;;;;;;;:::i;:::-;;;;;;;;54014:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;54006:39;;;::::0;::::1;;54085:4;54060:11;:22;54072:6;54079:1;54072:9;;;;;;;;:::i;:::-;;;;;;;;54060:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;53986:3;;;;;:::i;:::-;;;;53951:150;;;;53874:234:::0;:::o;20442:192::-;19773:12;:10;:12::i;:::-;19762:23;;:7;:5;:7::i;:::-;:23;;;19754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20551:1:::1;20531:22;;:8;:22;;;;20523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20607:19;20617:8;20607:9;:19::i;:::-;20442:192:::0;:::o;35915:224::-;36017:4;36056:35;36041:50;;;:11;:50;;;;:90;;;;36095:36;36119:11;36095:23;:36::i;:::-;36041:90;36034:97;;35915:224;;;:::o;18391:98::-;18444:7;18471:10;18464:17;;18391:98;:::o;28843:127::-;28908:4;28960:1;28932:30;;:7;:16;28940:7;28932:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28925:37;;28843:127;;;:::o;32825:174::-;32927:2;32900:15;:24;32916:7;32900:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32983:7;32979:2;32945:46;;32954:23;32969:7;32954:14;:23::i;:::-;32945:46;;;;;;;;;;;;32825:174;;:::o;29137:348::-;29230:4;29255:16;29263:7;29255;:16::i;:::-;29247:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29331:13;29347:23;29362:7;29347:14;:23::i;:::-;29331:39;;29400:5;29389:16;;:7;:16;;;:51;;;;29433:7;29409:31;;:20;29421:7;29409:11;:20::i;:::-;:31;;;29389:51;:87;;;;29444:32;29461:5;29468:7;29444:16;:32::i;:::-;29389:87;29381:96;;;29137:348;;;;:::o;32129:578::-;32288:4;32261:31;;:23;32276:7;32261:14;:23::i;:::-;:31;;;32253:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:1;32357:16;;:2;:16;;;;32349:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32427:39;32448:4;32454:2;32458:7;32427:20;:39::i;:::-;32531:29;32548:1;32552:7;32531:8;:29::i;:::-;32592:1;32573:9;:15;32583:4;32573:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32621:1;32604:9;:13;32614:2;32604:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32652:2;32633:7;:16;32641:7;32633:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32691:7;32687:2;32672:27;;32681:4;32672:27;;;;;;;;;;;;32129:578;;;:::o;45427:98::-;45485:7;45516:1;45512;:5;;;;:::i;:::-;45505:12;;45427:98;;;;:::o;29827:110::-;29903:26;29913:2;29917:7;29903:26;;;;;;;;;;;;:9;:26::i;:::-;29827:110;;:::o;20642:173::-;20698:16;20717:6;;;;;;;;;;;20698:25;;20743:8;20734:6;;:17;;;;;;;;;;;;;;;;;;20798:8;20767:40;;20788:8;20767:40;;;;;;;;;;;;20687:128;20642:173;:::o;28215:315::-;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28419:48;28442:4;28448:2;28452:7;28461:5;28419:22;:48::i;:::-;28411:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28215:315;;;;:::o;50599:108::-;50659:13;50692:7;50685:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50599:108;:::o;8240:723::-;8296:13;8526:1;8517:5;:10;8513:53;;;8544:10;;;;;;;;;;;;;;;;;;;;;8513:53;8576:12;8591:5;8576:20;;8607:14;8632:78;8647:1;8639:4;:9;8632:78;;8665:8;;;;;:::i;:::-;;;;8696:2;8688:10;;;;;:::i;:::-;;;8632:78;;;8720:19;8752:6;8742:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8720:39;;8770:154;8786:1;8777:5;:10;8770:154;;8814:1;8804:11;;;;;:::i;:::-;;;8881:2;8873:5;:10;;;;:::i;:::-;8860:2;:24;;;;:::i;:::-;8847:39;;8830:6;8837;8830:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8910:2;8901:11;;;;;:::i;:::-;;;8770:154;;;8948:6;8934:21;;;;;8240:723;;;;:::o;22965:285::-;23067:4;23115:25;23100:40;;;:11;:40;;;;:97;;;;23164:33;23149:48;;;:11;:48;;;;23100:97;:142;;;;23206:36;23230:11;23206:23;:36::i;:::-;23100:142;23084:158;;22965:285;;;:::o;50715:::-;50847:18;;;;;;;;;;;50846:19;:29;;;;;50869:6;;;;;;;;;;;50846:29;50843:94;;;50919:5;50900:24;;:11;:15;50912:2;50900:15;;;;;;;;;;;;;;;;;;;;;;;;;:24;;;;50892:33;;;;;;50843:94;50947:45;50974:4;50980:2;50984:7;50947:26;:45::i;:::-;50715:285;;;:::o;30164:321::-;30294:18;30300:2;30304:7;30294:5;:18::i;:::-;30345:54;30376:1;30380:2;30384:7;30393:5;30345:22;:54::i;:::-;30323:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30164:321;;;:::o;33564:803::-;33719:4;33740:15;:2;:13;;;:15::i;:::-;33736:624;;;33792:2;33776:36;;;33813:12;:10;:12::i;:::-;33827:4;33833:7;33842:5;33776:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33772:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34039:1;34022:6;:13;:18;34018:272;;;34065:60;;;;;;;;;;:::i;:::-;;;;;;;;34018:272;34240:6;34234:13;34225:6;34221:2;34217:15;34210:38;33772:533;33909:45;;;33899:55;;;:6;:55;;;;33892:62;;;;;33736:624;34344:4;34337:11;;33564:803;;;;;;;:::o;21547:157::-;21632:4;21671:25;21656:40;;;:11;:40;;;;21649:47;;21547:157;;;:::o;37591:589::-;37735:45;37762:4;37768:2;37772:7;37735:26;:45::i;:::-;37813:1;37797:18;;:4;:18;;;37793:187;;;37832:40;37864:7;37832:31;:40::i;:::-;37793:187;;;37902:2;37894:10;;:4;:10;;;37890:90;;37921:47;37954:4;37960:7;37921:32;:47::i;:::-;37890:90;37793:187;38008:1;37994:16;;:2;:16;;;37990:183;;;38027:45;38064:7;38027:36;:45::i;:::-;37990:183;;;38100:4;38094:10;;:2;:10;;;38090:83;;38121:40;38149:2;38153:7;38121:27;:40::i;:::-;38090:83;37990:183;37591:589;;;:::o;30821:382::-;30915:1;30901:16;;:2;:16;;;;30893:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30974:16;30982:7;30974;:16::i;:::-;30973:17;30965:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31036:45;31065:1;31069:2;31073:7;31036:20;:45::i;:::-;31111:1;31094:9;:13;31104:2;31094:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31142:2;31123:7;:16;31131:7;31123:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31187:7;31183:2;31162:33;;31179:1;31162:33;;;;;;;;;;;;30821:382;;:::o;10709:387::-;10769:4;10977:12;11044:7;11032:20;11024:28;;11087:1;11080:4;:8;11073:15;;;10709:387;;;:::o;34939:126::-;;;;:::o;38903:164::-;39007:10;:17;;;;38980:15;:24;38996:7;38980:24;;;;;;;;;;;:44;;;;39035:10;39051:7;39035:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38903:164;:::o;39694:988::-;39960:22;40010:1;39985:22;40002:4;39985:16;:22::i;:::-;:26;;;;:::i;:::-;39960:51;;40022:18;40043:17;:26;40061:7;40043:26;;;;;;;;;;;;40022:47;;40190:14;40176:10;:28;40172:328;;40221:19;40243:12;:18;40256:4;40243:18;;;;;;;;;;;;;;;:34;40262:14;40243:34;;;;;;;;;;;;40221:56;;40327:11;40294:12;:18;40307:4;40294:18;;;;;;;;;;;;;;;:30;40313:10;40294:30;;;;;;;;;;;:44;;;;40444:10;40411:17;:30;40429:11;40411:30;;;;;;;;;;;:43;;;;40206:294;40172:328;40596:17;:26;40614:7;40596:26;;;;;;;;;;;40589:33;;;40640:12;:18;40653:4;40640:18;;;;;;;;;;;;;;;:34;40659:14;40640:34;;;;;;;;;;;40633:41;;;39775:907;;39694:988;;:::o;40977:1079::-;41230:22;41275:1;41255:10;:17;;;;:21;;;;:::i;:::-;41230:46;;41287:18;41308:15;:24;41324:7;41308:24;;;;;;;;;;;;41287:45;;41659:19;41681:10;41692:14;41681:26;;;;;;;;:::i;:::-;;;;;;;;;;41659:48;;41745:11;41720:10;41731;41720:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41856:10;41825:15;:28;41841:11;41825:28;;;;;;;;;;;:41;;;;41997:15;:24;42013:7;41997:24;;;;;;;;;;;41990:31;;;42032:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41048:1008;;;40977:1079;:::o;38481:221::-;38566:14;38583:20;38600:2;38583:16;:20::i;:::-;38566:37;;38641:7;38614:12;:16;38627:2;38614:16;;;;;;;;;;;;;;;:24;38631:6;38614:24;;;;;;;;;;;:34;;;;38688:6;38659:17;:26;38677:7;38659:26;;;;;;;;;;;:35;;;;38555:147;38481:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:118::-;9442:24;9460:5;9442:24;:::i;:::-;9437:3;9430:37;9355:118;;:::o;9509:732::-;9628:3;9657:54;9705:5;9657:54;:::i;:::-;9727:86;9806:6;9801:3;9727:86;:::i;:::-;9720:93;;9837:56;9887:5;9837:56;:::i;:::-;9916:7;9947:1;9932:284;9957:6;9954:1;9951:13;9932:284;;;10033:6;10027:13;10060:63;10119:3;10104:13;10060:63;:::i;:::-;10053:70;;10146:60;10199:6;10146:60;:::i;:::-;10136:70;;9992:224;9979:1;9976;9972:9;9967:14;;9932:284;;;9936:14;10232:3;10225:10;;9633:608;;;9509:732;;;;:::o;10247:109::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10247:109;;:::o;10362:360::-;10448:3;10476:38;10508:5;10476:38;:::i;:::-;10530:70;10593:6;10588:3;10530:70;:::i;:::-;10523:77;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10452:270;10362:360;;;;:::o;10728:364::-;10816:3;10844:39;10877:5;10844:39;:::i;:::-;10899:71;10963:6;10958:3;10899:71;:::i;:::-;10892:78;;10979:52;11024:6;11019:3;11012:4;11005:5;11001:16;10979:52;:::i;:::-;11056:29;11078:6;11056:29;:::i;:::-;11051:3;11047:39;11040:46;;10820:272;10728:364;;;;:::o;11098:377::-;11204:3;11232:39;11265:5;11232:39;:::i;:::-;11287:89;11369:6;11364:3;11287:89;:::i;:::-;11280:96;;11385:52;11430:6;11425:3;11418:4;11411:5;11407:16;11385:52;:::i;:::-;11462:6;11457:3;11453:16;11446:23;;11208:267;11098:377;;;;:::o;11505:845::-;11608:3;11645:5;11639:12;11674:36;11700:9;11674:36;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11846:1;11835:9;11831:17;11862:1;11857:137;;;;12008:1;12003:341;;;;11824:520;;11857:137;11941:4;11937:9;11926;11922:25;11917:3;11910:38;11977:6;11972:3;11968:16;11961:23;;11857:137;;12003:341;12070:38;12102:5;12070:38;:::i;:::-;12130:1;12144:154;12158:6;12155:1;12152:13;12144:154;;;12232:7;12226:14;12222:1;12217:3;12213:11;12206:35;12282:1;12273:7;12269:15;12258:26;;12180:4;12177:1;12173:12;12168:17;;12144:154;;;12327:6;12322:3;12318:16;12311:23;;12010:334;;11824:520;;11612:738;;11505:845;;;;:::o;12356:366::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:108::-;19129:24;19147:5;19129:24;:::i;:::-;19124:3;19117:37;19052:108;;:::o;19166:118::-;19253:24;19271:5;19253:24;:::i;:::-;19248:3;19241:37;19166:118;;:::o;19290:589::-;19515:3;19537:95;19628:3;19619:6;19537:95;:::i;:::-;19530:102;;19649:95;19740:3;19731:6;19649:95;:::i;:::-;19642:102;;19761:92;19849:3;19840:6;19761:92;:::i;:::-;19754:99;;19870:3;19863:10;;19290:589;;;;;;:::o;19885:222::-;19978:4;20016:2;20005:9;20001:18;19993:26;;20029:71;20097:1;20086:9;20082:17;20073:6;20029:71;:::i;:::-;19885:222;;;;:::o;20113:640::-;20308:4;20346:3;20335:9;20331:19;20323:27;;20360:71;20428:1;20417:9;20413:17;20404:6;20360:71;:::i;:::-;20441:72;20509:2;20498:9;20494:18;20485:6;20441:72;:::i;:::-;20523;20591:2;20580:9;20576:18;20567:6;20523:72;:::i;:::-;20642:9;20636:4;20632:20;20627:2;20616:9;20612:18;20605:48;20670:76;20741:4;20732:6;20670:76;:::i;:::-;20662:84;;20113:640;;;;;;;:::o;20759:373::-;20902:4;20940:2;20929:9;20925:18;20917:26;;20989:9;20983:4;20979:20;20975:1;20964:9;20960:17;20953:47;21017:108;21120:4;21111:6;21017:108;:::i;:::-;21009:116;;20759:373;;;;:::o;21138:210::-;21225:4;21263:2;21252:9;21248:18;21240:26;;21276:65;21338:1;21327:9;21323:17;21314:6;21276:65;:::i;:::-;21138:210;;;;:::o;21354:313::-;21467:4;21505:2;21494:9;21490:18;21482:26;;21554:9;21548:4;21544:20;21540:1;21529:9;21525:17;21518:47;21582:78;21655:4;21646:6;21582:78;:::i;:::-;21574:86;;21354:313;;;;:::o;21673:419::-;21839:4;21877:2;21866:9;21862:18;21854:26;;21926:9;21920:4;21916:20;21912:1;21901:9;21897:17;21890:47;21954:131;22080:4;21954:131;:::i;:::-;21946:139;;21673:419;;;:::o;22098:::-;22264:4;22302:2;22291:9;22287:18;22279:26;;22351:9;22345:4;22341:20;22337:1;22326:9;22322:17;22315:47;22379:131;22505:4;22379:131;:::i;:::-;22371:139;;22098:419;;;:::o;22523:::-;22689:4;22727:2;22716:9;22712:18;22704:26;;22776:9;22770:4;22766:20;22762:1;22751:9;22747:17;22740:47;22804:131;22930:4;22804:131;:::i;:::-;22796:139;;22523:419;;;:::o;22948:::-;23114:4;23152:2;23141:9;23137:18;23129:26;;23201:9;23195:4;23191:20;23187:1;23176:9;23172:17;23165:47;23229:131;23355:4;23229:131;:::i;:::-;23221:139;;22948:419;;;:::o;23373:::-;23539:4;23577:2;23566:9;23562:18;23554:26;;23626:9;23620:4;23616:20;23612:1;23601:9;23597:17;23590:47;23654:131;23780:4;23654:131;:::i;:::-;23646:139;;23373:419;;;:::o;23798:::-;23964:4;24002:2;23991:9;23987:18;23979:26;;24051:9;24045:4;24041:20;24037:1;24026:9;24022:17;24015:47;24079:131;24205:4;24079:131;:::i;:::-;24071:139;;23798:419;;;:::o;24223:::-;24389:4;24427:2;24416:9;24412:18;24404:26;;24476:9;24470:4;24466:20;24462:1;24451:9;24447:17;24440:47;24504:131;24630:4;24504:131;:::i;:::-;24496:139;;24223:419;;;:::o;24648:::-;24814:4;24852:2;24841:9;24837:18;24829:26;;24901:9;24895:4;24891:20;24887:1;24876:9;24872:17;24865:47;24929:131;25055:4;24929:131;:::i;:::-;24921:139;;24648:419;;;:::o;25073:::-;25239:4;25277:2;25266:9;25262:18;25254:26;;25326:9;25320:4;25316:20;25312:1;25301:9;25297:17;25290:47;25354:131;25480:4;25354:131;:::i;:::-;25346:139;;25073:419;;;:::o;25498:::-;25664:4;25702:2;25691:9;25687:18;25679:26;;25751:9;25745:4;25741:20;25737:1;25726:9;25722:17;25715:47;25779:131;25905:4;25779:131;:::i;:::-;25771:139;;25498:419;;;:::o;25923:::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26176:9;26170:4;26166:20;26162:1;26151:9;26147:17;26140:47;26204:131;26330:4;26204:131;:::i;:::-;26196:139;;25923:419;;;:::o;26348:::-;26514:4;26552:2;26541:9;26537:18;26529:26;;26601:9;26595:4;26591:20;26587:1;26576:9;26572:17;26565:47;26629:131;26755:4;26629:131;:::i;:::-;26621:139;;26348:419;;;:::o;26773:::-;26939:4;26977:2;26966:9;26962:18;26954:26;;27026:9;27020:4;27016:20;27012:1;27001:9;26997:17;26990:47;27054:131;27180:4;27054:131;:::i;:::-;27046:139;;26773:419;;;:::o;27198:::-;27364:4;27402:2;27391:9;27387:18;27379:26;;27451:9;27445:4;27441:20;27437:1;27426:9;27422:17;27415:47;27479:131;27605:4;27479:131;:::i;:::-;27471:139;;27198:419;;;:::o;27623:::-;27789:4;27827:2;27816:9;27812:18;27804:26;;27876:9;27870:4;27866:20;27862:1;27851:9;27847:17;27840:47;27904:131;28030:4;27904:131;:::i;:::-;27896:139;;27623:419;;;:::o;28048:::-;28214:4;28252:2;28241:9;28237:18;28229:26;;28301:9;28295:4;28291:20;28287:1;28276:9;28272:17;28265:47;28329:131;28455:4;28329:131;:::i;:::-;28321:139;;28048:419;;;:::o;28473:::-;28639:4;28677:2;28666:9;28662:18;28654:26;;28726:9;28720:4;28716:20;28712:1;28701:9;28697:17;28690:47;28754:131;28880:4;28754:131;:::i;:::-;28746:139;;28473:419;;;:::o;28898:::-;29064:4;29102:2;29091:9;29087:18;29079:26;;29151:9;29145:4;29141:20;29137:1;29126:9;29122:17;29115:47;29179:131;29305:4;29179:131;:::i;:::-;29171:139;;28898:419;;;:::o;29323:222::-;29416:4;29454:2;29443:9;29439:18;29431:26;;29467:71;29535:1;29524:9;29520:17;29511:6;29467:71;:::i;:::-;29323:222;;;;:::o;29551:129::-;29585:6;29612:20;;:::i;:::-;29602:30;;29641:33;29669:4;29661:6;29641:33;:::i;:::-;29551:129;;;:::o;29686:75::-;29719:6;29752:2;29746:9;29736:19;;29686:75;:::o;29767:311::-;29844:4;29934:18;29926:6;29923:30;29920:56;;;29956:18;;:::i;:::-;29920:56;30006:4;29998:6;29994:17;29986:25;;30066:4;30060;30056:15;30048:23;;29767:311;;;:::o;30084:307::-;30145:4;30235:18;30227:6;30224:30;30221:56;;;30257:18;;:::i;:::-;30221:56;30295:29;30317:6;30295:29;:::i;:::-;30287:37;;30379:4;30373;30369:15;30361:23;;30084:307;;;:::o;30397:308::-;30459:4;30549:18;30541:6;30538:30;30535:56;;;30571:18;;:::i;:::-;30535:56;30609:29;30631:6;30609:29;:::i;:::-;30601:37;;30693:4;30687;30683:15;30675:23;;30397:308;;;:::o;30711:132::-;30778:4;30801:3;30793:11;;30831:4;30826:3;30822:14;30814:22;;30711:132;;;:::o;30849:141::-;30898:4;30921:3;30913:11;;30944:3;30941:1;30934:14;30978:4;30975:1;30965:18;30957:26;;30849:141;;;:::o;30996:114::-;31063:6;31097:5;31091:12;31081:22;;30996:114;;;:::o;31116:98::-;31167:6;31201:5;31195:12;31185:22;;31116:98;;;:::o;31220:99::-;31272:6;31306:5;31300:12;31290:22;;31220:99;;;:::o;31325:113::-;31395:4;31427;31422:3;31418:14;31410:22;;31325:113;;;:::o;31444:184::-;31543:11;31577:6;31572:3;31565:19;31617:4;31612:3;31608:14;31593:29;;31444:184;;;;:::o;31634:168::-;31717:11;31751:6;31746:3;31739:19;31791:4;31786:3;31782:14;31767:29;;31634:168;;;;:::o;31808:169::-;31892:11;31926:6;31921:3;31914:19;31966:4;31961:3;31957:14;31942:29;;31808:169;;;;:::o;31983:148::-;32085:11;32122:3;32107:18;;31983:148;;;;:::o;32137:305::-;32177:3;32196:20;32214:1;32196:20;:::i;:::-;32191:25;;32230:20;32248:1;32230:20;:::i;:::-;32225:25;;32384:1;32316:66;32312:74;32309:1;32306:81;32303:107;;;32390:18;;:::i;:::-;32303:107;32434:1;32431;32427:9;32420:16;;32137:305;;;;:::o;32448:185::-;32488:1;32505:20;32523:1;32505:20;:::i;:::-;32500:25;;32539:20;32557:1;32539:20;:::i;:::-;32534:25;;32578:1;32568:35;;32583:18;;:::i;:::-;32568:35;32625:1;32622;32618:9;32613:14;;32448:185;;;;:::o;32639:348::-;32679:7;32702:20;32720:1;32702:20;:::i;:::-;32697:25;;32736:20;32754:1;32736:20;:::i;:::-;32731:25;;32924:1;32856:66;32852:74;32849:1;32846:81;32841:1;32834:9;32827:17;32823:105;32820:131;;;32931:18;;:::i;:::-;32820:131;32979:1;32976;32972:9;32961:20;;32639:348;;;;:::o;32993:191::-;33033:4;33053:20;33071:1;33053:20;:::i;:::-;33048:25;;33087:20;33105:1;33087:20;:::i;:::-;33082:25;;33126:1;33123;33120:8;33117:34;;;33131:18;;:::i;:::-;33117:34;33176:1;33173;33169:9;33161:17;;32993:191;;;;:::o;33190:96::-;33227:7;33256:24;33274:5;33256:24;:::i;:::-;33245:35;;33190:96;;;:::o;33292:90::-;33326:7;33369:5;33362:13;33355:21;33344:32;;33292:90;;;:::o;33388:149::-;33424:7;33464:66;33457:5;33453:78;33442:89;;33388:149;;;:::o;33543:126::-;33580:7;33620:42;33613:5;33609:54;33598:65;;33543:126;;;:::o;33675:77::-;33712:7;33741:5;33730:16;;33675:77;;;:::o;33758:154::-;33842:6;33837:3;33832;33819:30;33904:1;33895:6;33890:3;33886:16;33879:27;33758:154;;;:::o;33918:307::-;33986:1;33996:113;34010:6;34007:1;34004:13;33996:113;;;34095:1;34090:3;34086:11;34080:18;34076:1;34071:3;34067:11;34060:39;34032:2;34029:1;34025:10;34020:15;;33996:113;;;34127:6;34124:1;34121:13;34118:101;;;34207:1;34198:6;34193:3;34189:16;34182:27;34118:101;33967:258;33918:307;;;:::o;34231:320::-;34275:6;34312:1;34306:4;34302:12;34292:22;;34359:1;34353:4;34349:12;34380:18;34370:81;;34436:4;34428:6;34424:17;34414:27;;34370:81;34498:2;34490:6;34487:14;34467:18;34464:38;34461:84;;;34517:18;;:::i;:::-;34461:84;34282:269;34231:320;;;:::o;34557:281::-;34640:27;34662:4;34640:27;:::i;:::-;34632:6;34628:40;34770:6;34758:10;34755:22;34734:18;34722:10;34719:34;34716:62;34713:88;;;34781:18;;:::i;:::-;34713:88;34821:10;34817:2;34810:22;34600:238;34557:281;;:::o;34844:233::-;34883:3;34906:24;34924:5;34906:24;:::i;:::-;34897:33;;34952:66;34945:5;34942:77;34939:103;;;35022:18;;:::i;:::-;34939:103;35069:1;35062:5;35058:13;35051:20;;34844:233;;;:::o;35083:176::-;35115:1;35132:20;35150:1;35132:20;:::i;:::-;35127:25;;35166:20;35184:1;35166:20;:::i;:::-;35161:25;;35205:1;35195:35;;35210:18;;:::i;:::-;35195:35;35251:1;35248;35244:9;35239:14;;35083:176;;;;:::o;35265:180::-;35313:77;35310:1;35303:88;35410:4;35407:1;35400:15;35434:4;35431:1;35424:15;35451:180;35499:77;35496:1;35489:88;35596:4;35593:1;35586:15;35620:4;35617:1;35610:15;35637:180;35685:77;35682:1;35675:88;35782:4;35779:1;35772:15;35806:4;35803:1;35796:15;35823:180;35871:77;35868:1;35861:88;35968:4;35965:1;35958:15;35992:4;35989:1;35982:15;36009:180;36057:77;36054:1;36047:88;36154:4;36151:1;36144:15;36178:4;36175:1;36168:15;36195:180;36243:77;36240:1;36233:88;36340:4;36337:1;36330:15;36364:4;36361:1;36354:15;36381:117;36490:1;36487;36480:12;36504:117;36613:1;36610;36603:12;36627:117;36736:1;36733;36726:12;36750:117;36859:1;36856;36849:12;36873:117;36982:1;36979;36972:12;36996:102;37037:6;37088:2;37084:7;37079:2;37072:5;37068:14;37064:28;37054:38;;36996:102;;;:::o;37104:230::-;37244:34;37240:1;37232:6;37228:14;37221:58;37313:13;37308:2;37300:6;37296:15;37289:38;37104:230;:::o;37340:237::-;37480:34;37476:1;37468:6;37464:14;37457:58;37549:20;37544:2;37536:6;37532:15;37525:45;37340:237;:::o;37583:225::-;37723:34;37719:1;37711:6;37707:14;37700:58;37792:8;37787:2;37779:6;37775:15;37768:33;37583:225;:::o;37814:178::-;37954:30;37950:1;37942:6;37938:14;37931:54;37814:178;:::o;37998:223::-;38138:34;38134:1;38126:6;38122:14;38115:58;38207:6;38202:2;38194:6;38190:15;38183:31;37998:223;:::o;38227:175::-;38367:27;38363:1;38355:6;38351:14;38344:51;38227:175;:::o;38408:231::-;38548:34;38544:1;38536:6;38532:14;38525:58;38617:14;38612:2;38604:6;38600:15;38593:39;38408:231;:::o;38645:243::-;38785:34;38781:1;38773:6;38769:14;38762:58;38854:26;38849:2;38841:6;38837:15;38830:51;38645:243;:::o;38894:229::-;39034:34;39030:1;39022:6;39018:14;39011:58;39103:12;39098:2;39090:6;39086:15;39079:37;38894:229;:::o;39129:228::-;39269:34;39265:1;39257:6;39253:14;39246:58;39338:11;39333:2;39325:6;39321:15;39314:36;39129:228;:::o;39363:182::-;39503:34;39499:1;39491:6;39487:14;39480:58;39363:182;:::o;39551:231::-;39691:34;39687:1;39679:6;39675:14;39668:58;39760:14;39755:2;39747:6;39743:15;39736:39;39551:231;:::o;39788:182::-;39928:34;39924:1;39916:6;39912:14;39905:58;39788:182;:::o;39976:228::-;40116:34;40112:1;40104:6;40100:14;40093:58;40185:11;40180:2;40172:6;40168:15;40161:36;39976:228;:::o;40210:234::-;40350:34;40346:1;40338:6;40334:14;40327:58;40419:17;40414:2;40406:6;40402:15;40395:42;40210:234;:::o;40450:220::-;40590:34;40586:1;40578:6;40574:14;40567:58;40659:3;40654:2;40646:6;40642:15;40635:28;40450:220;:::o;40676:236::-;40816:34;40812:1;40804:6;40800:14;40793:58;40885:19;40880:2;40872:6;40868:15;40861:44;40676:236;:::o;40918:231::-;41058:34;41054:1;41046:6;41042:14;41035:58;41127:14;41122:2;41114:6;41110:15;41103:39;40918:231;:::o;41155:122::-;41228:24;41246:5;41228:24;:::i;:::-;41221:5;41218:35;41208:63;;41267:1;41264;41257:12;41208:63;41155:122;:::o;41283:116::-;41353:21;41368:5;41353:21;:::i;:::-;41346:5;41343:32;41333:60;;41389:1;41386;41379:12;41333:60;41283:116;:::o;41405:120::-;41477:23;41494:5;41477:23;:::i;:::-;41470:5;41467:34;41457:62;;41515:1;41512;41505:12;41457:62;41405:120;:::o;41531:122::-;41604:24;41622:5;41604:24;:::i;:::-;41597:5;41594:35;41584:63;;41643:1;41640;41633:12;41584:63;41531:122;:::o

Swarm Source

ipfs://8fd6b1209769a73a7b8b9703030591dce1c0853d7b049817141bdad21fce198b
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.