ETH Price: $2,907.71 (+2.98%)
 

Overview

Max Total Supply

3,411 MKZ

Holders

1,308

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 MKZ
0xb426e8c9cce5d2e1c86b83b13cc4526c725bb726
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:
Mekazuki

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

//███╗░░░███╗███████╗██╗░░██╗░█████╗░███████╗██╗░░░██╗██╗░░██╗██╗
//████╗░████║██╔════╝██║░██╔╝██╔══██╗╚════██║██║░░░██║██║░██╔╝██║
//██╔████╔██║█████╗░░█████═╝░███████║░░███╔═╝██║░░░██║█████═╝░██║
//██║╚██╔╝██║██╔══╝░░██╔═██╗░██╔══██║██╔══╝░░██║░░░██║██╔═██╗░██║
//██║░╚═╝░██║███████╗██║░╚██╗██║░░██║███████╗╚██████╔╝██║░╚██╗██║
//╚═╝░░░░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝╚══════╝░╚═════╝░╚═╝░░╚═╝╚═╝


// Sources flattened with hardhat v2.8.0 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


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

pragma solidity ^0.8.0;

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


// File contracts/ERC721A.sol


// Creators: locationtba.eth, 2pmflow.eth

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

  // Mapping from token ID to ownership details
  // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
  mapping(uint256 => TokenOwnership) private _ownerships;

  // Mapping owner address to address data
  mapping(address => AddressData) private _addressData;

  // 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
   * `maxBatchSize` refers to how much a minter can mint at a time.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_
  ) {
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

  /**
   * @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 ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }

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

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  }

  /**
   * @dev See {IERC721-ownerOf}.
   */
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }

  /**
   * @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 override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: 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 override {
    _transfer(from, to, tokenId);
  }

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

  /**
   * @dev See {IERC721-safeTransferFrom}.
   */
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: 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`),
   */
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

  /**
   * @dev Transfers `tokenId` from `from` to `to`.
   *
   * 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
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(prevOwnership.addr == from,"ERC721A: transfer from incorrect owner");
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > currentIndex - 1) {
      endIndex = currentIndex - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

  /**
   * @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("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }

  /**
   * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * 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`.
   */
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}

  /**
   * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
   * minting.
   *
   * startTokenId - the first token id to be transferred
   * quantity - the amount to be transferred
   *
   * Calling conditions:
   *
   * - when `from` and `to` are both non-zero.
   * - `from` and `to` are never both zero.
   */
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}


// File @openzeppelin/contracts/access/[email protected]


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/cryptography/[email protected]


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify( bytes32[] memory proof,bytes32 root, bytes32 leaf) internal pure returns (bool) 
    {
        return processProof(proof, leaf) == root;
    }

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



pragma solidity ^0.8.2;

contract Mekazuki is Ownable, ERC721A {
    string private _baseTokenURI;
    uint256 public publicTime;
    uint256 public freeSupply = 666;
    uint256 public supply = 10000;
    uint256 public price = 0.030 ether;

    uint256 public maxFreeMint = 1;
    uint256 public maxPublicMint = 20;
    uint256 public maxMintPerAccount = 20;
    uint256 public minted = 0;

    mapping (address => uint256) public listAddress;

    constructor(
        uint256 _publicTime
    ) ERC721A("MEKAZUKI", "MKZ", supply) {
				publicTime = _publicTime;
    }

    event Created(address indexed to, uint256 amount);

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

    function setBaseURI(string calldata baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function setMintTime(uint256 _publicTIme) public onlyOwner {
        publicTime = _publicTIme;
    }

    function mint(uint256 amount) payable public {
        require(publicTime > 0 && block.timestamp > publicTime, "Invalid mint time");
        if (minted < freeSupply) 
        {
          require(minted + amount <= freeSupply, "Free Mint Closed");
          require(listAddress[msg.sender] + amount <= maxFreeMint,"Limit");
        }
        else 
        {
          require(amount <= maxMintPerAccount,"Max 20 Amount");
          require(minted + amount <= supply, "Sold Out");
          require(listAddress[msg.sender] + amount <= maxMintPerAccount,"Limit");
          require(msg.value >= price * amount, "Out of ETH");
        }
        minted += amount;
        listAddress[msg.sender] += amount;
         _safeMint(msg.sender, amount);
    }
    
    function devMint( address to,uint256 numToMint) payable public onlyOwner {
        _safeMint(to, numToMint);
    }
		
    function withdraw() public onlyOwner {
        payable(msg.sender).transfer(payable(address(this)).balance);
    }

    function setOwnersExplicit(uint256 quantity) public onlyOwner {
        _setOwnersExplicit(quantity);
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_publicTime","type":"uint256"}],"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Created","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numToMint","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeSupply","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":"","type":"address"}],"name":"listAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicTIme","type":"uint256"}],"name":"setMintTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040526000600155600060085561029a600b55612710600c55666a94d74f430000600d556001600e556014600f55601460105560006011553480156200004657600080fd5b50604051620050c5380380620050c583398181016040528101906200006c91906200031f565b6040518060400160405280600881526020017f4d454b415a554b490000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4b5a0000000000000000000000000000000000000000000000000000000000815250600c54620000fb620000ef6200018c60201b60201c565b6200019460201b60201c565b6000811162000141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001389062000378565b60405180910390fd5b82600290805190602001906200015992919062000258565b5081600390805190602001906200017292919062000258565b50806080818152505050505080600a819055505062000488565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200026690620003b5565b90600052602060002090601f0160209004810192826200028a5760008555620002d6565b82601f10620002a557805160ff1916838001178555620002d6565b82800160010185558215620002d6579182015b82811115620002d5578251825591602001919060010190620002b8565b5b509050620002e59190620002e9565b5090565b5b8082111562000304576000816000905550600101620002ea565b5090565b60008151905062000319816200046e565b92915050565b6000602082840312156200033857620003376200041a565b5b6000620003488482850162000308565b91505092915050565b6000620003606027836200039a565b91506200036d826200041f565b604082019050919050565b60006020820190508181036000830152620003938162000351565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620003ce57607f821691505b60208210811415620003e557620003e4620003eb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6200047981620003ab565b81146200048557600080fd5b50565b608051614c13620004b26000396000818161251d015281816125460152612cd10152614c136000f3fe60806040526004361061020f5760003560e01c80636352211e11610118578063b88d4fde116100a0578063dc33e6811161006f578063dc33e68114610773578063dda52d53146107b0578063e985e9c5146107d9578063edb0239814610816578063f2fde38b146108535761020f565b8063b88d4fde146106b7578063c87b56dd146106e0578063cabadaa01461071d578063d7224ba0146107485761020f565b806395d89b41116100e757806395d89b41146105f1578063a035b1fe1461061c578063a0712d6814610647578063a22cb46514610663578063a591252d1461068c5761020f565b80636352211e1461053557806370a0823114610572578063715018a6146105af5780638da5cb5b146105c65761020f565b80632d20fb601161019b57806342842e0e1161016a57806342842e0e1461045f5780634f02c420146104885780634f6ccce7146104b357806355f804b3146104f0578063627804af146105195761020f565b80632d20fb60146103b75780632f745c59146103e05780633a1c58341461041d5780633ccfd60b146104485761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806318160ddd1461030d5780631bdc608e1461033857806323b872dd1461036357806324a6ab0c1461038c5761020f565b806301ffc9a714610214578063047fc9aa1461025157806306fdde031461027c578063081812fc146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906134d1565b61087c565b6040516102489190613af7565b60405180910390f35b34801561025d57600080fd5b506102666109c6565b6040516102739190613ed4565b60405180910390f35b34801561028857600080fd5b506102916109cc565b60405161029e9190613b12565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190613578565b610a5e565b6040516102db9190613a90565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190613491565b610ae3565b005b34801561031957600080fd5b50610322610bfc565b60405161032f9190613ed4565b60405180910390f35b34801561034457600080fd5b5061034d610c06565b60405161035a9190613ed4565b60405180910390f35b34801561036f57600080fd5b5061038a6004803603810190610385919061337b565b610c0c565b005b34801561039857600080fd5b506103a1610c1c565b6040516103ae9190613ed4565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613578565b610c22565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613491565b610caa565b6040516104149190613ed4565b60405180910390f35b34801561042957600080fd5b50610432610ea8565b60405161043f9190613ed4565b60405180910390f35b34801561045457600080fd5b5061045d610eae565b005b34801561046b57600080fd5b506104866004803603810190610481919061337b565b610f8a565b005b34801561049457600080fd5b5061049d610faa565b6040516104aa9190613ed4565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613578565b610fb0565b6040516104e79190613ed4565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061352b565b611003565b005b610533600480360381019061052e9190613491565b611095565b005b34801561054157600080fd5b5061055c60048036038101906105579190613578565b61111f565b6040516105699190613a90565b60405180910390f35b34801561057e57600080fd5b506105996004803603810190610594919061330e565b611135565b6040516105a69190613ed4565b60405180910390f35b3480156105bb57600080fd5b506105c461121e565b005b3480156105d257600080fd5b506105db6112a6565b6040516105e89190613a90565b60405180910390f35b3480156105fd57600080fd5b506106066112cf565b6040516106139190613b12565b60405180910390f35b34801561062857600080fd5b50610631611361565b60405161063e9190613ed4565b60405180910390f35b610661600480360381019061065c9190613578565b611367565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613451565b61169e565b005b34801561069857600080fd5b506106a161181f565b6040516106ae9190613ed4565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906133ce565b611825565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613578565b611881565b6040516107149190613b12565b60405180910390f35b34801561072957600080fd5b50610732611928565b60405161073f9190613ed4565b60405180910390f35b34801561075457600080fd5b5061075d61192e565b60405161076a9190613ed4565b60405180910390f35b34801561077f57600080fd5b5061079a6004803603810190610795919061330e565b611934565b6040516107a79190613ed4565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613578565b611946565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061333b565b6119cc565b60405161080d9190613af7565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061330e565b611a60565b60405161084a9190613ed4565b60405180910390f35b34801561085f57600080fd5b5061087a6004803603810190610875919061330e565b611a78565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109af57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bf57506109be82611b70565b5b9050919050565b600c5481565b6060600280546109db90614213565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790614213565b8015610a545780601f10610a2957610100808354040283529160200191610a54565b820191906000526020600020905b815481529060010190602001808311610a3757829003601f168201915b5050505050905090565b6000610a6982611bda565b610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613e94565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aee8261111f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690613d94565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7e611be8565b73ffffffffffffffffffffffffffffffffffffffff161480610bad5750610bac81610ba7611be8565b6119cc565b5b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390613c54565b60405180910390fd5b610bf7838383611bf0565b505050565b6000600154905090565b600a5481565b610c17838383611ca2565b505050565b600b5481565b610c2a611be8565b73ffffffffffffffffffffffffffffffffffffffff16610c486112a6565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613cd4565b60405180910390fd5b610ca78161225b565b50565b6000610cb583611135565b8210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613b34565b60405180910390fd5b6000610d00610bfc565b905060008060005b83811015610e66576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610dfa57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e525786841415610e43578195505050505050610ea2565b8380610e4e90614276565b9450505b508080610e5e90614276565b915050610d08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613e34565b60405180910390fd5b92915050565b60105481565b610eb6611be8565b73ffffffffffffffffffffffffffffffffffffffff16610ed46112a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190613cd4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610f87573d6000803e3d6000fd5b50565b610fa583838360405180602001604052806000815250611825565b505050565b60115481565b6000610fba610bfc565b8210610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290613bd4565b60405180910390fd5b819050919050565b61100b611be8565b73ffffffffffffffffffffffffffffffffffffffff166110296112a6565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613cd4565b60405180910390fd5b818160099190611090929190613102565b505050565b61109d611be8565b73ffffffffffffffffffffffffffffffffffffffff166110bb6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613cd4565b60405180910390fd5b61111b82826124ab565b5050565b600061112a826124c9565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613c94565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611226611be8565b73ffffffffffffffffffffffffffffffffffffffff166112446112a6565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613cd4565b60405180910390fd5b6112a460006126cc565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546112de90614213565b80601f016020809104026020016040519081016040528092919081815260200182805461130a90614213565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b5050505050905090565b600d5481565b6000600a5411801561137a5750600a5442115b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613b54565b60405180910390fd5b600b5460115410156114ab57600b54816011546113d69190613fce565b1115611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613d74565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114659190613fce565b11156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90613e14565b60405180910390fd5b611622565b6010548111156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613c34565b60405180910390fd5b600c54816011546115019190613fce565b1115611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613b74565b60405180910390fd5b60105481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115909190613fce565b11156115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890613e14565b60405180910390fd5b80600d546115df9190614055565b341015611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890613d54565b60405180910390fd5b5b80601160008282546116349190613fce565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461168a9190613fce565b9250508190555061169b33826124ab565b50565b6116a6611be8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613d14565b60405180910390fd5b8060076000611721611be8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117ce611be8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118139190613af7565b60405180910390a35050565b600e5481565b611830848484611ca2565b61183c84848484612790565b61187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290613db4565b60405180910390fd5b50505050565b606061188c82611bda565b6118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290613cf4565b60405180910390fd5b60006118d5612927565b905060008151116118f55760405180602001604052806000815250611920565b806118ff846129b9565b604051602001611910929190613a6c565b6040516020818303038152906040525b915050919050565b600f5481565b60085481565b600061193f82612b1a565b9050919050565b61194e611be8565b73ffffffffffffffffffffffffffffffffffffffff1661196c6112a6565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613cd4565b60405180910390fd5b80600a8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915090505481565b611a80611be8565b73ffffffffffffffffffffffffffffffffffffffff16611a9e6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613b94565b60405180910390fd5b611b6d816126cc565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cad826124c9565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cd4611be8565b73ffffffffffffffffffffffffffffffffffffffff161480611d305750611cf9611be8565b73ffffffffffffffffffffffffffffffffffffffff16611d1884610a5e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d4c5750611d4b8260000151611d46611be8565b6119cc565b5b905080611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613d34565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790613cb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613bf4565b60405180910390fd5b611e7d8585856001612c03565b611e8d6000848460000151611bf0565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611efb91906140af565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f9f9190613f88565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120a59190613fce565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121eb5761211b81611bda565b156121ea576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122538686866001612c09565b505050505050565b60006008549050600082116122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90613c74565b60405180910390fd5b6000600183836122b59190613fce565b6122bf91906140e3565b9050600180546122cf91906140e3565b8111156122e757600180546122e491906140e3565b90505b6122f081611bda565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613e54565b60405180910390fd5b60008290505b81811161249257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561247f5760006123b2826124c9565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061248a90614276565b915050612335565b506001816124a09190613fce565b600881905550505050565b6124c5828260405180602001604052806000815250612c0f565b5050565b6124d1613188565b6124da82611bda565b612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090613bb4565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061257d5760017f00000000000000000000000000000000000000000000000000000000000000008461257091906140e3565b61257a9190613fce565b90505b60008390505b81811061268b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612677578093505050506126c7565b508080612683906141e9565b915050612583565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90613e74565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006127b18473ffffffffffffffffffffffffffffffffffffffff166130ef565b1561291a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127da611be8565b8786866040518563ffffffff1660e01b81526004016127fc9493929190613aab565b602060405180830381600087803b15801561281657600080fd5b505af192505050801561284757506040513d601f19601f8201168201806040525081019061284491906134fe565b60015b6128ca573d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b506000815114156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990613db4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291f565b600190505b949350505050565b60606009805461293690614213565b80601f016020809104026020016040519081016040528092919081815260200182805461296290614213565b80156129af5780601f10612984576101008083540402835291602001916129af565b820191906000526020600020905b81548152906001019060200180831161299257829003601f168201915b5050505050905090565b60606000821415612a01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b15565b600082905060005b60008214612a33578080612a1c90614276565b915050600a82612a2c9190614024565b9150612a09565b60008167ffffffffffffffff811115612a4f57612a4e6143ac565b5b6040519080825280601f01601f191660200182016040528015612a815781602001600182028036833780820191505090505b5090505b60008514612b0e57600182612a9a91906140e3565b9150600a85612aa991906142bf565b6030612ab59190613fce565b60f81b818381518110612acb57612aca61437d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b079190614024565b9450612a85565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8290613c14565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d90613df4565b60405180910390fd5b612c8f81611bda565b15612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690613dd4565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2990613eb4565b60405180910390fd5b612d3f6000858386612c03565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e3c9190613f88565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e639190613f88565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130d257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130726000888488612790565b6130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a890613db4565b60405180910390fd5b81806130bc90614276565b92505080806130ca90614276565b915050613001565b50806001819055506130e76000878588612c09565b505050505050565b600080823b905060008111915050919050565b82805461310e90614213565b90600052602060002090601f0160209004810192826131305760008555613177565b82601f1061314957803560ff1916838001178555613177565b82800160010185558215613177579182015b8281111561317657823582559160200191906001019061315b565b5b50905061318491906131c2565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156131db5760008160009055506001016131c3565b5090565b60006131f26131ed84613f14565b613eef565b90508281526020810184848401111561320e5761320d6143ea565b5b6132198482856141a7565b509392505050565b60008135905061323081614b81565b92915050565b60008135905061324581614b98565b92915050565b60008135905061325a81614baf565b92915050565b60008151905061326f81614baf565b92915050565b600082601f83011261328a576132896143e0565b5b813561329a8482602086016131df565b91505092915050565b60008083601f8401126132b9576132b86143e0565b5b8235905067ffffffffffffffff8111156132d6576132d56143db565b5b6020830191508360018202830111156132f2576132f16143e5565b5b9250929050565b60008135905061330881614bc6565b92915050565b600060208284031215613324576133236143f4565b5b600061333284828501613221565b91505092915050565b60008060408385031215613352576133516143f4565b5b600061336085828601613221565b925050602061337185828601613221565b9150509250929050565b600080600060608486031215613394576133936143f4565b5b60006133a286828701613221565b93505060206133b386828701613221565b92505060406133c4868287016132f9565b9150509250925092565b600080600080608085870312156133e8576133e76143f4565b5b60006133f687828801613221565b945050602061340787828801613221565b9350506040613418878288016132f9565b925050606085013567ffffffffffffffff811115613439576134386143ef565b5b61344587828801613275565b91505092959194509250565b60008060408385031215613468576134676143f4565b5b600061347685828601613221565b925050602061348785828601613236565b9150509250929050565b600080604083850312156134a8576134a76143f4565b5b60006134b685828601613221565b92505060206134c7858286016132f9565b9150509250929050565b6000602082840312156134e7576134e66143f4565b5b60006134f58482850161324b565b91505092915050565b600060208284031215613514576135136143f4565b5b600061352284828501613260565b91505092915050565b60008060208385031215613542576135416143f4565b5b600083013567ffffffffffffffff8111156135605761355f6143ef565b5b61356c858286016132a3565b92509250509250929050565b60006020828403121561358e5761358d6143f4565b5b600061359c848285016132f9565b91505092915050565b6135ae81614117565b82525050565b6135bd81614129565b82525050565b60006135ce82613f45565b6135d88185613f5b565b93506135e88185602086016141b6565b6135f1816143f9565b840191505092915050565b600061360782613f50565b6136118185613f6c565b93506136218185602086016141b6565b61362a816143f9565b840191505092915050565b600061364082613f50565b61364a8185613f7d565b935061365a8185602086016141b6565b80840191505092915050565b6000613673602283613f6c565b915061367e8261440a565b604082019050919050565b6000613696601183613f6c565b91506136a182614459565b602082019050919050565b60006136b9600883613f6c565b91506136c482614482565b602082019050919050565b60006136dc602683613f6c565b91506136e7826144ab565b604082019050919050565b60006136ff602a83613f6c565b915061370a826144fa565b604082019050919050565b6000613722602383613f6c565b915061372d82614549565b604082019050919050565b6000613745602583613f6c565b915061375082614598565b604082019050919050565b6000613768603183613f6c565b9150613773826145e7565b604082019050919050565b600061378b600d83613f6c565b915061379682614636565b602082019050919050565b60006137ae603983613f6c565b91506137b98261465f565b604082019050919050565b60006137d1601883613f6c565b91506137dc826146ae565b602082019050919050565b60006137f4602b83613f6c565b91506137ff826146d7565b604082019050919050565b6000613817602683613f6c565b915061382282614726565b604082019050919050565b600061383a602083613f6c565b915061384582614775565b602082019050919050565b600061385d602f83613f6c565b91506138688261479e565b604082019050919050565b6000613880601a83613f6c565b915061388b826147ed565b602082019050919050565b60006138a3603283613f6c565b91506138ae82614816565b604082019050919050565b60006138c6600a83613f6c565b91506138d182614865565b602082019050919050565b60006138e9601083613f6c565b91506138f48261488e565b602082019050919050565b600061390c602283613f6c565b9150613917826148b7565b604082019050919050565b600061392f603383613f6c565b915061393a82614906565b604082019050919050565b6000613952601d83613f6c565b915061395d82614955565b602082019050919050565b6000613975602183613f6c565b91506139808261497e565b604082019050919050565b6000613998600583613f6c565b91506139a3826149cd565b602082019050919050565b60006139bb602e83613f6c565b91506139c6826149f6565b604082019050919050565b60006139de602683613f6c565b91506139e982614a45565b604082019050919050565b6000613a01602f83613f6c565b9150613a0c82614a94565b604082019050919050565b6000613a24602d83613f6c565b9150613a2f82614ae3565b604082019050919050565b6000613a47602283613f6c565b9150613a5282614b32565b604082019050919050565b613a668161419d565b82525050565b6000613a788285613635565b9150613a848284613635565b91508190509392505050565b6000602082019050613aa560008301846135a5565b92915050565b6000608082019050613ac060008301876135a5565b613acd60208301866135a5565b613ada6040830185613a5d565b8181036060830152613aec81846135c3565b905095945050505050565b6000602082019050613b0c60008301846135b4565b92915050565b60006020820190508181036000830152613b2c81846135fc565b905092915050565b60006020820190508181036000830152613b4d81613666565b9050919050565b60006020820190508181036000830152613b6d81613689565b9050919050565b60006020820190508181036000830152613b8d816136ac565b9050919050565b60006020820190508181036000830152613bad816136cf565b9050919050565b60006020820190508181036000830152613bcd816136f2565b9050919050565b60006020820190508181036000830152613bed81613715565b9050919050565b60006020820190508181036000830152613c0d81613738565b9050919050565b60006020820190508181036000830152613c2d8161375b565b9050919050565b60006020820190508181036000830152613c4d8161377e565b9050919050565b60006020820190508181036000830152613c6d816137a1565b9050919050565b60006020820190508181036000830152613c8d816137c4565b9050919050565b60006020820190508181036000830152613cad816137e7565b9050919050565b60006020820190508181036000830152613ccd8161380a565b9050919050565b60006020820190508181036000830152613ced8161382d565b9050919050565b60006020820190508181036000830152613d0d81613850565b9050919050565b60006020820190508181036000830152613d2d81613873565b9050919050565b60006020820190508181036000830152613d4d81613896565b9050919050565b60006020820190508181036000830152613d6d816138b9565b9050919050565b60006020820190508181036000830152613d8d816138dc565b9050919050565b60006020820190508181036000830152613dad816138ff565b9050919050565b60006020820190508181036000830152613dcd81613922565b9050919050565b60006020820190508181036000830152613ded81613945565b9050919050565b60006020820190508181036000830152613e0d81613968565b9050919050565b60006020820190508181036000830152613e2d8161398b565b9050919050565b60006020820190508181036000830152613e4d816139ae565b9050919050565b60006020820190508181036000830152613e6d816139d1565b9050919050565b60006020820190508181036000830152613e8d816139f4565b9050919050565b60006020820190508181036000830152613ead81613a17565b9050919050565b60006020820190508181036000830152613ecd81613a3a565b9050919050565b6000602082019050613ee96000830184613a5d565b92915050565b6000613ef9613f0a565b9050613f058282614245565b919050565b6000604051905090565b600067ffffffffffffffff821115613f2f57613f2e6143ac565b5b613f38826143f9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f9382614161565b9150613f9e83614161565b9250826fffffffffffffffffffffffffffffffff03821115613fc357613fc26142f0565b5b828201905092915050565b6000613fd98261419d565b9150613fe48361419d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614019576140186142f0565b5b828201905092915050565b600061402f8261419d565b915061403a8361419d565b92508261404a5761404961431f565b5b828204905092915050565b60006140608261419d565b915061406b8361419d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140a4576140a36142f0565b5b828202905092915050565b60006140ba82614161565b91506140c583614161565b9250828210156140d8576140d76142f0565b5b828203905092915050565b60006140ee8261419d565b91506140f98361419d565b92508282101561410c5761410b6142f0565b5b828203905092915050565b60006141228261417d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141d45780820151818401526020810190506141b9565b838111156141e3576000848401525b50505050565b60006141f48261419d565b91506000821415614208576142076142f0565b5b600182039050919050565b6000600282049050600182168061422b57607f821691505b6020821081141561423f5761423e61434e565b5b50919050565b61424e826143f9565b810181811067ffffffffffffffff8211171561426d5761426c6143ac565b5b80604052505050565b60006142818261419d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b4576142b36142f0565b5b600182019050919050565b60006142ca8261419d565b91506142d58361419d565b9250826142e5576142e461431f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e742074696d65000000000000000000000000000000600082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f4d617820323020416d6f756e7400000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4f7574206f662045544800000000000000000000000000000000000000000000600082015250565b7f46726565204d696e7420436c6f73656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614b8a81614117565b8114614b9557600080fd5b50565b614ba181614129565b8114614bac57600080fd5b50565b614bb881614135565b8114614bc357600080fd5b50565b614bcf8161419d565b8114614bda57600080fd5b5056fea2646970667358221220e39432b120df3d065eb3f516b74a465a00131b1acb97917e38ee96bef1826a9f64736f6c6343000807003300000000000000000000000000000000000000000000000000000000622ca760

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636352211e11610118578063b88d4fde116100a0578063dc33e6811161006f578063dc33e68114610773578063dda52d53146107b0578063e985e9c5146107d9578063edb0239814610816578063f2fde38b146108535761020f565b8063b88d4fde146106b7578063c87b56dd146106e0578063cabadaa01461071d578063d7224ba0146107485761020f565b806395d89b41116100e757806395d89b41146105f1578063a035b1fe1461061c578063a0712d6814610647578063a22cb46514610663578063a591252d1461068c5761020f565b80636352211e1461053557806370a0823114610572578063715018a6146105af5780638da5cb5b146105c65761020f565b80632d20fb601161019b57806342842e0e1161016a57806342842e0e1461045f5780634f02c420146104885780634f6ccce7146104b357806355f804b3146104f0578063627804af146105195761020f565b80632d20fb60146103b75780632f745c59146103e05780633a1c58341461041d5780633ccfd60b146104485761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806318160ddd1461030d5780631bdc608e1461033857806323b872dd1461036357806324a6ab0c1461038c5761020f565b806301ffc9a714610214578063047fc9aa1461025157806306fdde031461027c578063081812fc146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906134d1565b61087c565b6040516102489190613af7565b60405180910390f35b34801561025d57600080fd5b506102666109c6565b6040516102739190613ed4565b60405180910390f35b34801561028857600080fd5b506102916109cc565b60405161029e9190613b12565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190613578565b610a5e565b6040516102db9190613a90565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190613491565b610ae3565b005b34801561031957600080fd5b50610322610bfc565b60405161032f9190613ed4565b60405180910390f35b34801561034457600080fd5b5061034d610c06565b60405161035a9190613ed4565b60405180910390f35b34801561036f57600080fd5b5061038a6004803603810190610385919061337b565b610c0c565b005b34801561039857600080fd5b506103a1610c1c565b6040516103ae9190613ed4565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613578565b610c22565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613491565b610caa565b6040516104149190613ed4565b60405180910390f35b34801561042957600080fd5b50610432610ea8565b60405161043f9190613ed4565b60405180910390f35b34801561045457600080fd5b5061045d610eae565b005b34801561046b57600080fd5b506104866004803603810190610481919061337b565b610f8a565b005b34801561049457600080fd5b5061049d610faa565b6040516104aa9190613ed4565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190613578565b610fb0565b6040516104e79190613ed4565b60405180910390f35b3480156104fc57600080fd5b506105176004803603810190610512919061352b565b611003565b005b610533600480360381019061052e9190613491565b611095565b005b34801561054157600080fd5b5061055c60048036038101906105579190613578565b61111f565b6040516105699190613a90565b60405180910390f35b34801561057e57600080fd5b506105996004803603810190610594919061330e565b611135565b6040516105a69190613ed4565b60405180910390f35b3480156105bb57600080fd5b506105c461121e565b005b3480156105d257600080fd5b506105db6112a6565b6040516105e89190613a90565b60405180910390f35b3480156105fd57600080fd5b506106066112cf565b6040516106139190613b12565b60405180910390f35b34801561062857600080fd5b50610631611361565b60405161063e9190613ed4565b60405180910390f35b610661600480360381019061065c9190613578565b611367565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613451565b61169e565b005b34801561069857600080fd5b506106a161181f565b6040516106ae9190613ed4565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906133ce565b611825565b005b3480156106ec57600080fd5b5061070760048036038101906107029190613578565b611881565b6040516107149190613b12565b60405180910390f35b34801561072957600080fd5b50610732611928565b60405161073f9190613ed4565b60405180910390f35b34801561075457600080fd5b5061075d61192e565b60405161076a9190613ed4565b60405180910390f35b34801561077f57600080fd5b5061079a6004803603810190610795919061330e565b611934565b6040516107a79190613ed4565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613578565b611946565b005b3480156107e557600080fd5b5061080060048036038101906107fb919061333b565b6119cc565b60405161080d9190613af7565b60405180910390f35b34801561082257600080fd5b5061083d6004803603810190610838919061330e565b611a60565b60405161084a9190613ed4565b60405180910390f35b34801561085f57600080fd5b5061087a6004803603810190610875919061330e565b611a78565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109af57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bf57506109be82611b70565b5b9050919050565b600c5481565b6060600280546109db90614213565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790614213565b8015610a545780601f10610a2957610100808354040283529160200191610a54565b820191906000526020600020905b815481529060010190602001808311610a3757829003601f168201915b5050505050905090565b6000610a6982611bda565b610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613e94565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aee8261111f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690613d94565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7e611be8565b73ffffffffffffffffffffffffffffffffffffffff161480610bad5750610bac81610ba7611be8565b6119cc565b5b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390613c54565b60405180910390fd5b610bf7838383611bf0565b505050565b6000600154905090565b600a5481565b610c17838383611ca2565b505050565b600b5481565b610c2a611be8565b73ffffffffffffffffffffffffffffffffffffffff16610c486112a6565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9590613cd4565b60405180910390fd5b610ca78161225b565b50565b6000610cb583611135565b8210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613b34565b60405180910390fd5b6000610d00610bfc565b905060008060005b83811015610e66576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610dfa57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e525786841415610e43578195505050505050610ea2565b8380610e4e90614276565b9450505b508080610e5e90614276565b915050610d08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990613e34565b60405180910390fd5b92915050565b60105481565b610eb6611be8565b73ffffffffffffffffffffffffffffffffffffffff16610ed46112a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190613cd4565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610f87573d6000803e3d6000fd5b50565b610fa583838360405180602001604052806000815250611825565b505050565b60115481565b6000610fba610bfc565b8210610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290613bd4565b60405180910390fd5b819050919050565b61100b611be8565b73ffffffffffffffffffffffffffffffffffffffff166110296112a6565b73ffffffffffffffffffffffffffffffffffffffff161461107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613cd4565b60405180910390fd5b818160099190611090929190613102565b505050565b61109d611be8565b73ffffffffffffffffffffffffffffffffffffffff166110bb6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613cd4565b60405180910390fd5b61111b82826124ab565b5050565b600061112a826124c9565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119d90613c94565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611226611be8565b73ffffffffffffffffffffffffffffffffffffffff166112446112a6565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190613cd4565b60405180910390fd5b6112a460006126cc565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546112de90614213565b80601f016020809104026020016040519081016040528092919081815260200182805461130a90614213565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b5050505050905090565b600d5481565b6000600a5411801561137a5750600a5442115b6113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b090613b54565b60405180910390fd5b600b5460115410156114ab57600b54816011546113d69190613fce565b1115611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613d74565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114659190613fce565b11156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d90613e14565b60405180910390fd5b611622565b6010548111156114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613c34565b60405180910390fd5b600c54816011546115019190613fce565b1115611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990613b74565b60405180910390fd5b60105481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115909190613fce565b11156115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890613e14565b60405180910390fd5b80600d546115df9190614055565b341015611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890613d54565b60405180910390fd5b5b80601160008282546116349190613fce565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461168a9190613fce565b9250508190555061169b33826124ab565b50565b6116a6611be8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b90613d14565b60405180910390fd5b8060076000611721611be8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117ce611be8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118139190613af7565b60405180910390a35050565b600e5481565b611830848484611ca2565b61183c84848484612790565b61187b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187290613db4565b60405180910390fd5b50505050565b606061188c82611bda565b6118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290613cf4565b60405180910390fd5b60006118d5612927565b905060008151116118f55760405180602001604052806000815250611920565b806118ff846129b9565b604051602001611910929190613a6c565b6040516020818303038152906040525b915050919050565b600f5481565b60085481565b600061193f82612b1a565b9050919050565b61194e611be8565b73ffffffffffffffffffffffffffffffffffffffff1661196c6112a6565b73ffffffffffffffffffffffffffffffffffffffff16146119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613cd4565b60405180910390fd5b80600a8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915090505481565b611a80611be8565b73ffffffffffffffffffffffffffffffffffffffff16611a9e6112a6565b73ffffffffffffffffffffffffffffffffffffffff1614611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613cd4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90613b94565b60405180910390fd5b611b6d816126cc565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611cad826124c9565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cd4611be8565b73ffffffffffffffffffffffffffffffffffffffff161480611d305750611cf9611be8565b73ffffffffffffffffffffffffffffffffffffffff16611d1884610a5e565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d4c5750611d4b8260000151611d46611be8565b6119cc565b5b905080611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8590613d34565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df790613cb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790613bf4565b60405180910390fd5b611e7d8585856001612c03565b611e8d6000848460000151611bf0565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611efb91906140af565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611f9f9190613f88565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846120a59190613fce565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121eb5761211b81611bda565b156121ea576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122538686866001612c09565b505050505050565b60006008549050600082116122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90613c74565b60405180910390fd5b6000600183836122b59190613fce565b6122bf91906140e3565b9050600180546122cf91906140e3565b8111156122e757600180546122e491906140e3565b90505b6122f081611bda565b61232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690613e54565b60405180910390fd5b60008290505b81811161249257600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561247f5760006123b2826124c9565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061248a90614276565b915050612335565b506001816124a09190613fce565b600881905550505050565b6124c5828260405180602001604052806000815250612c0f565b5050565b6124d1613188565b6124da82611bda565b612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090613bb4565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000002710831061257d5760017f00000000000000000000000000000000000000000000000000000000000027108461257091906140e3565b61257a9190613fce565b90505b60008390505b81811061268b576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612677578093505050506126c7565b508080612683906141e9565b915050612583565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90613e74565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006127b18473ffffffffffffffffffffffffffffffffffffffff166130ef565b1561291a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127da611be8565b8786866040518563ffffffff1660e01b81526004016127fc9493929190613aab565b602060405180830381600087803b15801561281657600080fd5b505af192505050801561284757506040513d601f19601f8201168201806040525081019061284491906134fe565b60015b6128ca573d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b506000815114156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990613db4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291f565b600190505b949350505050565b60606009805461293690614213565b80601f016020809104026020016040519081016040528092919081815260200182805461296290614213565b80156129af5780601f10612984576101008083540402835291602001916129af565b820191906000526020600020905b81548152906001019060200180831161299257829003601f168201915b5050505050905090565b60606000821415612a01576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b15565b600082905060005b60008214612a33578080612a1c90614276565b915050600a82612a2c9190614024565b9150612a09565b60008167ffffffffffffffff811115612a4f57612a4e6143ac565b5b6040519080825280601f01601f191660200182016040528015612a815781602001600182028036833780820191505090505b5090505b60008514612b0e57600182612a9a91906140e3565b9150600a85612aa991906142bf565b6030612ab59190613fce565b60f81b818381518110612acb57612aca61437d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b079190614024565b9450612a85565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8290613c14565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7d90613df4565b60405180910390fd5b612c8f81611bda565b15612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690613dd4565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710831115612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2990613eb4565b60405180910390fd5b612d3f6000858386612c03565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612e3c9190613f88565b6fffffffffffffffffffffffffffffffff168152602001858360200151612e639190613f88565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156130d257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130726000888488612790565b6130b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a890613db4565b60405180910390fd5b81806130bc90614276565b92505080806130ca90614276565b915050613001565b50806001819055506130e76000878588612c09565b505050505050565b600080823b905060008111915050919050565b82805461310e90614213565b90600052602060002090601f0160209004810192826131305760008555613177565b82601f1061314957803560ff1916838001178555613177565b82800160010185558215613177579182015b8281111561317657823582559160200191906001019061315b565b5b50905061318491906131c2565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156131db5760008160009055506001016131c3565b5090565b60006131f26131ed84613f14565b613eef565b90508281526020810184848401111561320e5761320d6143ea565b5b6132198482856141a7565b509392505050565b60008135905061323081614b81565b92915050565b60008135905061324581614b98565b92915050565b60008135905061325a81614baf565b92915050565b60008151905061326f81614baf565b92915050565b600082601f83011261328a576132896143e0565b5b813561329a8482602086016131df565b91505092915050565b60008083601f8401126132b9576132b86143e0565b5b8235905067ffffffffffffffff8111156132d6576132d56143db565b5b6020830191508360018202830111156132f2576132f16143e5565b5b9250929050565b60008135905061330881614bc6565b92915050565b600060208284031215613324576133236143f4565b5b600061333284828501613221565b91505092915050565b60008060408385031215613352576133516143f4565b5b600061336085828601613221565b925050602061337185828601613221565b9150509250929050565b600080600060608486031215613394576133936143f4565b5b60006133a286828701613221565b93505060206133b386828701613221565b92505060406133c4868287016132f9565b9150509250925092565b600080600080608085870312156133e8576133e76143f4565b5b60006133f687828801613221565b945050602061340787828801613221565b9350506040613418878288016132f9565b925050606085013567ffffffffffffffff811115613439576134386143ef565b5b61344587828801613275565b91505092959194509250565b60008060408385031215613468576134676143f4565b5b600061347685828601613221565b925050602061348785828601613236565b9150509250929050565b600080604083850312156134a8576134a76143f4565b5b60006134b685828601613221565b92505060206134c7858286016132f9565b9150509250929050565b6000602082840312156134e7576134e66143f4565b5b60006134f58482850161324b565b91505092915050565b600060208284031215613514576135136143f4565b5b600061352284828501613260565b91505092915050565b60008060208385031215613542576135416143f4565b5b600083013567ffffffffffffffff8111156135605761355f6143ef565b5b61356c858286016132a3565b92509250509250929050565b60006020828403121561358e5761358d6143f4565b5b600061359c848285016132f9565b91505092915050565b6135ae81614117565b82525050565b6135bd81614129565b82525050565b60006135ce82613f45565b6135d88185613f5b565b93506135e88185602086016141b6565b6135f1816143f9565b840191505092915050565b600061360782613f50565b6136118185613f6c565b93506136218185602086016141b6565b61362a816143f9565b840191505092915050565b600061364082613f50565b61364a8185613f7d565b935061365a8185602086016141b6565b80840191505092915050565b6000613673602283613f6c565b915061367e8261440a565b604082019050919050565b6000613696601183613f6c565b91506136a182614459565b602082019050919050565b60006136b9600883613f6c565b91506136c482614482565b602082019050919050565b60006136dc602683613f6c565b91506136e7826144ab565b604082019050919050565b60006136ff602a83613f6c565b915061370a826144fa565b604082019050919050565b6000613722602383613f6c565b915061372d82614549565b604082019050919050565b6000613745602583613f6c565b915061375082614598565b604082019050919050565b6000613768603183613f6c565b9150613773826145e7565b604082019050919050565b600061378b600d83613f6c565b915061379682614636565b602082019050919050565b60006137ae603983613f6c565b91506137b98261465f565b604082019050919050565b60006137d1601883613f6c565b91506137dc826146ae565b602082019050919050565b60006137f4602b83613f6c565b91506137ff826146d7565b604082019050919050565b6000613817602683613f6c565b915061382282614726565b604082019050919050565b600061383a602083613f6c565b915061384582614775565b602082019050919050565b600061385d602f83613f6c565b91506138688261479e565b604082019050919050565b6000613880601a83613f6c565b915061388b826147ed565b602082019050919050565b60006138a3603283613f6c565b91506138ae82614816565b604082019050919050565b60006138c6600a83613f6c565b91506138d182614865565b602082019050919050565b60006138e9601083613f6c565b91506138f48261488e565b602082019050919050565b600061390c602283613f6c565b9150613917826148b7565b604082019050919050565b600061392f603383613f6c565b915061393a82614906565b604082019050919050565b6000613952601d83613f6c565b915061395d82614955565b602082019050919050565b6000613975602183613f6c565b91506139808261497e565b604082019050919050565b6000613998600583613f6c565b91506139a3826149cd565b602082019050919050565b60006139bb602e83613f6c565b91506139c6826149f6565b604082019050919050565b60006139de602683613f6c565b91506139e982614a45565b604082019050919050565b6000613a01602f83613f6c565b9150613a0c82614a94565b604082019050919050565b6000613a24602d83613f6c565b9150613a2f82614ae3565b604082019050919050565b6000613a47602283613f6c565b9150613a5282614b32565b604082019050919050565b613a668161419d565b82525050565b6000613a788285613635565b9150613a848284613635565b91508190509392505050565b6000602082019050613aa560008301846135a5565b92915050565b6000608082019050613ac060008301876135a5565b613acd60208301866135a5565b613ada6040830185613a5d565b8181036060830152613aec81846135c3565b905095945050505050565b6000602082019050613b0c60008301846135b4565b92915050565b60006020820190508181036000830152613b2c81846135fc565b905092915050565b60006020820190508181036000830152613b4d81613666565b9050919050565b60006020820190508181036000830152613b6d81613689565b9050919050565b60006020820190508181036000830152613b8d816136ac565b9050919050565b60006020820190508181036000830152613bad816136cf565b9050919050565b60006020820190508181036000830152613bcd816136f2565b9050919050565b60006020820190508181036000830152613bed81613715565b9050919050565b60006020820190508181036000830152613c0d81613738565b9050919050565b60006020820190508181036000830152613c2d8161375b565b9050919050565b60006020820190508181036000830152613c4d8161377e565b9050919050565b60006020820190508181036000830152613c6d816137a1565b9050919050565b60006020820190508181036000830152613c8d816137c4565b9050919050565b60006020820190508181036000830152613cad816137e7565b9050919050565b60006020820190508181036000830152613ccd8161380a565b9050919050565b60006020820190508181036000830152613ced8161382d565b9050919050565b60006020820190508181036000830152613d0d81613850565b9050919050565b60006020820190508181036000830152613d2d81613873565b9050919050565b60006020820190508181036000830152613d4d81613896565b9050919050565b60006020820190508181036000830152613d6d816138b9565b9050919050565b60006020820190508181036000830152613d8d816138dc565b9050919050565b60006020820190508181036000830152613dad816138ff565b9050919050565b60006020820190508181036000830152613dcd81613922565b9050919050565b60006020820190508181036000830152613ded81613945565b9050919050565b60006020820190508181036000830152613e0d81613968565b9050919050565b60006020820190508181036000830152613e2d8161398b565b9050919050565b60006020820190508181036000830152613e4d816139ae565b9050919050565b60006020820190508181036000830152613e6d816139d1565b9050919050565b60006020820190508181036000830152613e8d816139f4565b9050919050565b60006020820190508181036000830152613ead81613a17565b9050919050565b60006020820190508181036000830152613ecd81613a3a565b9050919050565b6000602082019050613ee96000830184613a5d565b92915050565b6000613ef9613f0a565b9050613f058282614245565b919050565b6000604051905090565b600067ffffffffffffffff821115613f2f57613f2e6143ac565b5b613f38826143f9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f9382614161565b9150613f9e83614161565b9250826fffffffffffffffffffffffffffffffff03821115613fc357613fc26142f0565b5b828201905092915050565b6000613fd98261419d565b9150613fe48361419d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614019576140186142f0565b5b828201905092915050565b600061402f8261419d565b915061403a8361419d565b92508261404a5761404961431f565b5b828204905092915050565b60006140608261419d565b915061406b8361419d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140a4576140a36142f0565b5b828202905092915050565b60006140ba82614161565b91506140c583614161565b9250828210156140d8576140d76142f0565b5b828203905092915050565b60006140ee8261419d565b91506140f98361419d565b92508282101561410c5761410b6142f0565b5b828203905092915050565b60006141228261417d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141d45780820151818401526020810190506141b9565b838111156141e3576000848401525b50505050565b60006141f48261419d565b91506000821415614208576142076142f0565b5b600182039050919050565b6000600282049050600182168061422b57607f821691505b6020821081141561423f5761423e61434e565b5b50919050565b61424e826143f9565b810181811067ffffffffffffffff8211171561426d5761426c6143ac565b5b80604052505050565b60006142818261419d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b4576142b36142f0565b5b600182019050919050565b60006142ca8261419d565b91506142d58361419d565b9250826142e5576142e461431f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e742074696d65000000000000000000000000000000600082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f4d617820323020416d6f756e7400000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4f7574206f662045544800000000000000000000000000000000000000000000600082015250565b7f46726565204d696e7420436c6f73656400000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b614b8a81614117565b8114614b9557600080fd5b50565b614ba181614129565b8114614bac57600080fd5b50565b614bb881614135565b8114614bc357600080fd5b50565b614bcf8161419d565b8114614bda57600080fd5b5056fea2646970667358221220e39432b120df3d065eb3f516b74a465a00131b1acb97917e38ee96bef1826a9f64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000622ca760

-----Decoded View---------------
Arg [0] : _publicTime (uint256): 1647093600

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000622ca760


Deployed Bytecode Sourcemap

41636:2236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25613:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41786:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27339:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28864:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28427:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24177:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41716:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29714:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41748:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43635:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24805:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41942:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43511:116;;;;;;;;;;;;;:::i;:::-;;29919:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41986:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24340:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42387:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43385:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27162:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26039:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39526:103;;;;;;;;;;;;;:::i;:::-;;38875:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27494:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41822:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42609:764;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29132:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41865:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30139:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27655:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41902:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34448:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43752:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42499:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29469:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42020:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39784:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25613:370;25740:4;25785:25;25770:40;;;:11;:40;;;;:99;;;;25836:33;25821:48;;;:11;:48;;;;25770:99;:160;;;;25895:35;25880:50;;;:11;:50;;;;25770:160;:207;;;;25941:36;25965:11;25941:23;:36::i;:::-;25770:207;25756:221;;25613:370;;;:::o;41786:29::-;;;;:::o;27339:94::-;27393:13;27422:5;27415:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27339:94;:::o;28864:204::-;28932:7;28956:16;28964:7;28956;:16::i;:::-;28948:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29038:15;:24;29054:7;29038:24;;;;;;;;;;;;;;;;;;;;;29031:31;;28864:204;;;:::o;28427:379::-;28496:13;28512:24;28528:7;28512:15;:24::i;:::-;28496:40;;28557:5;28551:11;;:2;:11;;;;28543:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:5;28626:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28651:37;28668:5;28675:12;:10;:12::i;:::-;28651:16;:37::i;:::-;28626:62;28610:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28772:28;28781:2;28785:7;28794:5;28772:8;:28::i;:::-;28489:317;28427:379;;:::o;24177:94::-;24230:7;24253:12;;24246:19;;24177:94;:::o;41716:25::-;;;;:::o;29714:142::-;29822:28;29832:4;29838:2;29842:7;29822:9;:28::i;:::-;29714:142;;;:::o;41748:31::-;;;;:::o;43635:109::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43708:28:::1;43727:8;43708:18;:28::i;:::-;43635:109:::0;:::o;24805:744::-;24914:7;24949:16;24959:5;24949:9;:16::i;:::-;24941:5;:24;24933:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25011:22;25036:13;:11;:13::i;:::-;25011:38;;25056:19;25086:25;25136:9;25131:350;25155:14;25151:1;:18;25131:350;;;25185:31;25219:11;:14;25231:1;25219:14;;;;;;;;;;;25185:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25272:1;25246:28;;:9;:14;;;:28;;;25242:89;;25307:9;:14;;;25287:34;;25242:89;25364:5;25343:26;;:17;:26;;;25339:135;;;25401:5;25386:11;:20;25382:59;;;25428:1;25421:8;;;;;;;;;25382:59;25451:13;;;;;:::i;:::-;;;;25339:135;25176:305;25171:3;;;;;:::i;:::-;;;;25131:350;;;;25487:56;;;;;;;;;;:::i;:::-;;;;;;;;24805:744;;;;;:::o;41942:37::-;;;;:::o;43511:116::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43567:10:::1;43559:28;;:60;43604:4;43588:30;;;43559:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43511:116::o:0;29919:157::-;30031:39;30048:4;30054:2;30058:7;30031:39;;;;;;;;;;;;:16;:39::i;:::-;29919:157;;;:::o;41986:25::-;;;;:::o;24340:177::-;24407:7;24439:13;:11;:13::i;:::-;24431:5;:21;24423:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24506:5;24499:12;;24340:177;;;:::o;42387:104::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42476:7:::1;;42460:13;:23;;;;;;;:::i;:::-;;42387:104:::0;;:::o;43385:116::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43469:24:::1;43479:2;43483:9;43469;:24::i;:::-;43385:116:::0;;:::o;27162:118::-;27226:7;27249:20;27261:7;27249:11;:20::i;:::-;:25;;;27242:32;;27162:118;;;:::o;26039:211::-;26103:7;26144:1;26127:19;;:5;:19;;;;26119:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26216:12;:19;26229:5;26216:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26208:36;;26201:43;;26039:211;;;:::o;39526:103::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39591:30:::1;39618:1;39591:18;:30::i;:::-;39526:103::o:0;38875:87::-;38921:7;38948:6;;;;;;;;;;;38941:13;;38875:87;:::o;27494:98::-;27550:13;27579:7;27572:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27494:98;:::o;41822:34::-;;;;:::o;42609:764::-;42686:1;42673:10;;:14;:46;;;;;42709:10;;42691:15;:28;42673:46;42665:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42765:10;;42756:6;;:19;42752:502;;;42827:10;;42817:6;42808;;:15;;;;:::i;:::-;:29;;42800:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42915:11;;42905:6;42879:11;:23;42891:10;42879:23;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:47;;42871:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42752:502;;;43003:17;;42993:6;:27;;42985:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43077:6;;43067;43058;;:15;;;;:::i;:::-;:25;;43050:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;43153:17;;43143:6;43117:11;:23;43129:10;43117:23;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:53;;43109:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43221:6;43213:5;;:14;;;;:::i;:::-;43200:9;:27;;43192:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42752:502;43274:6;43264;;:16;;;;;;;:::i;:::-;;;;;;;;43318:6;43291:11;:23;43303:10;43291:23;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;43336:29;43346:10;43358:6;43336:9;:29::i;:::-;42609:764;:::o;29132:274::-;29235:12;:10;:12::i;:::-;29223:24;;:8;:24;;;;29215:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29332:8;29287:18;:32;29306:12;:10;:12::i;:::-;29287:32;;;;;;;;;;;;;;;:42;29320:8;29287:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29381:8;29352:48;;29367:12;:10;:12::i;:::-;29352:48;;;29391:8;29352:48;;;;;;:::i;:::-;;;;;;;;29132:274;;:::o;41865:30::-;;;;:::o;30139:311::-;30276:28;30286:4;30292:2;30296:7;30276:9;:28::i;:::-;30327:48;30350:4;30356:2;30360:7;30369:5;30327:22;:48::i;:::-;30311:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;30139:311;;;;:::o;27655:394::-;27753:13;27794:16;27802:7;27794;:16::i;:::-;27778:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;27884:21;27908:10;:8;:10::i;:::-;27884:34;;27963:1;27945:7;27939:21;:25;:104;;;;;;;;;;;;;;;;;28000:7;28009:18;:7;:16;:18::i;:::-;27983:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27939:104;27925:118;;;27655:394;;;:::o;41902:33::-;;;;:::o;34448:43::-;;;;:::o;43752:113::-;43810:7;43837:20;43851:5;43837:13;:20::i;:::-;43830:27;;43752:113;;;:::o;42499:102::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42582:11:::1;42569:10;:24;;;;42499:102:::0;:::o;29469:186::-;29591:4;29614:18;:25;29633:5;29614:25;;;;;;;;;;;;;;;:35;29640:8;29614:35;;;;;;;;;;;;;;;;;;;;;;;;;29607:42;;29469:186;;;;:::o;42020:47::-;;;;;;;;;;;;;;;;;:::o;39784:201::-;39106:12;:10;:12::i;:::-;39095:23;;:7;:5;:7::i;:::-;:23;;;39087:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39893:1:::1;39873:22;;:8;:22;;;;39865:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39949:28;39968:8;39949:18;:28::i;:::-;39784:201:::0;:::o;22046:157::-;22131:4;22170:25;22155:40;;;:11;:40;;;;22148:47;;22046:157;;;:::o;30689:105::-;30746:4;30776:12;;30766:7;:22;30759:29;;30689:105;;;:::o;18829:98::-;18882:7;18909:10;18902:17;;18829:98;:::o;34270:172::-;34394:2;34367:15;:24;34383:7;34367:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34428:7;34424:2;34408:28;;34417:5;34408:28;;;;;;;;;;;;34270:172;;;:::o;32657:1507::-;32754:35;32792:20;32804:7;32792:11;:20::i;:::-;32754:58;;32821:22;32863:13;:18;;;32847:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;32916:12;:10;:12::i;:::-;32892:36;;:20;32904:7;32892:11;:20::i;:::-;:36;;;32847:81;:142;;;;32939:50;32956:13;:18;;;32976:12;:10;:12::i;:::-;32939:16;:50::i;:::-;32847:142;32821:169;;33015:17;32999:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33139:4;33117:26;;:13;:18;;;:26;;;33109:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33214:1;33200:16;;:2;:16;;;;33192:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33267:43;33289:4;33295:2;33299:7;33308:1;33267:21;:43::i;:::-;33367:49;33384:1;33388:7;33397:13;:18;;;33367:8;:49::i;:::-;33455:1;33425:12;:18;33438:4;33425:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33491:1;33463:12;:16;33476:2;33463:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33522:43;;;;;;;;33537:2;33522:43;;;;;;33548:15;33522:43;;;;;33499:11;:20;33511:7;33499:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33793:19;33825:1;33815:7;:11;;;;:::i;:::-;33793:33;;33878:1;33837:43;;:11;:24;33849:11;33837:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;33833:236;;;33895:20;33903:11;33895:7;:20::i;:::-;33891:171;;;33955:97;;;;;;;;33982:13;:18;;;33955:97;;;;;;34013:13;:28;;;33955:97;;;;;33928:11;:24;33940:11;33928:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33891:171;33833:236;34101:7;34097:2;34082:27;;34091:4;34082:27;;;;;;;;;;;;34116:42;34137:4;34143:2;34147:7;34156:1;34116:20;:42::i;:::-;32747:1417;;;32657:1507;;;:::o;34596:842::-;34658:25;34686:24;;34658:52;;34736:1;34725:8;:12;34717:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;34773:16;34823:1;34812:8;34792:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;34773:51;;34861:1;34846:12;;:16;;;;:::i;:::-;34835:8;:27;34831:77;;;34899:1;34884:12;;:16;;;;:::i;:::-;34873:27;;34831:77;35023:17;35031:8;35023:7;:17::i;:::-;35015:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35095:9;35107:17;35095:29;;35090:297;35131:8;35126:1;:13;35090:297;;35190:1;35159:33;;:11;:14;35171:1;35159:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;35155:225;;;35205:31;35239:14;35251:1;35239:11;:14::i;:::-;35205:48;;35281:89;;;;;;;;35308:9;:14;;;35281:89;;;;;;35335:9;:24;;;35281:89;;;;;35264:11;:14;35276:1;35264:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35194:186;35155:225;35141:3;;;;;:::i;:::-;;;;35090:297;;;;35431:1;35420:8;:12;;;;:::i;:::-;35393:24;:39;;;;34651:787;;34596:842;:::o;30800:98::-;30865:27;30875:2;30879:8;30865:27;;;;;;;;;;;;:9;:27::i;:::-;30800:98;;:::o;26502:606::-;26578:21;;:::i;:::-;26619:16;26627:7;26619;:16::i;:::-;26611:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26691:26;26739:12;26728:7;:23;26724:93;;26808:1;26793:12;26783:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;26762:47;;26724:93;26830:12;26845:7;26830:22;;26825:212;26862:18;26854:4;:26;26825:212;;26899:31;26933:11;:17;26945:4;26933:17;;;;;;;;;;;26899:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26989:1;26963:28;;:9;:14;;;:28;;;26959:71;;27011:9;27004:16;;;;;;;26959:71;26890:147;26882:6;;;;;:::i;:::-;;;;26825:212;;;;27045:57;;;;;;;;;;:::i;:::-;;;;;;;;26502:606;;;;:::o;40145:191::-;40219:16;40238:6;;;;;;;;;;;40219:25;;40264:8;40255:6;;:17;;;;;;;;;;;;;;;;;;40319:8;40288:40;;40309:8;40288:40;;;;;;;;;;;;40208:128;40145:191;:::o;35981:690::-;36118:4;36135:15;:2;:13;;;:15::i;:::-;36131:535;;;36190:2;36174:36;;;36211:12;:10;:12::i;:::-;36225:4;36231:7;36240:5;36174:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36161:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36422:1;36405:6;:13;:18;36401:215;;;36438:61;;;;;;;;;;:::i;:::-;;;;;;;;36401:215;36584:6;36578:13;36569:6;36565:2;36561:15;36554:38;36161:464;36306:45;;;36296:55;;;:6;:55;;;;36289:62;;;;;36131:535;36654:4;36647:11;;35981:690;;;;;;;:::o;42265:114::-;42325:13;42358;42351:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42265:114;:::o;19416:723::-;19472:13;19702:1;19693:5;:10;19689:53;;;19720:10;;;;;;;;;;;;;;;;;;;;;19689:53;19752:12;19767:5;19752:20;;19783:14;19808:78;19823:1;19815:4;:9;19808:78;;19841:8;;;;;:::i;:::-;;;;19872:2;19864:10;;;;;:::i;:::-;;;19808:78;;;19896:19;19928:6;19918:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19896:39;;19946:154;19962:1;19953:5;:10;19946:154;;19990:1;19980:11;;;;;:::i;:::-;;;20057:2;20049:5;:10;;;;:::i;:::-;20036:2;:24;;;;:::i;:::-;20023:39;;20006:6;20013;20006:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;20086:2;20077:11;;;;;:::i;:::-;;;19946:154;;;20124:6;20110:21;;;;;19416:723;;;;:::o;26256:240::-;26317:7;26366:1;26349:19;;:5;:19;;;;26333:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26457:12;:19;26470:5;26457:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26449:41;;26442:48;;26256:240;;;:::o;37133:141::-;;;;;:::o;37660:140::-;;;;;:::o;31153:1272::-;31258:20;31281:12;;31258:35;;31322:1;31308:16;;:2;:16;;;;31300:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31499:21;31507:12;31499:7;:21::i;:::-;31498:22;31490:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31581:12;31569:8;:24;;31561:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31641:61;31671:1;31675:2;31679:12;31693:8;31641:21;:61::i;:::-;31711:30;31744:12;:16;31757:2;31744:16;;;;;;;;;;;;;;;31711:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31786:119;;;;;;;;31836:8;31806:11;:19;;;:39;;;;:::i;:::-;31786:119;;;;;;31889:8;31854:11;:24;;;:44;;;;:::i;:::-;31786:119;;;;;31767:12;:16;31780:2;31767:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31940:43;;;;;;;;31955:2;31940:43;;;;;;31966:15;31940:43;;;;;31912:11;:25;31924:12;31912:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31992:20;32015:12;31992:35;;32041:9;32036:281;32060:8;32056:1;:12;32036:281;;;32114:12;32110:2;32089:38;;32106:1;32089:38;;;;;;;;;;;;32154:59;32185:1;32189:2;32193:12;32207:5;32154:22;:59::i;:::-;32136:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;32295:14;;;;;:::i;:::-;;;;32070:3;;;;;:::i;:::-;;;;32036:281;;;;32340:12;32325;:27;;;;32359:60;32388:1;32392:2;32396:12;32410:8;32359:20;:60::i;:::-;31251:1174;;;31153:1272;;;:::o;10811:387::-;10871:4;11079:12;11146:7;11134:20;11126:28;;11189:1;11182:4;:8;11175:15;;;10811:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:360::-;7298:3;7326:38;7358:5;7326:38;:::i;:::-;7380:70;7443:6;7438:3;7380:70;:::i;:::-;7373:77;;7459:52;7504:6;7499:3;7492:4;7485:5;7481:16;7459:52;:::i;:::-;7536:29;7558:6;7536:29;:::i;:::-;7531:3;7527:39;7520:46;;7302:270;7212:360;;;;:::o;7578:364::-;7666:3;7694:39;7727:5;7694:39;:::i;:::-;7749:71;7813:6;7808:3;7749:71;:::i;:::-;7742:78;;7829:52;7874:6;7869:3;7862:4;7855:5;7851:16;7829:52;:::i;:::-;7906:29;7928:6;7906:29;:::i;:::-;7901:3;7897:39;7890:46;;7670:272;7578:364;;;;:::o;7948:377::-;8054:3;8082:39;8115:5;8082:39;:::i;:::-;8137:89;8219:6;8214:3;8137:89;:::i;:::-;8130:96;;8235:52;8280:6;8275:3;8268:4;8261:5;8257:16;8235:52;:::i;:::-;8312:6;8307:3;8303:16;8296:23;;8058:267;7948:377;;;;:::o;8331:366::-;8473:3;8494:67;8558:2;8553:3;8494:67;:::i;:::-;8487:74;;8570:93;8659:3;8570:93;:::i;:::-;8688:2;8683:3;8679:12;8672:19;;8331:366;;;:::o;8703:::-;8845:3;8866:67;8930:2;8925:3;8866:67;:::i;:::-;8859:74;;8942:93;9031:3;8942:93;:::i;:::-;9060:2;9055:3;9051:12;9044:19;;8703:366;;;:::o;9075:365::-;9217:3;9238:66;9302:1;9297:3;9238:66;:::i;:::-;9231:73;;9313:93;9402:3;9313:93;:::i;:::-;9431:2;9426:3;9422:12;9415:19;;9075:365;;;:::o;9446:366::-;9588:3;9609:67;9673:2;9668:3;9609:67;:::i;:::-;9602:74;;9685:93;9774:3;9685:93;:::i;:::-;9803:2;9798:3;9794:12;9787:19;;9446:366;;;:::o;9818:::-;9960:3;9981:67;10045:2;10040:3;9981:67;:::i;:::-;9974:74;;10057:93;10146:3;10057:93;:::i;:::-;10175:2;10170:3;10166:12;10159:19;;9818:366;;;:::o;10190:::-;10332:3;10353:67;10417:2;10412:3;10353:67;:::i;:::-;10346:74;;10429:93;10518:3;10429:93;:::i;:::-;10547:2;10542:3;10538:12;10531:19;;10190:366;;;:::o;10562:::-;10704:3;10725:67;10789:2;10784:3;10725:67;:::i;:::-;10718:74;;10801:93;10890:3;10801:93;:::i;:::-;10919:2;10914:3;10910:12;10903:19;;10562:366;;;:::o;10934:::-;11076:3;11097:67;11161:2;11156:3;11097:67;:::i;:::-;11090:74;;11173:93;11262:3;11173:93;:::i;:::-;11291:2;11286:3;11282:12;11275:19;;10934:366;;;:::o;11306:::-;11448:3;11469:67;11533:2;11528:3;11469:67;:::i;:::-;11462:74;;11545:93;11634:3;11545:93;:::i;:::-;11663:2;11658:3;11654:12;11647:19;;11306:366;;;:::o;11678:::-;11820:3;11841:67;11905:2;11900:3;11841:67;:::i;:::-;11834:74;;11917:93;12006:3;11917:93;:::i;:::-;12035:2;12030:3;12026:12;12019:19;;11678:366;;;:::o;12050:::-;12192:3;12213:67;12277:2;12272:3;12213:67;:::i;:::-;12206:74;;12289:93;12378:3;12289:93;:::i;:::-;12407:2;12402:3;12398:12;12391:19;;12050:366;;;:::o;12422:::-;12564:3;12585:67;12649:2;12644:3;12585:67;:::i;:::-;12578:74;;12661:93;12750:3;12661:93;:::i;:::-;12779:2;12774:3;12770:12;12763:19;;12422:366;;;:::o;12794:::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:::-;13308:3;13329:67;13393:2;13388:3;13329:67;:::i;:::-;13322:74;;13405:93;13494:3;13405:93;:::i;:::-;13523:2;13518:3;13514:12;13507:19;;13166:366;;;:::o;13538:::-;13680:3;13701:67;13765:2;13760:3;13701:67;:::i;:::-;13694:74;;13777:93;13866:3;13777:93;:::i;:::-;13895:2;13890:3;13886:12;13879:19;;13538:366;;;:::o;13910:::-;14052:3;14073:67;14137:2;14132:3;14073:67;:::i;:::-;14066:74;;14149:93;14238:3;14149:93;:::i;:::-;14267:2;14262:3;14258:12;14251:19;;13910:366;;;:::o;14282:::-;14424:3;14445:67;14509:2;14504:3;14445:67;:::i;:::-;14438:74;;14521:93;14610:3;14521:93;:::i;:::-;14639:2;14634:3;14630:12;14623:19;;14282:366;;;:::o;14654:::-;14796:3;14817:67;14881:2;14876:3;14817:67;:::i;:::-;14810:74;;14893:93;14982:3;14893:93;:::i;:::-;15011:2;15006:3;15002:12;14995:19;;14654:366;;;:::o;15026:::-;15168:3;15189:67;15253:2;15248:3;15189:67;:::i;:::-;15182:74;;15265:93;15354:3;15265:93;:::i;:::-;15383:2;15378:3;15374:12;15367:19;;15026:366;;;:::o;15398:::-;15540:3;15561:67;15625:2;15620:3;15561:67;:::i;:::-;15554:74;;15637:93;15726:3;15637:93;:::i;:::-;15755:2;15750:3;15746:12;15739:19;;15398:366;;;:::o;15770:::-;15912:3;15933:67;15997:2;15992:3;15933:67;:::i;:::-;15926:74;;16009:93;16098:3;16009:93;:::i;:::-;16127:2;16122:3;16118:12;16111:19;;15770:366;;;:::o;16142:::-;16284:3;16305:67;16369:2;16364:3;16305:67;:::i;:::-;16298:74;;16381:93;16470:3;16381:93;:::i;:::-;16499:2;16494:3;16490:12;16483:19;;16142:366;;;:::o;16514:::-;16656:3;16677:67;16741:2;16736:3;16677:67;:::i;:::-;16670:74;;16753:93;16842:3;16753:93;:::i;:::-;16871:2;16866:3;16862:12;16855:19;;16514:366;;;:::o;16886:365::-;17028:3;17049:66;17113:1;17108:3;17049:66;:::i;:::-;17042:73;;17124:93;17213:3;17124:93;:::i;:::-;17242:2;17237:3;17233:12;17226:19;;16886:365;;;:::o;17257:366::-;17399:3;17420:67;17484:2;17479:3;17420:67;:::i;:::-;17413:74;;17496:93;17585:3;17496:93;:::i;:::-;17614:2;17609:3;17605:12;17598:19;;17257:366;;;:::o;17629:::-;17771:3;17792:67;17856:2;17851:3;17792:67;:::i;:::-;17785:74;;17868:93;17957:3;17868:93;:::i;:::-;17986:2;17981:3;17977:12;17970:19;;17629:366;;;:::o;18001:::-;18143:3;18164:67;18228:2;18223:3;18164:67;:::i;:::-;18157:74;;18240:93;18329:3;18240:93;:::i;:::-;18358:2;18353:3;18349:12;18342:19;;18001:366;;;:::o;18373:::-;18515:3;18536:67;18600:2;18595:3;18536:67;:::i;:::-;18529:74;;18612:93;18701:3;18612:93;:::i;:::-;18730:2;18725:3;18721:12;18714:19;;18373:366;;;:::o;18745:::-;18887:3;18908:67;18972:2;18967:3;18908:67;:::i;:::-;18901:74;;18984:93;19073:3;18984:93;:::i;:::-;19102:2;19097:3;19093:12;19086:19;;18745:366;;;:::o;19117:118::-;19204:24;19222:5;19204:24;:::i;:::-;19199:3;19192:37;19117:118;;:::o;19241:435::-;19421:3;19443:95;19534:3;19525:6;19443:95;:::i;:::-;19436:102;;19555:95;19646:3;19637:6;19555:95;:::i;:::-;19548:102;;19667:3;19660:10;;19241:435;;;;;:::o;19682:222::-;19775:4;19813:2;19802:9;19798:18;19790:26;;19826:71;19894:1;19883:9;19879:17;19870:6;19826:71;:::i;:::-;19682:222;;;;:::o;19910:640::-;20105:4;20143:3;20132:9;20128:19;20120:27;;20157:71;20225:1;20214:9;20210:17;20201:6;20157:71;:::i;:::-;20238:72;20306:2;20295:9;20291:18;20282:6;20238:72;:::i;:::-;20320;20388:2;20377:9;20373:18;20364:6;20320:72;:::i;:::-;20439:9;20433:4;20429:20;20424:2;20413:9;20409:18;20402:48;20467:76;20538:4;20529:6;20467:76;:::i;:::-;20459:84;;19910:640;;;;;;;:::o;20556:210::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20694:65;20756:1;20745:9;20741:17;20732:6;20694:65;:::i;:::-;20556:210;;;;:::o;20772:313::-;20885:4;20923:2;20912:9;20908:18;20900:26;;20972:9;20966:4;20962:20;20958:1;20947:9;20943:17;20936:47;21000:78;21073:4;21064:6;21000:78;:::i;:::-;20992:86;;20772:313;;;;:::o;21091:419::-;21257:4;21295:2;21284:9;21280:18;21272:26;;21344:9;21338:4;21334:20;21330:1;21319:9;21315:17;21308:47;21372:131;21498:4;21372:131;:::i;:::-;21364:139;;21091:419;;;:::o;21516:::-;21682:4;21720:2;21709:9;21705:18;21697:26;;21769:9;21763:4;21759:20;21755:1;21744:9;21740:17;21733:47;21797:131;21923:4;21797:131;:::i;:::-;21789:139;;21516:419;;;:::o;21941:::-;22107:4;22145:2;22134:9;22130:18;22122:26;;22194:9;22188:4;22184:20;22180:1;22169:9;22165:17;22158:47;22222:131;22348:4;22222:131;:::i;:::-;22214:139;;21941:419;;;:::o;22366:::-;22532:4;22570:2;22559:9;22555:18;22547:26;;22619:9;22613:4;22609:20;22605:1;22594:9;22590:17;22583:47;22647:131;22773:4;22647:131;:::i;:::-;22639:139;;22366:419;;;:::o;22791:::-;22957:4;22995:2;22984:9;22980:18;22972:26;;23044:9;23038:4;23034:20;23030:1;23019:9;23015:17;23008:47;23072:131;23198:4;23072:131;:::i;:::-;23064:139;;22791:419;;;:::o;23216:::-;23382:4;23420:2;23409:9;23405:18;23397:26;;23469:9;23463:4;23459:20;23455:1;23444:9;23440:17;23433:47;23497:131;23623:4;23497:131;:::i;:::-;23489:139;;23216:419;;;:::o;23641:::-;23807:4;23845:2;23834:9;23830:18;23822:26;;23894:9;23888:4;23884:20;23880:1;23869:9;23865:17;23858:47;23922:131;24048:4;23922:131;:::i;:::-;23914:139;;23641:419;;;:::o;24066:::-;24232:4;24270:2;24259:9;24255:18;24247:26;;24319:9;24313:4;24309:20;24305:1;24294:9;24290:17;24283:47;24347:131;24473:4;24347:131;:::i;:::-;24339:139;;24066:419;;;:::o;24491:::-;24657:4;24695:2;24684:9;24680:18;24672:26;;24744:9;24738:4;24734:20;24730:1;24719:9;24715:17;24708:47;24772:131;24898:4;24772:131;:::i;:::-;24764:139;;24491:419;;;:::o;24916:::-;25082:4;25120:2;25109:9;25105:18;25097:26;;25169:9;25163:4;25159:20;25155:1;25144:9;25140:17;25133:47;25197:131;25323:4;25197:131;:::i;:::-;25189:139;;24916:419;;;:::o;25341:::-;25507:4;25545:2;25534:9;25530:18;25522:26;;25594:9;25588:4;25584:20;25580:1;25569:9;25565:17;25558:47;25622:131;25748:4;25622:131;:::i;:::-;25614:139;;25341:419;;;:::o;25766:::-;25932:4;25970:2;25959:9;25955:18;25947:26;;26019:9;26013:4;26009:20;26005:1;25994:9;25990:17;25983:47;26047:131;26173:4;26047:131;:::i;:::-;26039:139;;25766:419;;;:::o;26191:::-;26357:4;26395:2;26384:9;26380:18;26372:26;;26444:9;26438:4;26434:20;26430:1;26419:9;26415:17;26408:47;26472:131;26598:4;26472:131;:::i;:::-;26464:139;;26191:419;;;:::o;26616:::-;26782:4;26820:2;26809:9;26805:18;26797:26;;26869:9;26863:4;26859:20;26855:1;26844:9;26840:17;26833:47;26897:131;27023:4;26897:131;:::i;:::-;26889:139;;26616:419;;;:::o;27041:::-;27207:4;27245:2;27234:9;27230:18;27222:26;;27294:9;27288:4;27284:20;27280:1;27269:9;27265:17;27258:47;27322:131;27448:4;27322:131;:::i;:::-;27314:139;;27041:419;;;:::o;27466:::-;27632:4;27670:2;27659:9;27655:18;27647:26;;27719:9;27713:4;27709:20;27705:1;27694:9;27690:17;27683:47;27747:131;27873:4;27747:131;:::i;:::-;27739:139;;27466:419;;;:::o;27891:::-;28057:4;28095:2;28084:9;28080:18;28072:26;;28144:9;28138:4;28134:20;28130:1;28119:9;28115:17;28108:47;28172:131;28298:4;28172:131;:::i;:::-;28164:139;;27891:419;;;:::o;28316:::-;28482:4;28520:2;28509:9;28505:18;28497:26;;28569:9;28563:4;28559:20;28555:1;28544:9;28540:17;28533:47;28597:131;28723:4;28597:131;:::i;:::-;28589:139;;28316:419;;;:::o;28741:::-;28907:4;28945:2;28934:9;28930:18;28922:26;;28994:9;28988:4;28984:20;28980:1;28969:9;28965:17;28958:47;29022:131;29148:4;29022:131;:::i;:::-;29014:139;;28741:419;;;:::o;29166:::-;29332:4;29370:2;29359:9;29355:18;29347:26;;29419:9;29413:4;29409:20;29405:1;29394:9;29390:17;29383:47;29447:131;29573:4;29447:131;:::i;:::-;29439:139;;29166:419;;;:::o;29591:::-;29757:4;29795:2;29784:9;29780:18;29772:26;;29844:9;29838:4;29834:20;29830:1;29819:9;29815:17;29808:47;29872:131;29998:4;29872:131;:::i;:::-;29864:139;;29591:419;;;:::o;30016:::-;30182:4;30220:2;30209:9;30205:18;30197:26;;30269:9;30263:4;30259:20;30255:1;30244:9;30240:17;30233:47;30297:131;30423:4;30297:131;:::i;:::-;30289:139;;30016:419;;;:::o;30441:::-;30607:4;30645:2;30634:9;30630:18;30622:26;;30694:9;30688:4;30684:20;30680:1;30669:9;30665:17;30658:47;30722:131;30848:4;30722:131;:::i;:::-;30714:139;;30441:419;;;:::o;30866:::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:::-;31457:4;31495:2;31484:9;31480:18;31472:26;;31544:9;31538:4;31534:20;31530:1;31519:9;31515:17;31508:47;31572:131;31698:4;31572:131;:::i;:::-;31564:139;;31291:419;;;:::o;31716:::-;31882:4;31920:2;31909:9;31905:18;31897:26;;31969:9;31963:4;31959:20;31955:1;31944:9;31940:17;31933:47;31997:131;32123:4;31997:131;:::i;:::-;31989:139;;31716:419;;;:::o;32141:::-;32307:4;32345:2;32334:9;32330:18;32322:26;;32394:9;32388:4;32384:20;32380:1;32369:9;32365:17;32358:47;32422:131;32548:4;32422:131;:::i;:::-;32414:139;;32141:419;;;:::o;32566:::-;32732:4;32770:2;32759:9;32755:18;32747:26;;32819:9;32813:4;32809:20;32805:1;32794:9;32790:17;32783:47;32847:131;32973:4;32847:131;:::i;:::-;32839:139;;32566:419;;;:::o;32991:::-;33157:4;33195:2;33184:9;33180:18;33172:26;;33244:9;33238:4;33234:20;33230:1;33219:9;33215:17;33208:47;33272:131;33398:4;33272:131;:::i;:::-;33264:139;;32991:419;;;:::o;33416:222::-;33509:4;33547:2;33536:9;33532:18;33524:26;;33560:71;33628:1;33617:9;33613:17;33604:6;33560:71;:::i;:::-;33416:222;;;;:::o;33644:129::-;33678:6;33705:20;;:::i;:::-;33695:30;;33734:33;33762:4;33754:6;33734:33;:::i;:::-;33644:129;;;:::o;33779:75::-;33812:6;33845:2;33839:9;33829:19;;33779:75;:::o;33860:307::-;33921:4;34011:18;34003:6;34000:30;33997:56;;;34033:18;;:::i;:::-;33997:56;34071:29;34093:6;34071:29;:::i;:::-;34063:37;;34155:4;34149;34145:15;34137:23;;33860:307;;;:::o;34173:98::-;34224:6;34258:5;34252:12;34242:22;;34173:98;;;:::o;34277:99::-;34329:6;34363:5;34357:12;34347:22;;34277:99;;;:::o;34382:168::-;34465:11;34499:6;34494:3;34487:19;34539:4;34534:3;34530:14;34515:29;;34382:168;;;;:::o;34556:169::-;34640:11;34674:6;34669:3;34662:19;34714:4;34709:3;34705:14;34690:29;;34556:169;;;;:::o;34731:148::-;34833:11;34870:3;34855:18;;34731:148;;;;:::o;34885:273::-;34925:3;34944:20;34962:1;34944:20;:::i;:::-;34939:25;;34978:20;34996:1;34978:20;:::i;:::-;34973:25;;35100:1;35064:34;35060:42;35057:1;35054:49;35051:75;;;35106:18;;:::i;:::-;35051:75;35150:1;35147;35143:9;35136:16;;34885:273;;;;:::o;35164:305::-;35204:3;35223:20;35241:1;35223:20;:::i;:::-;35218:25;;35257:20;35275:1;35257:20;:::i;:::-;35252:25;;35411:1;35343:66;35339:74;35336:1;35333:81;35330:107;;;35417:18;;:::i;:::-;35330:107;35461:1;35458;35454:9;35447:16;;35164:305;;;;:::o;35475:185::-;35515:1;35532:20;35550:1;35532:20;:::i;:::-;35527:25;;35566:20;35584:1;35566:20;:::i;:::-;35561:25;;35605:1;35595:35;;35610:18;;:::i;:::-;35595:35;35652:1;35649;35645:9;35640:14;;35475:185;;;;:::o;35666:348::-;35706:7;35729:20;35747:1;35729:20;:::i;:::-;35724:25;;35763:20;35781:1;35763:20;:::i;:::-;35758:25;;35951:1;35883:66;35879:74;35876:1;35873:81;35868:1;35861:9;35854:17;35850:105;35847:131;;;35958:18;;:::i;:::-;35847:131;36006:1;36003;35999:9;35988:20;;35666:348;;;;:::o;36020:191::-;36060:4;36080:20;36098:1;36080:20;:::i;:::-;36075:25;;36114:20;36132:1;36114:20;:::i;:::-;36109:25;;36153:1;36150;36147:8;36144:34;;;36158:18;;:::i;:::-;36144:34;36203:1;36200;36196:9;36188:17;;36020:191;;;;:::o;36217:::-;36257:4;36277:20;36295:1;36277:20;:::i;:::-;36272:25;;36311:20;36329:1;36311:20;:::i;:::-;36306:25;;36350:1;36347;36344:8;36341:34;;;36355:18;;:::i;:::-;36341:34;36400:1;36397;36393:9;36385:17;;36217:191;;;;:::o;36414:96::-;36451:7;36480:24;36498:5;36480:24;:::i;:::-;36469:35;;36414:96;;;:::o;36516:90::-;36550:7;36593:5;36586:13;36579:21;36568:32;;36516:90;;;:::o;36612:149::-;36648:7;36688:66;36681:5;36677:78;36666:89;;36612:149;;;:::o;36767:118::-;36804:7;36844:34;36837:5;36833:46;36822:57;;36767:118;;;:::o;36891:126::-;36928:7;36968:42;36961:5;36957:54;36946:65;;36891:126;;;:::o;37023:77::-;37060:7;37089:5;37078:16;;37023:77;;;:::o;37106:154::-;37190:6;37185:3;37180;37167:30;37252:1;37243:6;37238:3;37234:16;37227:27;37106:154;;;:::o;37266:307::-;37334:1;37344:113;37358:6;37355:1;37352:13;37344:113;;;37443:1;37438:3;37434:11;37428:18;37424:1;37419:3;37415:11;37408:39;37380:2;37377:1;37373:10;37368:15;;37344:113;;;37475:6;37472:1;37469:13;37466:101;;;37555:1;37546:6;37541:3;37537:16;37530:27;37466:101;37315:258;37266:307;;;:::o;37579:171::-;37618:3;37641:24;37659:5;37641:24;:::i;:::-;37632:33;;37687:4;37680:5;37677:15;37674:41;;;37695:18;;:::i;:::-;37674:41;37742:1;37735:5;37731:13;37724:20;;37579:171;;;:::o;37756:320::-;37800:6;37837:1;37831:4;37827:12;37817:22;;37884:1;37878:4;37874:12;37905:18;37895:81;;37961:4;37953:6;37949:17;37939:27;;37895:81;38023:2;38015:6;38012:14;37992:18;37989:38;37986:84;;;38042:18;;:::i;:::-;37986:84;37807:269;37756:320;;;:::o;38082:281::-;38165:27;38187:4;38165:27;:::i;:::-;38157:6;38153:40;38295:6;38283:10;38280:22;38259:18;38247:10;38244:34;38241:62;38238:88;;;38306:18;;:::i;:::-;38238:88;38346:10;38342:2;38335:22;38125:238;38082:281;;:::o;38369:233::-;38408:3;38431:24;38449:5;38431:24;:::i;:::-;38422:33;;38477:66;38470:5;38467:77;38464:103;;;38547:18;;:::i;:::-;38464:103;38594:1;38587:5;38583:13;38576:20;;38369:233;;;:::o;38608:176::-;38640:1;38657:20;38675:1;38657:20;:::i;:::-;38652:25;;38691:20;38709:1;38691:20;:::i;:::-;38686:25;;38730:1;38720:35;;38735:18;;:::i;:::-;38720:35;38776:1;38773;38769:9;38764:14;;38608:176;;;;:::o;38790:180::-;38838:77;38835:1;38828:88;38935:4;38932:1;38925:15;38959:4;38956:1;38949:15;38976:180;39024:77;39021:1;39014:88;39121:4;39118:1;39111:15;39145:4;39142:1;39135:15;39162:180;39210:77;39207:1;39200:88;39307:4;39304:1;39297:15;39331:4;39328:1;39321:15;39348:180;39396:77;39393:1;39386:88;39493:4;39490:1;39483:15;39517:4;39514:1;39507:15;39534:180;39582:77;39579:1;39572:88;39679:4;39676:1;39669:15;39703:4;39700:1;39693:15;39720:117;39829:1;39826;39819:12;39843:117;39952:1;39949;39942:12;39966:117;40075:1;40072;40065:12;40089:117;40198:1;40195;40188:12;40212:117;40321:1;40318;40311:12;40335:117;40444:1;40441;40434:12;40458:102;40499:6;40550:2;40546:7;40541:2;40534:5;40530:14;40526:28;40516:38;;40458:102;;;:::o;40566:221::-;40706:34;40702:1;40694:6;40690:14;40683:58;40775:4;40770:2;40762:6;40758:15;40751:29;40566:221;:::o;40793:167::-;40933:19;40929:1;40921:6;40917:14;40910:43;40793:167;:::o;40966:158::-;41106:10;41102:1;41094:6;41090:14;41083:34;40966:158;:::o;41130:225::-;41270:34;41266:1;41258:6;41254:14;41247:58;41339:8;41334:2;41326:6;41322:15;41315:33;41130:225;:::o;41361:229::-;41501:34;41497:1;41489:6;41485:14;41478:58;41570:12;41565:2;41557:6;41553:15;41546:37;41361:229;:::o;41596:222::-;41736:34;41732:1;41724:6;41720:14;41713:58;41805:5;41800:2;41792:6;41788:15;41781:30;41596:222;:::o;41824:224::-;41964:34;41960:1;41952:6;41948:14;41941:58;42033:7;42028:2;42020:6;42016:15;42009:32;41824:224;:::o;42054:236::-;42194:34;42190:1;42182:6;42178:14;42171:58;42263:19;42258:2;42250:6;42246:15;42239:44;42054:236;:::o;42296:163::-;42436:15;42432:1;42424:6;42420:14;42413:39;42296:163;:::o;42465:244::-;42605:34;42601:1;42593:6;42589:14;42582:58;42674:27;42669:2;42661:6;42657:15;42650:52;42465:244;:::o;42715:174::-;42855:26;42851:1;42843:6;42839:14;42832:50;42715:174;:::o;42895:230::-;43035:34;43031:1;43023:6;43019:14;43012:58;43104:13;43099:2;43091:6;43087:15;43080:38;42895:230;:::o;43131:225::-;43271:34;43267:1;43259:6;43255:14;43248:58;43340:8;43335:2;43327:6;43323:15;43316:33;43131:225;:::o;43362:182::-;43502:34;43498:1;43490:6;43486:14;43479:58;43362:182;:::o;43550:234::-;43690:34;43686:1;43678:6;43674:14;43667:58;43759:17;43754:2;43746:6;43742:15;43735:42;43550:234;:::o;43790:176::-;43930:28;43926:1;43918:6;43914:14;43907:52;43790:176;:::o;43972:237::-;44112:34;44108:1;44100:6;44096:14;44089:58;44181:20;44176:2;44168:6;44164:15;44157:45;43972:237;:::o;44215:160::-;44355:12;44351:1;44343:6;44339:14;44332:36;44215:160;:::o;44381:166::-;44521:18;44517:1;44509:6;44505:14;44498:42;44381:166;:::o;44553:221::-;44693:34;44689:1;44681:6;44677:14;44670:58;44762:4;44757:2;44749:6;44745:15;44738:29;44553:221;:::o;44780:238::-;44920:34;44916:1;44908:6;44904:14;44897:58;44989:21;44984:2;44976:6;44972:15;44965:46;44780:238;:::o;45024:179::-;45164:31;45160:1;45152:6;45148:14;45141:55;45024:179;:::o;45209:220::-;45349:34;45345:1;45337:6;45333:14;45326:58;45418:3;45413:2;45405:6;45401:15;45394:28;45209:220;:::o;45435:155::-;45575:7;45571:1;45563:6;45559:14;45552:31;45435:155;:::o;45596:233::-;45736:34;45732:1;45724:6;45720:14;45713:58;45805:16;45800:2;45792:6;45788:15;45781:41;45596:233;:::o;45835:225::-;45975:34;45971:1;45963:6;45959:14;45952:58;46044:8;46039:2;46031:6;46027:15;46020:33;45835:225;:::o;46066:234::-;46206:34;46202:1;46194:6;46190:14;46183:58;46275:17;46270:2;46262:6;46258:15;46251:42;46066:234;:::o;46306:232::-;46446:34;46442:1;46434:6;46430:14;46423:58;46515:15;46510:2;46502:6;46498:15;46491:40;46306:232;:::o;46544:221::-;46684:34;46680:1;46672:6;46668:14;46661:58;46753:4;46748:2;46740:6;46736:15;46729:29;46544:221;:::o;46771:122::-;46844:24;46862:5;46844:24;:::i;:::-;46837:5;46834:35;46824:63;;46883:1;46880;46873:12;46824:63;46771:122;:::o;46899:116::-;46969:21;46984:5;46969:21;:::i;:::-;46962:5;46959:32;46949:60;;47005:1;47002;46995:12;46949:60;46899:116;:::o;47021:120::-;47093:23;47110:5;47093:23;:::i;:::-;47086:5;47083:34;47073:62;;47131:1;47128;47121:12;47073:62;47021:120;:::o;47147:122::-;47220:24;47238:5;47220:24;:::i;:::-;47213:5;47210:35;47200:63;;47259:1;47256;47249:12;47200:63;47147:122;:::o

Swarm Source

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