ETH Price: $3,389.83 (+1.80%)

Token

Basquimfers (Basquimfers)
 

Overview

Max Total Supply

3,456 Basquimfers

Holders

636

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
sleepy0x13.eth
Balance
10 Basquimfers
0x429f13e4ec5E57c9AE2388c5020E372F73fe168A
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:
Basquimfers

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-08
*/

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

// SPDX-License-Identifier: MIT

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

// 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/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/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



// Creator: Chiru Labs



pragma solidity ^0.8.4;










error ApprovalCallerNotOwnerNorApproved();

error ApprovalQueryForNonexistentToken();

error ApproveToCaller();

error ApprovalToCurrentOwner();

error BalanceQueryForZeroAddress();

error MintToZeroAddress();

error MintZeroQuantity();

error OwnerQueryForNonexistentToken();

error TransferCallerNotOwnerNorApproved();

error TransferFromIncorrectOwner();

error TransferToNonERC721ReceiverImplementer();

error TransferToZeroAddress();

error URIQueryForNonexistentToken();



/**

 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including

 * the Metadata extension. Built to optimize for lower gas during batch mints.

 *

 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).

 *

 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.

 *

 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).

 */

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {

    using Address for address;

    using Strings for uint256;



    // Compiler will pack this into a single 256bit word.

    struct TokenOwnership {

        // The address of the owner.

        address addr;

        // Keeps track of the start time of ownership with minimal overhead for tokenomics.

        uint64 startTimestamp;

        // Whether the token has been burned.

        bool burned;

    }



    // Compiler will pack this into a single 256bit word.

    struct AddressData {

        // Realistically, 2**64-1 is more than enough.

        uint64 balance;

        // Keeps track of mint count with minimal overhead for tokenomics.

        uint64 numberMinted;

        // Keeps track of burn count with minimal overhead for tokenomics.

        uint64 numberBurned;

        // For miscellaneous variable(s) pertaining to the address

        // (e.g. number of whitelist mint slots used).

        // If there are multiple variables, please pack them into a uint64.

        uint64 aux;

    }



    // The tokenId of the next token to be minted.

    uint256 internal _currentIndex;



    // The number of tokens burned.

    uint256 internal _burnCounter;



    // 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) internal _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;



    constructor(string memory name_, string memory symbol_) {

        _name = name_;

        _symbol = symbol_;

        _currentIndex = _startTokenId();

    }



    /**

     * To change the starting tokenId, please override this function.

     */

    function _startTokenId() internal view virtual returns (uint256) {

        return 1;

    }



    /**

     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.

     */

    function totalSupply() public view returns (uint256) {

        // Counter underflow is impossible as _burnCounter cannot be incremented

        // more than _currentIndex - _startTokenId() times

        unchecked {

            return _currentIndex - _burnCounter - _startTokenId();

        }

    }



    /**

     * Returns the total amount of tokens minted in the contract.

     */

    function _totalMinted() internal view returns (uint256) {

        // Counter underflow is impossible as _currentIndex does not decrement,

        // and it is initialized to _startTokenId()

        unchecked {

            return _currentIndex - _startTokenId();

        }

    }



    /**

     * @dev See {IERC165-supportsInterface}.

     */

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {

        return

            interfaceId == type(IERC721).interfaceId ||

            interfaceId == type(IERC721Metadata).interfaceId ||

            super.supportsInterface(interfaceId);

    }



    /**

     * @dev See {IERC721-balanceOf}.

     */

    function balanceOf(address owner) public view override returns (uint256) {

        if (owner == address(0)) revert BalanceQueryForZeroAddress();

        return uint256(_addressData[owner].balance);

    }



    /**

     * Returns the number of tokens minted by `owner`.

     */

    function _numberMinted(address owner) internal view returns (uint256) {

        return uint256(_addressData[owner].numberMinted);

    }



    /**

     * Returns the number of tokens burned by or on behalf of `owner`.

     */

    function _numberBurned(address owner) internal view returns (uint256) {

        return uint256(_addressData[owner].numberBurned);

    }



    /**

     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).

     */

    function _getAux(address owner) internal view returns (uint64) {

        return _addressData[owner].aux;

    }



    /**

     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).

     * If there are multiple variables, please pack them into a uint64.

     */

    function _setAux(address owner, uint64 aux) internal {

        _addressData[owner].aux = aux;

    }



    /**

     * Gas spent here starts off proportional to the maximum mint batch size.

     * It gradually moves to O(1) as tokens get transferred around in the collection over time.

     */

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {

        uint256 curr = tokenId;



        unchecked {

            if (_startTokenId() <= curr && curr < _currentIndex) {

                TokenOwnership memory ownership = _ownerships[curr];

                if (!ownership.burned) {

                    if (ownership.addr != address(0)) {

                        return ownership;

                    }

                    // Invariant:

                    // There will always be an ownership that has an address and is not burned

                    // before an ownership that does not have an address and is not burned.

                    // Hence, curr will not underflow.

                    while (true) {

                        curr--;

                        ownership = _ownerships[curr];

                        if (ownership.addr != address(0)) {

                            return ownership;

                        }

                    }

                }

            }

        }

        revert OwnerQueryForNonexistentToken();

    }



    /**

     * @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) {

        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();



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

        if (to == owner) revert ApprovalToCurrentOwner();



        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {

            revert ApprovalCallerNotOwnerNorApproved();

        }



        _approve(to, tokenId, owner);

    }



    /**

     * @dev See {IERC721-getApproved}.

     */

    function getApproved(uint256 tokenId) public view override returns (address) {

        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();



        return _tokenApprovals[tokenId];

    }



    /**

     * @dev See {IERC721-setApprovalForAll}.

     */

    function setApprovalForAll(address operator, bool approved) public virtual override {

        if (operator == _msgSender()) revert ApproveToCaller();



        _operatorApprovals[_msgSender()][operator] = approved;

        emit ApprovalForAll(_msgSender(), operator, approved);

    }



    /**

     * @dev See {IERC721-isApprovedForAll}.

     */

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {

        return _operatorApprovals[owner][operator];

    }



    /**

     * @dev See {IERC721-transferFrom}.

     */

    function transferFrom(

        address from,

        address to,

        uint256 tokenId

    ) public virtual override {

        _transfer(from, to, tokenId);

    }



    /**

     * @dev See {IERC721-safeTransferFrom}.

     */

    function safeTransferFrom(

        address from,

        address to,

        uint256 tokenId

    ) public virtual override {

        safeTransferFrom(from, to, tokenId, '');

    }



    /**

     * @dev See {IERC721-safeTransferFrom}.

     */

    function safeTransferFrom(

        address from,

        address to,

        uint256 tokenId,

        bytes memory _data

    ) public virtual override {

        _transfer(from, to, tokenId);

        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {

            revert TransferToNonERC721ReceiverImplementer();

        }

    }



    /**

     * @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 _startTokenId() <= tokenId && tokenId < _currentIndex &&

            !_ownerships[tokenId].burned;

    }



    function _safeMint(address to, uint256 quantity) internal {

        _safeMint(to, quantity, '');

    }



    /**

     * @dev Safely mints `quantity` tokens and transfers them to `to`.

     *

     * Requirements:

     *

     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.

     * - `quantity` must be greater than 0.

     *

     * Emits a {Transfer} event.

     */

    function _safeMint(

        address to,

        uint256 quantity,

        bytes memory _data

    ) internal {

        _mint(to, quantity, _data, true);

    }



    /**

     * @dev Mints `quantity` tokens and transfers them to `to`.

     *

     * Requirements:

     *

     * - `to` cannot be the zero address.

     * - `quantity` must be greater than 0.

     *

     * Emits a {Transfer} event.

     */

    function _mint(

        address to,

        uint256 quantity,

        bytes memory _data,

        bool safe

    ) internal {

        uint256 startTokenId = _currentIndex;

        if (to == address(0)) revert MintToZeroAddress();

        if (quantity == 0) revert MintZeroQuantity();



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



        // Overflows are incredibly unrealistic.

        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1

        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1

        unchecked {

            _addressData[to].balance += uint64(quantity);

            _addressData[to].numberMinted += uint64(quantity);



            _ownerships[startTokenId].addr = to;

            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);



            uint256 updatedIndex = startTokenId;

            uint256 end = updatedIndex + quantity;



            if (safe && to.isContract()) {

                do {

                    emit Transfer(address(0), to, updatedIndex);

                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {

                        revert TransferToNonERC721ReceiverImplementer();

                    }

                } while (updatedIndex != end);

                // Reentrancy protection

                if (_currentIndex != startTokenId) revert();

            } else {

                do {

                    emit Transfer(address(0), to, updatedIndex++);

                } while (updatedIndex != end);

            }

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



        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();



        bool isApprovedOrOwner = (_msgSender() == from ||

            isApprovedForAll(from, _msgSender()) ||

            getApproved(tokenId) == _msgSender());



        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();



        _beforeTokenTransfers(from, to, tokenId, 1);



        // Clear approvals from the previous owner

        _approve(address(0), tokenId, from);



        // Underflow of the sender's balance is impossible because we check for

        // ownership above and the recipient's balance can't realistically overflow.

        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.

        unchecked {

            _addressData[from].balance -= 1;

            _addressData[to].balance += 1;



            TokenOwnership storage currSlot = _ownerships[tokenId];

            currSlot.addr = to;

            currSlot.startTimestamp = 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;

            TokenOwnership storage nextSlot = _ownerships[nextTokenId];

            if (nextSlot.addr == address(0)) {

                // This will suffice for checking _exists(nextTokenId),

                // as a burned slot cannot contain the zero address.

                if (nextTokenId != _currentIndex) {

                    nextSlot.addr = from;

                    nextSlot.startTimestamp = prevOwnership.startTimestamp;

                }

            }

        }



        emit Transfer(from, to, tokenId);

        _afterTokenTransfers(from, to, tokenId, 1);

    }



    /**

     * @dev This is equivalent to _burn(tokenId, false)

     */

    function _burn(uint256 tokenId) internal virtual {

        _burn(tokenId, false);

    }



    /**

     * @dev Destroys `tokenId`.

     * The approval is cleared when the token is burned.

     *

     * Requirements:

     *

     * - `tokenId` must exist.

     *

     * Emits a {Transfer} event.

     */

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {

        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);



        address from = prevOwnership.addr;



        if (approvalCheck) {

            bool isApprovedOrOwner = (_msgSender() == from ||

                isApprovedForAll(from, _msgSender()) ||

                getApproved(tokenId) == _msgSender());



            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();

        }



        _beforeTokenTransfers(from, address(0), tokenId, 1);



        // Clear approvals from the previous owner

        _approve(address(0), tokenId, from);



        // Underflow of the sender's balance is impossible because we check for

        // ownership above and the recipient's balance can't realistically overflow.

        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.

        unchecked {

            AddressData storage addressData = _addressData[from];

            addressData.balance -= 1;

            addressData.numberBurned += 1;



            // Keep track of who burned the token, and the timestamp of burning.

            TokenOwnership storage currSlot = _ownerships[tokenId];

            currSlot.addr = from;

            currSlot.startTimestamp = uint64(block.timestamp);

            currSlot.burned = true;



            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.

            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.

            uint256 nextTokenId = tokenId + 1;

            TokenOwnership storage nextSlot = _ownerships[nextTokenId];

            if (nextSlot.addr == address(0)) {

                // This will suffice for checking _exists(nextTokenId),

                // as a burned slot cannot contain the zero address.

                if (nextTokenId != _currentIndex) {

                    nextSlot.addr = from;

                    nextSlot.startTimestamp = prevOwnership.startTimestamp;

                }

            }

        }



        emit Transfer(from, address(0), tokenId);

        _afterTokenTransfers(from, address(0), tokenId, 1);



        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.

        unchecked {

            _burnCounter++;

        }

    }



    /**

     * @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);

    }



    /**

     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(

        address from,

        address to,

        uint256 tokenId,

        bytes memory _data

    ) private returns (bool) {

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

            } else {

                assembly {

                    revert(add(32, reason), mload(reason))

                }

            }

        }

    }



    /**

     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.

     * And also called before burning one token.

     *

     * 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`.

     * - When `to` is zero, `tokenId` will be burned by `from`.

     * - `from` and `to` are never both zero.

     */

    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.

     * And also called after one token has been burned.

     *

     * 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` has been

     * transferred to `to`.

     * - When `from` is zero, `tokenId` has been minted for `to`.

     * - When `to` is zero, `tokenId` has been burned by `from`.

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



pragma solidity ^0.8.4;



contract Basquimfers is Ownable, ERC721A  {

  using Strings for uint256;

  string private _baseTokenURI;

  address public mfersOwnerAddress;

  uint256 public presaleCost = 0.015 ether;
  uint256 public publicSaleCost = 0.02 ether;
  uint256 public maxSupply = 3456;
  uint256 public mfersFreeMintsRemaining = 123;
  uint256 public maxMintAmountPerTransaction = 20;
  uint256 public maxMintAmountPerPresaleAccount = 2;
  uint256 public maxMintAmountPerFreeAccount = 1;


  bool public paused = true;
  bool public freeMintActive = true;
  bool public presaleActive = false;
  bool public publicSaleActive = false;

  bytes32 public merkleRoot = 0x0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c;


  constructor() ERC721A("Basquimfers", "Basquimfers") {
  }

  modifier mintCompliance(uint256 _mintAmount) {
      require(_mintAmount > 0 , "Invalid mint amount!");
      require(totalMinted() + _mintAmount <= maxSupply, "Max supply exceeded!");
      _;
  }

  function freeMint(bytes32[] calldata _merkleProof, uint64 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    if(freeMintActive==true){
      if(ownsMfer(msg.sender) == true){
        require(mfersFreeMintsRemaining > 0, "Mfers free mint supply exceeded!");
        mfersFreeMintsRemaining -=1;
      }
      else if(ownsMfer(msg.sender) == false){
        //verify the provided _merkleProof
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the Free Mint whitelist.");
      }
      require(numberMinted(msg.sender) + _mintAmount <= maxMintAmountPerFreeAccount, "Mint limit exceeded." );
      _safeMint(msg.sender, _mintAmount);
    }
  }

  function mint(bytes32[] calldata _merkleProof, uint64 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    
    if(presaleActive==true){
      uint64 amountMinted = getPresaleAmountMinted(msg.sender);
      require(msg.value >= presaleCost * _mintAmount, "Insufficient funds!");
      require(amountMinted + _mintAmount <= maxMintAmountPerPresaleAccount, "Mint limit exceeded." );
      //verify the provided _merkleProof
      bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
      require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the Presale whitelist.");
      setPresaleAmountMinted(msg.sender,amountMinted + _mintAmount);
    }
    else{
      require(msg.value >= publicSaleCost * _mintAmount, "Insufficient funds!");
      require(_mintAmount <= maxMintAmountPerTransaction, "Mint limit exceeded." );
    }
    _safeMint(msg.sender, _mintAmount);
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _safeMint(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
    address currentTokenOwner = ownerOf(currentTokenId);

    if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;
        ownedTokenIndex++;
    }

    currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)

    public
    view
    virtual
    override
    returns (string memory)

  {

    require(
    _exists(_tokenId),
    "ERC721Metadata: URI query for nonexistent token"
    );

    string memory currentBaseURI = _baseURI();

    return bytes(currentBaseURI).length > 0

        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json"))

        : "";
  }

  function getPresaleAmountMinted(address owner) public view returns (uint64) {
    return _getAux(owner);
  }

  function setPresaleAmountMinted(address owner, uint64 aux) public {
    _setAux(owner, aux);
  }

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

  function totalMinted() public view returns (uint256) {
    return _totalMinted();
  }

  function exists(uint256 tokenId) public view returns (bool) {
    return _exists(tokenId);
  }

  function burn(uint256 tokenId, bool approvalCheck) public {
    _burn(tokenId, approvalCheck);
  }

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

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

  function setMfersOwnerAddress(address _state) public onlyOwner{
    mfersOwnerAddress = _state;
  }

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

  function setPublicSaleCost(uint256 _publicSaleCost) public onlyOwner {
    publicSaleCost = _publicSaleCost;
  }

  function setPresaleCost(uint256 _presaleCost) public onlyOwner {
    presaleCost = _presaleCost;
  }

  function setMaxMintPerPresaleAccount(uint256 _maxMintPerPresaleAccount) public onlyOwner {
    maxMintAmountPerPresaleAccount = _maxMintPerPresaleAccount;
  }
  
  function setMaxMintPerFreeAccount(uint256 _maxMintAmountPerFreeAccount) public onlyOwner {
    maxMintAmountPerFreeAccount = _maxMintAmountPerFreeAccount;
  }

  function setMaxMintPerTransaction(uint256 _maxMintAmountPerTransaction) public onlyOwner {
    maxMintAmountPerTransaction = _maxMintAmountPerTransaction;
  }

  function endFreeMint() public onlyOwner {
    freeMintActive = false;
    presaleActive = true;
    paused = true;
  }

  function endPresale() public onlyOwner {
    require(freeMintActive == false);
    presaleActive = false;
    publicSaleActive = true;
    paused = true;
  }

  function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
    merkleRoot = _merkleRoot;
  }
  
  function ownsMfer(address _user) public view returns (bool) {
    IERC721 token = IERC721(mfersOwnerAddress);
    uint256 ownerAmount = token.balanceOf(_user);
   
    if(ownerAmount >= 1){
      return true;
    }

    return false;
  }

  function withdraw() public onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"approvalCheck","type":"bool"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint64","name":"_mintAmount","type":"uint64"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getPresaleAmountMinted","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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":"maxMintAmountPerFreeAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerPresaleAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mfersFreeMintsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mfersOwnerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint64","name":"_mintAmount","type":"uint64"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","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":"address","name":"_user","type":"address"}],"name":"ownsMfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerFreeAccount","type":"uint256"}],"name":"setMaxMintPerFreeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerPresaleAccount","type":"uint256"}],"name":"setMaxMintPerPresaleAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTransaction","type":"uint256"}],"name":"setMaxMintPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_state","type":"address"}],"name":"setMfersOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"aux","type":"uint64"}],"name":"setPresaleAmountMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_presaleCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266354a6ba7a18000600b5566470de4df820000600c55610d80600d55607b600e556014600f55600260105560016011556001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506000601260036101000a81548160ff0219169083151502179055507f0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c60001b601355348015620000d457600080fd5b506040518060400160405280600b81526020017f4261737175696d666572730000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f4261737175696d666572730000000000000000000000000000000000000000008152506200016162000155620001b160201b60201c565b620001b960201b60201c565b81600390805190602001906200017992919062000286565b5080600490805190602001906200019292919062000286565b50620001a36200027d60201b60201c565b60018190555050506200039b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b828054620002949062000336565b90600052602060002090601f016020900481019282620002b8576000855562000304565b82601f10620002d357805160ff191683800117855562000304565b8280016001018555821562000304579182015b8281111562000303578251825591602001919060010190620002e6565b5b50905062000313919062000317565b5090565b5b808211156200033257600081600090555060010162000318565b5090565b600060028204905060018216806200034f57607f821691505b602082108114156200036657620003656200036c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61544180620003ab6000396000f3fe6080604052600436106103195760003560e01c80637cb64759116101ab578063bc8893b4116100f7578063e985e9c511610095578063efbd73f41161006f578063efbd73f414610ba0578063effd901214610bc9578063f2f4e82414610be5578063f2fde38b14610c1057610319565b8063e985e9c514610afd578063eecd8d7514610b3a578063ef02649e14610b7757610319565b8063ce49af48116100d1578063ce49af4814610a41578063d5abeb0114610a6a578063d9e8f9a814610a95578063dc33e68114610ac057610319565b8063bc8893b4146109ae578063c87b56dd146109d9578063cb5bc2aa14610a1657610319565b806395d89b4111610164578063a2309ff81161013e578063a2309ff814610918578063a43be57b14610943578063b88d4fde1461095a578063bbb897441461098357610319565b806395d89b411461089b5780639fac68cb146108c6578063a22cb465146108ef57610319565b80637cb64759146107b55780637d0a7529146107de5780638bd179df146108075780638da5cb5b1461081e5780638dbb7c06146108495780638fdcf9421461087257610319565b80633ccfd60b1161026a57806353135ca0116102235780636352211e116101fd5780636352211e146106fb5780636adfc82b1461073857806370a0823114610761578063715018a61461079e57610319565b806353135ca01461067c57806355f804b3146106a75780635c975abb146106d057610319565b80633ccfd60b1461056c57806342842e0e14610583578063438b6300146105ac578063453afb0f146105e95780634d507841146106145780634f558e791461063f57610319565b806318160ddd116102d75780632a23d07d116102b15780632a23d07d146104c25780632e6cebe5146104ed5780632eb4a7ab1461051657806331d43b971461054157610319565b806318160ddd1461045257806318180bed1461047d57806323b872dd1461049957610319565b806269fec31461031e57806301ffc9a71461035b57806306fdde0314610398578063081812fc146103c3578063095ea7b31461040057806316c38b3c14610429575b600080fd5b34801561032a57600080fd5b5061034560048036038101906103409190614169565b610c39565b6040516103529190614bb3565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614426565b610c4b565b60405161038f91906149e0565b60405180910390f35b3480156103a457600080fd5b506103ad610d2d565b6040516103ba9190614a16565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906144cd565b610dbf565b6040516103f79190614957565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142ec565b610e3b565b005b34801561043557600080fd5b50610450600480360381019061044b91906143cc565b610f46565b005b34801561045e57600080fd5b50610467610fdf565b6040516104749190614b98565b60405180910390f35b6104976004803603810190610492919061436c565b610ff6565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906141d6565b6112cd565b005b3480156104ce57600080fd5b506104d76112dd565b6040516104e49190614b98565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906144cd565b6112e3565b005b34801561052257600080fd5b5061052b611369565b60405161053891906149fb565b60405180910390f35b34801561054d57600080fd5b5061055661136f565b6040516105639190614957565b60405180910390f35b34801561057857600080fd5b50610581611395565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906141d6565b611491565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614169565b6114b1565b6040516105e091906149be565b60405180910390f35b3480156105f557600080fd5b506105fe6115bc565b60405161060b9190614b98565b60405180910390f35b34801561062057600080fd5b506106296115c2565b6040516106369190614b98565b60405180910390f35b34801561064b57600080fd5b50610666600480360381019061066191906144cd565b6115c8565b60405161067391906149e0565b60405180910390f35b34801561068857600080fd5b506106916115da565b60405161069e91906149e0565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614480565b6115ed565b005b3480156106dc57600080fd5b506106e561167f565b6040516106f291906149e0565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906144cd565b611692565b60405161072f9190614957565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906144cd565b6116a8565b005b34801561076d57600080fd5b5061078860048036038101906107839190614169565b61172e565b6040516107959190614b98565b60405180910390f35b3480156107aa57600080fd5b506107b36117fe565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906143f9565b611886565b005b3480156107ea57600080fd5b50610805600480360381019061080091906144cd565b61190c565b005b34801561081357600080fd5b5061081c611992565b005b34801561082a57600080fd5b50610833611a61565b6040516108409190614957565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906144cd565b611a8a565b005b34801561087e57600080fd5b50610899600480360381019061089491906144cd565b611b10565b005b3480156108a757600080fd5b506108b0611b96565b6040516108bd9190614a16565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190614567565b611c28565b005b3480156108fb57600080fd5b50610916600480360381019061091191906142ac565b611c36565b005b34801561092457600080fd5b5061092d611dae565b60405161093a9190614b98565b60405180910390f35b34801561094f57600080fd5b50610958611dbd565b005b34801561096657600080fd5b50610981600480360381019061097c9190614229565b611eac565b005b34801561098f57600080fd5b50610998611f28565b6040516109a59190614b98565b60405180910390f35b3480156109ba57600080fd5b506109c3611f2e565b6040516109d091906149e0565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906144cd565b611f41565b604051610a0d9190614a16565b60405180910390f35b348015610a2257600080fd5b50610a2b611fe8565b604051610a3891906149e0565b60405180910390f35b348015610a4d57600080fd5b50610a686004803603810190610a63919061432c565b611ffb565b005b348015610a7657600080fd5b50610a7f612009565b604051610a8c9190614b98565b60405180910390f35b348015610aa157600080fd5b50610aaa61200f565b604051610ab79190614b98565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614169565b612015565b604051610af49190614b98565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f9190614196565b612027565b604051610b3191906149e0565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190614169565b6120bb565b604051610b6e91906149e0565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b999190614169565b61218f565b005b348015610bac57600080fd5b50610bc76004803603810190610bc29190614527565b61224f565b005b610be36004803603810190610bde919061436c565b612375565b005b348015610bf157600080fd5b50610bfa6126df565b604051610c079190614b98565b60405180910390f35b348015610c1c57600080fd5b50610c376004803603810190610c329190614169565b6126e5565b005b6000610c44826127dd565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d265750610d258261283d565b5b9050919050565b606060038054610d3c90614ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890614ed2565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050905090565b6000610dca826128a7565b610e00576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4682611692565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eae576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ecd6128f5565b73ffffffffffffffffffffffffffffffffffffffff1614158015610eff5750610efd81610ef86128f5565b612027565b155b15610f36576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f418383836128fd565b505050565b610f4e6128f5565b73ffffffffffffffffffffffffffffffffffffffff16610f6c611a61565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990614af8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610fe96129af565b6002546001540303905090565b8067ffffffffffffffff1660008111611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614a98565b60405180910390fd5b600d5481611050611dae565b61105a9190614cab565b111561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614b58565b60405180910390fd5b601260009054906101000a900460ff16156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614b18565b60405180910390fd5b60011515601260019054906101000a900460ff16151514156112c75760011515611114336120bb565b15151415611180576000600e5411611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890614ab8565b60405180910390fd5b6001600e60008282546111749190614dca565b92505081905550611250565b6000151561118d336120bb565b1515141561124f576000336040516020016111a891906148f8565b60405160208183030381529060405280519060200120905061120e858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601354836129b8565b61124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124490614a58565b60405180910390fd5b505b5b6011548267ffffffffffffffff1661126733612015565b6112719190614cab565b11156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614a38565b60405180910390fd5b6112c6338367ffffffffffffffff166129cf565b5b50505050565b6112d88383836129ed565b505050565b600b5481565b6112eb6128f5565b73ffffffffffffffffffffffffffffffffffffffff16611309611a61565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614af8565b60405180910390fd5b80600f8190555050565b60135481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139d6128f5565b73ffffffffffffffffffffffffffffffffffffffff166113bb611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890614af8565b60405180910390fd5b600061141b611a61565b73ffffffffffffffffffffffffffffffffffffffff164760405161143e90614942565b60006040518083038185875af1925050503d806000811461147b576040519150601f19603f3d011682016040523d82523d6000602084013e611480565b606091505b505090508061148e57600080fd5b50565b6114ac83838360405180602001604052806000815250611eac565b505050565b606060006114be8361172e565b905060008167ffffffffffffffff8111156114dc576114db61508f565b5b60405190808252806020026020018201604052801561150a5781602001602082028036833780820191505090505b50905060006001905060005b83811080156115275750600d548211155b156115b057600061153783611692565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159c578284838151811061158157611580615060565b5b602002602001018181525050818061159890614f35565b9250505b82806115a790614f35565b93505050611516565b82945050505050919050565b600c5481565b60115481565b60006115d3826128a7565b9050919050565b601260029054906101000a900460ff1681565b6115f56128f5565b73ffffffffffffffffffffffffffffffffffffffff16611613611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090614af8565b60405180910390fd5b81816009919061167a929190613ebf565b505050565b601260009054906101000a900460ff1681565b600061169d82612ea3565b600001519050919050565b6116b06128f5565b73ffffffffffffffffffffffffffffffffffffffff166116ce611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614af8565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611796576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118066128f5565b73ffffffffffffffffffffffffffffffffffffffff16611824611a61565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614af8565b60405180910390fd5b6118846000613132565b565b61188e6128f5565b73ffffffffffffffffffffffffffffffffffffffff166118ac611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614af8565b60405180910390fd5b8060138190555050565b6119146128f5565b73ffffffffffffffffffffffffffffffffffffffff16611932611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614af8565b60405180910390fd5b8060108190555050565b61199a6128f5565b73ffffffffffffffffffffffffffffffffffffffff166119b8611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614af8565b60405180910390fd5b6000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a926128f5565b73ffffffffffffffffffffffffffffffffffffffff16611ab0611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614af8565b60405180910390fd5b80600c8190555050565b611b186128f5565b73ffffffffffffffffffffffffffffffffffffffff16611b36611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614af8565b60405180910390fd5b80600b8190555050565b606060048054611ba590614ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd190614ed2565b8015611c1e5780601f10611bf357610100808354040283529160200191611c1e565b820191906000526020600020905b815481529060010190602001808311611c0157829003601f168201915b5050505050905090565b611c3282826131f6565b5050565b611c3e6128f5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611cb06128f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d5d6128f5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611da291906149e0565b60405180910390a35050565b6000611db86135e6565b905090565b611dc56128f5565b73ffffffffffffffffffffffffffffffffffffffff16611de3611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090614af8565b60405180910390fd5b60001515601260019054906101000a900460ff16151514611e5957600080fd5b6000601260026101000a81548160ff0219169083151502179055506001601260036101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b611eb78484846129ed565b611ed68373ffffffffffffffffffffffffffffffffffffffff166135f9565b8015611eeb5750611ee98484848461361c565b155b15611f22576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f5481565b601260039054906101000a900460ff1681565b6060611f4c826128a7565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614b38565b60405180910390fd5b6000611f9561377c565b90506000815111611fb55760405180602001604052806000815250611fe0565b80611fbf8461380e565b604051602001611fd0929190614913565b6040516020818303038152906040525b915050919050565b601260019054906101000a900460ff1681565b612005828261396f565b5050565b600d5481565b600e5481565b6000612020826139dc565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161211e9190614957565b60206040518083038186803b15801561213657600080fd5b505afa15801561214a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216e91906144fa565b9050600181106121835760019250505061218a565b6000925050505b919050565b6121976128f5565b73ffffffffffffffffffffffffffffffffffffffff166121b5611a61565b73ffffffffffffffffffffffffffffffffffffffff161461220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290614af8565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8160008111612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90614a98565b60405180910390fd5b600d548161229f611dae565b6122a99190614cab565b11156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614b58565b60405180910390fd5b6122f26128f5565b73ffffffffffffffffffffffffffffffffffffffff16612310611a61565b73ffffffffffffffffffffffffffffffffffffffff1614612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614af8565b60405180910390fd5b61237082846129cf565b505050565b8067ffffffffffffffff16600081116123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614a98565b60405180910390fd5b600d54816123cf611dae565b6123d99190614cab565b111561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614b58565b60405180910390fd5b601260009054906101000a900460ff161561246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190614b18565b60405180910390fd5b60011515601260029054906101000a900460ff161515141561261b57600061249133610c39565b90508267ffffffffffffffff16600b546124ab9190614d70565b3410156124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e490614b78565b60405180910390fd5b60105483826124fc9190614d01565b67ffffffffffffffff161115612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614a38565b60405180910390fd5b60003360405160200161255a91906148f8565b6040516020818303038152906040528051906020012090506125c0868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601354836129b8565b6125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f690614ad8565b60405180910390fd5b61261433858461260f9190614d01565b611ffb565b50506126c5565b8167ffffffffffffffff16600c546126339190614d70565b341015612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614b78565b60405180910390fd5b600f548267ffffffffffffffff1611156126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614a38565b60405180910390fd5b5b6126d9338367ffffffffffffffff166129cf565b50505050565b60105481565b6126ed6128f5565b73ffffffffffffffffffffffffffffffffffffffff1661270b611a61565b73ffffffffffffffffffffffffffffffffffffffff1614612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890614af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614a78565b60405180910390fd5b6127da81613132565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816128b26129af565b111580156128c1575060015482105b80156128ee575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000826129c58584613a46565b1490509392505050565b6129e9828260405180602001604052806000815250613abb565b5050565b60006129f882612ea3565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612a846128f5565b73ffffffffffffffffffffffffffffffffffffffff161480612ab35750612ab285612aad6128f5565b612027565b5b80612af85750612ac16128f5565b73ffffffffffffffffffffffffffffffffffffffff16612ae084610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b31576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b98576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ba58585856001613acd565b612bb1600084876128fd565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e31576001548214612e3057878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e9c8585856001613ad3565b5050505050565b612eab613f45565b600082905080612eb96129af565b11158015612ec8575060015481105b156130fb576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516130f957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612fdd57809250505061312d565b5b6001156130f857818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146130f357809250505061312d565b612fde565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061320183612ea3565b905060008160000151905082156132e25760008173ffffffffffffffffffffffffffffffffffffffff166132336128f5565b73ffffffffffffffffffffffffffffffffffffffff16148061326257506132618261325c6128f5565b612027565b5b806132a757506132706128f5565b73ffffffffffffffffffffffffffffffffffffffff1661328f86610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806132e0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6132f0816000866001613acd565b6132fc600085836128fd565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561356057600154821461355f57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ce816000866001613ad3565b60026000815480929190600101919050555050505050565b60006135f06129af565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136426128f5565b8786866040518563ffffffff1660e01b81526004016136649493929190614972565b602060405180830381600087803b15801561367e57600080fd5b505af19250505080156136af57506040513d601f19601f820116820180604052508101906136ac9190614453565b60015b613729573d80600081146136df576040519150601f19603f3d011682016040523d82523d6000602084013e6136e4565b606091505b50600081511415613721576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606009805461378b90614ed2565b80601f01602080910402602001604051908101604052809291908181526020018280546137b790614ed2565b80156138045780601f106137d957610100808354040283529160200191613804565b820191906000526020600020905b8154815290600101906020018083116137e757829003601f168201915b5050505050905090565b60606000821415613856576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061396a565b600082905060005b6000821461388857808061387190614f35565b915050600a826138819190614d3f565b915061385e565b60008167ffffffffffffffff8111156138a4576138a361508f565b5b6040519080825280601f01601f1916602001820160405280156138d65781602001600182028036833780820191505090505b5090505b60008514613963576001826138ef9190614dca565b9150600a856138fe9190614fa2565b603061390a9190614cab565b60f81b8183815181106139205761391f615060565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561395c9190614d3f565b94506138da565b8093505050505b919050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60008082905060005b8451811015613ab0576000858281518110613a6d57613a6c615060565b5b60200260200101519050808311613a8f57613a888382613ad9565b9250613a9c565b613a998184613ad9565b92505b508080613aa890614f35565b915050613a4f565b508091505092915050565b613ac88383836001613af0565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b5e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613b99576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ba66000868387613acd565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613d705750613d6f8773ffffffffffffffffffffffffffffffffffffffff166135f9565b5b15613e36575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613de5600088848060010195508861361c565b613e1b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613d76578260015414613e3157600080fd5b613ea2565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613e37575b816001819055505050613eb86000868387613ad3565b5050505050565b828054613ecb90614ed2565b90600052602060002090601f016020900481019282613eed5760008555613f34565b82601f10613f0657803560ff1916838001178555613f34565b82800160010185558215613f34579182015b82811115613f33578235825591602001919060010190613f18565b5b509050613f419190613f88565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613fa1576000816000905550600101613f89565b5090565b6000613fb8613fb384614bf3565b614bce565b905082815260208101848484011115613fd457613fd36150cd565b5b613fdf848285614e90565b509392505050565b600081359050613ff681615381565b92915050565b60008083601f840112614012576140116150c3565b5b8235905067ffffffffffffffff81111561402f5761402e6150be565b5b60208301915083602082028301111561404b5761404a6150c8565b5b9250929050565b60008135905061406181615398565b92915050565b600081359050614076816153af565b92915050565b60008135905061408b816153c6565b92915050565b6000815190506140a0816153c6565b92915050565b600082601f8301126140bb576140ba6150c3565b5b81356140cb848260208601613fa5565b91505092915050565b60008083601f8401126140ea576140e96150c3565b5b8235905067ffffffffffffffff811115614107576141066150be565b5b602083019150836001820283011115614123576141226150c8565b5b9250929050565b600081359050614139816153dd565b92915050565b60008151905061414e816153dd565b92915050565b600081359050614163816153f4565b92915050565b60006020828403121561417f5761417e6150d7565b5b600061418d84828501613fe7565b91505092915050565b600080604083850312156141ad576141ac6150d7565b5b60006141bb85828601613fe7565b92505060206141cc85828601613fe7565b9150509250929050565b6000806000606084860312156141ef576141ee6150d7565b5b60006141fd86828701613fe7565b935050602061420e86828701613fe7565b925050604061421f8682870161412a565b9150509250925092565b60008060008060808587031215614243576142426150d7565b5b600061425187828801613fe7565b945050602061426287828801613fe7565b93505060406142738782880161412a565b925050606085013567ffffffffffffffff811115614294576142936150d2565b5b6142a0878288016140a6565b91505092959194509250565b600080604083850312156142c3576142c26150d7565b5b60006142d185828601613fe7565b92505060206142e285828601614052565b9150509250929050565b60008060408385031215614303576143026150d7565b5b600061431185828601613fe7565b92505060206143228582860161412a565b9150509250929050565b60008060408385031215614343576143426150d7565b5b600061435185828601613fe7565b925050602061436285828601614154565b9150509250929050565b600080600060408486031215614385576143846150d7565b5b600084013567ffffffffffffffff8111156143a3576143a26150d2565b5b6143af86828701613ffc565b935093505060206143c286828701614154565b9150509250925092565b6000602082840312156143e2576143e16150d7565b5b60006143f084828501614052565b91505092915050565b60006020828403121561440f5761440e6150d7565b5b600061441d84828501614067565b91505092915050565b60006020828403121561443c5761443b6150d7565b5b600061444a8482850161407c565b91505092915050565b600060208284031215614469576144686150d7565b5b600061447784828501614091565b91505092915050565b60008060208385031215614497576144966150d7565b5b600083013567ffffffffffffffff8111156144b5576144b46150d2565b5b6144c1858286016140d4565b92509250509250929050565b6000602082840312156144e3576144e26150d7565b5b60006144f18482850161412a565b91505092915050565b6000602082840312156145105761450f6150d7565b5b600061451e8482850161413f565b91505092915050565b6000806040838503121561453e5761453d6150d7565b5b600061454c8582860161412a565b925050602061455d85828601613fe7565b9150509250929050565b6000806040838503121561457e5761457d6150d7565b5b600061458c8582860161412a565b925050602061459d85828601614052565b9150509250929050565b60006145b383836148cb565b60208301905092915050565b6145c881614dfe565b82525050565b6145df6145da82614dfe565b614f7e565b82525050565b60006145f082614c34565b6145fa8185614c62565b935061460583614c24565b8060005b8381101561463657815161461d88826145a7565b975061462883614c55565b925050600181019050614609565b5085935050505092915050565b61464c81614e10565b82525050565b61465b81614e1c565b82525050565b600061466c82614c3f565b6146768185614c73565b9350614686818560208601614e9f565b61468f816150dc565b840191505092915050565b60006146a582614c4a565b6146af8185614c8f565b93506146bf818560208601614e9f565b6146c8816150dc565b840191505092915050565b60006146de82614c4a565b6146e88185614ca0565b93506146f8818560208601614e9f565b80840191505092915050565b6000614711601483614c8f565b915061471c826150fa565b602082019050919050565b6000614734602483614c8f565b915061473f82615123565b604082019050919050565b6000614757602683614c8f565b915061476282615172565b604082019050919050565b600061477a601483614c8f565b9150614785826151c1565b602082019050919050565b600061479d602083614c8f565b91506147a8826151ea565b602082019050919050565b60006147c0602283614c8f565b91506147cb82615213565b604082019050919050565b60006147e3600583614ca0565b91506147ee82615262565b600582019050919050565b6000614806602083614c8f565b91506148118261528b565b602082019050919050565b6000614829601783614c8f565b9150614834826152b4565b602082019050919050565b600061484c602f83614c8f565b9150614857826152dd565b604082019050919050565b600061486f600083614c84565b915061487a8261532c565b600082019050919050565b6000614892601483614c8f565b915061489d8261532f565b602082019050919050565b60006148b5601383614c8f565b91506148c082615358565b602082019050919050565b6148d481614e72565b82525050565b6148e381614e72565b82525050565b6148f281614e7c565b82525050565b600061490482846145ce565b60148201915081905092915050565b600061491f82856146d3565b915061492b82846146d3565b9150614936826147d6565b91508190509392505050565b600061494d82614862565b9150819050919050565b600060208201905061496c60008301846145bf565b92915050565b600060808201905061498760008301876145bf565b61499460208301866145bf565b6149a160408301856148da565b81810360608301526149b38184614661565b905095945050505050565b600060208201905081810360008301526149d881846145e5565b905092915050565b60006020820190506149f56000830184614643565b92915050565b6000602082019050614a106000830184614652565b92915050565b60006020820190508181036000830152614a30818461469a565b905092915050565b60006020820190508181036000830152614a5181614704565b9050919050565b60006020820190508181036000830152614a7181614727565b9050919050565b60006020820190508181036000830152614a918161474a565b9050919050565b60006020820190508181036000830152614ab18161476d565b9050919050565b60006020820190508181036000830152614ad181614790565b9050919050565b60006020820190508181036000830152614af1816147b3565b9050919050565b60006020820190508181036000830152614b11816147f9565b9050919050565b60006020820190508181036000830152614b318161481c565b9050919050565b60006020820190508181036000830152614b518161483f565b9050919050565b60006020820190508181036000830152614b7181614885565b9050919050565b60006020820190508181036000830152614b91816148a8565b9050919050565b6000602082019050614bad60008301846148da565b92915050565b6000602082019050614bc860008301846148e9565b92915050565b6000614bd8614be9565b9050614be48282614f04565b919050565b6000604051905090565b600067ffffffffffffffff821115614c0e57614c0d61508f565b5b614c17826150dc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cb682614e72565b9150614cc183614e72565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cf657614cf5614fd3565b5b828201905092915050565b6000614d0c82614e7c565b9150614d1783614e7c565b92508267ffffffffffffffff03821115614d3457614d33614fd3565b5b828201905092915050565b6000614d4a82614e72565b9150614d5583614e72565b925082614d6557614d64615002565b5b828204905092915050565b6000614d7b82614e72565b9150614d8683614e72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dbf57614dbe614fd3565b5b828202905092915050565b6000614dd582614e72565b9150614de083614e72565b925082821015614df357614df2614fd3565b5b828203905092915050565b6000614e0982614e52565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ebd578082015181840152602081019050614ea2565b83811115614ecc576000848401525b50505050565b60006002820490506001821680614eea57607f821691505b60208210811415614efe57614efd615031565b5b50919050565b614f0d826150dc565b810181811067ffffffffffffffff82111715614f2c57614f2b61508f565b5b80604052505050565b6000614f4082614e72565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f7357614f72614fd3565b5b600182019050919050565b6000614f8982614f90565b9050919050565b6000614f9b826150ed565b9050919050565b6000614fad82614e72565b9150614fb883614e72565b925082614fc857614fc7615002565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4e6f742070617274206f66207468652046726565204d696e742077686974656c60008201527f6973742e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4d666572732066726565206d696e7420737570706c7920657863656564656421600082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61538a81614dfe565b811461539557600080fd5b50565b6153a181614e10565b81146153ac57600080fd5b50565b6153b881614e1c565b81146153c357600080fd5b50565b6153cf81614e26565b81146153da57600080fd5b50565b6153e681614e72565b81146153f157600080fd5b50565b6153fd81614e7c565b811461540857600080fd5b5056fea2646970667358221220775d49f755b401c06da2d838821a54eb716e2a85be3c5075b592e368c6f79d6664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103195760003560e01c80637cb64759116101ab578063bc8893b4116100f7578063e985e9c511610095578063efbd73f41161006f578063efbd73f414610ba0578063effd901214610bc9578063f2f4e82414610be5578063f2fde38b14610c1057610319565b8063e985e9c514610afd578063eecd8d7514610b3a578063ef02649e14610b7757610319565b8063ce49af48116100d1578063ce49af4814610a41578063d5abeb0114610a6a578063d9e8f9a814610a95578063dc33e68114610ac057610319565b8063bc8893b4146109ae578063c87b56dd146109d9578063cb5bc2aa14610a1657610319565b806395d89b4111610164578063a2309ff81161013e578063a2309ff814610918578063a43be57b14610943578063b88d4fde1461095a578063bbb897441461098357610319565b806395d89b411461089b5780639fac68cb146108c6578063a22cb465146108ef57610319565b80637cb64759146107b55780637d0a7529146107de5780638bd179df146108075780638da5cb5b1461081e5780638dbb7c06146108495780638fdcf9421461087257610319565b80633ccfd60b1161026a57806353135ca0116102235780636352211e116101fd5780636352211e146106fb5780636adfc82b1461073857806370a0823114610761578063715018a61461079e57610319565b806353135ca01461067c57806355f804b3146106a75780635c975abb146106d057610319565b80633ccfd60b1461056c57806342842e0e14610583578063438b6300146105ac578063453afb0f146105e95780634d507841146106145780634f558e791461063f57610319565b806318160ddd116102d75780632a23d07d116102b15780632a23d07d146104c25780632e6cebe5146104ed5780632eb4a7ab1461051657806331d43b971461054157610319565b806318160ddd1461045257806318180bed1461047d57806323b872dd1461049957610319565b806269fec31461031e57806301ffc9a71461035b57806306fdde0314610398578063081812fc146103c3578063095ea7b31461040057806316c38b3c14610429575b600080fd5b34801561032a57600080fd5b5061034560048036038101906103409190614169565b610c39565b6040516103529190614bb3565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614426565b610c4b565b60405161038f91906149e0565b60405180910390f35b3480156103a457600080fd5b506103ad610d2d565b6040516103ba9190614a16565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906144cd565b610dbf565b6040516103f79190614957565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142ec565b610e3b565b005b34801561043557600080fd5b50610450600480360381019061044b91906143cc565b610f46565b005b34801561045e57600080fd5b50610467610fdf565b6040516104749190614b98565b60405180910390f35b6104976004803603810190610492919061436c565b610ff6565b005b3480156104a557600080fd5b506104c060048036038101906104bb91906141d6565b6112cd565b005b3480156104ce57600080fd5b506104d76112dd565b6040516104e49190614b98565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906144cd565b6112e3565b005b34801561052257600080fd5b5061052b611369565b60405161053891906149fb565b60405180910390f35b34801561054d57600080fd5b5061055661136f565b6040516105639190614957565b60405180910390f35b34801561057857600080fd5b50610581611395565b005b34801561058f57600080fd5b506105aa60048036038101906105a591906141d6565b611491565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614169565b6114b1565b6040516105e091906149be565b60405180910390f35b3480156105f557600080fd5b506105fe6115bc565b60405161060b9190614b98565b60405180910390f35b34801561062057600080fd5b506106296115c2565b6040516106369190614b98565b60405180910390f35b34801561064b57600080fd5b50610666600480360381019061066191906144cd565b6115c8565b60405161067391906149e0565b60405180910390f35b34801561068857600080fd5b506106916115da565b60405161069e91906149e0565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614480565b6115ed565b005b3480156106dc57600080fd5b506106e561167f565b6040516106f291906149e0565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906144cd565b611692565b60405161072f9190614957565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906144cd565b6116a8565b005b34801561076d57600080fd5b5061078860048036038101906107839190614169565b61172e565b6040516107959190614b98565b60405180910390f35b3480156107aa57600080fd5b506107b36117fe565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906143f9565b611886565b005b3480156107ea57600080fd5b50610805600480360381019061080091906144cd565b61190c565b005b34801561081357600080fd5b5061081c611992565b005b34801561082a57600080fd5b50610833611a61565b6040516108409190614957565b60405180910390f35b34801561085557600080fd5b50610870600480360381019061086b91906144cd565b611a8a565b005b34801561087e57600080fd5b50610899600480360381019061089491906144cd565b611b10565b005b3480156108a757600080fd5b506108b0611b96565b6040516108bd9190614a16565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190614567565b611c28565b005b3480156108fb57600080fd5b50610916600480360381019061091191906142ac565b611c36565b005b34801561092457600080fd5b5061092d611dae565b60405161093a9190614b98565b60405180910390f35b34801561094f57600080fd5b50610958611dbd565b005b34801561096657600080fd5b50610981600480360381019061097c9190614229565b611eac565b005b34801561098f57600080fd5b50610998611f28565b6040516109a59190614b98565b60405180910390f35b3480156109ba57600080fd5b506109c3611f2e565b6040516109d091906149e0565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906144cd565b611f41565b604051610a0d9190614a16565b60405180910390f35b348015610a2257600080fd5b50610a2b611fe8565b604051610a3891906149e0565b60405180910390f35b348015610a4d57600080fd5b50610a686004803603810190610a63919061432c565b611ffb565b005b348015610a7657600080fd5b50610a7f612009565b604051610a8c9190614b98565b60405180910390f35b348015610aa157600080fd5b50610aaa61200f565b604051610ab79190614b98565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614169565b612015565b604051610af49190614b98565b60405180910390f35b348015610b0957600080fd5b50610b246004803603810190610b1f9190614196565b612027565b604051610b3191906149e0565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190614169565b6120bb565b604051610b6e91906149e0565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b999190614169565b61218f565b005b348015610bac57600080fd5b50610bc76004803603810190610bc29190614527565b61224f565b005b610be36004803603810190610bde919061436c565b612375565b005b348015610bf157600080fd5b50610bfa6126df565b604051610c079190614b98565b60405180910390f35b348015610c1c57600080fd5b50610c376004803603810190610c329190614169565b6126e5565b005b6000610c44826127dd565b9050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d265750610d258261283d565b5b9050919050565b606060038054610d3c90614ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6890614ed2565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050905090565b6000610dca826128a7565b610e00576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e4682611692565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610eae576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ecd6128f5565b73ffffffffffffffffffffffffffffffffffffffff1614158015610eff5750610efd81610ef86128f5565b612027565b155b15610f36576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f418383836128fd565b505050565b610f4e6128f5565b73ffffffffffffffffffffffffffffffffffffffff16610f6c611a61565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990614af8565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610fe96129af565b6002546001540303905090565b8067ffffffffffffffff1660008111611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614a98565b60405180910390fd5b600d5481611050611dae565b61105a9190614cab565b111561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614b58565b60405180910390fd5b601260009054906101000a900460ff16156110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614b18565b60405180910390fd5b60011515601260019054906101000a900460ff16151514156112c75760011515611114336120bb565b15151415611180576000600e5411611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890614ab8565b60405180910390fd5b6001600e60008282546111749190614dca565b92505081905550611250565b6000151561118d336120bb565b1515141561124f576000336040516020016111a891906148f8565b60405160208183030381529060405280519060200120905061120e858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601354836129b8565b61124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124490614a58565b60405180910390fd5b505b5b6011548267ffffffffffffffff1661126733612015565b6112719190614cab565b11156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614a38565b60405180910390fd5b6112c6338367ffffffffffffffff166129cf565b5b50505050565b6112d88383836129ed565b505050565b600b5481565b6112eb6128f5565b73ffffffffffffffffffffffffffffffffffffffff16611309611a61565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614af8565b60405180910390fd5b80600f8190555050565b60135481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139d6128f5565b73ffffffffffffffffffffffffffffffffffffffff166113bb611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890614af8565b60405180910390fd5b600061141b611a61565b73ffffffffffffffffffffffffffffffffffffffff164760405161143e90614942565b60006040518083038185875af1925050503d806000811461147b576040519150601f19603f3d011682016040523d82523d6000602084013e611480565b606091505b505090508061148e57600080fd5b50565b6114ac83838360405180602001604052806000815250611eac565b505050565b606060006114be8361172e565b905060008167ffffffffffffffff8111156114dc576114db61508f565b5b60405190808252806020026020018201604052801561150a5781602001602082028036833780820191505090505b50905060006001905060005b83811080156115275750600d548211155b156115b057600061153783611692565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159c578284838151811061158157611580615060565b5b602002602001018181525050818061159890614f35565b9250505b82806115a790614f35565b93505050611516565b82945050505050919050565b600c5481565b60115481565b60006115d3826128a7565b9050919050565b601260029054906101000a900460ff1681565b6115f56128f5565b73ffffffffffffffffffffffffffffffffffffffff16611613611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090614af8565b60405180910390fd5b81816009919061167a929190613ebf565b505050565b601260009054906101000a900460ff1681565b600061169d82612ea3565b600001519050919050565b6116b06128f5565b73ffffffffffffffffffffffffffffffffffffffff166116ce611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90614af8565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611796576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118066128f5565b73ffffffffffffffffffffffffffffffffffffffff16611824611a61565b73ffffffffffffffffffffffffffffffffffffffff161461187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190614af8565b60405180910390fd5b6118846000613132565b565b61188e6128f5565b73ffffffffffffffffffffffffffffffffffffffff166118ac611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614af8565b60405180910390fd5b8060138190555050565b6119146128f5565b73ffffffffffffffffffffffffffffffffffffffff16611932611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90614af8565b60405180910390fd5b8060108190555050565b61199a6128f5565b73ffffffffffffffffffffffffffffffffffffffff166119b8611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614af8565b60405180910390fd5b6000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a926128f5565b73ffffffffffffffffffffffffffffffffffffffff16611ab0611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614af8565b60405180910390fd5b80600c8190555050565b611b186128f5565b73ffffffffffffffffffffffffffffffffffffffff16611b36611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614af8565b60405180910390fd5b80600b8190555050565b606060048054611ba590614ed2565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd190614ed2565b8015611c1e5780601f10611bf357610100808354040283529160200191611c1e565b820191906000526020600020905b815481529060010190602001808311611c0157829003601f168201915b5050505050905090565b611c3282826131f6565b5050565b611c3e6128f5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060086000611cb06128f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d5d6128f5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611da291906149e0565b60405180910390a35050565b6000611db86135e6565b905090565b611dc56128f5565b73ffffffffffffffffffffffffffffffffffffffff16611de3611a61565b73ffffffffffffffffffffffffffffffffffffffff1614611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090614af8565b60405180910390fd5b60001515601260019054906101000a900460ff16151514611e5957600080fd5b6000601260026101000a81548160ff0219169083151502179055506001601260036101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b611eb78484846129ed565b611ed68373ffffffffffffffffffffffffffffffffffffffff166135f9565b8015611eeb5750611ee98484848461361c565b155b15611f22576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f5481565b601260039054906101000a900460ff1681565b6060611f4c826128a7565b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290614b38565b60405180910390fd5b6000611f9561377c565b90506000815111611fb55760405180602001604052806000815250611fe0565b80611fbf8461380e565b604051602001611fd0929190614913565b6040516020818303038152906040525b915050919050565b601260019054906101000a900460ff1681565b612005828261396f565b5050565b600d5481565b600e5481565b6000612020826139dc565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161211e9190614957565b60206040518083038186803b15801561213657600080fd5b505afa15801561214a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216e91906144fa565b9050600181106121835760019250505061218a565b6000925050505b919050565b6121976128f5565b73ffffffffffffffffffffffffffffffffffffffff166121b5611a61565b73ffffffffffffffffffffffffffffffffffffffff161461220b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220290614af8565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8160008111612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90614a98565b60405180910390fd5b600d548161229f611dae565b6122a99190614cab565b11156122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614b58565b60405180910390fd5b6122f26128f5565b73ffffffffffffffffffffffffffffffffffffffff16612310611a61565b73ffffffffffffffffffffffffffffffffffffffff1614612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614af8565b60405180910390fd5b61237082846129cf565b505050565b8067ffffffffffffffff16600081116123c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ba90614a98565b60405180910390fd5b600d54816123cf611dae565b6123d99190614cab565b111561241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614b58565b60405180910390fd5b601260009054906101000a900460ff161561246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190614b18565b60405180910390fd5b60011515601260029054906101000a900460ff161515141561261b57600061249133610c39565b90508267ffffffffffffffff16600b546124ab9190614d70565b3410156124ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e490614b78565b60405180910390fd5b60105483826124fc9190614d01565b67ffffffffffffffff161115612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e90614a38565b60405180910390fd5b60003360405160200161255a91906148f8565b6040516020818303038152906040528051906020012090506125c0868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601354836129b8565b6125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f690614ad8565b60405180910390fd5b61261433858461260f9190614d01565b611ffb565b50506126c5565b8167ffffffffffffffff16600c546126339190614d70565b341015612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614b78565b60405180910390fd5b600f548267ffffffffffffffff1611156126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614a38565b60405180910390fd5b5b6126d9338367ffffffffffffffff166129cf565b50505050565b60105481565b6126ed6128f5565b73ffffffffffffffffffffffffffffffffffffffff1661270b611a61565b73ffffffffffffffffffffffffffffffffffffffff1614612761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275890614af8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614a78565b60405180910390fd5b6127da81613132565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160189054906101000a900467ffffffffffffffff169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816128b26129af565b111580156128c1575060015482105b80156128ee575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000826129c58584613a46565b1490509392505050565b6129e9828260405180602001604052806000815250613abb565b5050565b60006129f882612ea3565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a63576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612a846128f5565b73ffffffffffffffffffffffffffffffffffffffff161480612ab35750612ab285612aad6128f5565b612027565b5b80612af85750612ac16128f5565b73ffffffffffffffffffffffffffffffffffffffff16612ae084610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612b31576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b98576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ba58585856001613acd565b612bb1600084876128fd565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e31576001548214612e3057878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e9c8585856001613ad3565b5050505050565b612eab613f45565b600082905080612eb96129af565b11158015612ec8575060015481105b156130fb576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516130f957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612fdd57809250505061312d565b5b6001156130f857818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146130f357809250505061312d565b612fde565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061320183612ea3565b905060008160000151905082156132e25760008173ffffffffffffffffffffffffffffffffffffffff166132336128f5565b73ffffffffffffffffffffffffffffffffffffffff16148061326257506132618261325c6128f5565b612027565b5b806132a757506132706128f5565b73ffffffffffffffffffffffffffffffffffffffff1661328f86610dbf565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806132e0576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6132f0816000866001613acd565b6132fc600085836128fd565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561356057600154821461355f57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135ce816000866001613ad3565b60026000815480929190600101919050555050505050565b60006135f06129af565b60015403905090565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026136426128f5565b8786866040518563ffffffff1660e01b81526004016136649493929190614972565b602060405180830381600087803b15801561367e57600080fd5b505af19250505080156136af57506040513d601f19601f820116820180604052508101906136ac9190614453565b60015b613729573d80600081146136df576040519150601f19603f3d011682016040523d82523d6000602084013e6136e4565b606091505b50600081511415613721576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606009805461378b90614ed2565b80601f01602080910402602001604051908101604052809291908181526020018280546137b790614ed2565b80156138045780601f106137d957610100808354040283529160200191613804565b820191906000526020600020905b8154815290600101906020018083116137e757829003601f168201915b5050505050905090565b60606000821415613856576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061396a565b600082905060005b6000821461388857808061387190614f35565b915050600a826138819190614d3f565b915061385e565b60008167ffffffffffffffff8111156138a4576138a361508f565b5b6040519080825280601f01601f1916602001820160405280156138d65781602001600182028036833780820191505090505b5090505b60008514613963576001826138ef9190614dca565b9150600a856138fe9190614fa2565b603061390a9190614cab565b60f81b8183815181106139205761391f615060565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561395c9190614d3f565b94506138da565b8093505050505b919050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b60008082905060005b8451811015613ab0576000858281518110613a6d57613a6c615060565b5b60200260200101519050808311613a8f57613a888382613ad9565b9250613a9c565b613a998184613ad9565b92505b508080613aa890614f35565b915050613a4f565b508091505092915050565b613ac88383836001613af0565b505050565b50505050565b50505050565b600082600052816020526040600020905092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613b5e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613b99576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ba66000868387613acd565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613d705750613d6f8773ffffffffffffffffffffffffffffffffffffffff166135f9565b5b15613e36575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613de5600088848060010195508861361c565b613e1b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415613d76578260015414613e3157600080fd5b613ea2565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613e37575b816001819055505050613eb86000868387613ad3565b5050505050565b828054613ecb90614ed2565b90600052602060002090601f016020900481019282613eed5760008555613f34565b82601f10613f0657803560ff1916838001178555613f34565b82800160010185558215613f34579182015b82811115613f33578235825591602001919060010190613f18565b5b509050613f419190613f88565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613fa1576000816000905550600101613f89565b5090565b6000613fb8613fb384614bf3565b614bce565b905082815260208101848484011115613fd457613fd36150cd565b5b613fdf848285614e90565b509392505050565b600081359050613ff681615381565b92915050565b60008083601f840112614012576140116150c3565b5b8235905067ffffffffffffffff81111561402f5761402e6150be565b5b60208301915083602082028301111561404b5761404a6150c8565b5b9250929050565b60008135905061406181615398565b92915050565b600081359050614076816153af565b92915050565b60008135905061408b816153c6565b92915050565b6000815190506140a0816153c6565b92915050565b600082601f8301126140bb576140ba6150c3565b5b81356140cb848260208601613fa5565b91505092915050565b60008083601f8401126140ea576140e96150c3565b5b8235905067ffffffffffffffff811115614107576141066150be565b5b602083019150836001820283011115614123576141226150c8565b5b9250929050565b600081359050614139816153dd565b92915050565b60008151905061414e816153dd565b92915050565b600081359050614163816153f4565b92915050565b60006020828403121561417f5761417e6150d7565b5b600061418d84828501613fe7565b91505092915050565b600080604083850312156141ad576141ac6150d7565b5b60006141bb85828601613fe7565b92505060206141cc85828601613fe7565b9150509250929050565b6000806000606084860312156141ef576141ee6150d7565b5b60006141fd86828701613fe7565b935050602061420e86828701613fe7565b925050604061421f8682870161412a565b9150509250925092565b60008060008060808587031215614243576142426150d7565b5b600061425187828801613fe7565b945050602061426287828801613fe7565b93505060406142738782880161412a565b925050606085013567ffffffffffffffff811115614294576142936150d2565b5b6142a0878288016140a6565b91505092959194509250565b600080604083850312156142c3576142c26150d7565b5b60006142d185828601613fe7565b92505060206142e285828601614052565b9150509250929050565b60008060408385031215614303576143026150d7565b5b600061431185828601613fe7565b92505060206143228582860161412a565b9150509250929050565b60008060408385031215614343576143426150d7565b5b600061435185828601613fe7565b925050602061436285828601614154565b9150509250929050565b600080600060408486031215614385576143846150d7565b5b600084013567ffffffffffffffff8111156143a3576143a26150d2565b5b6143af86828701613ffc565b935093505060206143c286828701614154565b9150509250925092565b6000602082840312156143e2576143e16150d7565b5b60006143f084828501614052565b91505092915050565b60006020828403121561440f5761440e6150d7565b5b600061441d84828501614067565b91505092915050565b60006020828403121561443c5761443b6150d7565b5b600061444a8482850161407c565b91505092915050565b600060208284031215614469576144686150d7565b5b600061447784828501614091565b91505092915050565b60008060208385031215614497576144966150d7565b5b600083013567ffffffffffffffff8111156144b5576144b46150d2565b5b6144c1858286016140d4565b92509250509250929050565b6000602082840312156144e3576144e26150d7565b5b60006144f18482850161412a565b91505092915050565b6000602082840312156145105761450f6150d7565b5b600061451e8482850161413f565b91505092915050565b6000806040838503121561453e5761453d6150d7565b5b600061454c8582860161412a565b925050602061455d85828601613fe7565b9150509250929050565b6000806040838503121561457e5761457d6150d7565b5b600061458c8582860161412a565b925050602061459d85828601614052565b9150509250929050565b60006145b383836148cb565b60208301905092915050565b6145c881614dfe565b82525050565b6145df6145da82614dfe565b614f7e565b82525050565b60006145f082614c34565b6145fa8185614c62565b935061460583614c24565b8060005b8381101561463657815161461d88826145a7565b975061462883614c55565b925050600181019050614609565b5085935050505092915050565b61464c81614e10565b82525050565b61465b81614e1c565b82525050565b600061466c82614c3f565b6146768185614c73565b9350614686818560208601614e9f565b61468f816150dc565b840191505092915050565b60006146a582614c4a565b6146af8185614c8f565b93506146bf818560208601614e9f565b6146c8816150dc565b840191505092915050565b60006146de82614c4a565b6146e88185614ca0565b93506146f8818560208601614e9f565b80840191505092915050565b6000614711601483614c8f565b915061471c826150fa565b602082019050919050565b6000614734602483614c8f565b915061473f82615123565b604082019050919050565b6000614757602683614c8f565b915061476282615172565b604082019050919050565b600061477a601483614c8f565b9150614785826151c1565b602082019050919050565b600061479d602083614c8f565b91506147a8826151ea565b602082019050919050565b60006147c0602283614c8f565b91506147cb82615213565b604082019050919050565b60006147e3600583614ca0565b91506147ee82615262565b600582019050919050565b6000614806602083614c8f565b91506148118261528b565b602082019050919050565b6000614829601783614c8f565b9150614834826152b4565b602082019050919050565b600061484c602f83614c8f565b9150614857826152dd565b604082019050919050565b600061486f600083614c84565b915061487a8261532c565b600082019050919050565b6000614892601483614c8f565b915061489d8261532f565b602082019050919050565b60006148b5601383614c8f565b91506148c082615358565b602082019050919050565b6148d481614e72565b82525050565b6148e381614e72565b82525050565b6148f281614e7c565b82525050565b600061490482846145ce565b60148201915081905092915050565b600061491f82856146d3565b915061492b82846146d3565b9150614936826147d6565b91508190509392505050565b600061494d82614862565b9150819050919050565b600060208201905061496c60008301846145bf565b92915050565b600060808201905061498760008301876145bf565b61499460208301866145bf565b6149a160408301856148da565b81810360608301526149b38184614661565b905095945050505050565b600060208201905081810360008301526149d881846145e5565b905092915050565b60006020820190506149f56000830184614643565b92915050565b6000602082019050614a106000830184614652565b92915050565b60006020820190508181036000830152614a30818461469a565b905092915050565b60006020820190508181036000830152614a5181614704565b9050919050565b60006020820190508181036000830152614a7181614727565b9050919050565b60006020820190508181036000830152614a918161474a565b9050919050565b60006020820190508181036000830152614ab18161476d565b9050919050565b60006020820190508181036000830152614ad181614790565b9050919050565b60006020820190508181036000830152614af1816147b3565b9050919050565b60006020820190508181036000830152614b11816147f9565b9050919050565b60006020820190508181036000830152614b318161481c565b9050919050565b60006020820190508181036000830152614b518161483f565b9050919050565b60006020820190508181036000830152614b7181614885565b9050919050565b60006020820190508181036000830152614b91816148a8565b9050919050565b6000602082019050614bad60008301846148da565b92915050565b6000602082019050614bc860008301846148e9565b92915050565b6000614bd8614be9565b9050614be48282614f04565b919050565b6000604051905090565b600067ffffffffffffffff821115614c0e57614c0d61508f565b5b614c17826150dc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614cb682614e72565b9150614cc183614e72565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cf657614cf5614fd3565b5b828201905092915050565b6000614d0c82614e7c565b9150614d1783614e7c565b92508267ffffffffffffffff03821115614d3457614d33614fd3565b5b828201905092915050565b6000614d4a82614e72565b9150614d5583614e72565b925082614d6557614d64615002565b5b828204905092915050565b6000614d7b82614e72565b9150614d8683614e72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dbf57614dbe614fd3565b5b828202905092915050565b6000614dd582614e72565b9150614de083614e72565b925082821015614df357614df2614fd3565b5b828203905092915050565b6000614e0982614e52565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614ebd578082015181840152602081019050614ea2565b83811115614ecc576000848401525b50505050565b60006002820490506001821680614eea57607f821691505b60208210811415614efe57614efd615031565b5b50919050565b614f0d826150dc565b810181811067ffffffffffffffff82111715614f2c57614f2b61508f565b5b80604052505050565b6000614f4082614e72565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f7357614f72614fd3565b5b600182019050919050565b6000614f8982614f90565b9050919050565b6000614f9b826150ed565b9050919050565b6000614fad82614e72565b9150614fb883614e72565b925082614fc857614fc7615002565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4e6f742070617274206f66207468652046726565204d696e742077686974656c60008201527f6973742e00000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4d666572732066726565206d696e7420737570706c7920657863656564656421600082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61538a81614dfe565b811461539557600080fd5b50565b6153a181614e10565b81146153ac57600080fd5b50565b6153b881614e1c565b81146153c357600080fd5b50565b6153cf81614e26565b81146153da57600080fd5b50565b6153e681614e72565b81146153f157600080fd5b50565b6153fd81614e7c565b811461540857600080fd5b5056fea2646970667358221220775d49f755b401c06da2d838821a54eb716e2a85be3c5075b592e368c6f79d6664736f6c63430008070033

Deployed Bytecode Sourcemap

48835:6594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52861:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27518:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30801:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32398:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31933:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53822:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26723:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49851:809;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33315:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48990:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54467:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49477:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48951:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55287:137;;;;;;;;;;;;;:::i;:::-;;33578:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51796:625;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49035:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49273:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53287:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49396:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53609:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49328:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30595:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54301:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27907:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47983:103;;;;;;;;;;;;;:::i;:::-;;54929:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54133:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54633:122;;;;;;;;;;;;;:::i;:::-;;47332:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53905:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54025:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30984:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53389:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32692:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54761:162;;;;;;;;;;;;;:::i;:::-;;33856:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49167:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49434:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52427:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49358:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52977:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49082:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49118:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53081:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33070:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55035:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53715:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51635:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50666:963;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49219:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48241:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52861:110;52929:6;52951:14;52959:5;52951:7;:14::i;:::-;52944:21;;52861:110;;;:::o;27518:315::-;27620:4;27676:25;27661:40;;;:11;:40;;;;:107;;;;27735:33;27720:48;;;:11;:48;;;;27661:107;:162;;;;27787:36;27811:11;27787:23;:36::i;:::-;27661:162;27639:184;;27518:315;;;:::o;30801:104::-;30855:13;30890:5;30883:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30801:104;:::o;32398:212::-;32466:7;32493:16;32501:7;32493;:16::i;:::-;32488:64;;32518:34;;;;;;;;;;;;;;32488:64;32576:15;:24;32592:7;32576:24;;;;;;;;;;;;;;;;;;;;;32569:31;;32398:212;;;:::o;31933:389::-;32008:13;32024:24;32040:7;32024:15;:24::i;:::-;32008:40;;32071:5;32065:11;;:2;:11;;;32061:48;;;32085:24;;;;;;;;;;;;;;32061:48;32146:5;32130:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;32156:37;32173:5;32180:12;:10;:12::i;:::-;32156:16;:37::i;:::-;32155:38;32130:63;32126:142;;;32219:35;;;;;;;;;;;;;;32126:142;32284:28;32293:2;32297:7;32306:5;32284:8;:28::i;:::-;31995:327;31933:389;;:::o;53822:77::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53887:6:::1;53878;;:15;;;;;;;;;;;;;;;;;;53822:77:::0;:::o;26723:315::-;26767:7;27000:15;:13;:15::i;:::-;26985:12;;26969:13;;:28;:46;26962:53;;26723:315;:::o;49851:809::-;49952:11;49644:201;;49720:1;49706:11;:15;49698:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49795:9;;49780:11;49764:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;49756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49981:6:::1;;;;;;;;;;;49980:7;49972:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50041:4;50025:20;;:14;;;;;;;;;;;:20;;;50022:633;;;50082:4;50058:28;;:20;50067:10;50058:8;:20::i;:::-;:28;;;50055:438;;;50132:1;50106:23;;:27;50098:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;50207:1;50181:23;;:27;;;;;;;:::i;:::-;;;;;;;;50055:438;;;50258:5;50234:29;;:20;50243:10;50234:8;:20::i;:::-;:29;;;50231:262;;;50319:12;50361:10;50344:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;50334:39;;;;;;50319:54;;50392:50;50411:12;;50392:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50425:10;;50437:4;50392:18;:50::i;:::-;50384:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;50264:229;50231:262;50055:438;50551:27;;50536:11;50509:38;;:24;50522:10;50509:12;:24::i;:::-;:38;;;;:::i;:::-;:69;;50501:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;50613:34;50623:10;50635:11;50613:34;;:9;:34::i;:::-;50022:633;49851:809:::0;;;;:::o;33315:182::-;33459:28;33469:4;33475:2;33479:7;33459:9;:28::i;:::-;33315:182;;;:::o;48990:40::-;;;;:::o;54467:160::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54593:28:::1;54563:27;:58;;;;54467:160:::0;:::o;49477:94::-;;;;:::o;48951:32::-;;;;;;;;;;;;;:::o;55287:137::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55332:7:::1;55353;:5;:7::i;:::-;55345:21;;55374;55345:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55331:69;;;55415:2;55407:11;;;::::0;::::1;;55324:100;55287:137::o:0;33578:197::-;33726:39;33743:4;33749:2;33753:7;33726:39;;;;;;;;;;;;:16;:39::i;:::-;33578:197;;;:::o;51796:625::-;51871:16;51899:23;51925:17;51935:6;51925:9;:17::i;:::-;51899:43;;51949:30;51996:15;51982:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51949:63;;52019:22;52044:1;52019:26;;52052:23;52088:299;52113:15;52095;:33;:64;;;;;52150:9;;52132:14;:27;;52095:64;52088:299;;;52168:25;52196:23;52204:14;52196:7;:23::i;:::-;52168:51;;52253:6;52232:27;;:17;:27;;;52228:127;;;52305:14;52272:13;52286:15;52272:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;52330:17;;;;;:::i;:::-;;;;52228:127;52363:16;;;;;:::i;:::-;;;;52161:226;52088:299;;;52402:13;52395:20;;;;;;51796:625;;;:::o;49035:42::-;;;;:::o;49273:46::-;;;;:::o;53287:96::-;53341:4;53361:16;53369:7;53361;:16::i;:::-;53354:23;;53287:96;;;:::o;49396:33::-;;;;;;;;;;;;;:::o;53609:100::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53696:7:::1;;53680:13;:23;;;;;;;:::i;:::-;;53609:100:::0;;:::o;49328:25::-;;;;;;;;;;;;;:::o;30595:129::-;30659:7;30688:21;30701:7;30688:12;:21::i;:::-;:26;;;30681:33;;30595:129;;;:::o;54301:160::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54427:28:::1;54397:27;:58;;;;54301:160:::0;:::o;27907:212::-;27971:7;28014:1;27997:19;;:5;:19;;;27993:60;;;28025:28;;;;;;;;;;;;;;27993:60;28081:12;:19;28094:5;28081:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28073:36;;28066:43;;27907:212;;;:::o;47983:103::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48048:30:::1;48075:1;48048:18;:30::i;:::-;47983:103::o:0;54929:98::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55010:11:::1;54997:10;:24;;;;54929:98:::0;:::o;54133:160::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54262:25:::1;54229:30;:58;;;;54133:160:::0;:::o;54633:122::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54697:5:::1;54680:14;;:22;;;;;;;;;;;;;;;;;;54725:4;54709:13;;:20;;;;;;;;;;;;;;;;;;54745:4;54736:6;;:13;;;;;;;;;;;;;;;;;;54633:122::o:0;47332:87::-;47378:7;47405:6;;;;;;;;;;;47398:13;;47332:87;:::o;53905:114::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53998:15:::1;53981:14;:32;;;;53905:114:::0;:::o;54025:102::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54109:12:::1;54095:11;:26;;;;54025:102:::0;:::o;30984:108::-;31040:13;31075:7;31068:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30984:108;:::o;53389:100::-;53454:29;53460:7;53469:13;53454:5;:29::i;:::-;53389:100;;:::o;32692:297::-;32805:12;:10;:12::i;:::-;32793:24;;:8;:24;;;32789:54;;;32826:17;;;;;;;;;;;;;;32789:54;32905:8;32860:18;:32;32879:12;:10;:12::i;:::-;32860:32;;;;;;;;;;;;;;;:42;32893:8;32860:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32960:8;32931:48;;32946:12;:10;:12::i;:::-;32931:48;;;32970:8;32931:48;;;;;;:::i;:::-;;;;;;;;32692:297;;:::o;53194:87::-;53238:7;53261:14;:12;:14::i;:::-;53254:21;;53194:87;:::o;54761:162::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54833:5:::1;54815:23;;:14;;;;;;;;;;;:23;;;54807:32;;;::::0;::::1;;54862:5;54846:13;;:21;;;;;;;;;;;;;;;;;;54893:4;54874:16;;:23;;;;;;;;;;;;;;;;;;54913:4;54904:6;;:13;;;;;;;;;;;;;;;;;;54761:162::o:0;33856:389::-;34035:28;34045:4;34051:2;34055:7;34035:9;:28::i;:::-;34080:15;:2;:13;;;:15::i;:::-;:76;;;;;34100:56;34131:4;34137:2;34141:7;34150:5;34100:30;:56::i;:::-;34099:57;34080:76;34076:160;;;34182:40;;;;;;;;;;;;;;34076:160;33856:389;;;;:::o;49167:47::-;;;;:::o;49434:36::-;;;;;;;;;;;;;:::o;52427:428::-;52528:13;52571:17;52579:8;52571:7;:17::i;:::-;52557:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;52660:28;52691:10;:8;:10::i;:::-;52660:41;;52748:1;52723:14;52717:28;:32;:132;;;;;;;;;;;;;;;;;52787:14;52803:19;:8;:17;:19::i;:::-;52770:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52717:132;52710:139;;;52427:428;;;:::o;49358:33::-;;;;;;;;;;;;;:::o;52977:98::-;53050:19;53058:5;53065:3;53050:7;:19::i;:::-;52977:98;;:::o;49082:31::-;;;;:::o;49118:44::-;;;;:::o;53081:107::-;53139:7;53162:20;53176:5;53162:13;:20::i;:::-;53155:27;;53081:107;;;:::o;33070:168::-;33167:4;33193:18;:25;33212:5;33193:25;;;;;;;;;;;;;;;:35;33219:8;33193:35;;;;;;;;;;;;;;;;;;;;;;;;;33186:42;;33070:168;;;;:::o;55035:246::-;55089:4;55102:13;55126:17;;;;;;;;;;;55102:42;;55151:19;55173:5;:15;;;55189:5;55173:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55151:44;;55225:1;55210:11;:16;55207:48;;55243:4;55236:11;;;;;;55207:48;55270:5;55263:12;;;;55035:246;;;;:::o;53715:101::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53804:6:::1;53784:17;;:26;;;;;;;;;;;;;;;;;;53715:101:::0;:::o;51635:155::-;51721:11;49720:1;49706:11;:15;49698:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49795:9;;49780:11;49764:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;49756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47563:12:::1;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51751:33:::2;51761:9;51772:11;51751:9;:33::i;:::-;51635:155:::0;;;:::o;50666:963::-;50763:11;49644:201;;49720:1;49706:11;:15;49698:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49795:9;;49780:11;49764:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;49756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50792:6:::1;;;;;;;;;;;50791:7;50783:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50857:4;50842:19;;:13;;;;;;;;;;;:19;;;50839:744;;;50871:19;50893:34;50916:10;50893:22;:34::i;:::-;50871:56;;50971:11;50957:25;;:11;;:25;;;;:::i;:::-;50944:9;:38;;50936:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51053:30;;51038:11;51023:12;:26;;;;:::i;:::-;:60;;;;51015:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;51160:12;51202:10;51185:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;51175:39;;;;;;51160:54;;51231:50;51250:12;;51231:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51264:10;;51276:4;51231:18;:50::i;:::-;51223:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51329:61;51352:10;51378:11;51363:12;:26;;;;:::i;:::-;51329:22;:61::i;:::-;50862:536;;50839:744;;;51455:11;51438:28;;:14;;:28;;;;:::i;:::-;51425:9;:41;;51417:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51522:27;;51507:11;:42;;;;51499:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50839:744;51589:34;51599:10;51611:11;51589:34;;:9;:34::i;:::-;50666:963:::0;;;;:::o;49219:49::-;;;;:::o;48241:201::-;47563:12;:10;:12::i;:::-;47552:23;;:7;:5;:7::i;:::-;:23;;;47544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48350:1:::1;48330:22;;:8;:22;;;;48322:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48406:28;48425:8;48406:18;:28::i;:::-;48241:201:::0;:::o;28729:116::-;28784:6;28812:12;:19;28825:5;28812:19;;;;;;;;;;;;;;;:23;;;;;;;;;;;;28805:30;;28729:116;;;:::o;16284:157::-;16369:4;16408:25;16393:40;;;:11;:40;;;;16386:47;;16284:157;;;:::o;34518:193::-;34575:4;34620:7;34601:15;:13;:15::i;:::-;:26;;:53;;;;;34641:13;;34631:7;:23;34601:53;:100;;;;;34674:11;:20;34686:7;34674:20;;;;;;;;;;;:27;;;;;;;;;;;;34673:28;34601:100;34594:107;;34518:193;;;:::o;22802:98::-;22855:7;22882:10;22875:17;;22802:98;:::o;43124:210::-;43276:2;43249:15;:24;43265:7;43249:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43316:7;43312:2;43296:28;;43305:5;43296:28;;;;;;;;;;;;43124:210;;;:::o;26483:96::-;26539:7;26568:1;26561:8;;26483:96;:::o;1379:190::-;1504:4;1557;1528:25;1541:5;1548:4;1528:12;:25::i;:::-;:33;1521:40;;1379:190;;;;;:::o;34723:108::-;34794:27;34804:2;34808:8;34794:27;;;;;;;;;;;;:9;:27::i;:::-;34723:108;;:::o;37813:2226::-;37938:35;37976:21;37989:7;37976:12;:21::i;:::-;37938:59;;38040:4;38018:26;;:13;:18;;;:26;;;38014:67;;38053:28;;;;;;;;;;;;;;38014:67;38098:22;38140:4;38124:20;;:12;:10;:12::i;:::-;:20;;;:75;;;;38163:36;38180:4;38186:12;:10;:12::i;:::-;38163:16;:36::i;:::-;38124:75;:130;;;;38242:12;:10;:12::i;:::-;38218:36;;:20;38230:7;38218:11;:20::i;:::-;:36;;;38124:130;38098:157;;38277:17;38272:66;;38303:35;;;;;;;;;;;;;;38272:66;38369:1;38355:16;;:2;:16;;;38351:52;;;38380:23;;;;;;;;;;;;;;38351:52;38420:43;38442:4;38448:2;38452:7;38461:1;38420:21;:43::i;:::-;38534:35;38551:1;38555:7;38564:4;38534:8;:35::i;:::-;38907:1;38877:12;:18;38890:4;38877:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38953:1;38925:12;:16;38938:2;38925:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38975:31;39009:11;:20;39021:7;39009:20;;;;;;;;;;;38975:54;;39062:2;39046:8;:13;;;:18;;;;;;;;;;;;;;;;;;39114:15;39081:8;:23;;;:49;;;;;;;;;;;;;;;;;;39390:19;39422:1;39412:7;:11;39390:33;;39440:31;39474:11;:24;39486:11;39474:24;;;;;;;;;;;39440:58;;39544:1;39519:27;;:8;:13;;;;;;;;;;;;:27;;;39515:398;;;39735:13;;39720:11;:28;39716:180;;39791:4;39775:8;:13;;;:20;;;;;;;;;;;;;;;;;;39846:13;:28;;;39820:8;:23;;;:54;;;;;;;;;;;;;;;;;;39716:180;39515:398;38850:1076;;;39966:7;39962:2;39947:27;;39956:4;39947:27;;;;;;;;;;;;39987:42;40008:4;40014:2;40018:7;40027:1;39987:20;:42::i;:::-;37925:2114;;37813:2226;;;:::o;29364:1159::-;29426:21;;:::i;:::-;29462:12;29477:7;29462:22;;29551:4;29532:15;:13;:15::i;:::-;:23;;:47;;;;;29566:13;;29559:4;:20;29532:47;29528:922;;;29602:31;29636:11;:17;29648:4;29636:17;;;;;;;;;;;29602:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29679:9;:16;;;29674:759;;29752:1;29726:28;;:9;:14;;;:28;;;29722:105;;29792:9;29785:16;;;;;;29722:105;30139:273;30146:4;30139:273;;;30181:6;;;;;;;;30228:11;:17;30240:4;30228:17;;;;;;;;;;;30216:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30304:1;30278:28;;:9;:14;;;:28;;;30274:113;;30348:9;30341:16;;;;;;30274:113;30139:273;;;29674:759;29581:869;29528:922;30482:31;;;;;;;;;;;;;;29364:1159;;;;:::o;48602:191::-;48676:16;48695:6;;;;;;;;;;;48676:25;;48721:8;48712:6;;:17;;;;;;;;;;;;;;;;;;48776:8;48745:40;;48766:8;48745:40;;;;;;;;;;;;48665:128;48602:191;:::o;40478:2514::-;40560:35;40598:21;40611:7;40598:12;:21::i;:::-;40560:59;;40636:12;40651:13;:18;;;40636:33;;40690:13;40686:302;;;40722:22;40764:4;40748:20;;:12;:10;:12::i;:::-;:20;;;:79;;;;40791:36;40808:4;40814:12;:10;:12::i;:::-;40791:16;:36::i;:::-;40748:79;:138;;;;40874:12;:10;:12::i;:::-;40850:36;;:20;40862:7;40850:11;:20::i;:::-;:36;;;40748:138;40722:165;;40913:17;40908:66;;40939:35;;;;;;;;;;;;;;40908:66;40705:283;40686:302;41004:51;41026:4;41040:1;41044:7;41053:1;41004:21;:51::i;:::-;41126:35;41143:1;41147:7;41156:4;41126:8;:35::i;:::-;41469:31;41503:12;:18;41516:4;41503:18;;;;;;;;;;;;;;;41469:52;;41561:1;41538:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41607:1;41579:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41713:31;41747:11;:20;41759:7;41747:20;;;;;;;;;;;41713:54;;41800:4;41784:8;:13;;;:20;;;;;;;;;;;;;;;;;;41854:15;41821:8;:23;;;:49;;;;;;;;;;;;;;;;;;41905:4;41887:8;:15;;;:22;;;;;;;;;;;;;;;;;;42165:19;42197:1;42187:7;:11;42165:33;;42215:31;42249:11;:24;42261:11;42249:24;;;;;;;;;;;42215:58;;42319:1;42294:27;;:8;:13;;;;;;;;;;;;:27;;;42290:398;;;42510:13;;42495:11;:28;42491:180;;42566:4;42550:8;:13;;;:20;;;;;;;;;;;;;;;;;;42621:13;:28;;;42595:8;:23;;;:54;;;;;;;;;;;;;;;;;;42491:180;42290:398;41442:1259;;;;42749:7;42745:1;42722:35;;42731:4;42722:35;;;;;;;;;;;;42770:50;42791:4;42805:1;42809:7;42818:1;42770:20;:50::i;:::-;42955:12;;:14;;;;;;;;;;;;;40547:2445;;40478:2514;;:::o;27141:295::-;27188:7;27398:15;:13;:15::i;:::-;27382:13;;:31;27375:38;;27141:295;:::o;6201:326::-;6261:4;6518:1;6496:7;:19;;;:23;6489:30;;6201:326;;;:::o;43848:701::-;44021:4;44060:2;44044:36;;;44081:12;:10;:12::i;:::-;44095:4;44101:7;44110:5;44044:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44040:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44301:1;44284:6;:13;:18;44280:247;;;44332:40;;;;;;;;;;;;;;44280:247;44481:6;44475:13;44466:6;44462:2;44458:15;44451:38;44040:500;44175:45;;;44165:55;;;:6;:55;;;;44158:62;;;43848:701;;;;;;:::o;53495:108::-;53555:13;53584;53577:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53495:108;:::o;3209:723::-;3265:13;3495:1;3486:5;:10;3482:53;;;3513:10;;;;;;;;;;;;;;;;;;;;;3482:53;3545:12;3560:5;3545:20;;3576:14;3601:78;3616:1;3608:4;:9;3601:78;;3634:8;;;;;:::i;:::-;;;;3665:2;3657:10;;;;;:::i;:::-;;;3601:78;;;3689:19;3721:6;3711:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3689:39;;3739:154;3755:1;3746:5;:10;3739:154;;3783:1;3773:11;;;;;:::i;:::-;;;3850:2;3842:5;:10;;;;:::i;:::-;3829:2;:24;;;;:::i;:::-;3816:39;;3799:6;3806;3799:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3879:2;3870:11;;;;;:::i;:::-;;;3739:154;;;3917:6;3903:21;;;;;3209:723;;;;:::o;29045:105::-;29137:3;29111:12;:19;29124:5;29111:19;;;;;;;;;;;;;;;:23;;;:29;;;;;;;;;;;;;;;;;;29045:105;;:::o;28211:141::-;28272:7;28309:12;:19;28322:5;28309:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28301:41;;28294:48;;28211:141;;;:::o;1930:675::-;2013:7;2033:20;2056:4;2033:27;;2076:9;2071:497;2095:5;:12;2091:1;:16;2071:497;;;2129:20;2152:5;2158:1;2152:8;;;;;;;;:::i;:::-;;;;;;;;2129:31;;2195:12;2179;:28;2175:382;;2322:42;2337:12;2351;2322:14;:42::i;:::-;2307:57;;2175:382;;;2499:42;2514:12;2528;2499:14;:42::i;:::-;2484:57;;2175:382;2114:454;2109:3;;;;;:::i;:::-;;;;2071:497;;;;2585:12;2578:19;;;1930:675;;;;:::o;35218:175::-;35351:32;35357:2;35361:8;35371:5;35378:4;35351:5;:32::i;:::-;35218:175;;;:::o;45231:169::-;;;;;:::o;46095:168::-;;;;;:::o;2613:224::-;2681:13;2744:1;2738:4;2731:15;2773:1;2767:4;2760:15;2814:4;2808;2798:21;2789:30;;2613:224;;;;:::o;35676:1859::-;35827:20;35850:13;;35827:36;;35894:1;35880:16;;:2;:16;;;35876:48;;;35905:19;;;;;;;;;;;;;;35876:48;35953:1;35941:8;:13;35937:44;;;35963:18;;;;;;;;;;;;;;35937:44;35998:61;36028:1;36032:2;36036:12;36050:8;35998:21;:61::i;:::-;36383:8;36348:12;:16;36361:2;36348:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36449:8;36409:12;:16;36422:2;36409:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36512:2;36479:11;:25;36491:12;36479:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36581:15;36531:11;:25;36543:12;36531:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36618:20;36641:12;36618:35;;36670:11;36699:8;36684:12;:23;36670:37;;36732:4;:23;;;;;36740:15;:2;:13;;;:15::i;:::-;36732:23;36728:667;;;36778:324;36836:12;36832:2;36811:38;;36828:1;36811:38;;;;;;;;;;;;36879:69;36918:1;36922:2;36926:14;;;;;;36942:5;36879:30;:69::i;:::-;36874:178;;36986:40;;;;;;;;;;;;;;36874:178;37097:3;37081:12;:19;;36778:324;;37187:12;37170:13;;:29;37166:43;;37201:8;;;37166:43;36728:667;;;37254:124;37312:14;;;;;;37308:2;37287:40;;37304:1;37287:40;;;;;;;;;;;;37373:3;37357:12;:19;;37254:124;;36728:667;37427:12;37411:13;:28;;;;36321:1132;;37465:60;37494:1;37498:2;37502:12;37516:8;37465:20;:60::i;:::-;35814:1721;35676:1859;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2104:553::-;2162:8;2172:6;2222:3;2215:4;2207:6;2203:17;2199:27;2189:122;;2230:79;;:::i;:::-;2189:122;2343:6;2330:20;2320:30;;2373:18;2365:6;2362:30;2359:117;;;2395:79;;:::i;:::-;2359:117;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:128;;;2570:79;;:::i;:::-;2523:128;2104:553;;;;;:::o;2663:139::-;2709:5;2747:6;2734:20;2725:29;;2763:33;2790:5;2763:33;:::i;:::-;2663:139;;;;:::o;2808:143::-;2865:5;2896:6;2890:13;2881:22;;2912:33;2939:5;2912:33;:::i;:::-;2808:143;;;;:::o;2957:137::-;3002:5;3040:6;3027:20;3018:29;;3056:32;3082:5;3056:32;:::i;:::-;2957:137;;;;:::o;3100:329::-;3159:6;3208:2;3196:9;3187:7;3183:23;3179:32;3176:119;;;3214:79;;:::i;:::-;3176:119;3334:1;3359:53;3404:7;3395:6;3384:9;3380:22;3359:53;:::i;:::-;3349:63;;3305:117;3100:329;;;;:::o;3435:474::-;3503:6;3511;3560:2;3548:9;3539:7;3535:23;3531:32;3528:119;;;3566:79;;:::i;:::-;3528:119;3686:1;3711:53;3756:7;3747:6;3736:9;3732:22;3711:53;:::i;:::-;3701:63;;3657:117;3813:2;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3784:118;3435:474;;;;;:::o;3915:619::-;3992:6;4000;4008;4057:2;4045:9;4036:7;4032:23;4028:32;4025:119;;;4063:79;;:::i;:::-;4025:119;4183:1;4208:53;4253:7;4244:6;4233:9;4229:22;4208:53;:::i;:::-;4198:63;;4154:117;4310:2;4336:53;4381:7;4372:6;4361:9;4357:22;4336:53;:::i;:::-;4326:63;;4281:118;4438:2;4464:53;4509:7;4500:6;4489:9;4485:22;4464:53;:::i;:::-;4454:63;;4409:118;3915:619;;;;;:::o;4540:943::-;4635:6;4643;4651;4659;4708:3;4696:9;4687:7;4683:23;4679:33;4676:120;;;4715:79;;:::i;:::-;4676:120;4835:1;4860:53;4905:7;4896:6;4885:9;4881:22;4860:53;:::i;:::-;4850:63;;4806:117;4962:2;4988:53;5033:7;5024:6;5013:9;5009:22;4988:53;:::i;:::-;4978:63;;4933:118;5090:2;5116:53;5161:7;5152:6;5141:9;5137:22;5116:53;:::i;:::-;5106:63;;5061:118;5246:2;5235:9;5231:18;5218:32;5277:18;5269:6;5266:30;5263:117;;;5299:79;;:::i;:::-;5263:117;5404:62;5458:7;5449:6;5438:9;5434:22;5404:62;:::i;:::-;5394:72;;5189:287;4540:943;;;;;;;:::o;5489:468::-;5554:6;5562;5611:2;5599:9;5590:7;5586:23;5582:32;5579:119;;;5617:79;;:::i;:::-;5579:119;5737:1;5762:53;5807:7;5798:6;5787:9;5783:22;5762:53;:::i;:::-;5752:63;;5708:117;5864:2;5890:50;5932:7;5923:6;5912:9;5908:22;5890:50;:::i;:::-;5880:60;;5835:115;5489:468;;;;;:::o;5963:474::-;6031:6;6039;6088:2;6076:9;6067:7;6063:23;6059:32;6056:119;;;6094:79;;:::i;:::-;6056:119;6214:1;6239:53;6284:7;6275:6;6264:9;6260:22;6239:53;:::i;:::-;6229:63;;6185:117;6341:2;6367:53;6412:7;6403:6;6392:9;6388:22;6367:53;:::i;:::-;6357:63;;6312:118;5963:474;;;;;:::o;6443:472::-;6510:6;6518;6567:2;6555:9;6546:7;6542:23;6538:32;6535:119;;;6573:79;;:::i;:::-;6535:119;6693:1;6718:53;6763:7;6754:6;6743:9;6739:22;6718:53;:::i;:::-;6708:63;;6664:117;6820:2;6846:52;6890:7;6881:6;6870:9;6866:22;6846:52;:::i;:::-;6836:62;;6791:117;6443:472;;;;;:::o;6921:702::-;7015:6;7023;7031;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7234:1;7223:9;7219:17;7206:31;7264:18;7256:6;7253:30;7250:117;;;7286:79;;:::i;:::-;7250:117;7399:80;7471:7;7462:6;7451:9;7447:22;7399:80;:::i;:::-;7381:98;;;;7177:312;7528:2;7554:52;7598:7;7589:6;7578:9;7574:22;7554:52;:::i;:::-;7544:62;;7499:117;6921:702;;;;;:::o;7629:323::-;7685:6;7734:2;7722:9;7713:7;7709:23;7705:32;7702:119;;;7740:79;;:::i;:::-;7702:119;7860:1;7885:50;7927:7;7918:6;7907:9;7903:22;7885:50;:::i;:::-;7875:60;;7831:114;7629:323;;;;:::o;7958:329::-;8017:6;8066:2;8054:9;8045:7;8041:23;8037:32;8034:119;;;8072:79;;:::i;:::-;8034:119;8192:1;8217:53;8262:7;8253:6;8242:9;8238:22;8217:53;:::i;:::-;8207:63;;8163:117;7958:329;;;;:::o;8293:327::-;8351:6;8400:2;8388:9;8379:7;8375:23;8371:32;8368:119;;;8406:79;;:::i;:::-;8368:119;8526:1;8551:52;8595:7;8586:6;8575:9;8571:22;8551:52;:::i;:::-;8541:62;;8497:116;8293:327;;;;:::o;8626:349::-;8695:6;8744:2;8732:9;8723:7;8719:23;8715:32;8712:119;;;8750:79;;:::i;:::-;8712:119;8870:1;8895:63;8950:7;8941:6;8930:9;8926:22;8895:63;:::i;:::-;8885:73;;8841:127;8626:349;;;;:::o;8981:529::-;9052:6;9060;9109:2;9097:9;9088:7;9084:23;9080:32;9077:119;;;9115:79;;:::i;:::-;9077:119;9263:1;9252:9;9248:17;9235:31;9293:18;9285:6;9282:30;9279:117;;;9315:79;;:::i;:::-;9279:117;9428:65;9485:7;9476:6;9465:9;9461:22;9428:65;:::i;:::-;9410:83;;;;9206:297;8981:529;;;;;:::o;9516:329::-;9575:6;9624:2;9612:9;9603:7;9599:23;9595:32;9592:119;;;9630:79;;:::i;:::-;9592:119;9750:1;9775:53;9820:7;9811:6;9800:9;9796:22;9775:53;:::i;:::-;9765:63;;9721:117;9516:329;;;;:::o;9851:351::-;9921:6;9970:2;9958:9;9949:7;9945:23;9941:32;9938:119;;;9976:79;;:::i;:::-;9938:119;10096:1;10121:64;10177:7;10168:6;10157:9;10153:22;10121:64;:::i;:::-;10111:74;;10067:128;9851:351;;;;:::o;10208:474::-;10276:6;10284;10333:2;10321:9;10312:7;10308:23;10304:32;10301:119;;;10339:79;;:::i;:::-;10301:119;10459:1;10484:53;10529:7;10520:6;10509:9;10505:22;10484:53;:::i;:::-;10474:63;;10430:117;10586:2;10612:53;10657:7;10648:6;10637:9;10633:22;10612:53;:::i;:::-;10602:63;;10557:118;10208:474;;;;;:::o;10688:468::-;10753:6;10761;10810:2;10798:9;10789:7;10785:23;10781:32;10778:119;;;10816:79;;:::i;:::-;10778:119;10936:1;10961:53;11006:7;10997:6;10986:9;10982:22;10961:53;:::i;:::-;10951:63;;10907:117;11063:2;11089:50;11131:7;11122:6;11111:9;11107:22;11089:50;:::i;:::-;11079:60;;11034:115;10688:468;;;;;:::o;11162:179::-;11231:10;11252:46;11294:3;11286:6;11252:46;:::i;:::-;11330:4;11325:3;11321:14;11307:28;;11162:179;;;;:::o;11347:118::-;11434:24;11452:5;11434:24;:::i;:::-;11429:3;11422:37;11347:118;;:::o;11471:157::-;11576:45;11596:24;11614:5;11596:24;:::i;:::-;11576:45;:::i;:::-;11571:3;11564:58;11471:157;;:::o;11664:732::-;11783:3;11812:54;11860:5;11812:54;:::i;:::-;11882:86;11961:6;11956:3;11882:86;:::i;:::-;11875:93;;11992:56;12042:5;11992:56;:::i;:::-;12071:7;12102:1;12087:284;12112:6;12109:1;12106:13;12087:284;;;12188:6;12182:13;12215:63;12274:3;12259:13;12215:63;:::i;:::-;12208:70;;12301:60;12354:6;12301:60;:::i;:::-;12291:70;;12147:224;12134:1;12131;12127:9;12122:14;;12087:284;;;12091:14;12387:3;12380:10;;11788:608;;;11664:732;;;;:::o;12402:109::-;12483:21;12498:5;12483:21;:::i;:::-;12478:3;12471:34;12402:109;;:::o;12517:118::-;12604:24;12622:5;12604:24;:::i;:::-;12599:3;12592:37;12517:118;;:::o;12641:360::-;12727:3;12755:38;12787:5;12755:38;:::i;:::-;12809:70;12872:6;12867:3;12809:70;:::i;:::-;12802:77;;12888:52;12933:6;12928:3;12921:4;12914:5;12910:16;12888:52;:::i;:::-;12965:29;12987:6;12965:29;:::i;:::-;12960:3;12956:39;12949:46;;12731:270;12641:360;;;;:::o;13007:364::-;13095:3;13123:39;13156:5;13123:39;:::i;:::-;13178:71;13242:6;13237:3;13178:71;:::i;:::-;13171:78;;13258:52;13303:6;13298:3;13291:4;13284:5;13280:16;13258:52;:::i;:::-;13335:29;13357:6;13335:29;:::i;:::-;13330:3;13326:39;13319:46;;13099:272;13007:364;;;;:::o;13377:377::-;13483:3;13511:39;13544:5;13511:39;:::i;:::-;13566:89;13648:6;13643:3;13566:89;:::i;:::-;13559:96;;13664:52;13709:6;13704:3;13697:4;13690:5;13686:16;13664:52;:::i;:::-;13741:6;13736:3;13732:16;13725:23;;13487:267;13377:377;;;;:::o;13760:366::-;13902:3;13923:67;13987:2;13982:3;13923:67;:::i;:::-;13916:74;;13999:93;14088:3;13999:93;:::i;:::-;14117:2;14112:3;14108:12;14101:19;;13760:366;;;:::o;14132:::-;14274:3;14295:67;14359:2;14354:3;14295:67;:::i;:::-;14288:74;;14371:93;14460:3;14371:93;:::i;:::-;14489:2;14484:3;14480:12;14473:19;;14132:366;;;:::o;14504:::-;14646:3;14667:67;14731:2;14726:3;14667:67;:::i;:::-;14660:74;;14743:93;14832:3;14743:93;:::i;:::-;14861:2;14856:3;14852:12;14845:19;;14504:366;;;:::o;14876:::-;15018:3;15039:67;15103:2;15098:3;15039:67;:::i;:::-;15032:74;;15115:93;15204:3;15115:93;:::i;:::-;15233:2;15228:3;15224:12;15217:19;;14876:366;;;:::o;15248:::-;15390:3;15411:67;15475:2;15470:3;15411:67;:::i;:::-;15404:74;;15487:93;15576:3;15487:93;:::i;:::-;15605:2;15600:3;15596:12;15589:19;;15248:366;;;:::o;15620:::-;15762:3;15783:67;15847:2;15842:3;15783:67;:::i;:::-;15776:74;;15859:93;15948:3;15859:93;:::i;:::-;15977:2;15972:3;15968:12;15961:19;;15620:366;;;:::o;15992:400::-;16152:3;16173:84;16255:1;16250:3;16173:84;:::i;:::-;16166:91;;16266:93;16355:3;16266:93;:::i;:::-;16384:1;16379:3;16375:11;16368:18;;15992:400;;;:::o;16398:366::-;16540:3;16561:67;16625:2;16620:3;16561:67;:::i;:::-;16554:74;;16637:93;16726:3;16637:93;:::i;:::-;16755:2;16750:3;16746:12;16739:19;;16398:366;;;:::o;16770:::-;16912:3;16933:67;16997:2;16992:3;16933:67;:::i;:::-;16926:74;;17009:93;17098:3;17009:93;:::i;:::-;17127:2;17122:3;17118:12;17111:19;;16770:366;;;:::o;17142:::-;17284:3;17305:67;17369:2;17364:3;17305:67;:::i;:::-;17298:74;;17381:93;17470:3;17381:93;:::i;:::-;17499:2;17494:3;17490:12;17483:19;;17142:366;;;:::o;17514:398::-;17673:3;17694:83;17775:1;17770:3;17694:83;:::i;:::-;17687:90;;17786:93;17875:3;17786:93;:::i;:::-;17904:1;17899:3;17895:11;17888:18;;17514:398;;;:::o;17918:366::-;18060:3;18081:67;18145:2;18140:3;18081:67;:::i;:::-;18074:74;;18157:93;18246:3;18157:93;:::i;:::-;18275:2;18270:3;18266:12;18259:19;;17918:366;;;:::o;18290:::-;18432:3;18453:67;18517:2;18512:3;18453:67;:::i;:::-;18446:74;;18529:93;18618:3;18529:93;:::i;:::-;18647:2;18642:3;18638:12;18631:19;;18290:366;;;:::o;18662:108::-;18739:24;18757:5;18739:24;:::i;:::-;18734:3;18727:37;18662:108;;:::o;18776:118::-;18863:24;18881:5;18863:24;:::i;:::-;18858:3;18851:37;18776:118;;:::o;18900:115::-;18985:23;19002:5;18985:23;:::i;:::-;18980:3;18973:36;18900:115;;:::o;19021:256::-;19133:3;19148:75;19219:3;19210:6;19148:75;:::i;:::-;19248:2;19243:3;19239:12;19232:19;;19268:3;19261:10;;19021:256;;;;:::o;19283:701::-;19564:3;19586:95;19677:3;19668:6;19586:95;:::i;:::-;19579:102;;19698:95;19789:3;19780:6;19698:95;:::i;:::-;19691:102;;19810:148;19954:3;19810:148;:::i;:::-;19803:155;;19975:3;19968:10;;19283:701;;;;;:::o;19990:379::-;20174:3;20196:147;20339:3;20196:147;:::i;:::-;20189:154;;20360:3;20353:10;;19990:379;;;:::o;20375:222::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20519:71;20587:1;20576:9;20572:17;20563:6;20519:71;:::i;:::-;20375:222;;;;:::o;20603:640::-;20798:4;20836:3;20825:9;20821:19;20813:27;;20850:71;20918:1;20907:9;20903:17;20894:6;20850:71;:::i;:::-;20931:72;20999:2;20988:9;20984:18;20975:6;20931:72;:::i;:::-;21013;21081:2;21070:9;21066:18;21057:6;21013:72;:::i;:::-;21132:9;21126:4;21122:20;21117:2;21106:9;21102:18;21095:48;21160:76;21231:4;21222:6;21160:76;:::i;:::-;21152:84;;20603:640;;;;;;;:::o;21249:373::-;21392:4;21430:2;21419:9;21415:18;21407:26;;21479:9;21473:4;21469:20;21465:1;21454:9;21450:17;21443:47;21507:108;21610:4;21601:6;21507:108;:::i;:::-;21499:116;;21249:373;;;;:::o;21628:210::-;21715:4;21753:2;21742:9;21738:18;21730:26;;21766:65;21828:1;21817:9;21813:17;21804:6;21766:65;:::i;:::-;21628:210;;;;:::o;21844:222::-;21937:4;21975:2;21964:9;21960:18;21952:26;;21988:71;22056:1;22045:9;22041:17;22032:6;21988:71;:::i;:::-;21844:222;;;;:::o;22072:313::-;22185:4;22223:2;22212:9;22208:18;22200:26;;22272:9;22266:4;22262:20;22258:1;22247:9;22243:17;22236:47;22300:78;22373:4;22364:6;22300:78;:::i;:::-;22292:86;;22072:313;;;;:::o;22391:419::-;22557:4;22595:2;22584:9;22580:18;22572:26;;22644:9;22638:4;22634:20;22630:1;22619:9;22615:17;22608:47;22672:131;22798:4;22672:131;:::i;:::-;22664:139;;22391:419;;;:::o;22816:::-;22982:4;23020:2;23009:9;23005:18;22997:26;;23069:9;23063:4;23059:20;23055:1;23044:9;23040:17;23033:47;23097:131;23223:4;23097:131;:::i;:::-;23089:139;;22816:419;;;:::o;23241:::-;23407:4;23445:2;23434:9;23430:18;23422:26;;23494:9;23488:4;23484:20;23480:1;23469:9;23465:17;23458:47;23522:131;23648:4;23522:131;:::i;:::-;23514:139;;23241:419;;;:::o;23666:::-;23832:4;23870:2;23859:9;23855:18;23847:26;;23919:9;23913:4;23909:20;23905:1;23894:9;23890:17;23883:47;23947:131;24073:4;23947:131;:::i;:::-;23939:139;;23666:419;;;:::o;24091:::-;24257:4;24295:2;24284:9;24280:18;24272:26;;24344:9;24338:4;24334:20;24330:1;24319:9;24315:17;24308:47;24372:131;24498:4;24372:131;:::i;:::-;24364:139;;24091:419;;;:::o;24516:::-;24682:4;24720:2;24709:9;24705:18;24697:26;;24769:9;24763:4;24759:20;24755:1;24744:9;24740:17;24733:47;24797:131;24923:4;24797:131;:::i;:::-;24789:139;;24516:419;;;:::o;24941:::-;25107:4;25145:2;25134:9;25130:18;25122:26;;25194:9;25188:4;25184:20;25180:1;25169:9;25165:17;25158:47;25222:131;25348:4;25222:131;:::i;:::-;25214:139;;24941:419;;;:::o;25366:::-;25532:4;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25366:419;;;:::o;25791:::-;25957:4;25995:2;25984:9;25980:18;25972:26;;26044:9;26038:4;26034:20;26030:1;26019:9;26015:17;26008:47;26072:131;26198:4;26072:131;:::i;:::-;26064:139;;25791:419;;;:::o;26216:::-;26382:4;26420:2;26409:9;26405:18;26397:26;;26469:9;26463:4;26459:20;26455:1;26444:9;26440:17;26433:47;26497:131;26623:4;26497:131;:::i;:::-;26489:139;;26216:419;;;:::o;26641:::-;26807:4;26845:2;26834:9;26830:18;26822:26;;26894:9;26888:4;26884:20;26880:1;26869:9;26865:17;26858:47;26922:131;27048:4;26922:131;:::i;:::-;26914:139;;26641:419;;;:::o;27066:222::-;27159:4;27197:2;27186:9;27182:18;27174:26;;27210:71;27278:1;27267:9;27263:17;27254:6;27210:71;:::i;:::-;27066:222;;;;:::o;27294:218::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27436:69;27502:1;27491:9;27487:17;27478:6;27436:69;:::i;:::-;27294:218;;;;:::o;27518:129::-;27552:6;27579:20;;:::i;:::-;27569:30;;27608:33;27636:4;27628:6;27608:33;:::i;:::-;27518:129;;;:::o;27653:75::-;27686:6;27719:2;27713:9;27703:19;;27653:75;:::o;27734:307::-;27795:4;27885:18;27877:6;27874:30;27871:56;;;27907:18;;:::i;:::-;27871:56;27945:29;27967:6;27945:29;:::i;:::-;27937:37;;28029:4;28023;28019:15;28011:23;;27734:307;;;:::o;28047:132::-;28114:4;28137:3;28129:11;;28167:4;28162:3;28158:14;28150:22;;28047:132;;;:::o;28185:114::-;28252:6;28286:5;28280:12;28270:22;;28185:114;;;:::o;28305:98::-;28356:6;28390:5;28384:12;28374:22;;28305:98;;;:::o;28409:99::-;28461:6;28495:5;28489:12;28479:22;;28409:99;;;:::o;28514:113::-;28584:4;28616;28611:3;28607:14;28599:22;;28514:113;;;:::o;28633:184::-;28732:11;28766:6;28761:3;28754:19;28806:4;28801:3;28797:14;28782:29;;28633:184;;;;:::o;28823:168::-;28906:11;28940:6;28935:3;28928:19;28980:4;28975:3;28971:14;28956:29;;28823:168;;;;:::o;28997:147::-;29098:11;29135:3;29120:18;;28997:147;;;;:::o;29150:169::-;29234:11;29268:6;29263:3;29256:19;29308:4;29303:3;29299:14;29284:29;;29150:169;;;;:::o;29325:148::-;29427:11;29464:3;29449:18;;29325:148;;;;:::o;29479:305::-;29519:3;29538:20;29556:1;29538:20;:::i;:::-;29533:25;;29572:20;29590:1;29572:20;:::i;:::-;29567:25;;29726:1;29658:66;29654:74;29651:1;29648:81;29645:107;;;29732:18;;:::i;:::-;29645:107;29776:1;29773;29769:9;29762:16;;29479:305;;;;:::o;29790:254::-;29829:3;29848:19;29865:1;29848:19;:::i;:::-;29843:24;;29881:19;29898:1;29881:19;:::i;:::-;29876:24;;29986:1;29966:18;29962:26;29959:1;29956:33;29953:59;;;29992:18;;:::i;:::-;29953:59;30036:1;30033;30029:9;30022:16;;29790:254;;;;:::o;30050:185::-;30090:1;30107:20;30125:1;30107:20;:::i;:::-;30102:25;;30141:20;30159:1;30141:20;:::i;:::-;30136:25;;30180:1;30170:35;;30185:18;;:::i;:::-;30170:35;30227:1;30224;30220:9;30215:14;;30050:185;;;;:::o;30241:348::-;30281:7;30304:20;30322:1;30304:20;:::i;:::-;30299:25;;30338:20;30356:1;30338:20;:::i;:::-;30333:25;;30526:1;30458:66;30454:74;30451:1;30448:81;30443:1;30436:9;30429:17;30425:105;30422:131;;;30533:18;;:::i;:::-;30422:131;30581:1;30578;30574:9;30563:20;;30241:348;;;;:::o;30595:191::-;30635:4;30655:20;30673:1;30655:20;:::i;:::-;30650:25;;30689:20;30707:1;30689:20;:::i;:::-;30684:25;;30728:1;30725;30722:8;30719:34;;;30733:18;;:::i;:::-;30719:34;30778:1;30775;30771:9;30763:17;;30595:191;;;;:::o;30792:96::-;30829:7;30858:24;30876:5;30858:24;:::i;:::-;30847:35;;30792:96;;;:::o;30894:90::-;30928:7;30971:5;30964:13;30957:21;30946:32;;30894:90;;;:::o;30990:77::-;31027:7;31056:5;31045:16;;30990:77;;;:::o;31073:149::-;31109:7;31149:66;31142:5;31138:78;31127:89;;31073:149;;;:::o;31228:126::-;31265:7;31305:42;31298:5;31294:54;31283:65;;31228:126;;;:::o;31360:77::-;31397:7;31426:5;31415:16;;31360:77;;;:::o;31443:101::-;31479:7;31519:18;31512:5;31508:30;31497:41;;31443:101;;;:::o;31550:154::-;31634:6;31629:3;31624;31611:30;31696:1;31687:6;31682:3;31678:16;31671:27;31550:154;;;:::o;31710:307::-;31778:1;31788:113;31802:6;31799:1;31796:13;31788:113;;;31887:1;31882:3;31878:11;31872:18;31868:1;31863:3;31859:11;31852:39;31824:2;31821:1;31817:10;31812:15;;31788:113;;;31919:6;31916:1;31913:13;31910:101;;;31999:1;31990:6;31985:3;31981:16;31974:27;31910:101;31759:258;31710:307;;;:::o;32023:320::-;32067:6;32104:1;32098:4;32094:12;32084:22;;32151:1;32145:4;32141:12;32172:18;32162:81;;32228:4;32220:6;32216:17;32206:27;;32162:81;32290:2;32282:6;32279:14;32259:18;32256:38;32253:84;;;32309:18;;:::i;:::-;32253:84;32074:269;32023:320;;;:::o;32349:281::-;32432:27;32454:4;32432:27;:::i;:::-;32424:6;32420:40;32562:6;32550:10;32547:22;32526:18;32514:10;32511:34;32508:62;32505:88;;;32573:18;;:::i;:::-;32505:88;32613:10;32609:2;32602:22;32392:238;32349:281;;:::o;32636:233::-;32675:3;32698:24;32716:5;32698:24;:::i;:::-;32689:33;;32744:66;32737:5;32734:77;32731:103;;;32814:18;;:::i;:::-;32731:103;32861:1;32854:5;32850:13;32843:20;;32636:233;;;:::o;32875:100::-;32914:7;32943:26;32963:5;32943:26;:::i;:::-;32932:37;;32875:100;;;:::o;32981:94::-;33020:7;33049:20;33063:5;33049:20;:::i;:::-;33038:31;;32981:94;;;:::o;33081:176::-;33113:1;33130:20;33148:1;33130:20;:::i;:::-;33125:25;;33164:20;33182:1;33164:20;:::i;:::-;33159:25;;33203:1;33193:35;;33208:18;;:::i;:::-;33193:35;33249:1;33246;33242:9;33237:14;;33081:176;;;;:::o;33263:180::-;33311:77;33308:1;33301:88;33408:4;33405:1;33398:15;33432:4;33429:1;33422:15;33449:180;33497:77;33494:1;33487:88;33594:4;33591:1;33584:15;33618:4;33615:1;33608:15;33635:180;33683:77;33680:1;33673:88;33780:4;33777:1;33770:15;33804:4;33801:1;33794:15;33821:180;33869:77;33866:1;33859:88;33966:4;33963:1;33956:15;33990:4;33987:1;33980:15;34007:180;34055:77;34052:1;34045:88;34152:4;34149:1;34142:15;34176:4;34173:1;34166:15;34193:117;34302:1;34299;34292:12;34316:117;34425:1;34422;34415:12;34439:117;34548:1;34545;34538:12;34562:117;34671:1;34668;34661:12;34685:117;34794:1;34791;34784:12;34808:117;34917:1;34914;34907:12;34931:102;34972:6;35023:2;35019:7;35014:2;35007:5;35003:14;34999:28;34989:38;;34931:102;;;:::o;35039:94::-;35072:8;35120:5;35116:2;35112:14;35091:35;;35039:94;;;:::o;35139:170::-;35279:22;35275:1;35267:6;35263:14;35256:46;35139:170;:::o;35315:223::-;35455:34;35451:1;35443:6;35439:14;35432:58;35524:6;35519:2;35511:6;35507:15;35500:31;35315:223;:::o;35544:225::-;35684:34;35680:1;35672:6;35668:14;35661:58;35753:8;35748:2;35740:6;35736:15;35729:33;35544:225;:::o;35775:170::-;35915:22;35911:1;35903:6;35899:14;35892:46;35775:170;:::o;35951:182::-;36091:34;36087:1;36079:6;36075:14;36068:58;35951:182;:::o;36139:221::-;36279:34;36275:1;36267:6;36263:14;36256:58;36348:4;36343:2;36335:6;36331:15;36324:29;36139:221;:::o;36366:155::-;36506:7;36502:1;36494:6;36490:14;36483:31;36366:155;:::o;36527:182::-;36667:34;36663:1;36655:6;36651:14;36644:58;36527:182;:::o;36715:173::-;36855:25;36851:1;36843:6;36839:14;36832:49;36715:173;:::o;36894:234::-;37034:34;37030:1;37022:6;37018:14;37011:58;37103:17;37098:2;37090:6;37086:15;37079:42;36894:234;:::o;37134:114::-;;:::o;37254:170::-;37394:22;37390:1;37382:6;37378:14;37371:46;37254:170;:::o;37430:169::-;37570:21;37566:1;37558:6;37554:14;37547:45;37430:169;:::o;37605:122::-;37678:24;37696:5;37678:24;:::i;:::-;37671:5;37668:35;37658:63;;37717:1;37714;37707:12;37658:63;37605:122;:::o;37733:116::-;37803:21;37818:5;37803:21;:::i;:::-;37796:5;37793:32;37783:60;;37839:1;37836;37829:12;37783:60;37733:116;:::o;37855:122::-;37928:24;37946:5;37928:24;:::i;:::-;37921:5;37918:35;37908:63;;37967:1;37964;37957:12;37908:63;37855:122;:::o;37983:120::-;38055:23;38072:5;38055:23;:::i;:::-;38048:5;38045:34;38035:62;;38093:1;38090;38083:12;38035:62;37983:120;:::o;38109:122::-;38182:24;38200:5;38182:24;:::i;:::-;38175:5;38172:35;38162:63;;38221:1;38218;38211:12;38162:63;38109:122;:::o;38237:120::-;38309:23;38326:5;38309:23;:::i;:::-;38302:5;38299:34;38289:62;;38347:1;38344;38337:12;38289:62;38237:120;:::o

Swarm Source

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