ETH Price: $3,264.89 (-11.23%)

Token

(0x47ee459fb3378881237bdcd5bc6578161409a965)
 

Overview

Max Total Supply

2,000 ERC-721 TOKEN*

Holders

407

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
poorcunt.eth
Balance
0 ERC-721 TOKEN*
0x4e88a7ef592a49b3e9b7546cde0e8ed320d3e8a9
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:
GoodFriday

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-15
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// 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/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// 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/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (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);

    /**
     * @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/token/ERC721/extensions/IERC721Metadata.sol


// 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/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol


pragma solidity ^0.8.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 collectionSize;
  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.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

  /**
   * @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(collectionSize). 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:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `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 > collectionSize - 1) {
      endIndex = collectionSize - 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/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/GoodFriday.sol


pragma solidity ^0.8.0;





contract GoodFriday is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  uint256 public immutable amountForDevs;
  uint256 public constant PRICE = 0 ether;
  string public constant suffix = ".json";

  uint8 public status = 0;
  string private tokenBaseURI;
  string public notRevealedUri;
  bool public revealed = true;

  mapping(address => uint256) public allowlist;

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_,
    uint256 amountForDevs_,
    string memory _tokenBaseURI,
    string memory _initNotRevealedUri
  ) ERC721A("GoodFriday", "gfriday", maxBatchSize_, collectionSize_) {
    maxPerAddressDuringMint = maxBatchSize_;
    amountForDevs = amountForDevs_;
    setBaseURI(_tokenBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

  function publicSaleMint(uint256 quantity)
    external
    callerIsUser
  {
    require(status == 2, "not publicsale phase");
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    require(
      numberMinted(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
  
    _safeMint(msg.sender, quantity);
  }

  function refundIfOver(uint256 price) private {
    require(msg.value >= price, "Need to send more ETH.");
    if (msg.value > price) {
      payable(msg.sender).transfer(msg.value - price);
    }
  }

  function setStatus(uint8 _code) external onlyOwner {
      status = _code;
  }

  function reveal() public onlyOwner() {
      revealed = true;
  }

  function setBaseURI(string memory URI) public onlyOwner {
      tokenBaseURI = URI;
  }

  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
      notRevealedUri = _notRevealedURI;
  }

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

  function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
      require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

      if(revealed == false) {
          return notRevealedUri;
      }
      string memory baseURI = _baseURI();
      return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId), suffix)) : "";
  }

  function seedAllowlist(address[] memory addresses, uint256[] memory numSlots)
    external
    onlyOwner
  {
    require(
      addresses.length == numSlots.length,
      "addresses does not match numSlots length"
    );
    for (uint256 i = 0; i < addresses.length; i++) {
      allowlist[addresses[i]] = numSlots[i];
    }
  }

  function devMint(uint256 quantity) external onlyOwner {
    require(
      totalSupply() + quantity <= amountForDevs,
      "too many already minted before dev mint"
    );
    require(
      quantity % maxBatchSize == 0,
      "can only mint a multiple of the maxBatchSize"
    );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint256 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

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

  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"},{"internalType":"uint256","name":"amountForDevs_","type":"uint256"},{"internalType":"string","name":"_tokenBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDevs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","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":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","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":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_code","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suffix","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610100604052600060015560006008556000600a60006101000a81548160ff021916908360ff1602179055506001600d60006101000a81548160ff0219169083151502179055503480156200005357600080fd5b5060405162005ff638038062005ff68339818101604052810190620000799190620005ae565b6040518060400160405280600a81526020017f476f6f64467269646179000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f6766726964617900000000000000000000000000000000000000000000000000815250868662000107620000fb6200021e60201b60201c565b6200022660201b60201c565b600081116200014d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000144906200072d565b60405180910390fd5b6000821162000193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018a90620006e9565b60405180910390fd5b8360029080519060200190620001ab92919062000469565b508260039080519060200190620001c492919062000469565b508160a0818152505080608081815250505050505060016009819055508460c081815250508260e081815250506200020282620002ea60201b60201c565b62000213816200039560201b60201c565b5050505050620009cf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fa6200021e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003206200044060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000370906200070b565b60405180910390fd5b80600b90805190602001906200039192919062000469565b5050565b620003a56200021e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003cb6200044060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041b906200070b565b60405180910390fd5b80600c90805190602001906200043c92919062000469565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200047790620007ff565b90600052602060002090601f0160209004810192826200049b5760008555620004e7565b82601f10620004b657805160ff1916838001178555620004e7565b82800160010185558215620004e7579182015b82811115620004e6578251825591602001919060010190620004c9565b5b509050620004f69190620004fa565b5090565b5b8082111562000515576000816000905550600101620004fb565b5090565b6000620005306200052a8462000778565b6200074f565b9050828152602081018484840111156200054f576200054e620008ce565b5b6200055c848285620007c9565b509392505050565b600082601f8301126200057c576200057b620008c9565b5b81516200058e84826020860162000519565b91505092915050565b600081519050620005a881620009b5565b92915050565b600080600080600060a08688031215620005cd57620005cc620008d8565b5b6000620005dd8882890162000597565b9550506020620005f08882890162000597565b9450506040620006038882890162000597565b935050606086015167ffffffffffffffff811115620006275762000626620008d3565b5b620006358882890162000564565b925050608086015167ffffffffffffffff811115620006595762000658620008d3565b5b620006678882890162000564565b9150509295509295909350565b600062000683602783620007ae565b91506200069082620008ee565b604082019050919050565b6000620006aa602083620007ae565b9150620006b7826200093d565b602082019050919050565b6000620006d1602e83620007ae565b9150620006de8262000966565b604082019050919050565b60006020820190508181036000830152620007048162000674565b9050919050565b6000602082019050818103600083015262000726816200069b565b9050919050565b600060208201905081810360008301526200074881620006c2565b9050919050565b60006200075b6200076e565b905062000769828262000835565b919050565b6000604051905090565b600067ffffffffffffffff8211156200079657620007956200089a565b5b620007a182620008dd565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620007e9578082015181840152602081019050620007cc565b83811115620007f9576000848401525b50505050565b600060028204905060018216806200081857607f821691505b602082108114156200082f576200082e6200086b565b5b50919050565b6200084082620008dd565b810181811067ffffffffffffffff821117156200086257620008616200089a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620009c081620007bf565b8114620009cc57600080fd5b50565b60805160a05160c05160e0516155ae62000a4860003960008181610f6d0152611f920152600081816113700152611ab3015260008181610fe4015281816110520152818161108f0152818161299f015281816129c80152613153015260008181611a3e01528181612709015261273d01526155ae6000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80638bc35c2f1161013b578063b3ab66b0116100b8578063e985e9c51161007c578063e985e9c5146106a0578063f2c4ce1e146106d0578063f2fde38b146106ec578063f7073c3a14610708578063fbe1aa51146107265761023d565b8063b3ab66b0146105ea578063b88d4fde14610606578063c87b56dd14610622578063d7224ba014610652578063dc33e681146106705761023d565b8063a22cb465116100ff578063a22cb4651461056e578063a475b5dd1461058a578063a7cd52cb14610594578063ac446002146105c4578063b05863d5146105ce5761023d565b80638bc35c2f146104c65780638d859f3e146104e45780638da5cb5b146105025780639231ab2a1461052057806395d89b41146105505761023d565b80632e49d78b116101c9578063518302271161018d578063518302271461042257806355f804b3146104405780636352211e1461045c57806370a082311461048c578063715018a6146104bc5761023d565b80632e49d78b1461036e5780632f745c591461038a578063375a069a146103ba57806342842e0e146103d65780634f6ccce7146103f25761023d565b8063095ea7b311610210578063095ea7b3146102de57806318160ddd146102fa578063200d2ed21461031857806323b872dd146103365780632d20fb60146103525761023d565b806301ffc9a71461024257806306fdde0314610272578063081812fc14610290578063081c8c44146102c0575b600080fd5b61025c60048036038101906102579190613b46565b610744565b604051610269919061429f565b60405180910390f35b61027a61088e565b60405161028791906142ba565b60405180910390f35b6102aa60048036038101906102a59190613be9565b610920565b6040516102b79190614238565b60405180910390f35b6102c86109a5565b6040516102d591906142ba565b60405180910390f35b6102f860048036038101906102f39190613a8e565b610a33565b005b610302610b4c565b60405161030f91906146f7565b60405180910390f35b610320610b56565b60405161032d9190614712565b60405180910390f35b610350600480360381019061034b9190613978565b610b69565b005b61036c60048036038101906103679190613be9565b610b79565b005b61038860048036038101906103839190613c16565b610c57565b005b6103a4600480360381019061039f9190613a8e565b610cf1565b6040516103b191906146f7565b60405180910390f35b6103d460048036038101906103cf9190613be9565b610eef565b005b6103f060048036038101906103eb9190613978565b6110cb565b005b61040c60048036038101906104079190613be9565b6110eb565b60405161041991906146f7565b60405180910390f35b61042a61113e565b604051610437919061429f565b60405180910390f35b61045a60048036038101906104559190613ba0565b611151565b005b61047660048036038101906104719190613be9565b6111e7565b6040516104839190614238565b60405180910390f35b6104a660048036038101906104a1919061390b565b6111fd565b6040516104b391906146f7565b60405180910390f35b6104c46112e6565b005b6104ce61136e565b6040516104db91906146f7565b60405180910390f35b6104ec611392565b6040516104f991906146f7565b60405180910390f35b61050a611397565b6040516105179190614238565b60405180910390f35b61053a60048036038101906105359190613be9565b6113c0565b60405161054791906146dc565b60405180910390f35b6105586113d8565b60405161056591906142ba565b60405180910390f35b61058860048036038101906105839190613a4e565b61146a565b005b6105926115eb565b005b6105ae60048036038101906105a9919061390b565b611684565b6040516105bb91906146f7565b60405180910390f35b6105cc61169c565b005b6105e860048036038101906105e39190613ace565b61181d565b005b61060460048036038101906105ff9190613be9565b611979565b005b610620600480360381019061061b91906139cb565b611b34565b005b61063c60048036038101906106379190613be9565b611b90565b60405161064991906142ba565b60405180910390f35b61065a611d1d565b60405161066791906146f7565b60405180910390f35b61068a6004803603810190610685919061390b565b611d23565b60405161069791906146f7565b60405180910390f35b6106ba60048036038101906106b59190613938565b611d35565b6040516106c7919061429f565b60405180910390f35b6106ea60048036038101906106e59190613ba0565b611dc9565b005b6107066004803603810190610701919061390b565b611e5f565b005b610710611f57565b60405161071d91906142ba565b60405180910390f35b61072e611f90565b60405161073b91906146f7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610887575061088682611fb4565b5b9050919050565b60606002805461089d90614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614aac565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261201e565b61096a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109619061467c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c80546109b290614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546109de90614aac565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b505050505081565b6000610a3e826111e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa69061451c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ace61202c565b73ffffffffffffffffffffffffffffffffffffffff161480610afd5750610afc81610af761202c565b611d35565b5b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906143dc565b60405180910390fd5b610b47838383612034565b505050565b6000600154905090565b600a60009054906101000a900460ff1681565b610b748383836120e6565b505050565b610b8161202c565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611397565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061449c565b60405180910390fd5b60026009541415610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061463c565b60405180910390fd5b6002600981905550610c4c8161269f565b600160098190555050565b610c5f61202c565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611397565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061449c565b60405180910390fd5b80600a60006101000a81548160ff021916908360ff16021790555050565b6000610cfc836111fd565b8210610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906142dc565b60405180910390fd5b6000610d47610b4c565b905060008060005b83811015610ead576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e995786841415610e8a578195505050505050610ee9565b8380610e9590614b0f565b9450505b508080610ea590614b0f565b915050610d4f565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906145fc565b60405180910390fd5b92915050565b610ef761202c565b73ffffffffffffffffffffffffffffffffffffffff16610f15611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061449c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610f95610b4c565b610f9f91906148a0565b1115610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145dc565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261100e9190614b58565b1461104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061433c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261107c91906148f6565b905060005b818110156110c6576110b3337f000000000000000000000000000000000000000000000000000000000000000061292d565b80806110be90614b0f565b915050611081565b505050565b6110e683838360405180602001604052806000815250611b34565b505050565b60006110f5610b4c565b8210611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061435c565b60405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b61115961202c565b73ffffffffffffffffffffffffffffffffffffffff16611177611397565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c49061449c565b60405180910390fd5b80600b90805190602001906111e3929190613594565b5050565b60006111f28261294b565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112659061441c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112ee61202c565b73ffffffffffffffffffffffffffffffffffffffff1661130c611397565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061449c565b60405180910390fd5b61136c6000612b4e565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c861361a565b6113d18261294b565b9050919050565b6060600380546113e790614aac565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614aac565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050905090565b61147261202c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906144dc565b60405180910390fd5b80600760006114ed61202c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159a61202c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115df919061429f565b60405180910390a35050565b6115f361202c565b73ffffffffffffffffffffffffffffffffffffffff16611611611397565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061449c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915090505481565b6116a461202c565b73ffffffffffffffffffffffffffffffffffffffff166116c2611397565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061449c565b60405180910390fd5b6002600954141561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061463c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90614223565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061453c565b60405180910390fd5b506001600981905550565b61182561202c565b73ffffffffffffffffffffffffffffffffffffffff16611843611397565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061449c565b60405180910390fd5b80518251146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906146bc565b60405180910390fd5b60005b8251811015611974578181815181106118fc576118fb614c16565b5b6020026020010151600e600085848151811061191b5761191a614c16565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196c90614b0f565b9150506118e0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906143bc565b60405180910390fd5b6002600a60009054906101000a900460ff1660ff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a339061445c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611a66610b4c565b611a7091906148a0565b1115611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa89061443c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611adc33611d23565b611ae691906148a0565b1115611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906145bc565b60405180910390fd5b611b31338261292d565b50565b611b3f8484846120e6565b611b4b84848484612c12565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061455c565b60405180910390fd5b50505050565b6060611b9b8261201e565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906144bc565b60405180910390fd5b60001515600d60009054906101000a900460ff1615151415611c8857600c8054611c0390614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2f90614aac565b8015611c7c5780601f10611c5157610100808354040283529160200191611c7c565b820191906000526020600020905b815481529060010190602001808311611c5f57829003601f168201915b50505050509050611d18565b6000611c92612da9565b90506000815111611cb25760405180602001604052806000815250611d14565b80611cbc84612e3b565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611d04939291906141f2565b6040516020818303038152906040525b9150505b919050565b60085481565b6000611d2e82612f9c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd161202c565b73ffffffffffffffffffffffffffffffffffffffff16611def611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061449c565b60405180910390fd5b80600c9080519060200190611e5b929190613594565b5050565b611e6761202c565b73ffffffffffffffffffffffffffffffffffffffff16611e85611397565b73ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f42906142fc565b60405180910390fd5b611f5481612b4e565b50565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006120f18261294b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661211861202c565b73ffffffffffffffffffffffffffffffffffffffff161480612174575061213d61202c565b73ffffffffffffffffffffffffffffffffffffffff1661215c84610920565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f826000015161218a61202c565b611d35565b5b9050806121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144fc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061447c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab9061437c565b60405180910390fd5b6122c18585856001613085565b6122d16000848460000151612034565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661233f9190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e3919061485a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846124e991906148a0565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561262f5761255f8161201e565b1561262e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612697868686600161308b565b505050505050565b60006008549050600082116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143fc565b60405180910390fd5b6000600183836126f991906148a0565b612703919061495b565b905060017f0000000000000000000000000000000000000000000000000000000000000000612732919061495b565b8111156127695760017f0000000000000000000000000000000000000000000000000000000000000000612766919061495b565b90505b6127728161201e565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061461c565b60405180910390fd5b60008290505b81811161291457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129015760006128348261294b565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061290c90614b0f565b9150506127b7565b5060018161292291906148a0565b600881905550505050565b612947828260405180602001604052806000815250613091565b5050565b61295361361a565b61295c8261201e565b61299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129929061431c565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000083106129ff5760017f0000000000000000000000000000000000000000000000000000000000000000846129f2919061495b565b6129fc91906148a0565b90505b60008390505b818110612b0d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af957809350505050612b49565b508080612b0590614a82565b915050612a05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409061465c565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c338473ffffffffffffffffffffffffffffffffffffffff16613571565b15612d9c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c5c61202c565b8786866040518563ffffffff1660e01b8152600401612c7e9493929190614253565b602060405180830381600087803b158015612c9857600080fd5b505af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190613b73565b60015b612d4c573d8060008114612cf9576040519150601f19603f3d011682016040523d82523d6000602084013e612cfe565b606091505b50600081511415612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b9061455c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da1565b600190505b949350505050565b6060600b8054612db890614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054612de490614aac565b8015612e315780601f10612e0657610100808354040283529160200191612e31565b820191906000526020600020905b815481529060010190602001808311612e1457829003601f168201915b5050505050905090565b60606000821415612e83576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f97565b600082905060005b60008214612eb5578080612e9e90614b0f565b915050600a82612eae91906148f6565b9150612e8b565b60008167ffffffffffffffff811115612ed157612ed0614c45565b5b6040519080825280601f01601f191660200182016040528015612f035781602001600182028036833780820191505090505b5090505b60008514612f9057600182612f1c919061495b565b9150600a85612f2b9190614b58565b6030612f3791906148a0565b60f81b818381518110612f4d57612f4c614c16565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8991906148f6565b9450612f07565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130049061439c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff9061459c565b60405180910390fd5b6131118161201e565b15613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061457c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ab9061469c565b60405180910390fd5b6131c16000858386613085565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132be919061485a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e5919061485a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f46000888488612c12565b613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9061455c565b60405180910390fd5b818061353e90614b0f565b925050808061354c90614b0f565b915050613483565b5080600181905550613569600087858861308b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135a090614aac565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b5090506136169190613654565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366d576000816000905550600101613655565b5090565b600061368461367f84614752565b61472d565b905080838252602082019050828560208602820111156136a7576136a6614c79565b5b60005b858110156136d757816136bd88826137d5565b8452602084019350602083019250506001810190506136aa565b5050509392505050565b60006136f46136ef8461477e565b61472d565b9050808382526020820190508285602086028201111561371757613716614c79565b5b60005b85811015613747578161372d88826138e1565b84526020840193506020830192505060018101905061371a565b5050509392505050565b600061376461375f846147aa565b61472d565b9050828152602081018484840111156137805761377f614c7e565b5b61378b848285614a40565b509392505050565b60006137a66137a1846147db565b61472d565b9050828152602081018484840111156137c2576137c1614c7e565b5b6137cd848285614a40565b509392505050565b6000813590506137e481615505565b92915050565b600082601f8301126137ff576137fe614c74565b5b813561380f848260208601613671565b91505092915050565b600082601f83011261382d5761382c614c74565b5b813561383d8482602086016136e1565b91505092915050565b6000813590506138558161551c565b92915050565b60008135905061386a81615533565b92915050565b60008151905061387f81615533565b92915050565b600082601f83011261389a57613899614c74565b5b81356138aa848260208601613751565b91505092915050565b600082601f8301126138c8576138c7614c74565b5b81356138d8848260208601613793565b91505092915050565b6000813590506138f08161554a565b92915050565b60008135905061390581615561565b92915050565b60006020828403121561392157613920614c88565b5b600061392f848285016137d5565b91505092915050565b6000806040838503121561394f5761394e614c88565b5b600061395d858286016137d5565b925050602061396e858286016137d5565b9150509250929050565b60008060006060848603121561399157613990614c88565b5b600061399f868287016137d5565b93505060206139b0868287016137d5565b92505060406139c1868287016138e1565b9150509250925092565b600080600080608085870312156139e5576139e4614c88565b5b60006139f3878288016137d5565b9450506020613a04878288016137d5565b9350506040613a15878288016138e1565b925050606085013567ffffffffffffffff811115613a3657613a35614c83565b5b613a4287828801613885565b91505092959194509250565b60008060408385031215613a6557613a64614c88565b5b6000613a73858286016137d5565b9250506020613a8485828601613846565b9150509250929050565b60008060408385031215613aa557613aa4614c88565b5b6000613ab3858286016137d5565b9250506020613ac4858286016138e1565b9150509250929050565b60008060408385031215613ae557613ae4614c88565b5b600083013567ffffffffffffffff811115613b0357613b02614c83565b5b613b0f858286016137ea565b925050602083013567ffffffffffffffff811115613b3057613b2f614c83565b5b613b3c85828601613818565b9150509250929050565b600060208284031215613b5c57613b5b614c88565b5b6000613b6a8482850161385b565b91505092915050565b600060208284031215613b8957613b88614c88565b5b6000613b9784828501613870565b91505092915050565b600060208284031215613bb657613bb5614c88565b5b600082013567ffffffffffffffff811115613bd457613bd3614c83565b5b613be0848285016138b3565b91505092915050565b600060208284031215613bff57613bfe614c88565b5b6000613c0d848285016138e1565b91505092915050565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a848285016138f6565b91505092915050565b613c4c8161498f565b82525050565b613c5b8161498f565b82525050565b613c6a816149a1565b82525050565b6000613c7b8261480c565b613c858185614822565b9350613c95818560208601614a4f565b613c9e81614c8d565b840191505092915050565b6000613cb482614817565b613cbe818561483e565b9350613cce818560208601614a4f565b613cd781614c8d565b840191505092915050565b6000613ced82614817565b613cf7818561484f565b9350613d07818560208601614a4f565b80840191505092915050565b6000613d2060228361483e565b9150613d2b82614c9e565b604082019050919050565b6000613d4360268361483e565b9150613d4e82614ced565b604082019050919050565b6000613d66602a8361483e565b9150613d7182614d3c565b604082019050919050565b6000613d89602c8361483e565b9150613d9482614d8b565b604082019050919050565b6000613dac60238361483e565b9150613db782614dda565b604082019050919050565b6000613dcf60258361483e565b9150613dda82614e29565b604082019050919050565b6000613df260318361483e565b9150613dfd82614e78565b604082019050919050565b6000613e15601e8361483e565b9150613e2082614ec7565b602082019050919050565b6000613e3860398361483e565b9150613e4382614ef0565b604082019050919050565b6000613e5b60188361483e565b9150613e6682614f3f565b602082019050919050565b6000613e7e602b8361483e565b9150613e8982614f68565b604082019050919050565b6000613ea160128361483e565b9150613eac82614fb7565b602082019050919050565b6000613ec460148361483e565b9150613ecf82614fe0565b602082019050919050565b6000613ee760268361483e565b9150613ef282615009565b604082019050919050565b6000613f0a60208361483e565b9150613f1582615058565b602082019050919050565b6000613f2d602f8361483e565b9150613f3882615081565b604082019050919050565b6000613f50601a8361483e565b9150613f5b826150d0565b602082019050919050565b6000613f7360328361483e565b9150613f7e826150f9565b604082019050919050565b6000613f9660228361483e565b9150613fa182615148565b604082019050919050565b6000613fb9600083614833565b9150613fc482615197565b600082019050919050565b6000613fdc60108361483e565b9150613fe78261519a565b602082019050919050565b6000613fff60338361483e565b915061400a826151c3565b604082019050919050565b6000614022601d8361483e565b915061402d82615212565b602082019050919050565b600061404560218361483e565b91506140508261523b565b604082019050919050565b600061406860168361483e565b91506140738261528a565b602082019050919050565b600061408b60278361483e565b9150614096826152b3565b604082019050919050565b60006140ae602e8361483e565b91506140b982615302565b604082019050919050565b60006140d160268361483e565b91506140dc82615351565b604082019050919050565b60006140f4601f8361483e565b91506140ff826153a0565b602082019050919050565b6000614117602f8361483e565b9150614122826153c9565b604082019050919050565b600061413a602d8361483e565b915061414582615418565b604082019050919050565b600061415d60228361483e565b915061416882615467565b604082019050919050565b600061418060288361483e565b915061418b826154b6565b604082019050919050565b6040820160008201516141ac6000850182613c43565b5060208201516141bf60208501826141d4565b50505050565b6141ce81614a15565b82525050565b6141dd81614a1f565b82525050565b6141ec81614a33565b82525050565b60006141fe8286613ce2565b915061420a8285613ce2565b91506142168284613ce2565b9150819050949350505050565b600061422e82613fac565b9150819050919050565b600060208201905061424d6000830184613c52565b92915050565b60006080820190506142686000830187613c52565b6142756020830186613c52565b61428260408301856141c5565b81810360608301526142948184613c70565b905095945050505050565b60006020820190506142b46000830184613c61565b92915050565b600060208201905081810360008301526142d48184613ca9565b905092915050565b600060208201905081810360008301526142f581613d13565b9050919050565b6000602082019050818103600083015261431581613d36565b9050919050565b6000602082019050818103600083015261433581613d59565b9050919050565b6000602082019050818103600083015261435581613d7c565b9050919050565b6000602082019050818103600083015261437581613d9f565b9050919050565b6000602082019050818103600083015261439581613dc2565b9050919050565b600060208201905081810360008301526143b581613de5565b9050919050565b600060208201905081810360008301526143d581613e08565b9050919050565b600060208201905081810360008301526143f581613e2b565b9050919050565b6000602082019050818103600083015261441581613e4e565b9050919050565b6000602082019050818103600083015261443581613e71565b9050919050565b6000602082019050818103600083015261445581613e94565b9050919050565b6000602082019050818103600083015261447581613eb7565b9050919050565b6000602082019050818103600083015261449581613eda565b9050919050565b600060208201905081810360008301526144b581613efd565b9050919050565b600060208201905081810360008301526144d581613f20565b9050919050565b600060208201905081810360008301526144f581613f43565b9050919050565b6000602082019050818103600083015261451581613f66565b9050919050565b6000602082019050818103600083015261453581613f89565b9050919050565b6000602082019050818103600083015261455581613fcf565b9050919050565b6000602082019050818103600083015261457581613ff2565b9050919050565b6000602082019050818103600083015261459581614015565b9050919050565b600060208201905081810360008301526145b581614038565b9050919050565b600060208201905081810360008301526145d58161405b565b9050919050565b600060208201905081810360008301526145f58161407e565b9050919050565b60006020820190508181036000830152614615816140a1565b9050919050565b60006020820190508181036000830152614635816140c4565b9050919050565b60006020820190508181036000830152614655816140e7565b9050919050565b600060208201905081810360008301526146758161410a565b9050919050565b600060208201905081810360008301526146958161412d565b9050919050565b600060208201905081810360008301526146b581614150565b9050919050565b600060208201905081810360008301526146d581614173565b9050919050565b60006040820190506146f16000830184614196565b92915050565b600060208201905061470c60008301846141c5565b92915050565b600060208201905061472760008301846141e3565b92915050565b6000614737614748565b90506147438282614ade565b919050565b6000604051905090565b600067ffffffffffffffff82111561476d5761476c614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479957614798614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c5576147c4614c45565b5b6147ce82614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147f6576147f5614c45565b5b6147ff82614c8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614865826149d9565b9150614870836149d9565b9250826fffffffffffffffffffffffffffffffff0382111561489557614894614b89565b5b828201905092915050565b60006148ab82614a15565b91506148b683614a15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148eb576148ea614b89565b5b828201905092915050565b600061490182614a15565b915061490c83614a15565b92508261491c5761491b614bb8565b5b828204905092915050565b6000614932826149d9565b915061493d836149d9565b9250828210156149505761494f614b89565b5b828203905092915050565b600061496682614a15565b915061497183614a15565b92508282101561498457614983614b89565b5b828203905092915050565b600061499a826149f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a6d578082015181840152602081019050614a52565b83811115614a7c576000848401525b50505050565b6000614a8d82614a15565b91506000821415614aa157614aa0614b89565b5b600182039050919050565b60006002820490506001821680614ac457607f821691505b60208210811415614ad857614ad7614be7565b5b50919050565b614ae782614c8d565b810181811067ffffffffffffffff82111715614b0657614b05614c45565b5b80604052505050565b6000614b1a82614a15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4d57614b4c614b89565b5b600182019050919050565b6000614b6382614a15565b9150614b6e83614a15565b925082614b7e57614b7d614bb8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f74207075626c696373616c65207068617365000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b61550e8161498f565b811461551957600080fd5b50565b615525816149a1565b811461553057600080fd5b50565b61553c816149ad565b811461554757600080fd5b50565b61555381614a15565b811461555e57600080fd5b50565b61556a81614a33565b811461557557600080fd5b5056fea264697066735822122054324b3d59d4831e3dbca51c02e1a7740cc6f03edc041dbb91d9e2650f369ee964736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5470397a3466794258366252366736434a545045756e3875346e706f345467345364516e32696f383466696a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64387a464c556673396a73445656764373747258676756654b656e7a616e77345036504b647948703777783800000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061023d5760003560e01c80638bc35c2f1161013b578063b3ab66b0116100b8578063e985e9c51161007c578063e985e9c5146106a0578063f2c4ce1e146106d0578063f2fde38b146106ec578063f7073c3a14610708578063fbe1aa51146107265761023d565b8063b3ab66b0146105ea578063b88d4fde14610606578063c87b56dd14610622578063d7224ba014610652578063dc33e681146106705761023d565b8063a22cb465116100ff578063a22cb4651461056e578063a475b5dd1461058a578063a7cd52cb14610594578063ac446002146105c4578063b05863d5146105ce5761023d565b80638bc35c2f146104c65780638d859f3e146104e45780638da5cb5b146105025780639231ab2a1461052057806395d89b41146105505761023d565b80632e49d78b116101c9578063518302271161018d578063518302271461042257806355f804b3146104405780636352211e1461045c57806370a082311461048c578063715018a6146104bc5761023d565b80632e49d78b1461036e5780632f745c591461038a578063375a069a146103ba57806342842e0e146103d65780634f6ccce7146103f25761023d565b8063095ea7b311610210578063095ea7b3146102de57806318160ddd146102fa578063200d2ed21461031857806323b872dd146103365780632d20fb60146103525761023d565b806301ffc9a71461024257806306fdde0314610272578063081812fc14610290578063081c8c44146102c0575b600080fd5b61025c60048036038101906102579190613b46565b610744565b604051610269919061429f565b60405180910390f35b61027a61088e565b60405161028791906142ba565b60405180910390f35b6102aa60048036038101906102a59190613be9565b610920565b6040516102b79190614238565b60405180910390f35b6102c86109a5565b6040516102d591906142ba565b60405180910390f35b6102f860048036038101906102f39190613a8e565b610a33565b005b610302610b4c565b60405161030f91906146f7565b60405180910390f35b610320610b56565b60405161032d9190614712565b60405180910390f35b610350600480360381019061034b9190613978565b610b69565b005b61036c60048036038101906103679190613be9565b610b79565b005b61038860048036038101906103839190613c16565b610c57565b005b6103a4600480360381019061039f9190613a8e565b610cf1565b6040516103b191906146f7565b60405180910390f35b6103d460048036038101906103cf9190613be9565b610eef565b005b6103f060048036038101906103eb9190613978565b6110cb565b005b61040c60048036038101906104079190613be9565b6110eb565b60405161041991906146f7565b60405180910390f35b61042a61113e565b604051610437919061429f565b60405180910390f35b61045a60048036038101906104559190613ba0565b611151565b005b61047660048036038101906104719190613be9565b6111e7565b6040516104839190614238565b60405180910390f35b6104a660048036038101906104a1919061390b565b6111fd565b6040516104b391906146f7565b60405180910390f35b6104c46112e6565b005b6104ce61136e565b6040516104db91906146f7565b60405180910390f35b6104ec611392565b6040516104f991906146f7565b60405180910390f35b61050a611397565b6040516105179190614238565b60405180910390f35b61053a60048036038101906105359190613be9565b6113c0565b60405161054791906146dc565b60405180910390f35b6105586113d8565b60405161056591906142ba565b60405180910390f35b61058860048036038101906105839190613a4e565b61146a565b005b6105926115eb565b005b6105ae60048036038101906105a9919061390b565b611684565b6040516105bb91906146f7565b60405180910390f35b6105cc61169c565b005b6105e860048036038101906105e39190613ace565b61181d565b005b61060460048036038101906105ff9190613be9565b611979565b005b610620600480360381019061061b91906139cb565b611b34565b005b61063c60048036038101906106379190613be9565b611b90565b60405161064991906142ba565b60405180910390f35b61065a611d1d565b60405161066791906146f7565b60405180910390f35b61068a6004803603810190610685919061390b565b611d23565b60405161069791906146f7565b60405180910390f35b6106ba60048036038101906106b59190613938565b611d35565b6040516106c7919061429f565b60405180910390f35b6106ea60048036038101906106e59190613ba0565b611dc9565b005b6107066004803603810190610701919061390b565b611e5f565b005b610710611f57565b60405161071d91906142ba565b60405180910390f35b61072e611f90565b60405161073b91906146f7565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610887575061088682611fb4565b5b9050919050565b60606002805461089d90614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614aac565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261201e565b61096a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109619061467c565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600c80546109b290614aac565b80601f01602080910402602001604051908101604052809291908181526020018280546109de90614aac565b8015610a2b5780601f10610a0057610100808354040283529160200191610a2b565b820191906000526020600020905b815481529060010190602001808311610a0e57829003601f168201915b505050505081565b6000610a3e826111e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa69061451c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ace61202c565b73ffffffffffffffffffffffffffffffffffffffff161480610afd5750610afc81610af761202c565b611d35565b5b610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b33906143dc565b60405180910390fd5b610b47838383612034565b505050565b6000600154905090565b600a60009054906101000a900460ff1681565b610b748383836120e6565b505050565b610b8161202c565b73ffffffffffffffffffffffffffffffffffffffff16610b9f611397565b73ffffffffffffffffffffffffffffffffffffffff1614610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061449c565b60405180910390fd5b60026009541415610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061463c565b60405180910390fd5b6002600981905550610c4c8161269f565b600160098190555050565b610c5f61202c565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611397565b73ffffffffffffffffffffffffffffffffffffffff1614610cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cca9061449c565b60405180910390fd5b80600a60006101000a81548160ff021916908360ff16021790555050565b6000610cfc836111fd565b8210610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d34906142dc565b60405180910390fd5b6000610d47610b4c565b905060008060005b83811015610ead576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e4157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e995786841415610e8a578195505050505050610ee9565b8380610e9590614b0f565b9450505b508080610ea590614b0f565b915050610d4f565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee0906145fc565b60405180910390fd5b92915050565b610ef761202c565b73ffffffffffffffffffffffffffffffffffffffff16610f15611397565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f629061449c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000003281610f95610b4c565b610f9f91906148a0565b1115610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906145dc565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058261100e9190614b58565b1461104e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110459061433c565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058261107c91906148f6565b905060005b818110156110c6576110b3337f000000000000000000000000000000000000000000000000000000000000000561292d565b80806110be90614b0f565b915050611081565b505050565b6110e683838360405180602001604052806000815250611b34565b505050565b60006110f5610b4c565b8210611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d9061435c565b60405180910390fd5b819050919050565b600d60009054906101000a900460ff1681565b61115961202c565b73ffffffffffffffffffffffffffffffffffffffff16611177611397565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c49061449c565b60405180910390fd5b80600b90805190602001906111e3929190613594565b5050565b60006111f28261294b565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561126e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112659061441c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6112ee61202c565b73ffffffffffffffffffffffffffffffffffffffff1661130c611397565b73ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061449c565b60405180910390fd5b61136c6000612b4e565b565b7f000000000000000000000000000000000000000000000000000000000000000581565b600081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c861361a565b6113d18261294b565b9050919050565b6060600380546113e790614aac565b80601f016020809104026020016040519081016040528092919081815260200182805461141390614aac565b80156114605780601f1061143557610100808354040283529160200191611460565b820191906000526020600020905b81548152906001019060200180831161144357829003601f168201915b5050505050905090565b61147261202c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906144dc565b60405180910390fd5b80600760006114ed61202c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159a61202c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115df919061429f565b60405180910390a35050565b6115f361202c565b73ffffffffffffffffffffffffffffffffffffffff16611611611397565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061449c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b600e6020528060005260406000206000915090505481565b6116a461202c565b73ffffffffffffffffffffffffffffffffffffffff166116c2611397565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f9061449c565b60405180910390fd5b6002600954141561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061463c565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161178c90614223565b60006040518083038185875af1925050503d80600081146117c9576040519150601f19603f3d011682016040523d82523d6000602084013e6117ce565b606091505b5050905080611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061453c565b60405180910390fd5b506001600981905550565b61182561202c565b73ffffffffffffffffffffffffffffffffffffffff16611843611397565b73ffffffffffffffffffffffffffffffffffffffff1614611899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118909061449c565b60405180910390fd5b80518251146118dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d4906146bc565b60405180910390fd5b60005b8251811015611974578181815181106118fc576118fb614c16565b5b6020026020010151600e600085848151811061191b5761191a614c16565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061196c90614b0f565b9150506118e0565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906143bc565b60405180910390fd5b6002600a60009054906101000a900460ff1660ff1614611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a339061445c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000007d081611a66610b4c565b611a7091906148a0565b1115611ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa89061443c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000581611adc33611d23565b611ae691906148a0565b1115611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e906145bc565b60405180910390fd5b611b31338261292d565b50565b611b3f8484846120e6565b611b4b84848484612c12565b611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061455c565b60405180910390fd5b50505050565b6060611b9b8261201e565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906144bc565b60405180910390fd5b60001515600d60009054906101000a900460ff1615151415611c8857600c8054611c0390614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2f90614aac565b8015611c7c5780601f10611c5157610100808354040283529160200191611c7c565b820191906000526020600020905b815481529060010190602001808311611c5f57829003601f168201915b50505050509050611d18565b6000611c92612da9565b90506000815111611cb25760405180602001604052806000815250611d14565b80611cbc84612e3b565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611d04939291906141f2565b6040516020818303038152906040525b9150505b919050565b60085481565b6000611d2e82612f9c565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd161202c565b73ffffffffffffffffffffffffffffffffffffffff16611def611397565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c9061449c565b60405180910390fd5b80600c9080519060200190611e5b929190613594565b5050565b611e6761202c565b73ffffffffffffffffffffffffffffffffffffffff16611e85611397565b73ffffffffffffffffffffffffffffffffffffffff1614611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed29061449c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f42906142fc565b60405180910390fd5b611f5481612b4e565b50565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b7f000000000000000000000000000000000000000000000000000000000000003281565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006120f18261294b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661211861202c565b73ffffffffffffffffffffffffffffffffffffffff161480612174575061213d61202c565b73ffffffffffffffffffffffffffffffffffffffff1661215c84610920565b73ffffffffffffffffffffffffffffffffffffffff16145b80612190575061218f826000015161218a61202c565b611d35565b5b9050806121d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c9906144fc565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b9061447c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab9061437c565b60405180910390fd5b6122c18585856001613085565b6122d16000848460000151612034565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661233f9190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166123e3919061485a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846124e991906148a0565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561262f5761255f8161201e565b1561262e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612697868686600161308b565b505050505050565b60006008549050600082116126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143fc565b60405180910390fd5b6000600183836126f991906148a0565b612703919061495b565b905060017f00000000000000000000000000000000000000000000000000000000000007d0612732919061495b565b8111156127695760017f00000000000000000000000000000000000000000000000000000000000007d0612766919061495b565b90505b6127728161201e565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061461c565b60405180910390fd5b60008290505b81811161291457600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129015760006128348261294b565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b808061290c90614b0f565b9150506127b7565b5060018161292291906148a0565b600881905550505050565b612947828260405180602001604052806000815250613091565b5050565b61295361361a565b61295c8261201e565b61299b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129929061431c565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000583106129ff5760017f0000000000000000000000000000000000000000000000000000000000000005846129f2919061495b565b6129fc91906148a0565b90505b60008390505b818110612b0d576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612af957809350505050612b49565b508080612b0590614a82565b915050612a05565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409061465c565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612c338473ffffffffffffffffffffffffffffffffffffffff16613571565b15612d9c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c5c61202c565b8786866040518563ffffffff1660e01b8152600401612c7e9493929190614253565b602060405180830381600087803b158015612c9857600080fd5b505af1925050508015612cc957506040513d601f19601f82011682018060405250810190612cc69190613b73565b60015b612d4c573d8060008114612cf9576040519150601f19603f3d011682016040523d82523d6000602084013e612cfe565b606091505b50600081511415612d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3b9061455c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612da1565b600190505b949350505050565b6060600b8054612db890614aac565b80601f0160208091040260200160405190810160405280929190818152602001828054612de490614aac565b8015612e315780601f10612e0657610100808354040283529160200191612e31565b820191906000526020600020905b815481529060010190602001808311612e1457829003601f168201915b5050505050905090565b60606000821415612e83576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f97565b600082905060005b60008214612eb5578080612e9e90614b0f565b915050600a82612eae91906148f6565b9150612e8b565b60008167ffffffffffffffff811115612ed157612ed0614c45565b5b6040519080825280601f01601f191660200182016040528015612f035781602001600182028036833780820191505090505b5090505b60008514612f9057600182612f1c919061495b565b9150600a85612f2b9190614b58565b6030612f3791906148a0565b60f81b818381518110612f4d57612f4c614c16565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8991906148f6565b9450612f07565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561300d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130049061439c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff9061459c565b60405180910390fd5b6131118161201e565b15613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061457c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000058311156131b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ab9061469c565b60405180910390fd5b6131c16000858386613085565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132be919061485a565b6fffffffffffffffffffffffffffffffff1681526020018583602001516132e5919061485a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561355457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134f46000888488612c12565b613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9061455c565b60405180910390fd5b818061353e90614b0f565b925050808061354c90614b0f565b915050613483565b5080600181905550613569600087858861308b565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546135a090614aac565b90600052602060002090601f0160209004810192826135c25760008555613609565b82601f106135db57805160ff1916838001178555613609565b82800160010185558215613609579182015b828111156136085782518255916020019190600101906135ed565b5b5090506136169190613654565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561366d576000816000905550600101613655565b5090565b600061368461367f84614752565b61472d565b905080838252602082019050828560208602820111156136a7576136a6614c79565b5b60005b858110156136d757816136bd88826137d5565b8452602084019350602083019250506001810190506136aa565b5050509392505050565b60006136f46136ef8461477e565b61472d565b9050808382526020820190508285602086028201111561371757613716614c79565b5b60005b85811015613747578161372d88826138e1565b84526020840193506020830192505060018101905061371a565b5050509392505050565b600061376461375f846147aa565b61472d565b9050828152602081018484840111156137805761377f614c7e565b5b61378b848285614a40565b509392505050565b60006137a66137a1846147db565b61472d565b9050828152602081018484840111156137c2576137c1614c7e565b5b6137cd848285614a40565b509392505050565b6000813590506137e481615505565b92915050565b600082601f8301126137ff576137fe614c74565b5b813561380f848260208601613671565b91505092915050565b600082601f83011261382d5761382c614c74565b5b813561383d8482602086016136e1565b91505092915050565b6000813590506138558161551c565b92915050565b60008135905061386a81615533565b92915050565b60008151905061387f81615533565b92915050565b600082601f83011261389a57613899614c74565b5b81356138aa848260208601613751565b91505092915050565b600082601f8301126138c8576138c7614c74565b5b81356138d8848260208601613793565b91505092915050565b6000813590506138f08161554a565b92915050565b60008135905061390581615561565b92915050565b60006020828403121561392157613920614c88565b5b600061392f848285016137d5565b91505092915050565b6000806040838503121561394f5761394e614c88565b5b600061395d858286016137d5565b925050602061396e858286016137d5565b9150509250929050565b60008060006060848603121561399157613990614c88565b5b600061399f868287016137d5565b93505060206139b0868287016137d5565b92505060406139c1868287016138e1565b9150509250925092565b600080600080608085870312156139e5576139e4614c88565b5b60006139f3878288016137d5565b9450506020613a04878288016137d5565b9350506040613a15878288016138e1565b925050606085013567ffffffffffffffff811115613a3657613a35614c83565b5b613a4287828801613885565b91505092959194509250565b60008060408385031215613a6557613a64614c88565b5b6000613a73858286016137d5565b9250506020613a8485828601613846565b9150509250929050565b60008060408385031215613aa557613aa4614c88565b5b6000613ab3858286016137d5565b9250506020613ac4858286016138e1565b9150509250929050565b60008060408385031215613ae557613ae4614c88565b5b600083013567ffffffffffffffff811115613b0357613b02614c83565b5b613b0f858286016137ea565b925050602083013567ffffffffffffffff811115613b3057613b2f614c83565b5b613b3c85828601613818565b9150509250929050565b600060208284031215613b5c57613b5b614c88565b5b6000613b6a8482850161385b565b91505092915050565b600060208284031215613b8957613b88614c88565b5b6000613b9784828501613870565b91505092915050565b600060208284031215613bb657613bb5614c88565b5b600082013567ffffffffffffffff811115613bd457613bd3614c83565b5b613be0848285016138b3565b91505092915050565b600060208284031215613bff57613bfe614c88565b5b6000613c0d848285016138e1565b91505092915050565b600060208284031215613c2c57613c2b614c88565b5b6000613c3a848285016138f6565b91505092915050565b613c4c8161498f565b82525050565b613c5b8161498f565b82525050565b613c6a816149a1565b82525050565b6000613c7b8261480c565b613c858185614822565b9350613c95818560208601614a4f565b613c9e81614c8d565b840191505092915050565b6000613cb482614817565b613cbe818561483e565b9350613cce818560208601614a4f565b613cd781614c8d565b840191505092915050565b6000613ced82614817565b613cf7818561484f565b9350613d07818560208601614a4f565b80840191505092915050565b6000613d2060228361483e565b9150613d2b82614c9e565b604082019050919050565b6000613d4360268361483e565b9150613d4e82614ced565b604082019050919050565b6000613d66602a8361483e565b9150613d7182614d3c565b604082019050919050565b6000613d89602c8361483e565b9150613d9482614d8b565b604082019050919050565b6000613dac60238361483e565b9150613db782614dda565b604082019050919050565b6000613dcf60258361483e565b9150613dda82614e29565b604082019050919050565b6000613df260318361483e565b9150613dfd82614e78565b604082019050919050565b6000613e15601e8361483e565b9150613e2082614ec7565b602082019050919050565b6000613e3860398361483e565b9150613e4382614ef0565b604082019050919050565b6000613e5b60188361483e565b9150613e6682614f3f565b602082019050919050565b6000613e7e602b8361483e565b9150613e8982614f68565b604082019050919050565b6000613ea160128361483e565b9150613eac82614fb7565b602082019050919050565b6000613ec460148361483e565b9150613ecf82614fe0565b602082019050919050565b6000613ee760268361483e565b9150613ef282615009565b604082019050919050565b6000613f0a60208361483e565b9150613f1582615058565b602082019050919050565b6000613f2d602f8361483e565b9150613f3882615081565b604082019050919050565b6000613f50601a8361483e565b9150613f5b826150d0565b602082019050919050565b6000613f7360328361483e565b9150613f7e826150f9565b604082019050919050565b6000613f9660228361483e565b9150613fa182615148565b604082019050919050565b6000613fb9600083614833565b9150613fc482615197565b600082019050919050565b6000613fdc60108361483e565b9150613fe78261519a565b602082019050919050565b6000613fff60338361483e565b915061400a826151c3565b604082019050919050565b6000614022601d8361483e565b915061402d82615212565b602082019050919050565b600061404560218361483e565b91506140508261523b565b604082019050919050565b600061406860168361483e565b91506140738261528a565b602082019050919050565b600061408b60278361483e565b9150614096826152b3565b604082019050919050565b60006140ae602e8361483e565b91506140b982615302565b604082019050919050565b60006140d160268361483e565b91506140dc82615351565b604082019050919050565b60006140f4601f8361483e565b91506140ff826153a0565b602082019050919050565b6000614117602f8361483e565b9150614122826153c9565b604082019050919050565b600061413a602d8361483e565b915061414582615418565b604082019050919050565b600061415d60228361483e565b915061416882615467565b604082019050919050565b600061418060288361483e565b915061418b826154b6565b604082019050919050565b6040820160008201516141ac6000850182613c43565b5060208201516141bf60208501826141d4565b50505050565b6141ce81614a15565b82525050565b6141dd81614a1f565b82525050565b6141ec81614a33565b82525050565b60006141fe8286613ce2565b915061420a8285613ce2565b91506142168284613ce2565b9150819050949350505050565b600061422e82613fac565b9150819050919050565b600060208201905061424d6000830184613c52565b92915050565b60006080820190506142686000830187613c52565b6142756020830186613c52565b61428260408301856141c5565b81810360608301526142948184613c70565b905095945050505050565b60006020820190506142b46000830184613c61565b92915050565b600060208201905081810360008301526142d48184613ca9565b905092915050565b600060208201905081810360008301526142f581613d13565b9050919050565b6000602082019050818103600083015261431581613d36565b9050919050565b6000602082019050818103600083015261433581613d59565b9050919050565b6000602082019050818103600083015261435581613d7c565b9050919050565b6000602082019050818103600083015261437581613d9f565b9050919050565b6000602082019050818103600083015261439581613dc2565b9050919050565b600060208201905081810360008301526143b581613de5565b9050919050565b600060208201905081810360008301526143d581613e08565b9050919050565b600060208201905081810360008301526143f581613e2b565b9050919050565b6000602082019050818103600083015261441581613e4e565b9050919050565b6000602082019050818103600083015261443581613e71565b9050919050565b6000602082019050818103600083015261445581613e94565b9050919050565b6000602082019050818103600083015261447581613eb7565b9050919050565b6000602082019050818103600083015261449581613eda565b9050919050565b600060208201905081810360008301526144b581613efd565b9050919050565b600060208201905081810360008301526144d581613f20565b9050919050565b600060208201905081810360008301526144f581613f43565b9050919050565b6000602082019050818103600083015261451581613f66565b9050919050565b6000602082019050818103600083015261453581613f89565b9050919050565b6000602082019050818103600083015261455581613fcf565b9050919050565b6000602082019050818103600083015261457581613ff2565b9050919050565b6000602082019050818103600083015261459581614015565b9050919050565b600060208201905081810360008301526145b581614038565b9050919050565b600060208201905081810360008301526145d58161405b565b9050919050565b600060208201905081810360008301526145f58161407e565b9050919050565b60006020820190508181036000830152614615816140a1565b9050919050565b60006020820190508181036000830152614635816140c4565b9050919050565b60006020820190508181036000830152614655816140e7565b9050919050565b600060208201905081810360008301526146758161410a565b9050919050565b600060208201905081810360008301526146958161412d565b9050919050565b600060208201905081810360008301526146b581614150565b9050919050565b600060208201905081810360008301526146d581614173565b9050919050565b60006040820190506146f16000830184614196565b92915050565b600060208201905061470c60008301846141c5565b92915050565b600060208201905061472760008301846141e3565b92915050565b6000614737614748565b90506147438282614ade565b919050565b6000604051905090565b600067ffffffffffffffff82111561476d5761476c614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561479957614798614c45565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147c5576147c4614c45565b5b6147ce82614c8d565b9050602081019050919050565b600067ffffffffffffffff8211156147f6576147f5614c45565b5b6147ff82614c8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614865826149d9565b9150614870836149d9565b9250826fffffffffffffffffffffffffffffffff0382111561489557614894614b89565b5b828201905092915050565b60006148ab82614a15565b91506148b683614a15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148eb576148ea614b89565b5b828201905092915050565b600061490182614a15565b915061490c83614a15565b92508261491c5761491b614bb8565b5b828204905092915050565b6000614932826149d9565b915061493d836149d9565b9250828210156149505761494f614b89565b5b828203905092915050565b600061496682614a15565b915061497183614a15565b92508282101561498457614983614b89565b5b828203905092915050565b600061499a826149f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a6d578082015181840152602081019050614a52565b83811115614a7c576000848401525b50505050565b6000614a8d82614a15565b91506000821415614aa157614aa0614b89565b5b600182039050919050565b60006002820490506001821680614ac457607f821691505b60208210811415614ad857614ad7614be7565b5b50919050565b614ae782614c8d565b810181811067ffffffffffffffff82111715614b0657614b05614c45565b5b80604052505050565b6000614b1a82614a15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4d57614b4c614b89565b5b600182019050919050565b6000614b6382614a15565b9150614b6e83614a15565b925082614b7e57614b7d614bb8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f74207075626c696373616c65207068617365000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b61550e8161498f565b811461551957600080fd5b50565b615525816149a1565b811461553057600080fd5b50565b61553c816149ad565b811461554757600080fd5b50565b61555381614a15565b811461555e57600080fd5b50565b61556a81614a33565b811461557557600080fd5b5056fea264697066735822122054324b3d59d4831e3dbca51c02e1a7740cc6f03edc041dbb91d9e2650f369ee964736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5470397a3466794258366252366736434a545045756e3875346e706f345467345364516e32696f383466696a2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d64387a464c556673396a73445656764373747258676756654b656e7a616e77345036504b647948703777783800000000000000000000000000000000

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 5
Arg [1] : collectionSize_ (uint256): 2000
Arg [2] : amountForDevs_ (uint256): 50
Arg [3] : _tokenBaseURI (string): https://gateway.pinata.cloud/ipfs/QmTp9z4fyBX6bR6g6CJTPEun8u4npo4Tg4SdQn2io84fij/
Arg [4] : _initNotRevealedUri (string): https://gateway.pinata.cloud/ipfs/Qmd8zFLUfs9jsDVVvCstrXggVeKenzanw4P6PKdyHp7wx8

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [1] : 00000000000000000000000000000000000000000000000000000000000007d0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [6] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [7] : 732f516d5470397a3466794258366252366736434a545045756e3875346e706f
Arg [8] : 345467345364516e32696f383466696a2f000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [10] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [11] : 732f516d64387a464c556673396a73445656764373747258676756654b656e7a
Arg [12] : 616e77345036504b647948703777783800000000000000000000000000000000


Deployed Bytecode Sourcemap

42217:3838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27311:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29037:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30562:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30125:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25872:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42465:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31412:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45668:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43772:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26503:744;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45033:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31617:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26035:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42558:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43931:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28860:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27737:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41326:103;;;:::i;:::-;;42279:48;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42375:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40675:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45905:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29192:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43858:67;;;:::i;:::-;;42592:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45481:181;;;:::i;:::-;;44688:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43175:381;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31837:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44267:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36252:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45792:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31167:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44026:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41584:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42419:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42332:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27311:370;27438:4;27483:25;27468:40;;;:11;:40;;;;:99;;;;27534:33;27519:48;;;:11;:48;;;;27468:99;:160;;;;27593:35;27578:50;;;:11;:50;;;;27468:160;:207;;;;27639:36;27663:11;27639:23;:36::i;:::-;27468:207;27454:221;;27311:370;;;:::o;29037:94::-;29091:13;29120:5;29113:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29037:94;:::o;30562:204::-;30630:7;30654:16;30662:7;30654;:16::i;:::-;30646:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30736:15;:24;30752:7;30736:24;;;;;;;;;;;;;;;;;;;;;30729:31;;30562:204;;;:::o;42525:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30125:379::-;30194:13;30210:24;30226:7;30210:15;:24::i;:::-;30194:40;;30255:5;30249:11;;:2;:11;;;;30241:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30340:5;30324:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30349:37;30366:5;30373:12;:10;:12::i;:::-;30349:16;:37::i;:::-;30324:62;30308:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;30470:28;30479:2;30483:7;30492:5;30470:8;:28::i;:::-;30187:317;30125:379;;:::o;25872:94::-;25925:7;25948:12;;25941:19;;25872:94;:::o;42465:23::-;;;;;;;;;;;;;:::o;31412:142::-;31520:28;31530:4;31536:2;31540:7;31520:9;:28::i;:::-;31412:142;;;:::o;45668:118::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45752:28:::2;45771:8;45752:18;:28::i;:::-;22127:1:::1;23081:7;:22;;;;45668:118:::0;:::o;43772:80::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43841:5:::1;43832:6;;:14;;;;;;;;;;;;;;;;;;43772:80:::0;:::o;26503:744::-;26612:7;26647:16;26657:5;26647:9;:16::i;:::-;26639:5;:24;26631:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26709:22;26734:13;:11;:13::i;:::-;26709:38;;26754:19;26784:25;26834:9;26829:350;26853:14;26849:1;:18;26829:350;;;26883:31;26917:11;:14;26929:1;26917:14;;;;;;;;;;;26883:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26970:1;26944:28;;:9;:14;;;:28;;;26940:89;;27005:9;:14;;;26985:34;;26940:89;27062:5;27041:26;;:17;:26;;;27037:135;;;27099:5;27084:11;:20;27080:59;;;27126:1;27119:8;;;;;;;;;27080:59;27149:13;;;;;:::i;:::-;;;;27037:135;26874:305;26869:3;;;;;:::i;:::-;;;;26829:350;;;;27185:56;;;;;;;;;;:::i;:::-;;;;;;;;26503:744;;;;;:::o;45033:442::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45138:13:::1;45126:8;45110:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:41;;45094:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;45258:1;45242:12;45231:8;:23;;;;:::i;:::-;:28;45215:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45328:17;45359:12;45348:8;:23;;;;:::i;:::-;45328:43;;45383:9;45378:92;45402:9;45398:1;:13;45378:92;;;45427:35;45437:10;45449:12;45427:9;:35::i;:::-;45413:3;;;;;:::i;:::-;;;;45378:92;;;;45087:388;45033:442:::0;:::o;31617:157::-;31729:39;31746:4;31752:2;31756:7;31729:39;;;;;;;;;;;;:16;:39::i;:::-;31617:157;;;:::o;26035:177::-;26102:7;26134:13;:11;:13::i;:::-;26126:5;:21;26118:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26201:5;26194:12;;26035:177;;;:::o;42558:27::-;;;;;;;;;;;;;:::o;43931:89::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44011:3:::1;43996:12;:18;;;;;;;;;;;;:::i;:::-;;43931:89:::0;:::o;28860:118::-;28924:7;28947:20;28959:7;28947:11;:20::i;:::-;:25;;;28940:32;;28860:118;;;:::o;27737:211::-;27801:7;27842:1;27825:19;;:5;:19;;;;27817:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27914:12;:19;27927:5;27914:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27906:36;;27899:43;;27737:211;;;:::o;41326:103::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41391:30:::1;41418:1;41391:18;:30::i;:::-;41326:103::o:0;42279:48::-;;;:::o;42375:39::-;42407:7;42375:39;:::o;40675:87::-;40721:7;40748:6;;;;;;;;;;;40741:13;;40675:87;:::o;45905:147::-;45986:21;;:::i;:::-;46026:20;46038:7;46026:11;:20::i;:::-;46019:27;;45905:147;;;:::o;29192:98::-;29248:13;29277:7;29270:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29192:98;:::o;30830:274::-;30933:12;:10;:12::i;:::-;30921:24;;:8;:24;;;;30913:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31030:8;30985:18;:32;31004:12;:10;:12::i;:::-;30985:32;;;;;;;;;;;;;;;:42;31018:8;30985:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31079:8;31050:48;;31065:12;:10;:12::i;:::-;31050:48;;;31089:8;31050:48;;;;;;:::i;:::-;;;;;;;;30830:274;;:::o;43858:67::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43915:4:::1;43904:8;;:15;;;;;;;;;;;;;;;;;;43858:67::o:0;42592:44::-;;;;;;;;;;;;;;;;;:::o;45481:181::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1:::1;22769:7;;:19;;22761:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22171:1;22902:7;:18;;;;45546:12:::2;45564:10;:15;;45587:21;45564:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45545:68;;;45628:7;45620:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45538:124;22127:1:::1;23081:7;:22;;;;45481:181::o:0;44688:339::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44841:8:::1;:15;44821:9;:16;:35;44805:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44926:9;44921:101;44945:9;:16;44941:1;:20;44921:101;;;45003:8;45012:1;45003:11;;;;;;;;:::i;:::-;;;;;;;;44977:9;:23;44987:9;44997:1;44987:12;;;;;;;;:::i;:::-;;;;;;;;44977:23;;;;;;;;;;;;;;;:37;;;;44963:3;;;;;:::i;:::-;;;;44921:101;;;;44688:339:::0;;:::o;43175:381::-;43110:10;43097:23;;:9;:23;;;43089:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43277:1:::1;43267:6;;;;;;;;;;;:11;;;43259:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;43346:14;43334:8;43318:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;43310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43445:23;43433:8;43406:24;43419:10;43406:12;:24::i;:::-;:35;;;;:::i;:::-;:62;;43390:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;43519:31;43529:10;43541:8;43519:9;:31::i;:::-;43175:381:::0;:::o;31837:311::-;31974:28;31984:4;31990:2;31994:7;31974:9;:28::i;:::-;32025:48;32048:4;32054:2;32058:7;32067:5;32025:22;:48::i;:::-;32009:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;31837:311;;;;:::o;44267:415::-;44340:13;44372:16;44380:7;44372;:16::i;:::-;44364:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44466:5;44454:17;;:8;;;;;;;;;;;:17;;;44451:66;;;44493:14;44486:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44451:66;44525:21;44549:10;:8;:10::i;:::-;44525:34;;44599:1;44581:7;44575:21;:25;:101;;;;;;;;;;;;;;;;;44627:7;44636:25;44653:7;44636:16;:25::i;:::-;44663:6;;;;;;;;;;;;;;;;;44610:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44575:101;44568:108;;;44267:415;;;;:::o;36252:43::-;;;;:::o;45792:107::-;45850:7;45873:20;45887:5;45873:13;:20::i;:::-;45866:27;;45792:107;;;:::o;31167:186::-;31289:4;31312:18;:25;31331:5;31312:25;;;;;;;;;;;;;;;:35;31338:8;31312:35;;;;;;;;;;;;;;;;;;;;;;;;;31305:42;;31167:186;;;;:::o;44026:122::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44127:15:::1;44110:14;:32;;;;;;;;;;;;:::i;:::-;;44026:122:::0;:::o;41584:201::-;40906:12;:10;:12::i;:::-;40895:23;;:7;:5;:7::i;:::-;:23;;;40887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41693:1:::1;41673:22;;:8;:22;;;;41665:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41749:28;41768:8;41749:18;:28::i;:::-;41584:201:::0;:::o;42419:39::-;;;;;;;;;;;;;;;;;;;:::o;42332:38::-;;;:::o;13440:157::-;13525:4;13564:25;13549:40;;;:11;:40;;;;13542:47;;13440:157;;;:::o;32387:105::-;32444:4;32474:12;;32464:7;:22;32457:29;;32387:105;;;:::o;23797:98::-;23850:7;23877:10;23870:17;;23797:98;:::o;36074:172::-;36198:2;36171:15;:24;36187:7;36171:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36232:7;36228:2;36212:28;;36221:5;36212:28;;;;;;;;;;;;36074:172;;;:::o;34439:1529::-;34536:35;34574:20;34586:7;34574:11;:20::i;:::-;34536:58;;34603:22;34645:13;:18;;;34629:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;34698:12;:10;:12::i;:::-;34674:36;;:20;34686:7;34674:11;:20::i;:::-;:36;;;34629:81;:142;;;;34721:50;34738:13;:18;;;34758:12;:10;:12::i;:::-;34721:16;:50::i;:::-;34629:142;34603:169;;34797:17;34781:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34929:4;34907:26;;:13;:18;;;:26;;;34891:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;35018:1;35004:16;;:2;:16;;;;34996:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35071:43;35093:4;35099:2;35103:7;35112:1;35071:21;:43::i;:::-;35171:49;35188:1;35192:7;35201:13;:18;;;35171:8;:49::i;:::-;35259:1;35229:12;:18;35242:4;35229:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35295:1;35267:12;:16;35280:2;35267:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35326:43;;;;;;;;35341:2;35326:43;;;;;;35352:15;35326:43;;;;;35303:11;:20;35315:7;35303:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35597:19;35629:1;35619:7;:11;;;;:::i;:::-;35597:33;;35682:1;35641:43;;:11;:24;35653:11;35641:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;35637:236;;;35699:20;35707:11;35699:7;:20::i;:::-;35695:171;;;35759:97;;;;;;;;35786:13;:18;;;35759:97;;;;;;35817:13;:28;;;35759:97;;;;;35732:11;:24;35744:11;35732:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35695:171;35637:236;35905:7;35901:2;35886:27;;35895:4;35886:27;;;;;;;;;;;;35920:42;35941:4;35947:2;35951:7;35960:1;35920:20;:42::i;:::-;34529:1439;;;34439:1529;;;:::o;36400:846::-;36462:25;36490:24;;36462:52;;36540:1;36529:8;:12;36521:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;36577:16;36627:1;36616:8;36596:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;36577:51;;36667:1;36650:14;:18;;;;:::i;:::-;36639:8;:29;36635:81;;;36707:1;36690:14;:18;;;;:::i;:::-;36679:29;;36635:81;36831:17;36839:8;36831:7;:17::i;:::-;36823:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36903:9;36915:17;36903:29;;36898:297;36939:8;36934:1;:13;36898:297;;36998:1;36967:33;;:11;:14;36979:1;36967:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;36963:225;;;37013:31;37047:14;37059:1;37047:11;:14::i;:::-;37013:48;;37089:89;;;;;;;;37116:9;:14;;;37089:89;;;;;;37143:9;:24;;;37089:89;;;;;37072:11;:14;37084:1;37072:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37002:186;36963:225;36949:3;;;;;:::i;:::-;;;;36898:297;;;;37239:1;37228:8;:12;;;;:::i;:::-;37201:24;:39;;;;36455:791;;36400:846;:::o;32498:98::-;32563:27;32573:2;32577:8;32563:27;;;;;;;;;;;;:9;:27::i;:::-;32498:98;;:::o;28200:606::-;28276:21;;:::i;:::-;28317:16;28325:7;28317;:16::i;:::-;28309:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28389:26;28437:12;28426:7;:23;28422:93;;28506:1;28491:12;28481:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;28460:47;;28422:93;28528:12;28543:7;28528:22;;28523:212;28560:18;28552:4;:26;28523:212;;28597:31;28631:11;:17;28643:4;28631:17;;;;;;;;;;;28597:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28687:1;28661:28;;:9;:14;;;:28;;;28657:71;;28709:9;28702:16;;;;;;;28657:71;28588:147;28580:6;;;;;:::i;:::-;;;;28523:212;;;;28743:57;;;;;;;;;;:::i;:::-;;;;;;;;28200:606;;;;:::o;41945:191::-;42019:16;42038:6;;;;;;;;;;;42019:25;;42064:8;42055:6;;:17;;;;;;;;;;;;;;;;;;42119:8;42088:40;;42109:8;42088:40;;;;;;;;;;;;42008:128;41945:191;:::o;37789:690::-;37926:4;37943:15;:2;:13;;;:15::i;:::-;37939:535;;;37998:2;37982:36;;;38019:12;:10;:12::i;:::-;38033:4;38039:7;38048:5;37982:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37969:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38230:1;38213:6;:13;:18;38209:215;;;38246:61;;;;;;;;;;:::i;:::-;;;;;;;;38209:215;38392:6;38386:13;38377:6;38373:2;38369:15;38362:38;37969:464;38114:45;;;38104:55;;;:6;:55;;;;38097:62;;;;;37939:535;38462:4;38455:11;;37789:690;;;;;;;:::o;44154:107::-;44214:13;44243:12;44236:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44154:107;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;27954:240::-;28015:7;28064:1;28047:19;;:5;:19;;;;28031:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;28155:12;:19;28168:5;28155:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28147:41;;28140:48;;27954:240;;;:::o;38941:141::-;;;;;:::o;39468:140::-;;;;;:::o;32935:1272::-;33040:20;33063:12;;33040:35;;33104:1;33090:16;;:2;:16;;;;33082:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33281:21;33289:12;33281:7;:21::i;:::-;33280:22;33272:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33363:12;33351:8;:24;;33343:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:61;33453:1;33457:2;33461:12;33475:8;33423:21;:61::i;:::-;33493:30;33526:12;:16;33539:2;33526:16;;;;;;;;;;;;;;;33493:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33568:119;;;;;;;;33618:8;33588:11;:19;;;:39;;;;:::i;:::-;33568:119;;;;;;33671:8;33636:11;:24;;;:44;;;;:::i;:::-;33568:119;;;;;33549:12;:16;33562:2;33549:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33722:43;;;;;;;;33737:2;33722:43;;;;;;33748:15;33722:43;;;;;33694:11;:25;33706:12;33694:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33774:20;33797:12;33774:35;;33823:9;33818:281;33842:8;33838:1;:12;33818:281;;;33896:12;33892:2;33871:38;;33888:1;33871:38;;;;;;;;;;;;33936:59;33967:1;33971:2;33975:12;33989:5;33936:22;:59::i;:::-;33918:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;34077:14;;;;;:::i;:::-;;;;33852:3;;;;;:::i;:::-;;;;33818:281;;;;34122:12;34107;:27;;;;34141:60;34170:1;34174:2;34178:12;34192:8;34141:20;:60::i;:::-;33033:1174;;;32935:1272;;;:::o;3357:326::-;3417:4;3674:1;3652:7;:19;;;:23;3645:30;;3357:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:135::-;4597:5;4635:6;4622:20;4613:29;;4651:31;4676:5;4651:31;:::i;:::-;4553:135;;;;:::o;4694:329::-;4753:6;4802:2;4790:9;4781:7;4777:23;4773:32;4770:119;;;4808:79;;:::i;:::-;4770:119;4928:1;4953:53;4998:7;4989:6;4978:9;4974:22;4953:53;:::i;:::-;4943:63;;4899:117;4694:329;;;;:::o;5029:474::-;5097:6;5105;5154:2;5142:9;5133:7;5129:23;5125:32;5122:119;;;5160:79;;:::i;:::-;5122:119;5280:1;5305:53;5350:7;5341:6;5330:9;5326:22;5305:53;:::i;:::-;5295:63;;5251:117;5407:2;5433:53;5478:7;5469:6;5458:9;5454:22;5433:53;:::i;:::-;5423:63;;5378:118;5029:474;;;;;:::o;5509:619::-;5586:6;5594;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;6032:2;6058:53;6103:7;6094:6;6083:9;6079:22;6058:53;:::i;:::-;6048:63;;6003:118;5509:619;;;;;:::o;6134:943::-;6229:6;6237;6245;6253;6302:3;6290:9;6281:7;6277:23;6273:33;6270:120;;;6309:79;;:::i;:::-;6270:120;6429:1;6454:53;6499:7;6490:6;6479:9;6475:22;6454:53;:::i;:::-;6444:63;;6400:117;6556:2;6582:53;6627:7;6618:6;6607:9;6603:22;6582:53;:::i;:::-;6572:63;;6527:118;6684:2;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6655:118;6840:2;6829:9;6825:18;6812:32;6871:18;6863:6;6860:30;6857:117;;;6893:79;;:::i;:::-;6857:117;6998:62;7052:7;7043:6;7032:9;7028:22;6998:62;:::i;:::-;6988:72;;6783:287;6134:943;;;;;;;:::o;7083:468::-;7148:6;7156;7205:2;7193:9;7184:7;7180:23;7176:32;7173:119;;;7211:79;;:::i;:::-;7173:119;7331:1;7356:53;7401:7;7392:6;7381:9;7377:22;7356:53;:::i;:::-;7346:63;;7302:117;7458:2;7484:50;7526:7;7517:6;7506:9;7502:22;7484:50;:::i;:::-;7474:60;;7429:115;7083:468;;;;;:::o;7557:474::-;7625:6;7633;7682:2;7670:9;7661:7;7657:23;7653:32;7650:119;;;7688:79;;:::i;:::-;7650:119;7808:1;7833:53;7878:7;7869:6;7858:9;7854:22;7833:53;:::i;:::-;7823:63;;7779:117;7935:2;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7906:118;7557:474;;;;;:::o;8037:894::-;8155:6;8163;8212:2;8200:9;8191:7;8187:23;8183:32;8180:119;;;8218:79;;:::i;:::-;8180:119;8366:1;8355:9;8351:17;8338:31;8396:18;8388:6;8385:30;8382:117;;;8418:79;;:::i;:::-;8382:117;8523:78;8593:7;8584:6;8573:9;8569:22;8523:78;:::i;:::-;8513:88;;8309:302;8678:2;8667:9;8663:18;8650:32;8709:18;8701:6;8698:30;8695:117;;;8731:79;;:::i;:::-;8695:117;8836:78;8906:7;8897:6;8886:9;8882:22;8836:78;:::i;:::-;8826:88;;8621:303;8037:894;;;;;:::o;8937:327::-;8995:6;9044:2;9032:9;9023:7;9019:23;9015:32;9012:119;;;9050:79;;:::i;:::-;9012:119;9170:1;9195:52;9239:7;9230:6;9219:9;9215:22;9195:52;:::i;:::-;9185:62;;9141:116;8937:327;;;;:::o;9270:349::-;9339:6;9388:2;9376:9;9367:7;9363:23;9359:32;9356:119;;;9394:79;;:::i;:::-;9356:119;9514:1;9539:63;9594:7;9585:6;9574:9;9570:22;9539:63;:::i;:::-;9529:73;;9485:127;9270:349;;;;:::o;9625:509::-;9694:6;9743:2;9731:9;9722:7;9718:23;9714:32;9711:119;;;9749:79;;:::i;:::-;9711:119;9897:1;9886:9;9882:17;9869:31;9927:18;9919:6;9916:30;9913:117;;;9949:79;;:::i;:::-;9913:117;10054:63;10109:7;10100:6;10089:9;10085:22;10054:63;:::i;:::-;10044:73;;9840:287;9625:509;;;;:::o;10140:329::-;10199:6;10248:2;10236:9;10227:7;10223:23;10219:32;10216:119;;;10254:79;;:::i;:::-;10216:119;10374:1;10399:53;10444:7;10435:6;10424:9;10420:22;10399:53;:::i;:::-;10389:63;;10345:117;10140:329;;;;:::o;10475:325::-;10532:6;10581:2;10569:9;10560:7;10556:23;10552:32;10549:119;;;10587:79;;:::i;:::-;10549:119;10707:1;10732:51;10775:7;10766:6;10755:9;10751:22;10732:51;:::i;:::-;10722:61;;10678:115;10475:325;;;;:::o;10806:108::-;10883:24;10901:5;10883:24;:::i;:::-;10878:3;10871:37;10806:108;;:::o;10920:118::-;11007:24;11025:5;11007:24;:::i;:::-;11002:3;10995:37;10920:118;;:::o;11044:109::-;11125:21;11140:5;11125:21;:::i;:::-;11120:3;11113:34;11044:109;;:::o;11159:360::-;11245:3;11273:38;11305:5;11273:38;:::i;:::-;11327:70;11390:6;11385:3;11327:70;:::i;:::-;11320:77;;11406:52;11451:6;11446:3;11439:4;11432:5;11428:16;11406:52;:::i;:::-;11483:29;11505:6;11483:29;:::i;:::-;11478:3;11474:39;11467:46;;11249:270;11159:360;;;;:::o;11525:364::-;11613:3;11641:39;11674:5;11641:39;:::i;:::-;11696:71;11760:6;11755:3;11696:71;:::i;:::-;11689:78;;11776:52;11821:6;11816:3;11809:4;11802:5;11798:16;11776:52;:::i;:::-;11853:29;11875:6;11853:29;:::i;:::-;11848:3;11844:39;11837:46;;11617:272;11525:364;;;;:::o;11895:377::-;12001:3;12029:39;12062:5;12029:39;:::i;:::-;12084:89;12166:6;12161:3;12084:89;:::i;:::-;12077:96;;12182:52;12227:6;12222:3;12215:4;12208:5;12204:16;12182:52;:::i;:::-;12259:6;12254:3;12250:16;12243:23;;12005:267;11895:377;;;;:::o;12278:366::-;12420:3;12441:67;12505:2;12500:3;12441:67;:::i;:::-;12434:74;;12517:93;12606:3;12517:93;:::i;:::-;12635:2;12630:3;12626:12;12619:19;;12278:366;;;:::o;12650:::-;12792:3;12813:67;12877:2;12872:3;12813:67;:::i;:::-;12806:74;;12889:93;12978:3;12889:93;:::i;:::-;13007:2;13002:3;12998:12;12991:19;;12650:366;;;:::o;13022:::-;13164:3;13185:67;13249:2;13244:3;13185:67;:::i;:::-;13178:74;;13261:93;13350:3;13261:93;:::i;:::-;13379:2;13374:3;13370:12;13363:19;;13022:366;;;:::o;13394:::-;13536:3;13557:67;13621:2;13616:3;13557:67;:::i;:::-;13550:74;;13633:93;13722:3;13633:93;:::i;:::-;13751:2;13746:3;13742:12;13735:19;;13394:366;;;:::o;13766:::-;13908:3;13929:67;13993:2;13988:3;13929:67;:::i;:::-;13922:74;;14005:93;14094:3;14005:93;:::i;:::-;14123:2;14118:3;14114:12;14107:19;;13766:366;;;:::o;14138:::-;14280:3;14301:67;14365:2;14360:3;14301:67;:::i;:::-;14294:74;;14377:93;14466:3;14377:93;:::i;:::-;14495:2;14490:3;14486:12;14479:19;;14138:366;;;:::o;14510:::-;14652:3;14673:67;14737:2;14732:3;14673:67;:::i;:::-;14666:74;;14749:93;14838:3;14749:93;:::i;:::-;14867:2;14862:3;14858:12;14851:19;;14510:366;;;:::o;14882:::-;15024:3;15045:67;15109:2;15104:3;15045:67;:::i;:::-;15038:74;;15121:93;15210:3;15121:93;:::i;:::-;15239:2;15234:3;15230:12;15223:19;;14882:366;;;:::o;15254:::-;15396:3;15417:67;15481:2;15476:3;15417:67;:::i;:::-;15410:74;;15493:93;15582:3;15493:93;:::i;:::-;15611:2;15606:3;15602:12;15595:19;;15254:366;;;:::o;15626:::-;15768:3;15789:67;15853:2;15848:3;15789:67;:::i;:::-;15782:74;;15865:93;15954:3;15865:93;:::i;:::-;15983:2;15978:3;15974:12;15967:19;;15626:366;;;:::o;15998:::-;16140:3;16161:67;16225:2;16220:3;16161:67;:::i;:::-;16154:74;;16237:93;16326:3;16237:93;:::i;:::-;16355:2;16350:3;16346:12;16339:19;;15998:366;;;:::o;16370:::-;16512:3;16533:67;16597:2;16592:3;16533:67;:::i;:::-;16526:74;;16609:93;16698:3;16609:93;:::i;:::-;16727:2;16722:3;16718:12;16711:19;;16370:366;;;:::o;16742:::-;16884:3;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;16981:93;17070:3;16981:93;:::i;:::-;17099:2;17094:3;17090:12;17083:19;;16742:366;;;:::o;17114:::-;17256:3;17277:67;17341:2;17336:3;17277:67;:::i;:::-;17270:74;;17353:93;17442:3;17353:93;:::i;:::-;17471:2;17466:3;17462:12;17455:19;;17114:366;;;:::o;17486:::-;17628:3;17649:67;17713:2;17708:3;17649:67;:::i;:::-;17642:74;;17725:93;17814:3;17725:93;:::i;:::-;17843:2;17838:3;17834:12;17827:19;;17486:366;;;:::o;17858:::-;18000:3;18021:67;18085:2;18080:3;18021:67;:::i;:::-;18014:74;;18097:93;18186:3;18097:93;:::i;:::-;18215:2;18210:3;18206:12;18199:19;;17858:366;;;:::o;18230:::-;18372:3;18393:67;18457:2;18452:3;18393:67;:::i;:::-;18386:74;;18469:93;18558:3;18469:93;:::i;:::-;18587:2;18582:3;18578:12;18571:19;;18230:366;;;:::o;18602:::-;18744:3;18765:67;18829:2;18824:3;18765:67;:::i;:::-;18758:74;;18841:93;18930:3;18841:93;:::i;:::-;18959:2;18954:3;18950:12;18943:19;;18602:366;;;:::o;18974:::-;19116:3;19137:67;19201:2;19196:3;19137:67;:::i;:::-;19130:74;;19213:93;19302:3;19213:93;:::i;:::-;19331:2;19326:3;19322:12;19315:19;;18974:366;;;:::o;19346:398::-;19505:3;19526:83;19607:1;19602:3;19526:83;:::i;:::-;19519:90;;19618:93;19707:3;19618:93;:::i;:::-;19736:1;19731:3;19727:11;19720:18;;19346:398;;;:::o;19750:366::-;19892:3;19913:67;19977:2;19972:3;19913:67;:::i;:::-;19906:74;;19989:93;20078:3;19989:93;:::i;:::-;20107:2;20102:3;20098:12;20091:19;;19750:366;;;:::o;20122:::-;20264:3;20285:67;20349:2;20344:3;20285:67;:::i;:::-;20278:74;;20361:93;20450:3;20361:93;:::i;:::-;20479:2;20474:3;20470:12;20463:19;;20122:366;;;:::o;20494:::-;20636:3;20657:67;20721:2;20716:3;20657:67;:::i;:::-;20650:74;;20733:93;20822:3;20733:93;:::i;:::-;20851:2;20846:3;20842:12;20835:19;;20494:366;;;:::o;20866:::-;21008:3;21029:67;21093:2;21088:3;21029:67;:::i;:::-;21022:74;;21105:93;21194:3;21105:93;:::i;:::-;21223:2;21218:3;21214:12;21207:19;;20866:366;;;:::o;21238:::-;21380:3;21401:67;21465:2;21460:3;21401:67;:::i;:::-;21394:74;;21477:93;21566:3;21477:93;:::i;:::-;21595:2;21590:3;21586:12;21579:19;;21238:366;;;:::o;21610:::-;21752:3;21773:67;21837:2;21832:3;21773:67;:::i;:::-;21766:74;;21849:93;21938:3;21849:93;:::i;:::-;21967:2;21962:3;21958:12;21951:19;;21610:366;;;:::o;21982:::-;22124:3;22145:67;22209:2;22204:3;22145:67;:::i;:::-;22138:74;;22221:93;22310:3;22221:93;:::i;:::-;22339:2;22334:3;22330:12;22323:19;;21982:366;;;:::o;22354:::-;22496:3;22517:67;22581:2;22576:3;22517:67;:::i;:::-;22510:74;;22593:93;22682:3;22593:93;:::i;:::-;22711:2;22706:3;22702:12;22695:19;;22354:366;;;:::o;22726:::-;22868:3;22889:67;22953:2;22948:3;22889:67;:::i;:::-;22882:74;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22726:366;;;:::o;23098:::-;23240:3;23261:67;23325:2;23320:3;23261:67;:::i;:::-;23254:74;;23337:93;23426:3;23337:93;:::i;:::-;23455:2;23450:3;23446:12;23439:19;;23098:366;;;:::o;23470:::-;23612:3;23633:67;23697:2;23692:3;23633:67;:::i;:::-;23626:74;;23709:93;23798:3;23709:93;:::i;:::-;23827:2;23822:3;23818:12;23811:19;;23470:366;;;:::o;23842:::-;23984:3;24005:67;24069:2;24064:3;24005:67;:::i;:::-;23998:74;;24081:93;24170:3;24081:93;:::i;:::-;24199:2;24194:3;24190:12;24183:19;;23842:366;;;:::o;24214:::-;24356:3;24377:67;24441:2;24436:3;24377:67;:::i;:::-;24370:74;;24453:93;24542:3;24453:93;:::i;:::-;24571:2;24566:3;24562:12;24555:19;;24214:366;;;:::o;24656:527::-;24815:4;24810:3;24806:14;24902:4;24895:5;24891:16;24885:23;24921:63;24978:4;24973:3;24969:14;24955:12;24921:63;:::i;:::-;24830:164;25086:4;25079:5;25075:16;25069:23;25105:61;25160:4;25155:3;25151:14;25137:12;25105:61;:::i;:::-;25004:172;24784:399;24656:527;;:::o;25189:118::-;25276:24;25294:5;25276:24;:::i;:::-;25271:3;25264:37;25189:118;;:::o;25313:105::-;25388:23;25405:5;25388:23;:::i;:::-;25383:3;25376:36;25313:105;;:::o;25424:112::-;25507:22;25523:5;25507:22;:::i;:::-;25502:3;25495:35;25424:112;;:::o;25542:595::-;25770:3;25792:95;25883:3;25874:6;25792:95;:::i;:::-;25785:102;;25904:95;25995:3;25986:6;25904:95;:::i;:::-;25897:102;;26016:95;26107:3;26098:6;26016:95;:::i;:::-;26009:102;;26128:3;26121:10;;25542:595;;;;;;:::o;26143:379::-;26327:3;26349:147;26492:3;26349:147;:::i;:::-;26342:154;;26513:3;26506:10;;26143:379;;;:::o;26528:222::-;26621:4;26659:2;26648:9;26644:18;26636:26;;26672:71;26740:1;26729:9;26725:17;26716:6;26672:71;:::i;:::-;26528:222;;;;:::o;26756:640::-;26951:4;26989:3;26978:9;26974:19;26966:27;;27003:71;27071:1;27060:9;27056:17;27047:6;27003:71;:::i;:::-;27084:72;27152:2;27141:9;27137:18;27128:6;27084:72;:::i;:::-;27166;27234:2;27223:9;27219:18;27210:6;27166:72;:::i;:::-;27285:9;27279:4;27275:20;27270:2;27259:9;27255:18;27248:48;27313:76;27384:4;27375:6;27313:76;:::i;:::-;27305:84;;26756:640;;;;;;;:::o;27402:210::-;27489:4;27527:2;27516:9;27512:18;27504:26;;27540:65;27602:1;27591:9;27587:17;27578:6;27540:65;:::i;:::-;27402:210;;;;:::o;27618:313::-;27731:4;27769:2;27758:9;27754:18;27746:26;;27818:9;27812:4;27808:20;27804:1;27793:9;27789:17;27782:47;27846:78;27919:4;27910:6;27846:78;:::i;:::-;27838:86;;27618:313;;;;:::o;27937:419::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28190:9;28184:4;28180:20;28176:1;28165:9;28161:17;28154:47;28218:131;28344:4;28218:131;:::i;:::-;28210:139;;27937:419;;;:::o;28362:::-;28528:4;28566:2;28555:9;28551:18;28543:26;;28615:9;28609:4;28605:20;28601:1;28590:9;28586:17;28579:47;28643:131;28769:4;28643:131;:::i;:::-;28635:139;;28362:419;;;:::o;28787:::-;28953:4;28991:2;28980:9;28976:18;28968:26;;29040:9;29034:4;29030:20;29026:1;29015:9;29011:17;29004:47;29068:131;29194:4;29068:131;:::i;:::-;29060:139;;28787:419;;;:::o;29212:::-;29378:4;29416:2;29405:9;29401:18;29393:26;;29465:9;29459:4;29455:20;29451:1;29440:9;29436:17;29429:47;29493:131;29619:4;29493:131;:::i;:::-;29485:139;;29212:419;;;:::o;29637:::-;29803:4;29841:2;29830:9;29826:18;29818:26;;29890:9;29884:4;29880:20;29876:1;29865:9;29861:17;29854:47;29918:131;30044:4;29918:131;:::i;:::-;29910:139;;29637:419;;;:::o;30062:::-;30228:4;30266:2;30255:9;30251:18;30243:26;;30315:9;30309:4;30305:20;30301:1;30290:9;30286:17;30279:47;30343:131;30469:4;30343:131;:::i;:::-;30335:139;;30062:419;;;:::o;30487:::-;30653:4;30691:2;30680:9;30676:18;30668:26;;30740:9;30734:4;30730:20;30726:1;30715:9;30711:17;30704:47;30768:131;30894:4;30768:131;:::i;:::-;30760:139;;30487:419;;;:::o;30912:::-;31078:4;31116:2;31105:9;31101:18;31093:26;;31165:9;31159:4;31155:20;31151:1;31140:9;31136:17;31129:47;31193:131;31319:4;31193:131;:::i;:::-;31185:139;;30912:419;;;:::o;31337:::-;31503:4;31541:2;31530:9;31526:18;31518:26;;31590:9;31584:4;31580:20;31576:1;31565:9;31561:17;31554:47;31618:131;31744:4;31618:131;:::i;:::-;31610:139;;31337:419;;;:::o;31762:::-;31928:4;31966:2;31955:9;31951:18;31943:26;;32015:9;32009:4;32005:20;32001:1;31990:9;31986:17;31979:47;32043:131;32169:4;32043:131;:::i;:::-;32035:139;;31762:419;;;:::o;32187:::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:::-;32778:4;32816:2;32805:9;32801:18;32793:26;;32865:9;32859:4;32855:20;32851:1;32840:9;32836:17;32829:47;32893:131;33019:4;32893:131;:::i;:::-;32885:139;;32612:419;;;:::o;33037:::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:::-;33628:4;33666:2;33655:9;33651:18;33643:26;;33715:9;33709:4;33705:20;33701:1;33690:9;33686:17;33679:47;33743:131;33869:4;33743:131;:::i;:::-;33735:139;;33462:419;;;:::o;33887:::-;34053:4;34091:2;34080:9;34076:18;34068:26;;34140:9;34134:4;34130:20;34126:1;34115:9;34111:17;34104:47;34168:131;34294:4;34168:131;:::i;:::-;34160:139;;33887:419;;;:::o;34312:::-;34478:4;34516:2;34505:9;34501:18;34493:26;;34565:9;34559:4;34555:20;34551:1;34540:9;34536:17;34529:47;34593:131;34719:4;34593:131;:::i;:::-;34585:139;;34312:419;;;:::o;34737:::-;34903:4;34941:2;34930:9;34926:18;34918:26;;34990:9;34984:4;34980:20;34976:1;34965:9;34961:17;34954:47;35018:131;35144:4;35018:131;:::i;:::-;35010:139;;34737:419;;;:::o;35162:::-;35328:4;35366:2;35355:9;35351:18;35343:26;;35415:9;35409:4;35405:20;35401:1;35390:9;35386:17;35379:47;35443:131;35569:4;35443:131;:::i;:::-;35435:139;;35162:419;;;:::o;35587:::-;35753:4;35791:2;35780:9;35776:18;35768:26;;35840:9;35834:4;35830:20;35826:1;35815:9;35811:17;35804:47;35868:131;35994:4;35868:131;:::i;:::-;35860:139;;35587:419;;;:::o;36012:::-;36178:4;36216:2;36205:9;36201:18;36193:26;;36265:9;36259:4;36255:20;36251:1;36240:9;36236:17;36229:47;36293:131;36419:4;36293:131;:::i;:::-;36285:139;;36012:419;;;:::o;36437:::-;36603:4;36641:2;36630:9;36626:18;36618:26;;36690:9;36684:4;36680:20;36676:1;36665:9;36661:17;36654:47;36718:131;36844:4;36718:131;:::i;:::-;36710:139;;36437:419;;;:::o;36862:::-;37028:4;37066:2;37055:9;37051:18;37043:26;;37115:9;37109:4;37105:20;37101:1;37090:9;37086:17;37079:47;37143:131;37269:4;37143:131;:::i;:::-;37135:139;;36862:419;;;:::o;37287:::-;37453:4;37491:2;37480:9;37476:18;37468:26;;37540:9;37534:4;37530:20;37526:1;37515:9;37511:17;37504:47;37568:131;37694:4;37568:131;:::i;:::-;37560:139;;37287:419;;;:::o;37712:::-;37878:4;37916:2;37905:9;37901:18;37893:26;;37965:9;37959:4;37955:20;37951:1;37940:9;37936:17;37929:47;37993:131;38119:4;37993:131;:::i;:::-;37985:139;;37712:419;;;:::o;38137:::-;38303:4;38341:2;38330:9;38326:18;38318:26;;38390:9;38384:4;38380:20;38376:1;38365:9;38361:17;38354:47;38418:131;38544:4;38418:131;:::i;:::-;38410:139;;38137:419;;;:::o;38562:::-;38728:4;38766:2;38755:9;38751:18;38743:26;;38815:9;38809:4;38805:20;38801:1;38790:9;38786:17;38779:47;38843:131;38969:4;38843:131;:::i;:::-;38835:139;;38562:419;;;:::o;38987:::-;39153:4;39191:2;39180:9;39176:18;39168:26;;39240:9;39234:4;39230:20;39226:1;39215:9;39211:17;39204:47;39268:131;39394:4;39268:131;:::i;:::-;39260:139;;38987:419;;;:::o;39412:::-;39578:4;39616:2;39605:9;39601:18;39593:26;;39665:9;39659:4;39655:20;39651:1;39640:9;39636:17;39629:47;39693:131;39819:4;39693:131;:::i;:::-;39685:139;;39412:419;;;:::o;39837:::-;40003:4;40041:2;40030:9;40026:18;40018:26;;40090:9;40084:4;40080:20;40076:1;40065:9;40061:17;40054:47;40118:131;40244:4;40118:131;:::i;:::-;40110:139;;39837:419;;;:::o;40262:::-;40428:4;40466:2;40455:9;40451:18;40443:26;;40515:9;40509:4;40505:20;40501:1;40490:9;40486:17;40479:47;40543:131;40669:4;40543:131;:::i;:::-;40535:139;;40262:419;;;:::o;40687:::-;40853:4;40891:2;40880:9;40876:18;40868:26;;40940:9;40934:4;40930:20;40926:1;40915:9;40911:17;40904:47;40968:131;41094:4;40968:131;:::i;:::-;40960:139;;40687:419;;;:::o;41112:::-;41278:4;41316:2;41305:9;41301:18;41293:26;;41365:9;41359:4;41355:20;41351:1;41340:9;41336:17;41329:47;41393:131;41519:4;41393:131;:::i;:::-;41385:139;;41112:419;;;:::o;41537:346::-;41692:4;41730:2;41719:9;41715:18;41707:26;;41743:133;41873:1;41862:9;41858:17;41849:6;41743:133;:::i;:::-;41537:346;;;;:::o;41889:222::-;41982:4;42020:2;42009:9;42005:18;41997:26;;42033:71;42101:1;42090:9;42086:17;42077:6;42033:71;:::i;:::-;41889:222;;;;:::o;42117:214::-;42206:4;42244:2;42233:9;42229:18;42221:26;;42257:67;42321:1;42310:9;42306:17;42297:6;42257:67;:::i;:::-;42117:214;;;;:::o;42337:129::-;42371:6;42398:20;;:::i;:::-;42388:30;;42427:33;42455:4;42447:6;42427:33;:::i;:::-;42337:129;;;:::o;42472:75::-;42505:6;42538:2;42532:9;42522:19;;42472:75;:::o;42553:311::-;42630:4;42720:18;42712:6;42709:30;42706:56;;;42742:18;;:::i;:::-;42706:56;42792:4;42784:6;42780:17;42772:25;;42852:4;42846;42842:15;42834:23;;42553:311;;;:::o;42870:::-;42947:4;43037:18;43029:6;43026:30;43023:56;;;43059:18;;:::i;:::-;43023:56;43109:4;43101:6;43097:17;43089:25;;43169:4;43163;43159:15;43151:23;;42870:311;;;:::o;43187:307::-;43248:4;43338:18;43330:6;43327:30;43324:56;;;43360:18;;:::i;:::-;43324:56;43398:29;43420:6;43398:29;:::i;:::-;43390:37;;43482:4;43476;43472:15;43464:23;;43187:307;;;:::o;43500:308::-;43562:4;43652:18;43644:6;43641:30;43638:56;;;43674:18;;:::i;:::-;43638:56;43712:29;43734:6;43712:29;:::i;:::-;43704:37;;43796:4;43790;43786:15;43778:23;;43500:308;;;:::o;43814:98::-;43865:6;43899:5;43893:12;43883:22;;43814:98;;;:::o;43918:99::-;43970:6;44004:5;43998:12;43988:22;;43918:99;;;:::o;44023:168::-;44106:11;44140:6;44135:3;44128:19;44180:4;44175:3;44171:14;44156:29;;44023:168;;;;:::o;44197:147::-;44298:11;44335:3;44320:18;;44197:147;;;;:::o;44350:169::-;44434:11;44468:6;44463:3;44456:19;44508:4;44503:3;44499:14;44484:29;;44350:169;;;;:::o;44525:148::-;44627:11;44664:3;44649:18;;44525:148;;;;:::o;44679:273::-;44719:3;44738:20;44756:1;44738:20;:::i;:::-;44733:25;;44772:20;44790:1;44772:20;:::i;:::-;44767:25;;44894:1;44858:34;44854:42;44851:1;44848:49;44845:75;;;44900:18;;:::i;:::-;44845:75;44944:1;44941;44937:9;44930:16;;44679:273;;;;:::o;44958:305::-;44998:3;45017:20;45035:1;45017:20;:::i;:::-;45012:25;;45051:20;45069:1;45051:20;:::i;:::-;45046:25;;45205:1;45137:66;45133:74;45130:1;45127:81;45124:107;;;45211:18;;:::i;:::-;45124:107;45255:1;45252;45248:9;45241:16;;44958:305;;;;:::o;45269:185::-;45309:1;45326:20;45344:1;45326:20;:::i;:::-;45321:25;;45360:20;45378:1;45360:20;:::i;:::-;45355:25;;45399:1;45389:35;;45404:18;;:::i;:::-;45389:35;45446:1;45443;45439:9;45434:14;;45269:185;;;;:::o;45460:191::-;45500:4;45520:20;45538:1;45520:20;:::i;:::-;45515:25;;45554:20;45572:1;45554:20;:::i;:::-;45549:25;;45593:1;45590;45587:8;45584:34;;;45598:18;;:::i;:::-;45584:34;45643:1;45640;45636:9;45628:17;;45460:191;;;;:::o;45657:::-;45697:4;45717:20;45735:1;45717:20;:::i;:::-;45712:25;;45751:20;45769:1;45751:20;:::i;:::-;45746:25;;45790:1;45787;45784:8;45781:34;;;45795:18;;:::i;:::-;45781:34;45840:1;45837;45833:9;45825:17;;45657:191;;;;:::o;45854:96::-;45891:7;45920:24;45938:5;45920:24;:::i;:::-;45909:35;;45854:96;;;:::o;45956:90::-;45990:7;46033:5;46026:13;46019:21;46008:32;;45956:90;;;:::o;46052:149::-;46088:7;46128:66;46121:5;46117:78;46106:89;;46052:149;;;:::o;46207:118::-;46244:7;46284:34;46277:5;46273:46;46262:57;;46207:118;;;:::o;46331:126::-;46368:7;46408:42;46401:5;46397:54;46386:65;;46331:126;;;:::o;46463:77::-;46500:7;46529:5;46518:16;;46463:77;;;:::o;46546:101::-;46582:7;46622:18;46615:5;46611:30;46600:41;;46546:101;;;:::o;46653:86::-;46688:7;46728:4;46721:5;46717:16;46706:27;;46653:86;;;:::o;46745:154::-;46829:6;46824:3;46819;46806:30;46891:1;46882:6;46877:3;46873:16;46866:27;46745:154;;;:::o;46905:307::-;46973:1;46983:113;46997:6;46994:1;46991:13;46983:113;;;47082:1;47077:3;47073:11;47067:18;47063:1;47058:3;47054:11;47047:39;47019:2;47016:1;47012:10;47007:15;;46983:113;;;47114:6;47111:1;47108:13;47105:101;;;47194:1;47185:6;47180:3;47176:16;47169:27;47105:101;46954:258;46905:307;;;:::o;47218:171::-;47257:3;47280:24;47298:5;47280:24;:::i;:::-;47271:33;;47326:4;47319:5;47316:15;47313:41;;;47334:18;;:::i;:::-;47313:41;47381:1;47374:5;47370:13;47363:20;;47218:171;;;:::o;47395:320::-;47439:6;47476:1;47470:4;47466:12;47456:22;;47523:1;47517:4;47513:12;47544:18;47534:81;;47600:4;47592:6;47588:17;47578:27;;47534:81;47662:2;47654:6;47651:14;47631:18;47628:38;47625:84;;;47681:18;;:::i;:::-;47625:84;47446:269;47395:320;;;:::o;47721:281::-;47804:27;47826:4;47804:27;:::i;:::-;47796:6;47792:40;47934:6;47922:10;47919:22;47898:18;47886:10;47883:34;47880:62;47877:88;;;47945:18;;:::i;:::-;47877:88;47985:10;47981:2;47974:22;47764:238;47721:281;;:::o;48008:233::-;48047:3;48070:24;48088:5;48070:24;:::i;:::-;48061:33;;48116:66;48109:5;48106:77;48103:103;;;48186:18;;:::i;:::-;48103:103;48233:1;48226:5;48222:13;48215:20;;48008:233;;;:::o;48247:176::-;48279:1;48296:20;48314:1;48296:20;:::i;:::-;48291:25;;48330:20;48348:1;48330:20;:::i;:::-;48325:25;;48369:1;48359:35;;48374:18;;:::i;:::-;48359:35;48415:1;48412;48408:9;48403:14;;48247:176;;;;:::o;48429:180::-;48477:77;48474:1;48467:88;48574:4;48571:1;48564:15;48598:4;48595:1;48588:15;48615:180;48663:77;48660:1;48653:88;48760:4;48757:1;48750:15;48784:4;48781:1;48774:15;48801:180;48849:77;48846:1;48839:88;48946:4;48943:1;48936:15;48970:4;48967:1;48960:15;48987:180;49035:77;49032:1;49025:88;49132:4;49129:1;49122:15;49156:4;49153:1;49146:15;49173:180;49221:77;49218:1;49211:88;49318:4;49315:1;49308:15;49342:4;49339:1;49332:15;49359:117;49468:1;49465;49458:12;49482:117;49591:1;49588;49581:12;49605:117;49714:1;49711;49704:12;49728:117;49837:1;49834;49827:12;49851:117;49960:1;49957;49950:12;49974:102;50015:6;50066:2;50062:7;50057:2;50050:5;50046:14;50042:28;50032:38;;49974:102;;;:::o;50082:221::-;50222:34;50218:1;50210:6;50206:14;50199:58;50291:4;50286:2;50278:6;50274:15;50267:29;50082:221;:::o;50309:225::-;50449:34;50445:1;50437:6;50433:14;50426:58;50518:8;50513:2;50505:6;50501:15;50494:33;50309:225;:::o;50540:229::-;50680:34;50676:1;50668:6;50664:14;50657:58;50749:12;50744:2;50736:6;50732:15;50725:37;50540:229;:::o;50775:231::-;50915:34;50911:1;50903:6;50899:14;50892:58;50984:14;50979:2;50971:6;50967:15;50960:39;50775:231;:::o;51012:222::-;51152:34;51148:1;51140:6;51136:14;51129:58;51221:5;51216:2;51208:6;51204:15;51197:30;51012:222;:::o;51240:224::-;51380:34;51376:1;51368:6;51364:14;51357:58;51449:7;51444:2;51436:6;51432:15;51425:32;51240:224;:::o;51470:236::-;51610:34;51606:1;51598:6;51594:14;51587:58;51679:19;51674:2;51666:6;51662:15;51655:44;51470:236;:::o;51712:180::-;51852:32;51848:1;51840:6;51836:14;51829:56;51712:180;:::o;51898:244::-;52038:34;52034:1;52026:6;52022:14;52015:58;52107:27;52102:2;52094:6;52090:15;52083:52;51898:244;:::o;52148:174::-;52288:26;52284:1;52276:6;52272:14;52265:50;52148:174;:::o;52328:230::-;52468:34;52464:1;52456:6;52452:14;52445:58;52537:13;52532:2;52524:6;52520:15;52513:38;52328:230;:::o;52564:168::-;52704:20;52700:1;52692:6;52688:14;52681:44;52564:168;:::o;52738:170::-;52878:22;52874:1;52866:6;52862:14;52855:46;52738:170;:::o;52914:225::-;53054:34;53050:1;53042:6;53038:14;53031:58;53123:8;53118:2;53110:6;53106:15;53099:33;52914:225;:::o;53145:182::-;53285:34;53281:1;53273:6;53269:14;53262:58;53145:182;:::o;53333:234::-;53473:34;53469:1;53461:6;53457:14;53450:58;53542:17;53537:2;53529:6;53525:15;53518:42;53333:234;:::o;53573:176::-;53713:28;53709:1;53701:6;53697:14;53690:52;53573:176;:::o;53755:237::-;53895:34;53891:1;53883:6;53879:14;53872:58;53964:20;53959:2;53951:6;53947:15;53940:45;53755:237;:::o;53998:221::-;54138:34;54134:1;54126:6;54122:14;54115:58;54207:4;54202:2;54194:6;54190:15;54183:29;53998:221;:::o;54225:114::-;;:::o;54345:166::-;54485:18;54481:1;54473:6;54469:14;54462:42;54345:166;:::o;54517:238::-;54657:34;54653:1;54645:6;54641:14;54634:58;54726:21;54721:2;54713:6;54709:15;54702:46;54517:238;:::o;54761:179::-;54901:31;54897:1;54889:6;54885:14;54878:55;54761:179;:::o;54946:220::-;55086:34;55082:1;55074:6;55070:14;55063:58;55155:3;55150:2;55142:6;55138:15;55131:28;54946:220;:::o;55172:172::-;55312:24;55308:1;55300:6;55296:14;55289:48;55172:172;:::o;55350:226::-;55490:34;55486:1;55478:6;55474:14;55467:58;55559:9;55554:2;55546:6;55542:15;55535:34;55350:226;:::o;55582:233::-;55722:34;55718:1;55710:6;55706:14;55699:58;55791:16;55786:2;55778:6;55774:15;55767:41;55582:233;:::o;55821:225::-;55961:34;55957:1;55949:6;55945:14;55938:58;56030:8;56025:2;56017:6;56013:15;56006:33;55821:225;:::o;56052:181::-;56192:33;56188:1;56180:6;56176:14;56169:57;56052:181;:::o;56239:234::-;56379:34;56375:1;56367:6;56363:14;56356:58;56448:17;56443:2;56435:6;56431:15;56424:42;56239:234;:::o;56479:232::-;56619:34;56615:1;56607:6;56603:14;56596:58;56688:15;56683:2;56675:6;56671:15;56664:40;56479:232;:::o;56717:221::-;56857:34;56853:1;56845:6;56841:14;56834:58;56926:4;56921:2;56913:6;56909:15;56902:29;56717:221;:::o;56944:227::-;57084:34;57080:1;57072:6;57068:14;57061:58;57153:10;57148:2;57140:6;57136:15;57129:35;56944:227;:::o;57177:122::-;57250:24;57268:5;57250:24;:::i;:::-;57243:5;57240:35;57230:63;;57289:1;57286;57279:12;57230:63;57177:122;:::o;57305:116::-;57375:21;57390:5;57375:21;:::i;:::-;57368:5;57365:32;57355:60;;57411:1;57408;57401:12;57355:60;57305:116;:::o;57427:120::-;57499:23;57516:5;57499:23;:::i;:::-;57492:5;57489:34;57479:62;;57537:1;57534;57527:12;57479:62;57427:120;:::o;57553:122::-;57626:24;57644:5;57626:24;:::i;:::-;57619:5;57616:35;57606:63;;57665:1;57662;57655:12;57606:63;57553:122;:::o;57681:118::-;57752:22;57768:5;57752:22;:::i;:::-;57745:5;57742:33;57732:61;;57789:1;57786;57779:12;57732:61;57681:118;:::o

Swarm Source

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