ETH Price: $2,490.24 (+1.78%)

Token

Hideous Hackers Heroes ETH (HHHETH1)
 

Overview

Max Total Supply

214 HHHETH1

Holders

81

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
bullsrunwild.eth
Balance
1 HHHETH1
0x70e92ef02e31d93fb7ae0be7a03d09922fa704ca
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:
HHHETHV1MintContract

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-20
*/

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

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


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

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;

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

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

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


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


// 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/utils/[email protected]


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


// File erc721a/contracts/[email protected]


// Creator: Chiru Labs

pragma solidity ^0.8.4;







error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

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

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

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

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

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

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

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


// File contracts/SmartContract.sol


pragma solidity ^0.8.4;



contract HHHETHV1MintContract is ERC721A, Ownable {

    using Strings for uint256;

    string public baseURI;
    string public uriExtension = '.json';
    string public hiddenURI;

    //***************************************************************************************************
    //Pricing
    //***************************************************************************************************
    uint256 public pricePartner = 0.05 ether; //set NFT price
    uint256 public pricePresale = 0.05 ether; //set NFT price
    uint256 public pricePublic = 0.05 ether; //set NFT price

    //***************************************************************************************************
    //Supply and Reserve
    //***************************************************************************************************
    uint256 public maxSupply = 10000; // set max supply according to your need
    uint256 public reserve = 10; // management tokens

    //***************************************************************************************************
    //Max per Wallets
    //***************************************************************************************************
    uint256 public maxPartnerMint = 3; //set how many NFTs can be minted per wallet for partner
    uint256 public maxPreSaleMint = 2; //set how many NFTs can be minted per wallet in pre sale
    uint256 public maxPublicSaleMint = 9999; //set how many NFTs can be minted per wallet in public sale

    //***************************************************************************************************
    //Sale Controls and Allow List
    //***************************************************************************************************
    bool public isPartnerSaleActive = false;
    bool public isPreSaleActive = false;
    bool public isPublicSaleActive = false;
    bool public isRevealed = false;
    bytes32 public merkleRootPartner;
    bytes32 public merkleRootPresale;

    //***************************************************************************************************
    //Owner Withdraw Address
    //***************************************************************************************************
    address public immutable ownerWithdrawAddressFund;
    address public immutable ownerWithdrawAddress1;
    address public immutable ownerWithdrawAddress2;
    uint256 public immutable ownerWithdrawAddressShare1;
    uint256 public immutable ownerWithdrawAddressShare2;

    //***************************************************************************************************
    //Developer Settings
    //***************************************************************************************************
    address public immutable devAddress;
    uint256 public immutable devShare;

    //***************************************************************************************************
    //Constructor
    //***************************************************************************************************
    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initHiddenURI
    ) ERC721A(_name, _symbol) {
        baseURI = _initBaseURI;
        hiddenURI = _initHiddenURI;
        devAddress = 0xB9cD42c60d23C5475D4B23325eD96a157B738A93; //Dev
        devShare = 4; //Dev Fee
        ownerWithdrawAddressFund = 0xE86B6b135ab01749B74cD4c60c052a6535e9308c;//50% Fund
        ownerWithdrawAddress1 = 0x39Bddd1241459E9a3DC12f78377a488fc413Dd3A;//
        ownerWithdrawAddressShare1 = 23;
        ownerWithdrawAddress2 = 0xA5C2E07F663936ba5F40CCe63E3bBa14241ef03A;//
        ownerWithdrawAddressShare2 = 23;
    }

    //***************************************************************************************************
    // Use #1..
    //***************************************************************************************************
    function _startTokenId() internal view virtual override returns (uint256) { return 1; }
    //***************************************************************************************************
    //Mint tokens for management (pulls a reserve amount)
    //***************************************************************************************************
    function mintReserve() external onlyOwner {
        uint256 supply = totalSupply();
        require(supply + reserve <= maxSupply,  'This transaction would exceed max supply.');

        _safeMint(msg.sender, reserve);
    }

    //***************************************************************************************************
    //Partner Mint
    //***************************************************************************************************
    function partnerMint(bytes32[] calldata __proof, uint256 __count) external payable {
        uint256 supply = totalSupply();
        uint256 tokenCount = numberMinted(msg.sender);

        require(isPartnerSaleActive,           'Partner Sale is not active');
        require(__count > 0,                   'Count can not be 0');
        require(__count <= maxPartnerMint,     string(abi.encodePacked('You can only mint ', maxPartnerMint.toString())));
        require(tokenCount + __count <= maxPartnerMint,  string(abi.encodePacked('You can only mint ', maxPartnerMint.toString())));
        require(tokenCount <= maxPartnerMint,  string(abi.encodePacked('You can only mint ', maxPartnerMint.toString())));
        require(supply + __count <= maxSupply, 'This transaction would exceed max supply.');
        require(msg.value >= pricePartner * __count,  'Ether value is too low');

        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(__proof, merkleRootPartner, leaf), "Not in partner list.");

        _safeMint(msg.sender, __count);
    }

    //***************************************************************************************************
    //Presale Mint
    //***************************************************************************************************
    function preSale(bytes32[] calldata __proof, uint256 __count) external payable {
        uint256 supply = totalSupply();
        uint256 tokenCount = numberMinted(msg.sender);

        require(isPreSaleActive,               'Pre sale is not active');
        require(__count > 0,                   'Count can not be 0');
        require(__count <= maxPreSaleMint,     string(abi.encodePacked('You can only mint ', maxPreSaleMint.toString())));
        require(tokenCount + __count <= maxPreSaleMint,  string(abi.encodePacked('You can only mint ', maxPreSaleMint.toString())));
        require(tokenCount <= maxPreSaleMint,  string(abi.encodePacked('You can only mint ', maxPreSaleMint.toString())));
        require(supply + __count <= maxSupply, 'This transaction would exceed max supply.');
        require(msg.value >= pricePresale * __count,  'Ether value is too low');

        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(__proof, merkleRootPresale, leaf), "Not whitelisted.");

        _safeMint(msg.sender, __count);
    }

    //***************************************************************************************************
    //Public Mint
    //***************************************************************************************************
    function publicSale(uint256 __count) external payable {
        uint256 supply = totalSupply();
        uint256 tokenCount = numberMinted(msg.sender);

        require(isPublicSaleActive,               'Public sale is not active');
        require(__count > 0,                      'Count can not be 0');
        require(__count <= maxPublicSaleMint,     string(abi.encodePacked('You can only mint ', maxPublicSaleMint.toString())));
        require(tokenCount + __count <= maxPublicSaleMint,  string(abi.encodePacked('You can only mint ', maxPublicSaleMint.toString())));
        require(tokenCount <= maxPublicSaleMint,  string(abi.encodePacked('You can only mint ', maxPublicSaleMint.toString())));
        require(supply + __count <= maxSupply,    'This transaction would exceed max supply.');
        require(msg.value >= pricePublic * __count,     'Ether value is too low');

        _safeMint(msg.sender, __count);
    }

    //***************************************************************************************************
    //***************************************************************************************************
    function gift(address _address, uint256 __count) external onlyOwner {
        uint256 supply = totalSupply();
        require(__count > 0,                      'Count can not be 0');
        require(supply + __count <= maxSupply,    'This transaction would exceed max supply.');

        _safeMint(_address, __count);
    }

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

    //***************************************************************************************************
    // MetaData
    //***************************************************************************************************
    function tokenURI(uint256 tokenId) public view override returns (string memory) {

        // return not revealed URI
        if (!isRevealed) { return hiddenURI; }

        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

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

    //***************************************************************************************************
    //Change baseURI or hiddenURI of collection
    //***************************************************************************************************
    function setBaseURI(string memory __baseURI) public onlyOwner { baseURI = __baseURI; }
    function setHiddenURI(string memory __hiddenURI) public onlyOwner { hiddenURI = __hiddenURI; }

    //***************************************************************************************************
    //Change prices of NFT
    //***************************************************************************************************
    function setPartnerPrice(uint256 __price) public onlyOwner { pricePartner = __price; }
    function setPresalePrice(uint256 __price) public onlyOwner { pricePresale = __price; }
    function setPublicPrice(uint256 __price) public onlyOwner { pricePublic = __price; }

    //***************************************************************************************************
    //Change how many NFTs can be minted per wallets
    //***************************************************************************************************
    function setMaxPartnerSale(uint256 __number) public onlyOwner { maxPartnerMint = __number; }
    function setMaxPreSale(uint256 __number) public onlyOwner { maxPreSaleMint = __number; }
    function setMaxPublicSale(uint256 __number) public onlyOwner { maxPublicSaleMint = __number; }

    //***************************************************************************************************
    //Change merkle roots
    //***************************************************************************************************
    function setPartnerMerkleRoot(bytes32 __merkleRoot) public onlyOwner { merkleRootPartner = __merkleRoot; }
    function setPresaleMerkleRoot(bytes32 __merkleRoot) public onlyOwner { merkleRootPresale = __merkleRoot; }

    //***************************************************************************************************
    //Change revealed state of collection
    //***************************************************************************************************
    function flipRevealed() public onlyOwner { isRevealed = !isRevealed; }

    //***************************************************************************************************
    //Change pre sale state of collection
    //***************************************************************************************************
    function flipPartnerSale() public onlyOwner { isPartnerSaleActive = !isPartnerSaleActive; }
    function flipPreSale() public onlyOwner { isPreSaleActive = !isPreSaleActive; }
    function flipPublicSale() public onlyOwner { isPublicSaleActive = !isPublicSaleActive; }

    //***************************************************************************************************
    //Returns total minted NFTs by specific user
    //***************************************************************************************************
    function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); }

    //***************************************************************************************************
    //Ownership
    //***************************************************************************************************
    function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory)
    {
        return _ownershipOf(tokenId);
    }

    //***************************************************************************************************
    //Withdraw Funds
    //***************************************************************************************************
    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;

        require(balance > 0, "No ether to withdraw");

        uint256 devCut = balance * devShare / 100;
        uint256 owner1Cut = balance * ownerWithdrawAddressShare1 / 100;
        uint256 owner2Cut = balance * ownerWithdrawAddressShare2 / 100;
        uint remaining = balance - (devCut + owner1Cut + owner2Cut);

        payable(devAddress).transfer(devCut);
        payable(ownerWithdrawAddress1).transfer(owner1Cut);
        payable(ownerWithdrawAddress2).transfer(owner2Cut);
        payable(ownerWithdrawAddressFund).transfer(remaining);
    }

    //***************************************************************************************************
    //Fallback function for receiving Ether
    //***************************************************************************************************
    receive() external payable {  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initHiddenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPartnerSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"__count","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hiddenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"isPartnerSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPreSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPartnerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreSaleMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicSaleMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootPartner","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootPresale","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawAddressFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawAddressShare1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawAddressShare2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"__proof","type":"bytes32[]"},{"internalType":"uint256","name":"__count","type":"uint256"}],"name":"partnerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"__proof","type":"bytes32[]"},{"internalType":"uint256","name":"__count","type":"uint256"}],"name":"preSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pricePartner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricePublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"__count","type":"uint256"}],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"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":"string","name":"__hiddenURI","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__number","type":"uint256"}],"name":"setMaxPartnerSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__number","type":"uint256"}],"name":"setMaxPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__number","type":"uint256"}],"name":"setMaxPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"__merkleRoot","type":"bytes32"}],"name":"setPartnerMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__price","type":"uint256"}],"name":"setPartnerPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"__merkleRoot","type":"bytes32"}],"name":"setPresaleMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__price","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uriExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101606040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000052929190620003f7565b5066b1a2bc2ec50000600c5566b1a2bc2ec50000600d5566b1a2bc2ec50000600e55612710600f55600a6010556003601155600260125561270f6013556000601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548160ff0219169083151502179055506000601460036101000a81548160ff0219169083151502179055503480156200010857600080fd5b50604051620060df380380620060df83398181016040528101906200012e919062000519565b8383816002908051906020019062000148929190620003f7565b50806003908051906020019062000161929190620003f7565b50620001726200032060201b60201c565b60008190555050506200019a6200018e6200032960201b60201c565b6200033160201b60201c565b8160099080519060200190620001b2929190620003f7565b5080600b9080519060200190620001cb929190620003f7565b5073b9cd42c60d23c5475d4b23325ed96a157b738a9373ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff1660601b815250506004610140818152505073e86b6b135ab01749b74cd4c60c052a6535e9308c73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250507339bddd1241459e9a3dc12f78377a488fc413dd3a73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050601760e0818152505073a5c2e07f663936ba5f40cce63e3bba14241ef03a73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050601761010081815250505050505062000759565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000405906200067e565b90600052602060002090601f01602090048101928262000429576000855562000475565b82601f106200044457805160ff191683800117855562000475565b8280016001018555821562000475579182015b828111156200047457825182559160200191906001019062000457565b5b50905062000484919062000488565b5090565b5b80821115620004a357600081600090555060010162000489565b5090565b6000620004be620004b88462000612565b620005e9565b905082815260208101848484011115620004d757600080fd5b620004e484828562000648565b509392505050565b600082601f830112620004fe57600080fd5b815162000510848260208601620004a7565b91505092915050565b600080600080608085870312156200053057600080fd5b600085015167ffffffffffffffff8111156200054b57600080fd5b6200055987828801620004ec565b945050602085015167ffffffffffffffff8111156200057757600080fd5b6200058587828801620004ec565b935050604085015167ffffffffffffffff811115620005a357600080fd5b620005b187828801620004ec565b925050606085015167ffffffffffffffff811115620005cf57600080fd5b620005dd87828801620004ec565b91505092959194509250565b6000620005f562000608565b9050620006038282620006b4565b919050565b6000604051905090565b600067ffffffffffffffff82111562000630576200062f62000719565b5b6200063b8262000748565b9050602081019050919050565b60005b83811015620006685780820151818401526020810190506200064b565b8381111562000678576000848401525b50505050565b600060028204905060018216806200069757607f821691505b60208210811415620006ae57620006ad620006ea565b5b50919050565b620006bf8262000748565b810181811067ffffffffffffffff82111715620006e157620006e062000719565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60805160601c60a05160601c60c05160601c60e051610100516101205160601c610140516158ee620007f1600039600081816113f501526121ab01526000818161126101526114cb01526000818161146d015261173601526000818161143101526119410152600081816115990152612d390152600081816115320152611e0e015260008181611600015261328401526158ee6000f3fe6080604052600436106103bc5760003560e01c806388084605116101f2578063b88d4fde1161010d578063d5abeb01116100a0578063f2fde38b1161006f578063f2fde38b14610d77578063f37340a514610da0578063f6cb274214610dbc578063f8f8544114610de7576103c3565b8063d5abeb0114610ca7578063dae03eab14610cd2578063dc33e68114610cfd578063e985e9c514610d3a576103c3565b8063c6275255116100dc578063c627525514610bed578063c87b56dd14610c16578063cbce4c9714610c53578063cd3293de14610c7c576103c3565b8063b88d4fde14610b47578063bbaac02f14610b70578063bdc1e43414610b99578063c37a88e614610bc4576103c3565b806395d89b4111610185578063aed04fae11610154578063aed04fae14610abb578063b287c8ed14610ae6578063b3e31b5014610b02578063b6d8f66214610b1e576103c3565b806395d89b4114610a135780639d044ed314610a3e578063a22cb46514610a69578063a2a4860614610a92576103c3565b80638cc54e7f116101c15780638cc54e7f146109555780638da5cb5b146109805780639147dd1b146109ab5780639231ab2a146109d6576103c3565b806388084605146108e5578063890ac366146108fc5780638b62f533146109135780638b8d132c1461092a576103c3565b80634c6d74d0116102e25780636c0360eb11610275578063715018a611610244578063715018a614610851578063805e0b201461086857806381221c141461089157806381c797c1146108ba576103c3565b80636c0360eb146107935780636c3f490d146107be578063704e3d9d146107e957806370a0823114610814576103c3565b806355f804b3116102b157806355f804b3146106d757806357b2e1f7146107005780636352211e1461072b57806364c22f1314610768576103c3565b80634c6d74d01461063f5780634ddb53191461065657806352ee46961461068157806354214f69146106ac576103c3565b80631e84c4131161035a5780633ad10ef6116103295780633ad10ef6146105bd5780633b2c3fb6146105e85780633ccfd60b146105ff57806342842e0e14610616576103c3565b80631e84c4131461051757806323b872dd1461054257806328d7b2761461056b5780633549345e14610594576103c3565b8063081812fc11610396578063081812fc1461045b578063095ea7b314610498578063102e766d146104c157806318160ddd146104ec576103c3565b806301c124b7146103c857806301ffc9a7146103f357806306fdde0314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610e12565b6040516103ea9190614f28565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906149d1565b610e18565b6040516104279190614f0d565b60405180910390f35b34801561043c57600080fd5b50610445610efa565b6040516104529190614f43565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d9190614a64565b610f8c565b60405161048f9190614ea6565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190614914565b611008565b005b3480156104cd57600080fd5b506104d6611113565b6040516104e39190615100565b60405180910390f35b3480156104f857600080fd5b50610501611119565b60405161050e9190615100565b60405180910390f35b34801561052357600080fd5b5061052c611130565b6040516105399190614f0d565b60405180910390f35b34801561054e57600080fd5b506105696004803603810190610564919061480e565b611143565b005b34801561057757600080fd5b50610592600480360381019061058d91906149a8565b611153565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190614a64565b6111d9565b005b3480156105c957600080fd5b506105d261125f565b6040516105df9190614ea6565b60405180910390f35b3480156105f457600080fd5b506105fd611283565b005b34801561060b57600080fd5b5061061461132b565b005b34801561062257600080fd5b5061063d6004803603810190610638919061480e565b61166c565b005b34801561064b57600080fd5b5061065461168c565b005b34801561066257600080fd5b5061066b611734565b6040516106789190615100565b60405180910390f35b34801561068d57600080fd5b50610696611758565b6040516106a39190614f43565b60405180910390f35b3480156106b857600080fd5b506106c16117e6565b6040516106ce9190614f0d565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614a23565b6117f9565b005b34801561070c57600080fd5b5061071561188f565b6040516107229190614f28565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190614a64565b611895565b60405161075f9190614ea6565b60405180910390f35b34801561077457600080fd5b5061077d6118ab565b60405161078a9190615100565b60405180910390f35b34801561079f57600080fd5b506107a86118b1565b6040516107b59190614f43565b60405180910390f35b3480156107ca57600080fd5b506107d361193f565b6040516107e09190615100565b60405180910390f35b3480156107f557600080fd5b506107fe611963565b60405161080b9190615100565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906147a9565b611969565b6040516108489190615100565b60405180910390f35b34801561085d57600080fd5b50610866611a39565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614a64565b611ac1565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a64565b611b47565b005b3480156108c657600080fd5b506108cf611bcd565b6040516108dc9190615100565b60405180910390f35b3480156108f157600080fd5b506108fa611bd3565b005b34801561090857600080fd5b50610911611c7b565b005b34801561091f57600080fd5b50610928611d64565b005b34801561093657600080fd5b5061093f611e0c565b60405161094c9190614ea6565b60405180910390f35b34801561096157600080fd5b5061096a611e30565b6040516109779190614f43565b60405180910390f35b34801561098c57600080fd5b50610995611ebe565b6040516109a29190614ea6565b60405180910390f35b3480156109b757600080fd5b506109c0611ee8565b6040516109cd9190615100565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614a64565b611eee565b604051610a0a91906150e5565b60405180910390f35b348015610a1f57600080fd5b50610a28611f06565b604051610a359190614f43565b60405180910390f35b348015610a4a57600080fd5b50610a53611f98565b604051610a609190614f0d565b60405180910390f35b348015610a7557600080fd5b50610a906004803603810190610a8b91906148d8565b611fab565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190614a64565b612123565b005b348015610ac757600080fd5b50610ad06121a9565b604051610add9190615100565b60405180910390f35b610b006004803603810190610afb9190614a64565b6121cd565b005b610b1c6004803603810190610b179190614950565b612488565b005b348015610b2a57600080fd5b50610b456004803603810190610b4091906149a8565b6127fe565b005b348015610b5357600080fd5b50610b6e6004803603810190610b69919061485d565b612884565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190614a23565b612900565b005b348015610ba557600080fd5b50610bae612996565b604051610bbb9190615100565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614a64565b61299c565b005b348015610bf957600080fd5b50610c146004803603810190610c0f9190614a64565b612a22565b005b348015610c2257600080fd5b50610c3d6004803603810190610c389190614a64565b612aa8565b604051610c4a9190614f43565b60405180910390f35b348015610c5f57600080fd5b50610c7a6004803603810190610c759190614914565b612c01565b005b348015610c8857600080fd5b50610c91612d2b565b604051610c9e9190615100565b60405180910390f35b348015610cb357600080fd5b50610cbc612d31565b604051610cc99190615100565b60405180910390f35b348015610cde57600080fd5b50610ce7612d37565b604051610cf49190614ea6565b60405180910390f35b348015610d0957600080fd5b50610d246004803603810190610d1f91906147a9565b612d5b565b604051610d319190615100565b60405180910390f35b348015610d4657600080fd5b50610d616004803603810190610d5c91906147d2565b612d6d565b604051610d6e9190614f0d565b60405180910390f35b348015610d8357600080fd5b50610d9e6004803603810190610d9991906147a9565b612e01565b005b610dba6004803603810190610db59190614950565b612ef9565b005b348015610dc857600080fd5b50610dd161326f565b604051610dde9190614f0d565b60405180910390f35b348015610df357600080fd5b50610dfc613282565b604051610e099190614ea6565b60405180910390f35b60165481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ee357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ef35750610ef2826132a6565b5b9050919050565b606060028054610f09906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f35906153e3565b8015610f825780601f10610f5757610100808354040283529160200191610f82565b820191906000526020600020905b815481529060010190602001808311610f6557829003601f168201915b5050505050905090565b6000610f9782613310565b610fcd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061101382611895565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661109a61335e565b73ffffffffffffffffffffffffffffffffffffffff16141580156110cc57506110ca816110c561335e565b612d6d565b155b15611103576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e838383613366565b505050565b600e5481565b6000611123613418565b6001546000540303905090565b601460029054906101000a900460ff1681565b61114e838383613421565b505050565b61115b61335e565b73ffffffffffffffffffffffffffffffffffffffff16611179611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690615045565b60405180910390fd5b8060168190555050565b6111e161335e565b73ffffffffffffffffffffffffffffffffffffffff166111ff611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90615045565b60405180910390fd5b80600d8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61128b61335e565b73ffffffffffffffffffffffffffffffffffffffff166112a9611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690615045565b60405180910390fd5b601460039054906101000a900460ff1615601460036101000a81548160ff021916908315150217905550565b61133361335e565b73ffffffffffffffffffffffffffffffffffffffff16611351611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90615045565b60405180910390fd5b6000479050600081116113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614fc5565b60405180910390fd5b600060647f00000000000000000000000000000000000000000000000000000000000000008361141f9190615281565b6114299190615250565b9050600060647f00000000000000000000000000000000000000000000000000000000000000008461145b9190615281565b6114659190615250565b9050600060647f0000000000000000000000000000000000000000000000000000000000000000856114979190615281565b6114a19190615250565b905060008183856114b291906151fa565b6114bc91906151fa565b856114c791906152db565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561152f573d6000803e3d6000fd5b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611596573d6000803e3d6000fd5b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156115fd573d6000803e3d6000fd5b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611664573d6000803e3d6000fd5b505050505050565b61168783838360405180602001604052806000815250612884565b505050565b61169461335e565b73ffffffffffffffffffffffffffffffffffffffff166116b2611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615045565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a8054611765906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611791906153e3565b80156117de5780601f106117b3576101008083540402835291602001916117de565b820191906000526020600020905b8154815290600101906020018083116117c157829003601f168201915b505050505081565b601460039054906101000a900460ff1681565b61180161335e565b73ffffffffffffffffffffffffffffffffffffffff1661181f611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90615045565b60405180910390fd5b806009908051906020019061188b92919061452b565b5050565b60155481565b60006118a0826138d7565b600001519050919050565b60125481565b600980546118be906153e3565b80601f01602080910402602001604051908101604052809291908181526020018280546118ea906153e3565b80156119375780601f1061190c57610100808354040283529160200191611937565b820191906000526020600020905b81548152906001019060200180831161191a57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611a4161335e565b73ffffffffffffffffffffffffffffffffffffffff16611a5f611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90615045565b60405180910390fd5b611abf6000613b66565b565b611ac961335e565b73ffffffffffffffffffffffffffffffffffffffff16611ae7611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490615045565b60405180910390fd5b8060138190555050565b611b4f61335e565b73ffffffffffffffffffffffffffffffffffffffff16611b6d611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90615045565b60405180910390fd5b8060128190555050565b60115481565b611bdb61335e565b73ffffffffffffffffffffffffffffffffffffffff16611bf9611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690615045565b60405180910390fd5b601460029054906101000a900460ff1615601460026101000a81548160ff021916908315150217905550565b611c8361335e565b73ffffffffffffffffffffffffffffffffffffffff16611ca1611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90615045565b60405180910390fd5b6000611d01611119565b9050600f5460105482611d1491906151fa565b1115611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90614f85565b60405180910390fd5b611d6133601054613c2c565b50565b611d6c61335e565b73ffffffffffffffffffffffffffffffffffffffff16611d8a611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790615045565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b8054611e3d906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e69906153e3565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b611ef66145b1565b611eff826138d7565b9050919050565b606060038054611f15906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f41906153e3565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b611fb361335e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612018576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061202561335e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120d261335e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121179190614f0d565b60405180910390a35050565b61212b61335e565b73ffffffffffffffffffffffffffffffffffffffff16612149611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690615045565b60405180910390fd5b80600c8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006121d7611119565b905060006121e433612d5b565b9050601460029054906101000a900460ff16612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90615005565b60405180910390fd5b60008311612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90614fa5565b60405180910390fd5b601354831115612289601354613c4a565b6040516020016122999190614e84565b604051602081830303815290604052906122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e09190614f43565b60405180910390fd5b5060135483826122f991906151fa565b1115612306601354613c4a565b6040516020016123169190614e84565b60405160208183030381529060405290612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d9190614f43565b60405180910390fd5b50601354811115612378601354613c4a565b6040516020016123889190614e84565b604051602081830303815290604052906123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf9190614f43565b60405180910390fd5b50600f5483836123e891906151fa565b1115612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614f85565b60405180910390fd5b82600e546124379190615281565b341015612479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612470906150a5565b60405180910390fd5b6124833384613c2c565b505050565b6000612492611119565b9050600061249f33612d5b565b9050601460009054906101000a900460ff166124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790614fe5565b60405180910390fd5b60008311612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90614fa5565b60405180910390fd5b601154831115612544601154613c4a565b6040516020016125549190614e84565b604051602081830303815290604052906125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b9190614f43565b60405180910390fd5b5060115483826125b491906151fa565b11156125c1601154613c4a565b6040516020016125d19190614e84565b60405160208183030381529060405290612621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126189190614f43565b60405180910390fd5b50601154811115612633601154613c4a565b6040516020016126439190614e84565b60405160208183030381529060405290612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a9190614f43565b60405180910390fd5b50600f5483836126a391906151fa565b11156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614f85565b60405180910390fd5b82600c546126f29190615281565b341015612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b906150a5565b60405180910390fd5b6000336040516020016127479190614e38565b6040516020818303038152906040528051906020012090506127ad868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060155483613df7565b6127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390615025565b60405180910390fd5b6127f63385613c2c565b505050505050565b61280661335e565b73ffffffffffffffffffffffffffffffffffffffff16612824611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190615045565b60405180910390fd5b8060158190555050565b61288f848484613421565b6128ae8373ffffffffffffffffffffffffffffffffffffffff16613e0e565b80156128c357506128c184848484613e31565b155b156128fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61290861335e565b73ffffffffffffffffffffffffffffffffffffffff16612926611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390615045565b60405180910390fd5b80600b908051906020019061299292919061452b565b5050565b600c5481565b6129a461335e565b73ffffffffffffffffffffffffffffffffffffffff166129c2611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615045565b60405180910390fd5b8060118190555050565b612a2a61335e565b73ffffffffffffffffffffffffffffffffffffffff16612a48611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590615045565b60405180910390fd5b80600e8190555050565b6060601460039054906101000a900460ff16612b5057600b8054612acb906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054612af7906153e3565b8015612b445780601f10612b1957610100808354040283529160200191612b44565b820191906000526020600020905b815481529060010190602001808311612b2757829003601f168201915b50505050509050612bfc565b612b5982613310565b612b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8f90615085565b60405180910390fd5b600060098054612ba7906153e3565b90501415612bc45760405180602001604052806000815250612bf9565b612bcc613f91565b612bd583613c4a565b600a604051602001612be993929190614e53565b6040516020818303038152906040525b90505b919050565b612c0961335e565b73ffffffffffffffffffffffffffffffffffffffff16612c27611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490615045565b60405180910390fd5b6000612c87611119565b905060008211612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614fa5565b60405180910390fd5b600f548282612cdb91906151fa565b1115612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390614f85565b60405180910390fd5b612d268383613c2c565b505050565b60105481565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000612d6682614023565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612e0961335e565b73ffffffffffffffffffffffffffffffffffffffff16612e27611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490615045565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee490614f65565b60405180910390fd5b612ef681613b66565b50565b6000612f03611119565b90506000612f1033612d5b565b9050601460019054906101000a900460ff16612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890615065565b60405180910390fd5b60008311612fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9b90614fa5565b60405180910390fd5b601254831115612fb5601254613c4a565b604051602001612fc59190614e84565b60405160208183030381529060405290613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9190614f43565b60405180910390fd5b50601254838261302591906151fa565b1115613032601254613c4a565b6040516020016130429190614e84565b60405160208183030381529060405290613092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130899190614f43565b60405180910390fd5b506012548111156130a4601254613c4a565b6040516020016130b49190614e84565b60405160208183030381529060405290613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb9190614f43565b60405180910390fd5b50600f54838361311491906151fa565b1115613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c90614f85565b60405180910390fd5b82600d546131639190615281565b3410156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c906150a5565b60405180910390fd5b6000336040516020016131b89190614e38565b60405160208183030381529060405280519060200120905061321e868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060165483613df7565b61325d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613254906150c5565b60405180910390fd5b6132673385613c2c565b505050505050565b601460009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161331b613418565b1115801561332a575060005482105b8015613357575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061342c826138d7565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613497576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166134b861335e565b73ffffffffffffffffffffffffffffffffffffffff1614806134e757506134e6856134e161335e565b612d6d565b5b8061352c57506134f561335e565b73ffffffffffffffffffffffffffffffffffffffff1661351484610f8c565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613565576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135cc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135d9858585600161408d565b6135e560008487613366565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561386557600054821461386457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138d08585856001614093565b5050505050565b6138df6145b1565b6000829050806138ed613418565b111580156138fc575060005481105b15613b2f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613b2d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613a11578092505050613b61565b5b600115613b2c57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613b27578092505050613b61565b613a12565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613c46828260405180602001604052806000815250614099565b5050565b60606000821415613c92576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613df2565b600082905060005b60008214613cc4578080613cad90615446565b915050600a82613cbd9190615250565b9150613c9a565b60008167ffffffffffffffff811115613d06577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613d385781602001600182028036833780820191505090505b5090505b60008514613deb57600182613d5191906152db565b9150600a85613d6091906154b3565b6030613d6c91906151fa565b60f81b818381518110613da8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613de49190615250565b9450613d3c565b8093505050505b919050565b600082613e0485846140ab565b1490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e5761335e565b8786866040518563ffffffff1660e01b8152600401613e799493929190614ec1565b602060405180830381600087803b158015613e9357600080fd5b505af1925050508015613ec457506040513d601f19601f82011682018060405250810190613ec191906149fa565b60015b613f3e573d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b50600081511415613f36576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054613fa0906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc906153e3565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b5050505050905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6140a68383836001614146565b505050565b60008082905060005b845181101561413b5760008582815181106140f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161411a576141138382614514565b9250614127565b6141248184614514565b92505b50808061413390615446565b9150506140b4565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156141b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156141ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6141fb600086838761408d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156143c557506143c48773ffffffffffffffffffffffffffffffffffffffff16613e0e565b5b1561448b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461443a6000888480600101955088613e31565b614470576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156143cb57826000541461448657600080fd5b6144f7565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561448c575b81600081905550505061450d6000868387614093565b5050505050565b600082600052816020526040600020905092915050565b828054614537906153e3565b90600052602060002090601f01602090048101928261455957600085556145a0565b82601f1061457257805160ff19168380011785556145a0565b828001600101855582156145a0579182015b8281111561459f578251825591602001919060010190614584565b5b5090506145ad91906145f4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561460d5760008160009055506001016145f5565b5090565b600061462461461f84615140565b61511b565b90508281526020810184848401111561463c57600080fd5b6146478482856153a1565b509392505050565b600061466261465d84615171565b61511b565b90508281526020810184848401111561467a57600080fd5b6146858482856153a1565b509392505050565b60008135905061469c81615845565b92915050565b60008083601f8401126146b457600080fd5b8235905067ffffffffffffffff8111156146cd57600080fd5b6020830191508360208202830111156146e557600080fd5b9250929050565b6000813590506146fb8161585c565b92915050565b60008135905061471081615873565b92915050565b6000813590506147258161588a565b92915050565b60008151905061473a8161588a565b92915050565b600082601f83011261475157600080fd5b8135614761848260208601614611565b91505092915050565b600082601f83011261477b57600080fd5b813561478b84826020860161464f565b91505092915050565b6000813590506147a3816158a1565b92915050565b6000602082840312156147bb57600080fd5b60006147c98482850161468d565b91505092915050565b600080604083850312156147e557600080fd5b60006147f38582860161468d565b92505060206148048582860161468d565b9150509250929050565b60008060006060848603121561482357600080fd5b60006148318682870161468d565b93505060206148428682870161468d565b925050604061485386828701614794565b9150509250925092565b6000806000806080858703121561487357600080fd5b60006148818782880161468d565b94505060206148928782880161468d565b93505060406148a387828801614794565b925050606085013567ffffffffffffffff8111156148c057600080fd5b6148cc87828801614740565b91505092959194509250565b600080604083850312156148eb57600080fd5b60006148f98582860161468d565b925050602061490a858286016146ec565b9150509250929050565b6000806040838503121561492757600080fd5b60006149358582860161468d565b925050602061494685828601614794565b9150509250929050565b60008060006040848603121561496557600080fd5b600084013567ffffffffffffffff81111561497f57600080fd5b61498b868287016146a2565b9350935050602061499e86828701614794565b9150509250925092565b6000602082840312156149ba57600080fd5b60006149c884828501614701565b91505092915050565b6000602082840312156149e357600080fd5b60006149f184828501614716565b91505092915050565b600060208284031215614a0c57600080fd5b6000614a1a8482850161472b565b91505092915050565b600060208284031215614a3557600080fd5b600082013567ffffffffffffffff811115614a4f57600080fd5b614a5b8482850161476a565b91505092915050565b600060208284031215614a7657600080fd5b6000614a8484828501614794565b91505092915050565b614a968161530f565b82525050565b614aa58161530f565b82525050565b614abc614ab78261530f565b61548f565b82525050565b614acb81615321565b82525050565b614ada81615321565b82525050565b614ae98161532d565b82525050565b6000614afa826151b7565b614b0481856151cd565b9350614b148185602086016153b0565b614b1d816155a0565b840191505092915050565b6000614b33826151c2565b614b3d81856151de565b9350614b4d8185602086016153b0565b614b56816155a0565b840191505092915050565b6000614b6c826151c2565b614b7681856151ef565b9350614b868185602086016153b0565b80840191505092915050565b60008154614b9f816153e3565b614ba981866151ef565b94506001821660008114614bc45760018114614bd557614c08565b60ff19831686528186019350614c08565b614bde856151a2565b60005b83811015614c0057815481890152600182019150602081019050614be1565b838801955050505b50505092915050565b6000614c1e6026836151de565b9150614c29826155be565b604082019050919050565b6000614c416029836151de565b9150614c4c8261560d565b604082019050919050565b6000614c646012836151de565b9150614c6f8261565c565b602082019050919050565b6000614c876014836151de565b9150614c9282615685565b602082019050919050565b6000614caa601a836151de565b9150614cb5826156ae565b602082019050919050565b6000614ccd6019836151de565b9150614cd8826156d7565b602082019050919050565b6000614cf06014836151de565b9150614cfb82615700565b602082019050919050565b6000614d136020836151de565b9150614d1e82615729565b602082019050919050565b6000614d366016836151de565b9150614d4182615752565b602082019050919050565b6000614d59602f836151de565b9150614d648261577b565b604082019050919050565b6000614d7c6016836151de565b9150614d87826157ca565b602082019050919050565b6000614d9f6010836151de565b9150614daa826157f3565b602082019050919050565b6000614dc26012836151ef565b9150614dcd8261581c565b601282019050919050565b606082016000820151614dee6000850182614a8d565b506020820151614e016020850182614e29565b506040820151614e146040850182614ac2565b50505050565b614e2381615383565b82525050565b614e328161538d565b82525050565b6000614e448284614aab565b60148201915081905092915050565b6000614e5f8286614b61565b9150614e6b8285614b61565b9150614e778284614b92565b9150819050949350505050565b6000614e8f82614db5565b9150614e9b8284614b61565b915081905092915050565b6000602082019050614ebb6000830184614a9c565b92915050565b6000608082019050614ed66000830187614a9c565b614ee36020830186614a9c565b614ef06040830185614e1a565b8181036060830152614f028184614aef565b905095945050505050565b6000602082019050614f226000830184614ad1565b92915050565b6000602082019050614f3d6000830184614ae0565b92915050565b60006020820190508181036000830152614f5d8184614b28565b905092915050565b60006020820190508181036000830152614f7e81614c11565b9050919050565b60006020820190508181036000830152614f9e81614c34565b9050919050565b60006020820190508181036000830152614fbe81614c57565b9050919050565b60006020820190508181036000830152614fde81614c7a565b9050919050565b60006020820190508181036000830152614ffe81614c9d565b9050919050565b6000602082019050818103600083015261501e81614cc0565b9050919050565b6000602082019050818103600083015261503e81614ce3565b9050919050565b6000602082019050818103600083015261505e81614d06565b9050919050565b6000602082019050818103600083015261507e81614d29565b9050919050565b6000602082019050818103600083015261509e81614d4c565b9050919050565b600060208201905081810360008301526150be81614d6f565b9050919050565b600060208201905081810360008301526150de81614d92565b9050919050565b60006060820190506150fa6000830184614dd8565b92915050565b60006020820190506151156000830184614e1a565b92915050565b6000615125615136565b90506151318282615415565b919050565b6000604051905090565b600067ffffffffffffffff82111561515b5761515a615571565b5b615164826155a0565b9050602081019050919050565b600067ffffffffffffffff82111561518c5761518b615571565b5b615195826155a0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061520582615383565b915061521083615383565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615245576152446154e4565b5b828201905092915050565b600061525b82615383565b915061526683615383565b92508261527657615275615513565b5b828204905092915050565b600061528c82615383565b915061529783615383565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152d0576152cf6154e4565b5b828202905092915050565b60006152e682615383565b91506152f183615383565b925082821015615304576153036154e4565b5b828203905092915050565b600061531a82615363565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156153ce5780820151818401526020810190506153b3565b838111156153dd576000848401525b50505050565b600060028204905060018216806153fb57607f821691505b6020821081141561540f5761540e615542565b5b50919050565b61541e826155a0565b810181811067ffffffffffffffff8211171561543d5761543c615571565b5b80604052505050565b600061545182615383565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615484576154836154e4565b5b600182019050919050565b600061549a826154a1565b9050919050565b60006154ac826155b1565b9050919050565b60006154be82615383565b91506154c983615383565b9250826154d9576154d8615513565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54686973207472616e73616374696f6e20776f756c6420657863656564206d6160008201527f7820737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f436f756e742063616e206e6f7420626520300000000000000000000000000000600082015250565b7f4e6f20657468657220746f207769746864726177000000000000000000000000600082015250565b7f506172746e65722053616c65206973206e6f7420616374697665000000000000600082015250565b7f5075626c69632073616c65206973206e6f742061637469766500000000000000600082015250565b7f4e6f7420696e20706172746e6572206c6973742e000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5072652073616c65206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45746865722076616c756520697320746f6f206c6f7700000000000000000000600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74200000000000000000000000000000600082015250565b61584e8161530f565b811461585957600080fd5b50565b61586581615321565b811461587057600080fd5b50565b61587c8161532d565b811461588757600080fd5b50565b61589381615337565b811461589e57600080fd5b50565b6158aa81615383565b81146158b557600080fd5b5056fea26469706673582212205d2e831ca577e421729e1627d492305a6057ec4aac9358cd3bc6e49f57b0738b64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001a486964656f7573204861636b657273204865726f65732045544800000000000000000000000000000000000000000000000000000000000000000000000000074848484554483100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806388084605116101f2578063b88d4fde1161010d578063d5abeb01116100a0578063f2fde38b1161006f578063f2fde38b14610d77578063f37340a514610da0578063f6cb274214610dbc578063f8f8544114610de7576103c3565b8063d5abeb0114610ca7578063dae03eab14610cd2578063dc33e68114610cfd578063e985e9c514610d3a576103c3565b8063c6275255116100dc578063c627525514610bed578063c87b56dd14610c16578063cbce4c9714610c53578063cd3293de14610c7c576103c3565b8063b88d4fde14610b47578063bbaac02f14610b70578063bdc1e43414610b99578063c37a88e614610bc4576103c3565b806395d89b4111610185578063aed04fae11610154578063aed04fae14610abb578063b287c8ed14610ae6578063b3e31b5014610b02578063b6d8f66214610b1e576103c3565b806395d89b4114610a135780639d044ed314610a3e578063a22cb46514610a69578063a2a4860614610a92576103c3565b80638cc54e7f116101c15780638cc54e7f146109555780638da5cb5b146109805780639147dd1b146109ab5780639231ab2a146109d6576103c3565b806388084605146108e5578063890ac366146108fc5780638b62f533146109135780638b8d132c1461092a576103c3565b80634c6d74d0116102e25780636c0360eb11610275578063715018a611610244578063715018a614610851578063805e0b201461086857806381221c141461089157806381c797c1146108ba576103c3565b80636c0360eb146107935780636c3f490d146107be578063704e3d9d146107e957806370a0823114610814576103c3565b806355f804b3116102b157806355f804b3146106d757806357b2e1f7146107005780636352211e1461072b57806364c22f1314610768576103c3565b80634c6d74d01461063f5780634ddb53191461065657806352ee46961461068157806354214f69146106ac576103c3565b80631e84c4131161035a5780633ad10ef6116103295780633ad10ef6146105bd5780633b2c3fb6146105e85780633ccfd60b146105ff57806342842e0e14610616576103c3565b80631e84c4131461051757806323b872dd1461054257806328d7b2761461056b5780633549345e14610594576103c3565b8063081812fc11610396578063081812fc1461045b578063095ea7b314610498578063102e766d146104c157806318160ddd146104ec576103c3565b806301c124b7146103c857806301ffc9a7146103f357806306fdde0314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610e12565b6040516103ea9190614f28565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906149d1565b610e18565b6040516104279190614f0d565b60405180910390f35b34801561043c57600080fd5b50610445610efa565b6040516104529190614f43565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d9190614a64565b610f8c565b60405161048f9190614ea6565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190614914565b611008565b005b3480156104cd57600080fd5b506104d6611113565b6040516104e39190615100565b60405180910390f35b3480156104f857600080fd5b50610501611119565b60405161050e9190615100565b60405180910390f35b34801561052357600080fd5b5061052c611130565b6040516105399190614f0d565b60405180910390f35b34801561054e57600080fd5b506105696004803603810190610564919061480e565b611143565b005b34801561057757600080fd5b50610592600480360381019061058d91906149a8565b611153565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190614a64565b6111d9565b005b3480156105c957600080fd5b506105d261125f565b6040516105df9190614ea6565b60405180910390f35b3480156105f457600080fd5b506105fd611283565b005b34801561060b57600080fd5b5061061461132b565b005b34801561062257600080fd5b5061063d6004803603810190610638919061480e565b61166c565b005b34801561064b57600080fd5b5061065461168c565b005b34801561066257600080fd5b5061066b611734565b6040516106789190615100565b60405180910390f35b34801561068d57600080fd5b50610696611758565b6040516106a39190614f43565b60405180910390f35b3480156106b857600080fd5b506106c16117e6565b6040516106ce9190614f0d565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190614a23565b6117f9565b005b34801561070c57600080fd5b5061071561188f565b6040516107229190614f28565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190614a64565b611895565b60405161075f9190614ea6565b60405180910390f35b34801561077457600080fd5b5061077d6118ab565b60405161078a9190615100565b60405180910390f35b34801561079f57600080fd5b506107a86118b1565b6040516107b59190614f43565b60405180910390f35b3480156107ca57600080fd5b506107d361193f565b6040516107e09190615100565b60405180910390f35b3480156107f557600080fd5b506107fe611963565b60405161080b9190615100565b60405180910390f35b34801561082057600080fd5b5061083b600480360381019061083691906147a9565b611969565b6040516108489190615100565b60405180910390f35b34801561085d57600080fd5b50610866611a39565b005b34801561087457600080fd5b5061088f600480360381019061088a9190614a64565b611ac1565b005b34801561089d57600080fd5b506108b860048036038101906108b39190614a64565b611b47565b005b3480156108c657600080fd5b506108cf611bcd565b6040516108dc9190615100565b60405180910390f35b3480156108f157600080fd5b506108fa611bd3565b005b34801561090857600080fd5b50610911611c7b565b005b34801561091f57600080fd5b50610928611d64565b005b34801561093657600080fd5b5061093f611e0c565b60405161094c9190614ea6565b60405180910390f35b34801561096157600080fd5b5061096a611e30565b6040516109779190614f43565b60405180910390f35b34801561098c57600080fd5b50610995611ebe565b6040516109a29190614ea6565b60405180910390f35b3480156109b757600080fd5b506109c0611ee8565b6040516109cd9190615100565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614a64565b611eee565b604051610a0a91906150e5565b60405180910390f35b348015610a1f57600080fd5b50610a28611f06565b604051610a359190614f43565b60405180910390f35b348015610a4a57600080fd5b50610a53611f98565b604051610a609190614f0d565b60405180910390f35b348015610a7557600080fd5b50610a906004803603810190610a8b91906148d8565b611fab565b005b348015610a9e57600080fd5b50610ab96004803603810190610ab49190614a64565b612123565b005b348015610ac757600080fd5b50610ad06121a9565b604051610add9190615100565b60405180910390f35b610b006004803603810190610afb9190614a64565b6121cd565b005b610b1c6004803603810190610b179190614950565b612488565b005b348015610b2a57600080fd5b50610b456004803603810190610b4091906149a8565b6127fe565b005b348015610b5357600080fd5b50610b6e6004803603810190610b69919061485d565b612884565b005b348015610b7c57600080fd5b50610b976004803603810190610b929190614a23565b612900565b005b348015610ba557600080fd5b50610bae612996565b604051610bbb9190615100565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614a64565b61299c565b005b348015610bf957600080fd5b50610c146004803603810190610c0f9190614a64565b612a22565b005b348015610c2257600080fd5b50610c3d6004803603810190610c389190614a64565b612aa8565b604051610c4a9190614f43565b60405180910390f35b348015610c5f57600080fd5b50610c7a6004803603810190610c759190614914565b612c01565b005b348015610c8857600080fd5b50610c91612d2b565b604051610c9e9190615100565b60405180910390f35b348015610cb357600080fd5b50610cbc612d31565b604051610cc99190615100565b60405180910390f35b348015610cde57600080fd5b50610ce7612d37565b604051610cf49190614ea6565b60405180910390f35b348015610d0957600080fd5b50610d246004803603810190610d1f91906147a9565b612d5b565b604051610d319190615100565b60405180910390f35b348015610d4657600080fd5b50610d616004803603810190610d5c91906147d2565b612d6d565b604051610d6e9190614f0d565b60405180910390f35b348015610d8357600080fd5b50610d9e6004803603810190610d9991906147a9565b612e01565b005b610dba6004803603810190610db59190614950565b612ef9565b005b348015610dc857600080fd5b50610dd161326f565b604051610dde9190614f0d565b60405180910390f35b348015610df357600080fd5b50610dfc613282565b604051610e099190614ea6565b60405180910390f35b60165481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ee357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ef35750610ef2826132a6565b5b9050919050565b606060028054610f09906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f35906153e3565b8015610f825780601f10610f5757610100808354040283529160200191610f82565b820191906000526020600020905b815481529060010190602001808311610f6557829003601f168201915b5050505050905090565b6000610f9782613310565b610fcd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061101382611895565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661109a61335e565b73ffffffffffffffffffffffffffffffffffffffff16141580156110cc57506110ca816110c561335e565b612d6d565b155b15611103576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110e838383613366565b505050565b600e5481565b6000611123613418565b6001546000540303905090565b601460029054906101000a900460ff1681565b61114e838383613421565b505050565b61115b61335e565b73ffffffffffffffffffffffffffffffffffffffff16611179611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690615045565b60405180910390fd5b8060168190555050565b6111e161335e565b73ffffffffffffffffffffffffffffffffffffffff166111ff611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90615045565b60405180910390fd5b80600d8190555050565b7f000000000000000000000000b9cd42c60d23c5475d4b23325ed96a157b738a9381565b61128b61335e565b73ffffffffffffffffffffffffffffffffffffffff166112a9611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690615045565b60405180910390fd5b601460039054906101000a900460ff1615601460036101000a81548160ff021916908315150217905550565b61133361335e565b73ffffffffffffffffffffffffffffffffffffffff16611351611ebe565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90615045565b60405180910390fd5b6000479050600081116113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690614fc5565b60405180910390fd5b600060647f00000000000000000000000000000000000000000000000000000000000000048361141f9190615281565b6114299190615250565b9050600060647f00000000000000000000000000000000000000000000000000000000000000178461145b9190615281565b6114659190615250565b9050600060647f0000000000000000000000000000000000000000000000000000000000000017856114979190615281565b6114a19190615250565b905060008183856114b291906151fa565b6114bc91906151fa565b856114c791906152db565b90507f000000000000000000000000b9cd42c60d23c5475d4b23325ed96a157b738a9373ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561152f573d6000803e3d6000fd5b507f00000000000000000000000039bddd1241459e9a3dc12f78377a488fc413dd3a73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611596573d6000803e3d6000fd5b507f000000000000000000000000a5c2e07f663936ba5f40cce63e3bba14241ef03a73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156115fd573d6000803e3d6000fd5b507f000000000000000000000000e86b6b135ab01749b74cd4c60c052a6535e9308c73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611664573d6000803e3d6000fd5b505050505050565b61168783838360405180602001604052806000815250612884565b505050565b61169461335e565b73ffffffffffffffffffffffffffffffffffffffff166116b2611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615045565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b7f000000000000000000000000000000000000000000000000000000000000001781565b600a8054611765906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611791906153e3565b80156117de5780601f106117b3576101008083540402835291602001916117de565b820191906000526020600020905b8154815290600101906020018083116117c157829003601f168201915b505050505081565b601460039054906101000a900460ff1681565b61180161335e565b73ffffffffffffffffffffffffffffffffffffffff1661181f611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90615045565b60405180910390fd5b806009908051906020019061188b92919061452b565b5050565b60155481565b60006118a0826138d7565b600001519050919050565b60125481565b600980546118be906153e3565b80601f01602080910402602001604051908101604052809291908181526020018280546118ea906153e3565b80156119375780601f1061190c57610100808354040283529160200191611937565b820191906000526020600020905b81548152906001019060200180831161191a57829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000001781565b60135481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611a4161335e565b73ffffffffffffffffffffffffffffffffffffffff16611a5f611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90615045565b60405180910390fd5b611abf6000613b66565b565b611ac961335e565b73ffffffffffffffffffffffffffffffffffffffff16611ae7611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490615045565b60405180910390fd5b8060138190555050565b611b4f61335e565b73ffffffffffffffffffffffffffffffffffffffff16611b6d611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90615045565b60405180910390fd5b8060128190555050565b60115481565b611bdb61335e565b73ffffffffffffffffffffffffffffffffffffffff16611bf9611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690615045565b60405180910390fd5b601460029054906101000a900460ff1615601460026101000a81548160ff021916908315150217905550565b611c8361335e565b73ffffffffffffffffffffffffffffffffffffffff16611ca1611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90615045565b60405180910390fd5b6000611d01611119565b9050600f5460105482611d1491906151fa565b1115611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90614f85565b60405180910390fd5b611d6133601054613c2c565b50565b611d6c61335e565b73ffffffffffffffffffffffffffffffffffffffff16611d8a611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790615045565b60405180910390fd5b601460019054906101000a900460ff1615601460016101000a81548160ff021916908315150217905550565b7f00000000000000000000000039bddd1241459e9a3dc12f78377a488fc413dd3a81565b600b8054611e3d906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e69906153e3565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b611ef66145b1565b611eff826138d7565b9050919050565b606060038054611f15906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611f41906153e3565b8015611f8e5780601f10611f6357610100808354040283529160200191611f8e565b820191906000526020600020905b815481529060010190602001808311611f7157829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b611fb361335e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612018576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061202561335e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120d261335e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121179190614f0d565b60405180910390a35050565b61212b61335e565b73ffffffffffffffffffffffffffffffffffffffff16612149611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690615045565b60405180910390fd5b80600c8190555050565b7f000000000000000000000000000000000000000000000000000000000000000481565b60006121d7611119565b905060006121e433612d5b565b9050601460029054906101000a900460ff16612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c90615005565b60405180910390fd5b60008311612278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226f90614fa5565b60405180910390fd5b601354831115612289601354613c4a565b6040516020016122999190614e84565b604051602081830303815290604052906122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e09190614f43565b60405180910390fd5b5060135483826122f991906151fa565b1115612306601354613c4a565b6040516020016123169190614e84565b60405160208183030381529060405290612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d9190614f43565b60405180910390fd5b50601354811115612378601354613c4a565b6040516020016123889190614e84565b604051602081830303815290604052906123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf9190614f43565b60405180910390fd5b50600f5483836123e891906151fa565b1115612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614f85565b60405180910390fd5b82600e546124379190615281565b341015612479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612470906150a5565b60405180910390fd5b6124833384613c2c565b505050565b6000612492611119565b9050600061249f33612d5b565b9050601460009054906101000a900460ff166124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790614fe5565b60405180910390fd5b60008311612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90614fa5565b60405180910390fd5b601154831115612544601154613c4a565b6040516020016125549190614e84565b604051602081830303815290604052906125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b9190614f43565b60405180910390fd5b5060115483826125b491906151fa565b11156125c1601154613c4a565b6040516020016125d19190614e84565b60405160208183030381529060405290612621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126189190614f43565b60405180910390fd5b50601154811115612633601154613c4a565b6040516020016126439190614e84565b60405160208183030381529060405290612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a9190614f43565b60405180910390fd5b50600f5483836126a391906151fa565b11156126e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126db90614f85565b60405180910390fd5b82600c546126f29190615281565b341015612734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272b906150a5565b60405180910390fd5b6000336040516020016127479190614e38565b6040516020818303038152906040528051906020012090506127ad868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060155483613df7565b6127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390615025565b60405180910390fd5b6127f63385613c2c565b505050505050565b61280661335e565b73ffffffffffffffffffffffffffffffffffffffff16612824611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190615045565b60405180910390fd5b8060158190555050565b61288f848484613421565b6128ae8373ffffffffffffffffffffffffffffffffffffffff16613e0e565b80156128c357506128c184848484613e31565b155b156128fa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b61290861335e565b73ffffffffffffffffffffffffffffffffffffffff16612926611ebe565b73ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297390615045565b60405180910390fd5b80600b908051906020019061299292919061452b565b5050565b600c5481565b6129a461335e565b73ffffffffffffffffffffffffffffffffffffffff166129c2611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615045565b60405180910390fd5b8060118190555050565b612a2a61335e565b73ffffffffffffffffffffffffffffffffffffffff16612a48611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9590615045565b60405180910390fd5b80600e8190555050565b6060601460039054906101000a900460ff16612b5057600b8054612acb906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054612af7906153e3565b8015612b445780601f10612b1957610100808354040283529160200191612b44565b820191906000526020600020905b815481529060010190602001808311612b2757829003601f168201915b50505050509050612bfc565b612b5982613310565b612b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8f90615085565b60405180910390fd5b600060098054612ba7906153e3565b90501415612bc45760405180602001604052806000815250612bf9565b612bcc613f91565b612bd583613c4a565b600a604051602001612be993929190614e53565b6040516020818303038152906040525b90505b919050565b612c0961335e565b73ffffffffffffffffffffffffffffffffffffffff16612c27611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7490615045565b60405180910390fd5b6000612c87611119565b905060008211612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614fa5565b60405180910390fd5b600f548282612cdb91906151fa565b1115612d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1390614f85565b60405180910390fd5b612d268383613c2c565b505050565b60105481565b600f5481565b7f000000000000000000000000a5c2e07f663936ba5f40cce63e3bba14241ef03a81565b6000612d6682614023565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612e0961335e565b73ffffffffffffffffffffffffffffffffffffffff16612e27611ebe565b73ffffffffffffffffffffffffffffffffffffffff1614612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490615045565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee490614f65565b60405180910390fd5b612ef681613b66565b50565b6000612f03611119565b90506000612f1033612d5b565b9050601460019054906101000a900460ff16612f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5890615065565b60405180910390fd5b60008311612fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9b90614fa5565b60405180910390fd5b601254831115612fb5601254613c4a565b604051602001612fc59190614e84565b60405160208183030381529060405290613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9190614f43565b60405180910390fd5b50601254838261302591906151fa565b1115613032601254613c4a565b6040516020016130429190614e84565b60405160208183030381529060405290613092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130899190614f43565b60405180910390fd5b506012548111156130a4601254613c4a565b6040516020016130b49190614e84565b60405160208183030381529060405290613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb9190614f43565b60405180910390fd5b50600f54838361311491906151fa565b1115613155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314c90614f85565b60405180910390fd5b82600d546131639190615281565b3410156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c906150a5565b60405180910390fd5b6000336040516020016131b89190614e38565b60405160208183030381529060405280519060200120905061321e868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060165483613df7565b61325d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613254906150c5565b60405180910390fd5b6132673385613c2c565b505050505050565b601460009054906101000a900460ff1681565b7f000000000000000000000000e86b6b135ab01749b74cd4c60c052a6535e9308c81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161331b613418565b1115801561332a575060005482105b8015613357575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061342c826138d7565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613497576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166134b861335e565b73ffffffffffffffffffffffffffffffffffffffff1614806134e757506134e6856134e161335e565b612d6d565b5b8061352c57506134f561335e565b73ffffffffffffffffffffffffffffffffffffffff1661351484610f8c565b73ffffffffffffffffffffffffffffffffffffffff16145b905080613565576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156135cc576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135d9858585600161408d565b6135e560008487613366565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561386557600054821461386457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138d08585856001614093565b5050505050565b6138df6145b1565b6000829050806138ed613418565b111580156138fc575060005481105b15613b2f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151613b2d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613a11578092505050613b61565b5b600115613b2c57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613b27578092505050613b61565b613a12565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613c46828260405180602001604052806000815250614099565b5050565b60606000821415613c92576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613df2565b600082905060005b60008214613cc4578080613cad90615446565b915050600a82613cbd9190615250565b9150613c9a565b60008167ffffffffffffffff811115613d06577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613d385781602001600182028036833780820191505090505b5090505b60008514613deb57600182613d5191906152db565b9150600a85613d6091906154b3565b6030613d6c91906151fa565b60f81b818381518110613da8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613de49190615250565b9450613d3c565b8093505050505b919050565b600082613e0485846140ab565b1490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e5761335e565b8786866040518563ffffffff1660e01b8152600401613e799493929190614ec1565b602060405180830381600087803b158015613e9357600080fd5b505af1925050508015613ec457506040513d601f19601f82011682018060405250810190613ec191906149fa565b60015b613f3e573d8060008114613ef4576040519150601f19603f3d011682016040523d82523d6000602084013e613ef9565b606091505b50600081511415613f36576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054613fa0906153e3565b80601f0160208091040260200160405190810160405280929190818152602001828054613fcc906153e3565b80156140195780601f10613fee57610100808354040283529160200191614019565b820191906000526020600020905b815481529060010190602001808311613ffc57829003601f168201915b5050505050905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6140a68383836001614146565b505050565b60008082905060005b845181101561413b5760008582815181106140f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161411a576141138382614514565b9250614127565b6141248184614514565b92505b50808061413390615446565b9150506140b4565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156141b3576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156141ee576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6141fb600086838761408d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600085820190508380156143c557506143c48773ffffffffffffffffffffffffffffffffffffffff16613e0e565b5b1561448b575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461443a6000888480600101955088613e31565b614470576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156143cb57826000541461448657600080fd5b6144f7565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561448c575b81600081905550505061450d6000868387614093565b5050505050565b600082600052816020526040600020905092915050565b828054614537906153e3565b90600052602060002090601f01602090048101928261455957600085556145a0565b82601f1061457257805160ff19168380011785556145a0565b828001600101855582156145a0579182015b8281111561459f578251825591602001919060010190614584565b5b5090506145ad91906145f4565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561460d5760008160009055506001016145f5565b5090565b600061462461461f84615140565b61511b565b90508281526020810184848401111561463c57600080fd5b6146478482856153a1565b509392505050565b600061466261465d84615171565b61511b565b90508281526020810184848401111561467a57600080fd5b6146858482856153a1565b509392505050565b60008135905061469c81615845565b92915050565b60008083601f8401126146b457600080fd5b8235905067ffffffffffffffff8111156146cd57600080fd5b6020830191508360208202830111156146e557600080fd5b9250929050565b6000813590506146fb8161585c565b92915050565b60008135905061471081615873565b92915050565b6000813590506147258161588a565b92915050565b60008151905061473a8161588a565b92915050565b600082601f83011261475157600080fd5b8135614761848260208601614611565b91505092915050565b600082601f83011261477b57600080fd5b813561478b84826020860161464f565b91505092915050565b6000813590506147a3816158a1565b92915050565b6000602082840312156147bb57600080fd5b60006147c98482850161468d565b91505092915050565b600080604083850312156147e557600080fd5b60006147f38582860161468d565b92505060206148048582860161468d565b9150509250929050565b60008060006060848603121561482357600080fd5b60006148318682870161468d565b93505060206148428682870161468d565b925050604061485386828701614794565b9150509250925092565b6000806000806080858703121561487357600080fd5b60006148818782880161468d565b94505060206148928782880161468d565b93505060406148a387828801614794565b925050606085013567ffffffffffffffff8111156148c057600080fd5b6148cc87828801614740565b91505092959194509250565b600080604083850312156148eb57600080fd5b60006148f98582860161468d565b925050602061490a858286016146ec565b9150509250929050565b6000806040838503121561492757600080fd5b60006149358582860161468d565b925050602061494685828601614794565b9150509250929050565b60008060006040848603121561496557600080fd5b600084013567ffffffffffffffff81111561497f57600080fd5b61498b868287016146a2565b9350935050602061499e86828701614794565b9150509250925092565b6000602082840312156149ba57600080fd5b60006149c884828501614701565b91505092915050565b6000602082840312156149e357600080fd5b60006149f184828501614716565b91505092915050565b600060208284031215614a0c57600080fd5b6000614a1a8482850161472b565b91505092915050565b600060208284031215614a3557600080fd5b600082013567ffffffffffffffff811115614a4f57600080fd5b614a5b8482850161476a565b91505092915050565b600060208284031215614a7657600080fd5b6000614a8484828501614794565b91505092915050565b614a968161530f565b82525050565b614aa58161530f565b82525050565b614abc614ab78261530f565b61548f565b82525050565b614acb81615321565b82525050565b614ada81615321565b82525050565b614ae98161532d565b82525050565b6000614afa826151b7565b614b0481856151cd565b9350614b148185602086016153b0565b614b1d816155a0565b840191505092915050565b6000614b33826151c2565b614b3d81856151de565b9350614b4d8185602086016153b0565b614b56816155a0565b840191505092915050565b6000614b6c826151c2565b614b7681856151ef565b9350614b868185602086016153b0565b80840191505092915050565b60008154614b9f816153e3565b614ba981866151ef565b94506001821660008114614bc45760018114614bd557614c08565b60ff19831686528186019350614c08565b614bde856151a2565b60005b83811015614c0057815481890152600182019150602081019050614be1565b838801955050505b50505092915050565b6000614c1e6026836151de565b9150614c29826155be565b604082019050919050565b6000614c416029836151de565b9150614c4c8261560d565b604082019050919050565b6000614c646012836151de565b9150614c6f8261565c565b602082019050919050565b6000614c876014836151de565b9150614c9282615685565b602082019050919050565b6000614caa601a836151de565b9150614cb5826156ae565b602082019050919050565b6000614ccd6019836151de565b9150614cd8826156d7565b602082019050919050565b6000614cf06014836151de565b9150614cfb82615700565b602082019050919050565b6000614d136020836151de565b9150614d1e82615729565b602082019050919050565b6000614d366016836151de565b9150614d4182615752565b602082019050919050565b6000614d59602f836151de565b9150614d648261577b565b604082019050919050565b6000614d7c6016836151de565b9150614d87826157ca565b602082019050919050565b6000614d9f6010836151de565b9150614daa826157f3565b602082019050919050565b6000614dc26012836151ef565b9150614dcd8261581c565b601282019050919050565b606082016000820151614dee6000850182614a8d565b506020820151614e016020850182614e29565b506040820151614e146040850182614ac2565b50505050565b614e2381615383565b82525050565b614e328161538d565b82525050565b6000614e448284614aab565b60148201915081905092915050565b6000614e5f8286614b61565b9150614e6b8285614b61565b9150614e778284614b92565b9150819050949350505050565b6000614e8f82614db5565b9150614e9b8284614b61565b915081905092915050565b6000602082019050614ebb6000830184614a9c565b92915050565b6000608082019050614ed66000830187614a9c565b614ee36020830186614a9c565b614ef06040830185614e1a565b8181036060830152614f028184614aef565b905095945050505050565b6000602082019050614f226000830184614ad1565b92915050565b6000602082019050614f3d6000830184614ae0565b92915050565b60006020820190508181036000830152614f5d8184614b28565b905092915050565b60006020820190508181036000830152614f7e81614c11565b9050919050565b60006020820190508181036000830152614f9e81614c34565b9050919050565b60006020820190508181036000830152614fbe81614c57565b9050919050565b60006020820190508181036000830152614fde81614c7a565b9050919050565b60006020820190508181036000830152614ffe81614c9d565b9050919050565b6000602082019050818103600083015261501e81614cc0565b9050919050565b6000602082019050818103600083015261503e81614ce3565b9050919050565b6000602082019050818103600083015261505e81614d06565b9050919050565b6000602082019050818103600083015261507e81614d29565b9050919050565b6000602082019050818103600083015261509e81614d4c565b9050919050565b600060208201905081810360008301526150be81614d6f565b9050919050565b600060208201905081810360008301526150de81614d92565b9050919050565b60006060820190506150fa6000830184614dd8565b92915050565b60006020820190506151156000830184614e1a565b92915050565b6000615125615136565b90506151318282615415565b919050565b6000604051905090565b600067ffffffffffffffff82111561515b5761515a615571565b5b615164826155a0565b9050602081019050919050565b600067ffffffffffffffff82111561518c5761518b615571565b5b615195826155a0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061520582615383565b915061521083615383565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615245576152446154e4565b5b828201905092915050565b600061525b82615383565b915061526683615383565b92508261527657615275615513565b5b828204905092915050565b600061528c82615383565b915061529783615383565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152d0576152cf6154e4565b5b828202905092915050565b60006152e682615383565b91506152f183615383565b925082821015615304576153036154e4565b5b828203905092915050565b600061531a82615363565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156153ce5780820151818401526020810190506153b3565b838111156153dd576000848401525b50505050565b600060028204905060018216806153fb57607f821691505b6020821081141561540f5761540e615542565b5b50919050565b61541e826155a0565b810181811067ffffffffffffffff8211171561543d5761543c615571565b5b80604052505050565b600061545182615383565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615484576154836154e4565b5b600182019050919050565b600061549a826154a1565b9050919050565b60006154ac826155b1565b9050919050565b60006154be82615383565b91506154c983615383565b9250826154d9576154d8615513565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f54686973207472616e73616374696f6e20776f756c6420657863656564206d6160008201527f7820737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f436f756e742063616e206e6f7420626520300000000000000000000000000000600082015250565b7f4e6f20657468657220746f207769746864726177000000000000000000000000600082015250565b7f506172746e65722053616c65206973206e6f7420616374697665000000000000600082015250565b7f5075626c69632073616c65206973206e6f742061637469766500000000000000600082015250565b7f4e6f7420696e20706172746e6572206c6973742e000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5072652073616c65206973206e6f742061637469766500000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45746865722076616c756520697320746f6f206c6f7700000000000000000000600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f596f752063616e206f6e6c79206d696e74200000000000000000000000000000600082015250565b61584e8161530f565b811461585957600080fd5b50565b61586581615321565b811461587057600080fd5b50565b61587c8161532d565b811461588757600080fd5b50565b61589381615337565b811461589e57600080fd5b50565b6158aa81615383565b81146158b557600080fd5b5056fea26469706673582212205d2e831ca577e421729e1627d492305a6057ec4aac9358cd3bc6e49f57b0738b64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000001a486964656f7573204861636b657273204865726f65732045544800000000000000000000000000000000000000000000000000000000000000000000000000074848484554483100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000

-----Decoded View---------------
Arg [0] : _name (string): Hideous Hackers Heroes ETH
Arg [1] : _symbol (string): HHHETH1
Arg [2] : _initBaseURI (string): https://www.kittycones.com/mint_hidden_placeholder/hidden.json
Arg [3] : _initHiddenURI (string): https://www.kittycones.com/mint_hidden_placeholder/hidden.json

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [5] : 486964656f7573204861636b657273204865726f657320455448000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 4848484554483100000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [9] : 68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f
Arg [10] : 68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000
Arg [11] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [12] : 68747470733a2f2f7777772e6b69747479636f6e65732e636f6d2f6d696e745f
Arg [13] : 68696464656e5f706c616365686f6c6465722f68696464656e2e6a736f6e0000


Deployed Bytecode Sourcemap

47333:14864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49323:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24568:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27681:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29184:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28747:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47884:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23817:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49202:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30049:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59264:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58165:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50128:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59635:70;;;;;;;;;;;;;:::i;:::-;;61235:659;;;;;;;;;;;;;:::i;:::-;;30290:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59970:91;;;;;;;;;;;;;:::i;:::-;;49828:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47454:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49247:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57637:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49284:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27489:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48659:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47426:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49770:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48756:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24937:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44045:103;;;;;;;;;;;;;:::i;:::-;;58809:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58715:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48562:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60152:88;;;;;;;;;;;;;:::i;:::-;;51746:229;;;;;;;;;;;;;:::i;:::-;;60067:79;;;;;;;;;;;;;:::i;:::-;;49664:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47497:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43394:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47821:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60850:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27850:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49160:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29460:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58073:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50170:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54896:940;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52217:1104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59152:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30546:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57729:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47758:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58617:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58257:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56979:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56058:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48268:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48188:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49717:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60512:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29818:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44303:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53563:1092;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49114:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49608:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49323:32;;;;:::o;24568:305::-;24670:4;24722:25;24707:40;;;:11;:40;;;;:105;;;;24779:33;24764:48;;;:11;:48;;;;24707:105;:158;;;;24829:36;24853:11;24829:23;:36::i;:::-;24707:158;24687:178;;24568:305;;;:::o;27681:100::-;27735:13;27768:5;27761:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27681:100;:::o;29184:204::-;29252:7;29277:16;29285:7;29277;:16::i;:::-;29272:64;;29302:34;;;;;;;;;;;;;;29272:64;29356:15;:24;29372:7;29356:24;;;;;;;;;;;;;;;;;;;;;29349:31;;29184:204;;;:::o;28747:371::-;28820:13;28836:24;28852:7;28836:15;:24::i;:::-;28820:40;;28881:5;28875:11;;:2;:11;;;28871:48;;;28895:24;;;;;;;;;;;;;;28871:48;28952:5;28936:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;28962:37;28979:5;28986:12;:10;:12::i;:::-;28962:16;:37::i;:::-;28961:38;28936:63;28932:138;;;29023:35;;;;;;;;;;;;;;28932:138;29082:28;29091:2;29095:7;29104:5;29082:8;:28::i;:::-;28747:371;;;:::o;47884:39::-;;;;:::o;23817:303::-;23861:7;24086:15;:13;:15::i;:::-;24071:12;;24055:13;;:28;:46;24048:53;;23817:303;:::o;49202:38::-;;;;;;;;;;;;;:::o;30049:170::-;30183:28;30193:4;30199:2;30203:7;30183:9;:28::i;:::-;30049:170;;;:::o;59264:106::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59355:12:::1;59335:17;:32;;;;59264:106:::0;:::o;58165:86::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58241:7:::1;58226:12;:22;;;;58165:86:::0;:::o;50128:35::-;;;:::o;59635:70::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59692:10:::1;;;;;;;;;;;59691:11;59678:10;;:24;;;;;;;;;;;;;;;;;;59635:70::o:0;61235:659::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;61285:15:::1;61303:21;61285:39;;61355:1;61345:7;:11;61337:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;61394:14;61432:3;61421:8;61411:7;:18;;;;:::i;:::-;:24;;;;:::i;:::-;61394:41;;61446:17;61505:3;61476:26;61466:7;:36;;;;:::i;:::-;:42;;;;:::i;:::-;61446:62;;61519:17;61578:3;61549:26;61539:7;:36;;;;:::i;:::-;:42;;;;:::i;:::-;61519:62;;61592:14;61641:9;61629;61620:6;:18;;;;:::i;:::-;:30;;;;:::i;:::-;61609:7;:42;;;;:::i;:::-;61592:59;;61672:10;61664:28;;:36;61693:6;61664:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;61719:21;61711:39;;:50;61751:9;61711:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;61780:21;61772:39;;:50;61812:9;61772:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;61841:24;61833:42;;:53;61876:9;61833:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43685:1;;;;;61235:659::o:0;30290:185::-;30428:39;30445:4;30451:2;30455:7;30428:39;;;;;;;;;;;;:16;:39::i;:::-;30290:185;;;:::o;59970:91::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60039:19:::1;;;;;;;;;;;60038:20;60016:19;;:42;;;;;;;;;;;;;;;;;;59970:91::o:0;49828:51::-;;;:::o;47454:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49247:30::-;;;;;;;;;;;;;:::o;57637:86::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57711:9:::1;57701:7;:19;;;;;;;;;;;;:::i;:::-;;57637:86:::0;:::o;49284:32::-;;;;:::o;27489:125::-;27553:7;27580:21;27593:7;27580:12;:21::i;:::-;:26;;;27573:33;;27489:125;;;:::o;48659:33::-;;;;:::o;47426:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49770:51::-;;;:::o;48756:39::-;;;;:::o;24937:206::-;25001:7;25042:1;25025:19;;:5;:19;;;25021:60;;;25053:28;;;;;;;;;;;;;;25021:60;25107:12;:19;25120:5;25107:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25099:36;;25092:43;;24937:206;;;:::o;44045:103::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44110:30:::1;44137:1;44110:18;:30::i;:::-;44045:103::o:0;58809:94::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58892:8:::1;58872:17;:28;;;;58809:94:::0;:::o;58715:88::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58792:8:::1;58775:14;:25;;;;58715:88:::0;:::o;48562:33::-;;;;:::o;60152:88::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60219:18:::1;;;;;;;;;;;60218:19;60197:18;;:40;;;;;;;;;;;;;;;;;;60152:88::o:0;51746:229::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51799:14:::1;51816:13;:11;:13::i;:::-;51799:30;;51868:9;;51857:7;;51848:6;:16;;;;:::i;:::-;:29;;51840:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51937:30;51947:10;51959:7;;51937:9;:30::i;:::-;43685:1;51746:229::o:0;60067:79::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60128:15:::1;;;;;;;;;;;60127:16;60109:15;;:34;;;;;;;;;;;;;;;;;;60067:79::o:0;49664:46::-;;;:::o;47497:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43394:87::-;43440:7;43467:6;;;;;;;;;;;43460:13;;43394:87;:::o;47821:40::-;;;;:::o;60850:141::-;60916:21;;:::i;:::-;60962;60975:7;60962:12;:21::i;:::-;60955:28;;60850:141;;;:::o;27850:104::-;27906:13;27939:7;27932:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27850:104;:::o;49160:35::-;;;;;;;;;;;;;:::o;29460:287::-;29571:12;:10;:12::i;:::-;29559:24;;:8;:24;;;29555:54;;;29592:17;;;;;;;;;;;;;;29555:54;29667:8;29622:18;:32;29641:12;:10;:12::i;:::-;29622:32;;;;;;;;;;;;;;;:42;29655:8;29622:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29720:8;29691:48;;29706:12;:10;:12::i;:::-;29691:48;;;29730:8;29691:48;;;;;;:::i;:::-;;;;;;;;29460:287;;:::o;58073:86::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58149:7:::1;58134:12;:22;;;;58073:86:::0;:::o;50170:33::-;;;:::o;54896:940::-;54961:14;54978:13;:11;:13::i;:::-;54961:30;;55002:18;55023:24;55036:10;55023:12;:24::i;:::-;55002:45;;55068:18;;;;;;;;;;;55060:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;55159:1;55149:7;:11;55141:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;55234:17;;55223:7;:28;;55303;:17;;:26;:28::i;:::-;55264:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;55215:119;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55377:17;;55366:7;55353:10;:20;;;;:::i;:::-;:41;;55443:28;:17;;:26;:28::i;:::-;55404:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;55345:129;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55507:17;;55493:10;:31;;55573:28;:17;;:26;:28::i;:::-;55534:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;55485:119;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;55643:9;;55632:7;55623:6;:16;;;;:::i;:::-;:29;;55615:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;55747:7;55733:11;;:21;;;;:::i;:::-;55720:9;:34;;55712:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;55798:30;55808:10;55820:7;55798:9;:30::i;:::-;54896:940;;;:::o;52217:1104::-;52311:14;52328:13;:11;:13::i;:::-;52311:30;;52352:18;52373:24;52386:10;52373:12;:24::i;:::-;52352:45;;52418:19;;;;;;;;;;;52410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52507:1;52497:7;:11;52489:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;52579:14;;52568:7;:25;;52645;:14;;:23;:25::i;:::-;52606:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;52560:113;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;52716:14;;52705:7;52692:10;:20;;;;:::i;:::-;:38;;52779:25;:14;;:23;:25::i;:::-;52740:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;52684:123;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;52840:14;;52826:10;:28;;52903:25;:14;;:23;:25::i;:::-;52864:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;52818:113;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;52970:9;;52959:7;52950:6;:16;;;;:::i;:::-;:29;;52942:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;53072:7;53057:12;;:22;;;;:::i;:::-;53044:9;:35;;53036:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53120:12;53162:10;53145:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;53135:39;;;;;;53120:54;;53193:52;53212:7;;53193:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53221:17;;53240:4;53193:18;:52::i;:::-;53185:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;53283:30;53293:10;53305:7;53283:9;:30::i;:::-;52217:1104;;;;;;:::o;59152:106::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59243:12:::1;59223:17;:32;;;;59152:106:::0;:::o;30546:369::-;30713:28;30723:4;30729:2;30733:7;30713:9;:28::i;:::-;30756:15;:2;:13;;;:15::i;:::-;:76;;;;;30776:56;30807:4;30813:2;30817:7;30826:5;30776:30;:56::i;:::-;30775:57;30756:76;30752:156;;;30856:40;;;;;;;;;;;;;;30752:156;30546:369;;;;:::o;57729:94::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57809:11:::1;57797:9;:23;;;;;;;;;;;;:::i;:::-;;57729:94:::0;:::o;47758:40::-;;;;:::o;58617:92::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58698:8:::1;58681:14;:25;;;;58617:92:::0;:::o;58257:84::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58331:7:::1;58317:11;:21;;;;58257:84:::0;:::o;56979:387::-;57044:13;57113:10;;;;;;;;;;;57108:38;;57134:9;57127:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57108:38;57166:16;57174:7;57166;:16::i;:::-;57158:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;57279:1;57260:7;57254:21;;;;;:::i;:::-;;;:26;;:104;;;;;;;;;;;;;;;;;57307:10;:8;:10::i;:::-;57319:18;:7;:16;:18::i;:::-;57339:12;57290:62;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57254:104;57247:111;;56979:387;;;;:::o;56058:329::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56137:14:::1;56154:13;:11;:13::i;:::-;56137:30;;56196:1;56186:7;:11;56178:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;56280:9;;56269:7;56260:6;:16;;;;:::i;:::-;:29;;56252:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;56351:28;56361:8;56371:7;56351:9;:28::i;:::-;43685:1;56058:329:::0;;:::o;48268:27::-;;;;:::o;48188:32::-;;;;:::o;49717:46::-;;;:::o;60512:99::-;60570:7;60588:20;60602:5;60588:13;:20::i;:::-;60581:27;;60512:99;;;:::o;29818:164::-;29915:4;29939:18;:25;29958:5;29939:25;;;;;;;;;;;;;;;:35;29965:8;29939:35;;;;;;;;;;;;;;;;;;;;;;;;;29932:42;;29818:164;;;;:::o;44303:201::-;43625:12;:10;:12::i;:::-;43614:23;;:7;:5;:7::i;:::-;:23;;;43606:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44412:1:::1;44392:22;;:8;:22;;;;44384:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44468:28;44487:8;44468:18;:28::i;:::-;44303:201:::0;:::o;53563:1092::-;53653:14;53670:13;:11;:13::i;:::-;53653:30;;53694:18;53715:24;53728:10;53715:12;:24::i;:::-;53694:45;;53760:15;;;;;;;;;;;53752:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;53845:1;53835:7;:11;53827:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;53917:14;;53906:7;:25;;53983;:14;;:23;:25::i;:::-;53944:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;53898:113;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;54054:14;;54043:7;54030:10;:20;;;;:::i;:::-;:38;;54117:25;:14;;:23;:25::i;:::-;54078:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;54022:123;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;54178:14;;54164:10;:28;;54241:25;:14;;:23;:25::i;:::-;54202:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;54156:113;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;54308:9;;54297:7;54288:6;:16;;;;:::i;:::-;:29;;54280:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54410:7;54395:12;;:22;;;;:::i;:::-;54382:9;:35;;54374:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54458:12;54500:10;54483:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;54473:39;;;;;;54458:54;;54531:52;54550:7;;54531:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54559:17;;54578:4;54531:18;:52::i;:::-;54523:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;54617:30;54627:10;54639:7;54617:9;:30::i;:::-;53563:1092;;;;;;:::o;49114:39::-;;;;;;;;;;;;;:::o;49608:49::-;;;:::o;20128:157::-;20213:4;20252:25;20237:40;;;:11;:40;;;;20230:47;;20128:157;;;:::o;31170:187::-;31227:4;31270:7;31251:15;:13;:15::i;:::-;:26;;:53;;;;;31291:13;;31281:7;:23;31251:53;:98;;;;;31322:11;:20;31334:7;31322:20;;;;;;;;;;;:27;;;;;;;;;;;;31321:28;31251:98;31244:105;;31170:187;;;:::o;16911:98::-;16964:7;16991:10;16984:17;;16911:98;:::o;39340:196::-;39482:2;39455:15;:24;39471:7;39455:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39520:7;39516:2;39500:28;;39509:5;39500:28;;;;;;;;;;;;39340:196;;;:::o;51380:87::-;51445:7;51463:1;51456:8;;51380:87;:::o;34283:2130::-;34398:35;34436:21;34449:7;34436:12;:21::i;:::-;34398:59;;34496:4;34474:26;;:13;:18;;;:26;;;34470:67;;34509:28;;;;;;;;;;;;;;34470:67;34550:22;34592:4;34576:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;34613:36;34630:4;34636:12;:10;:12::i;:::-;34613:16;:36::i;:::-;34576:73;:126;;;;34690:12;:10;:12::i;:::-;34666:36;;:20;34678:7;34666:11;:20::i;:::-;:36;;;34576:126;34550:153;;34721:17;34716:66;;34747:35;;;;;;;;;;;;;;34716:66;34811:1;34797:16;;:2;:16;;;34793:52;;;34822:23;;;;;;;;;;;;;;34793:52;34858:43;34880:4;34886:2;34890:7;34899:1;34858:21;:43::i;:::-;34966:35;34983:1;34987:7;34996:4;34966:8;:35::i;:::-;35327:1;35297:12;:18;35310:4;35297:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35371:1;35343:12;:16;35356:2;35343:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35389:31;35423:11;:20;35435:7;35423:20;;;;;;;;;;;35389:54;;35474:2;35458:8;:13;;;:18;;;;;;;;;;;;;;;;;;35524:15;35491:8;:23;;;:49;;;;;;;;;;;;;;;;;;35792:19;35824:1;35814:7;:11;35792:33;;35840:31;35874:11;:24;35886:11;35874:24;;;;;;;;;;;35840:58;;35942:1;35917:27;;:8;:13;;;;;;;;;;;;:27;;;35913:384;;;36127:13;;36112:11;:28;36108:174;;36181:4;36165:8;:13;;;:20;;;;;;;;;;;;;;;;;;36234:13;:28;;;36208:8;:23;;;:54;;;;;;;;;;;;;;;;;;36108:174;35913:384;34283:2130;;;36344:7;36340:2;36325:27;;36334:4;36325:27;;;;;;;;;;;;36363:42;36384:4;36390:2;36394:7;36403:1;36363:20;:42::i;:::-;34283:2130;;;;;:::o;26318:1109::-;26380:21;;:::i;:::-;26414:12;26429:7;26414:22;;26497:4;26478:15;:13;:15::i;:::-;:23;;:47;;;;;26512:13;;26505:4;:20;26478:47;26474:886;;;26546:31;26580:11;:17;26592:4;26580:17;;;;;;;;;;;26546:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26621:9;:16;;;26616:729;;26692:1;26666:28;;:9;:14;;;:28;;;26662:101;;26730:9;26723:16;;;;;;26662:101;27065:261;27072:4;27065:261;;;27105:6;;;;;;;;27150:11;:17;27162:4;27150:17;;;;;;;;;;;27138:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27224:1;27198:28;;:9;:14;;;:28;;;27194:109;;27266:9;27259:16;;;;;;27194:109;27065:261;;;26616:729;26474:886;;27388:31;;;;;;;;;;;;;;26318:1109;;;;:::o;44664:191::-;44738:16;44757:6;;;;;;;;;;;44738:25;;44783:8;44774:6;;:17;;;;;;;;;;;;;;;;;;44838:8;44807:40;;44828:8;44807:40;;;;;;;;;;;;44664:191;;:::o;31365:104::-;31434:27;31444:2;31448:8;31434:27;;;;;;;;;;;;:9;:27::i;:::-;31365:104;;:::o;17498:723::-;17554:13;17784:1;17775:5;:10;17771:53;;;17802:10;;;;;;;;;;;;;;;;;;;;;17771:53;17834:12;17849:5;17834:20;;17865:14;17890:78;17905:1;17897:4;:9;17890:78;;17923:8;;;;;:::i;:::-;;;;17954:2;17946:10;;;;;:::i;:::-;;;17890:78;;;17978:19;18010:6;18000:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17978:39;;18028:154;18044:1;18035:5;:10;18028:154;;18072:1;18062:11;;;;;:::i;:::-;;;18139:2;18131:5;:10;;;;:::i;:::-;18118:2;:24;;;;:::i;:::-;18105:39;;18088:6;18095;18088:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18168:2;18159:11;;;;;:::i;:::-;;;18028:154;;;18206:6;18192:21;;;;;17498:723;;;;:::o;45793:190::-;45918:4;45971;45942:25;45955:5;45962:4;45942:12;:25::i;:::-;:33;45935:40;;45793:190;;;;;:::o;8954:326::-;9014:4;9271:1;9249:7;:19;;;:23;9242:30;;8954:326;;;:::o;40028:667::-;40191:4;40228:2;40212:36;;;40249:12;:10;:12::i;:::-;40263:4;40269:7;40278:5;40212:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40208:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40463:1;40446:6;:13;:18;40442:235;;;40492:40;;;;;;;;;;;;;;40442:235;40635:6;40629:13;40620:6;40616:2;40612:15;40605:38;40208:480;40341:45;;;40331:55;;;:6;:55;;;;40324:62;;;40028:667;;;;;;:::o;56646:94::-;56706:13;56730:7;56723:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56646:94;:::o;25225:137::-;25286:7;25321:12;:19;25334:5;25321:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;25313:41;;25306:48;;25225:137;;;:::o;41343:159::-;;;;;:::o;42161:158::-;;;;;:::o;31832:163::-;31955:32;31961:2;31965:8;31975:5;31982:4;31955:5;:32::i;:::-;31832:163;;;:::o;46345:675::-;46428:7;46448:20;46471:4;46448:27;;46491:9;46486:497;46510:5;:12;46506:1;:16;46486:497;;;46544:20;46567:5;46573:1;46567:8;;;;;;;;;;;;;;;;;;;;;;46544:31;;46610:12;46594;:28;46590:382;;46737:42;46752:12;46766;46737:14;:42::i;:::-;46722:57;;46590:382;;;46914:42;46929:12;46943;46914:14;:42::i;:::-;46899:57;;46590:382;46486:497;46524:3;;;;;:::i;:::-;;;;46486:497;;;;47000:12;46993:19;;;46345:675;;;;:::o;32254:1775::-;32393:20;32416:13;;32393:36;;32458:1;32444:16;;:2;:16;;;32440:48;;;32469:19;;;;;;;;;;;;;;32440:48;32515:1;32503:8;:13;32499:44;;;32525:18;;;;;;;;;;;;;;32499:44;32556:61;32586:1;32590:2;32594:12;32608:8;32556:21;:61::i;:::-;32929:8;32894:12;:16;32907:2;32894:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32993:8;32953:12;:16;32966:2;32953:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33052:2;33019:11;:25;33031:12;33019:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;33119:15;33069:11;:25;33081:12;33069:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;33152:20;33175:12;33152:35;;33202:11;33231:8;33216:12;:23;33202:37;;33260:4;:23;;;;;33268:15;:2;:13;;;:15::i;:::-;33260:23;33256:641;;;33304:314;33360:12;33356:2;33335:38;;33352:1;33335:38;;;;;;;;;;;;33401:69;33440:1;33444:2;33448:14;;;;;;33464:5;33401:30;:69::i;:::-;33396:174;;33506:40;;;;;;;;;;;;;;33396:174;33613:3;33597:12;:19;;33304:314;;33699:12;33682:13;;:29;33678:43;;33713:8;;;33678:43;33256:641;;;33762:120;33818:14;;;;;;33814:2;33793:40;;33810:1;33793:40;;;;;;;;;;;;33877:3;33861:12;:19;;33762:120;;33256:641;33927:12;33911:13;:28;;;;32254:1775;;33961:60;33990:1;33994:2;33998:12;34012:8;33961:20;:60::i;:::-;32254:1775;;;;;:::o;47028:224::-;47096:13;47159:1;47153:4;47146:15;47188:1;47182:4;47175:15;47229:4;47223;47213:21;47204:30;;47131:114;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;1571:5;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;1725:5;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;1884:5;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;2176:5;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;2445:5;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:262::-;2603:6;2652:2;2640:9;2631:7;2627:23;2623:32;2620:2;;;2668:1;2665;2658:12;2620:2;2711:1;2736:53;2781:7;2772:6;2761:9;2757:22;2736:53;:::i;:::-;2726:63;;2682:117;2610:196;;;;:::o;2812:407::-;2880:6;2888;2937:2;2925:9;2916:7;2912:23;2908:32;2905:2;;;2953:1;2950;2943:12;2905:2;2996:1;3021:53;3066:7;3057:6;3046:9;3042:22;3021:53;:::i;:::-;3011:63;;2967:117;3123:2;3149:53;3194:7;3185:6;3174:9;3170:22;3149:53;:::i;:::-;3139:63;;3094:118;2895:324;;;;;:::o;3225:552::-;3302:6;3310;3318;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3383:1;3380;3373:12;3335:2;3426:1;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3397:117;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3681:2;3707:53;3752:7;3743:6;3732:9;3728:22;3707:53;:::i;:::-;3697:63;;3652:118;3325:452;;;;;:::o;3783:809::-;3878:6;3886;3894;3902;3951:3;3939:9;3930:7;3926:23;3922:33;3919:2;;;3968:1;3965;3958:12;3919:2;4011:1;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3982:117;4138:2;4164:53;4209:7;4200:6;4189:9;4185:22;4164:53;:::i;:::-;4154:63;;4109:118;4266:2;4292:53;4337:7;4328:6;4317:9;4313:22;4292:53;:::i;:::-;4282:63;;4237:118;4422:2;4411:9;4407:18;4394:32;4453:18;4445:6;4442:30;4439:2;;;4485:1;4482;4475:12;4439:2;4513:62;4567:7;4558:6;4547:9;4543:22;4513:62;:::i;:::-;4503:72;;4365:220;3909:683;;;;;;;:::o;4598:401::-;4663:6;4671;4720:2;4708:9;4699:7;4695:23;4691:32;4688:2;;;4736:1;4733;4726:12;4688:2;4779:1;4804:53;4849:7;4840:6;4829:9;4825:22;4804:53;:::i;:::-;4794:63;;4750:117;4906:2;4932:50;4974:7;4965:6;4954:9;4950:22;4932:50;:::i;:::-;4922:60;;4877:115;4678:321;;;;;:::o;5005:407::-;5073:6;5081;5130:2;5118:9;5109:7;5105:23;5101:32;5098:2;;;5146:1;5143;5136:12;5098:2;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;5088:324;;;;;:::o;5418:570::-;5513:6;5521;5529;5578:2;5566:9;5557:7;5553:23;5549:32;5546:2;;;5594:1;5591;5584:12;5546:2;5665:1;5654:9;5650:17;5637:31;5695:18;5687:6;5684:30;5681:2;;;5727:1;5724;5717:12;5681:2;5763:80;5835:7;5826:6;5815:9;5811:22;5763:80;:::i;:::-;5745:98;;;;5608:245;5892:2;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5863:118;5536:452;;;;;:::o;5994:262::-;6053:6;6102:2;6090:9;6081:7;6077:23;6073:32;6070:2;;;6118:1;6115;6108:12;6070:2;6161:1;6186:53;6231:7;6222:6;6211:9;6207:22;6186:53;:::i;:::-;6176:63;;6132:117;6060:196;;;;:::o;6262:260::-;6320:6;6369:2;6357:9;6348:7;6344:23;6340:32;6337:2;;;6385:1;6382;6375:12;6337:2;6428:1;6453:52;6497:7;6488:6;6477:9;6473:22;6453:52;:::i;:::-;6443:62;;6399:116;6327:195;;;;:::o;6528:282::-;6597:6;6646:2;6634:9;6625:7;6621:23;6617:32;6614:2;;;6662:1;6659;6652:12;6614:2;6705:1;6730:63;6785:7;6776:6;6765:9;6761:22;6730:63;:::i;:::-;6720:73;;6676:127;6604:206;;;;:::o;6816:375::-;6885:6;6934:2;6922:9;6913:7;6909:23;6905:32;6902:2;;;6950:1;6947;6940:12;6902:2;7021:1;7010:9;7006:17;6993:31;7051:18;7043:6;7040:30;7037:2;;;7083:1;7080;7073:12;7037:2;7111:63;7166:7;7157:6;7146:9;7142:22;7111:63;:::i;:::-;7101:73;;6964:220;6892:299;;;;:::o;7197:262::-;7256:6;7305:2;7293:9;7284:7;7280:23;7276:32;7273:2;;;7321:1;7318;7311:12;7273:2;7364:1;7389:53;7434:7;7425:6;7414:9;7410:22;7389:53;:::i;:::-;7379:63;;7335:117;7263:196;;;;:::o;7465:108::-;7542:24;7560:5;7542:24;:::i;:::-;7537:3;7530:37;7520:53;;:::o;7579:118::-;7666:24;7684:5;7666:24;:::i;:::-;7661:3;7654:37;7644:53;;:::o;7703:157::-;7808:45;7828:24;7846:5;7828:24;:::i;:::-;7808:45;:::i;:::-;7803:3;7796:58;7786:74;;:::o;7866:99::-;7937:21;7952:5;7937:21;:::i;:::-;7932:3;7925:34;7915:50;;:::o;7971:109::-;8052:21;8067:5;8052:21;:::i;:::-;8047:3;8040:34;8030:50;;:::o;8086:118::-;8173:24;8191:5;8173:24;:::i;:::-;8168:3;8161:37;8151:53;;:::o;8210:360::-;8296:3;8324:38;8356:5;8324:38;:::i;:::-;8378:70;8441:6;8436:3;8378:70;:::i;:::-;8371:77;;8457:52;8502:6;8497:3;8490:4;8483:5;8479:16;8457:52;:::i;:::-;8534:29;8556:6;8534:29;:::i;:::-;8529:3;8525:39;8518:46;;8300:270;;;;;:::o;8576:364::-;8664:3;8692:39;8725:5;8692:39;:::i;:::-;8747:71;8811:6;8806:3;8747:71;:::i;:::-;8740:78;;8827:52;8872:6;8867:3;8860:4;8853:5;8849:16;8827:52;:::i;:::-;8904:29;8926:6;8904:29;:::i;:::-;8899:3;8895:39;8888:46;;8668:272;;;;;:::o;8946:377::-;9052:3;9080:39;9113:5;9080:39;:::i;:::-;9135:89;9217:6;9212:3;9135:89;:::i;:::-;9128:96;;9233:52;9278:6;9273:3;9266:4;9259:5;9255:16;9233:52;:::i;:::-;9310:6;9305:3;9301:16;9294:23;;9056:267;;;;;:::o;9353:845::-;9456:3;9493:5;9487:12;9522:36;9548:9;9522:36;:::i;:::-;9574:89;9656:6;9651:3;9574:89;:::i;:::-;9567:96;;9694:1;9683:9;9679:17;9710:1;9705:137;;;;9856:1;9851:341;;;;9672:520;;9705:137;9789:4;9785:9;9774;9770:25;9765:3;9758:38;9825:6;9820:3;9816:16;9809:23;;9705:137;;9851:341;9918:38;9950:5;9918:38;:::i;:::-;9978:1;9992:154;10006:6;10003:1;10000:13;9992:154;;;10080:7;10074:14;10070:1;10065:3;10061:11;10054:35;10130:1;10121:7;10117:15;10106:26;;10028:4;10025:1;10021:12;10016:17;;9992:154;;;10175:6;10170:3;10166:16;10159:23;;9858:334;;9672:520;;9460:738;;;;;;:::o;10204:366::-;10346:3;10367:67;10431:2;10426:3;10367:67;:::i;:::-;10360:74;;10443:93;10532:3;10443:93;:::i;:::-;10561:2;10556:3;10552:12;10545:19;;10350:220;;;:::o;10576:366::-;10718:3;10739:67;10803:2;10798:3;10739:67;:::i;:::-;10732:74;;10815:93;10904:3;10815:93;:::i;:::-;10933:2;10928:3;10924:12;10917:19;;10722:220;;;:::o;10948:366::-;11090:3;11111:67;11175:2;11170:3;11111:67;:::i;:::-;11104:74;;11187:93;11276:3;11187:93;:::i;:::-;11305:2;11300:3;11296:12;11289:19;;11094:220;;;:::o;11320:366::-;11462:3;11483:67;11547:2;11542:3;11483:67;:::i;:::-;11476:74;;11559:93;11648:3;11559:93;:::i;:::-;11677:2;11672:3;11668:12;11661:19;;11466:220;;;:::o;11692:366::-;11834:3;11855:67;11919:2;11914:3;11855:67;:::i;:::-;11848:74;;11931:93;12020:3;11931:93;:::i;:::-;12049:2;12044:3;12040:12;12033:19;;11838:220;;;:::o;12064:366::-;12206:3;12227:67;12291:2;12286:3;12227:67;:::i;:::-;12220:74;;12303:93;12392:3;12303:93;:::i;:::-;12421:2;12416:3;12412:12;12405:19;;12210:220;;;:::o;12436:366::-;12578:3;12599:67;12663:2;12658:3;12599:67;:::i;:::-;12592:74;;12675:93;12764:3;12675:93;:::i;:::-;12793:2;12788:3;12784:12;12777:19;;12582:220;;;:::o;12808:366::-;12950:3;12971:67;13035:2;13030:3;12971:67;:::i;:::-;12964:74;;13047:93;13136:3;13047:93;:::i;:::-;13165:2;13160:3;13156:12;13149:19;;12954:220;;;:::o;13180:366::-;13322:3;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13326:220;;;:::o;13552:366::-;13694:3;13715:67;13779:2;13774:3;13715:67;:::i;:::-;13708:74;;13791:93;13880:3;13791:93;:::i;:::-;13909:2;13904:3;13900:12;13893:19;;13698:220;;;:::o;13924:366::-;14066:3;14087:67;14151:2;14146:3;14087:67;:::i;:::-;14080:74;;14163:93;14252:3;14163:93;:::i;:::-;14281:2;14276:3;14272:12;14265:19;;14070:220;;;:::o;14296:366::-;14438:3;14459:67;14523:2;14518:3;14459:67;:::i;:::-;14452:74;;14535:93;14624:3;14535:93;:::i;:::-;14653:2;14648:3;14644:12;14637:19;;14442:220;;;:::o;14668:402::-;14828:3;14849:85;14931:2;14926:3;14849:85;:::i;:::-;14842:92;;14943:93;15032:3;14943:93;:::i;:::-;15061:2;15056:3;15052:12;15045:19;;14832:238;;;:::o;15146:697::-;15305:4;15300:3;15296:14;15392:4;15385:5;15381:16;15375:23;15411:63;15468:4;15463:3;15459:14;15445:12;15411:63;:::i;:::-;15320:164;15576:4;15569:5;15565:16;15559:23;15595:61;15650:4;15645:3;15641:14;15627:12;15595:61;:::i;:::-;15494:172;15750:4;15743:5;15739:16;15733:23;15769:57;15820:4;15815:3;15811:14;15797:12;15769:57;:::i;:::-;15676:160;15274:569;;;:::o;15849:118::-;15936:24;15954:5;15936:24;:::i;:::-;15931:3;15924:37;15914:53;;:::o;15973:105::-;16048:23;16065:5;16048:23;:::i;:::-;16043:3;16036:36;16026:52;;:::o;16084:256::-;16196:3;16211:75;16282:3;16273:6;16211:75;:::i;:::-;16311:2;16306:3;16302:12;16295:19;;16331:3;16324:10;;16200:140;;;;:::o;16346:589::-;16571:3;16593:95;16684:3;16675:6;16593:95;:::i;:::-;16586:102;;16705:95;16796:3;16787:6;16705:95;:::i;:::-;16698:102;;16817:92;16905:3;16896:6;16817:92;:::i;:::-;16810:99;;16926:3;16919:10;;16575:360;;;;;;:::o;16941:541::-;17174:3;17196:148;17340:3;17196:148;:::i;:::-;17189:155;;17361:95;17452:3;17443:6;17361:95;:::i;:::-;17354:102;;17473:3;17466:10;;17178:304;;;;:::o;17488:222::-;17581:4;17619:2;17608:9;17604:18;17596:26;;17632:71;17700:1;17689:9;17685:17;17676:6;17632:71;:::i;:::-;17586:124;;;;:::o;17716:640::-;17911:4;17949:3;17938:9;17934:19;17926:27;;17963:71;18031:1;18020:9;18016:17;18007:6;17963:71;:::i;:::-;18044:72;18112:2;18101:9;18097:18;18088:6;18044:72;:::i;:::-;18126;18194:2;18183:9;18179:18;18170:6;18126:72;:::i;:::-;18245:9;18239:4;18235:20;18230:2;18219:9;18215:18;18208:48;18273:76;18344:4;18335:6;18273:76;:::i;:::-;18265:84;;17916:440;;;;;;;:::o;18362:210::-;18449:4;18487:2;18476:9;18472:18;18464:26;;18500:65;18562:1;18551:9;18547:17;18538:6;18500:65;:::i;:::-;18454:118;;;;:::o;18578:222::-;18671:4;18709:2;18698:9;18694:18;18686:26;;18722:71;18790:1;18779:9;18775:17;18766:6;18722:71;:::i;:::-;18676:124;;;;:::o;18806:313::-;18919:4;18957:2;18946:9;18942:18;18934:26;;19006:9;19000:4;18996:20;18992:1;18981:9;18977:17;18970:47;19034:78;19107:4;19098:6;19034:78;:::i;:::-;19026:86;;18924:195;;;;:::o;19125:419::-;19291:4;19329:2;19318:9;19314:18;19306:26;;19378:9;19372:4;19368:20;19364:1;19353:9;19349:17;19342:47;19406:131;19532:4;19406:131;:::i;:::-;19398:139;;19296:248;;;:::o;19550:419::-;19716:4;19754:2;19743:9;19739:18;19731:26;;19803:9;19797:4;19793:20;19789:1;19778:9;19774:17;19767:47;19831:131;19957:4;19831:131;:::i;:::-;19823:139;;19721:248;;;:::o;19975:419::-;20141:4;20179:2;20168:9;20164:18;20156:26;;20228:9;20222:4;20218:20;20214:1;20203:9;20199:17;20192:47;20256:131;20382:4;20256:131;:::i;:::-;20248:139;;20146:248;;;:::o;20400:419::-;20566:4;20604:2;20593:9;20589:18;20581:26;;20653:9;20647:4;20643:20;20639:1;20628:9;20624:17;20617:47;20681:131;20807:4;20681:131;:::i;:::-;20673:139;;20571:248;;;:::o;20825:419::-;20991:4;21029:2;21018:9;21014:18;21006:26;;21078:9;21072:4;21068:20;21064:1;21053:9;21049:17;21042:47;21106:131;21232:4;21106:131;:::i;:::-;21098:139;;20996:248;;;:::o;21250:419::-;21416:4;21454:2;21443:9;21439:18;21431:26;;21503:9;21497:4;21493:20;21489:1;21478:9;21474:17;21467:47;21531:131;21657:4;21531:131;:::i;:::-;21523:139;;21421:248;;;:::o;21675:419::-;21841:4;21879:2;21868:9;21864:18;21856:26;;21928:9;21922:4;21918:20;21914:1;21903:9;21899:17;21892:47;21956:131;22082:4;21956:131;:::i;:::-;21948:139;;21846:248;;;:::o;22100:419::-;22266:4;22304:2;22293:9;22289:18;22281:26;;22353:9;22347:4;22343:20;22339:1;22328:9;22324:17;22317:47;22381:131;22507:4;22381:131;:::i;:::-;22373:139;;22271:248;;;:::o;22525:419::-;22691:4;22729:2;22718:9;22714:18;22706:26;;22778:9;22772:4;22768:20;22764:1;22753:9;22749:17;22742:47;22806:131;22932:4;22806:131;:::i;:::-;22798:139;;22696:248;;;:::o;22950:419::-;23116:4;23154:2;23143:9;23139:18;23131:26;;23203:9;23197:4;23193:20;23189:1;23178:9;23174:17;23167:47;23231:131;23357:4;23231:131;:::i;:::-;23223:139;;23121:248;;;:::o;23375:419::-;23541:4;23579:2;23568:9;23564:18;23556:26;;23628:9;23622:4;23618:20;23614:1;23603:9;23599:17;23592:47;23656:131;23782:4;23656:131;:::i;:::-;23648:139;;23546:248;;;:::o;23800:419::-;23966:4;24004:2;23993:9;23989:18;23981:26;;24053:9;24047:4;24043:20;24039:1;24028:9;24024:17;24017:47;24081:131;24207:4;24081:131;:::i;:::-;24073:139;;23971:248;;;:::o;24225:346::-;24380:4;24418:2;24407:9;24403:18;24395:26;;24431:133;24561:1;24550:9;24546:17;24537:6;24431:133;:::i;:::-;24385:186;;;;:::o;24577:222::-;24670:4;24708:2;24697:9;24693:18;24685:26;;24721:71;24789:1;24778:9;24774:17;24765:6;24721:71;:::i;:::-;24675:124;;;;:::o;24805:129::-;24839:6;24866:20;;:::i;:::-;24856:30;;24895:33;24923:4;24915:6;24895:33;:::i;:::-;24846:88;;;:::o;24940:75::-;24973:6;25006:2;25000:9;24990:19;;24980:35;:::o;25021:307::-;25082:4;25172:18;25164:6;25161:30;25158:2;;;25194:18;;:::i;:::-;25158:2;25232:29;25254:6;25232:29;:::i;:::-;25224:37;;25316:4;25310;25306:15;25298:23;;25087:241;;;:::o;25334:308::-;25396:4;25486:18;25478:6;25475:30;25472:2;;;25508:18;;:::i;:::-;25472:2;25546:29;25568:6;25546:29;:::i;:::-;25538:37;;25630:4;25624;25620:15;25612:23;;25401:241;;;:::o;25648:141::-;25697:4;25720:3;25712:11;;25743:3;25740:1;25733:14;25777:4;25774:1;25764:18;25756:26;;25702:87;;;:::o;25795:98::-;25846:6;25880:5;25874:12;25864:22;;25853:40;;;:::o;25899:99::-;25951:6;25985:5;25979:12;25969:22;;25958:40;;;:::o;26004:168::-;26087:11;26121:6;26116:3;26109:19;26161:4;26156:3;26152:14;26137:29;;26099:73;;;;:::o;26178:169::-;26262:11;26296:6;26291:3;26284:19;26336:4;26331:3;26327:14;26312:29;;26274:73;;;;:::o;26353:148::-;26455:11;26492:3;26477:18;;26467:34;;;;:::o;26507:305::-;26547:3;26566:20;26584:1;26566:20;:::i;:::-;26561:25;;26600:20;26618:1;26600:20;:::i;:::-;26595:25;;26754:1;26686:66;26682:74;26679:1;26676:81;26673:2;;;26760:18;;:::i;:::-;26673:2;26804:1;26801;26797:9;26790:16;;26551:261;;;;:::o;26818:185::-;26858:1;26875:20;26893:1;26875:20;:::i;:::-;26870:25;;26909:20;26927:1;26909:20;:::i;:::-;26904:25;;26948:1;26938:2;;26953:18;;:::i;:::-;26938:2;26995:1;26992;26988:9;26983:14;;26860:143;;;;:::o;27009:348::-;27049:7;27072:20;27090:1;27072:20;:::i;:::-;27067:25;;27106:20;27124:1;27106:20;:::i;:::-;27101:25;;27294:1;27226:66;27222:74;27219:1;27216:81;27211:1;27204:9;27197:17;27193:105;27190:2;;;27301:18;;:::i;:::-;27190:2;27349:1;27346;27342:9;27331:20;;27057:300;;;;:::o;27363:191::-;27403:4;27423:20;27441:1;27423:20;:::i;:::-;27418:25;;27457:20;27475:1;27457:20;:::i;:::-;27452:25;;27496:1;27493;27490:8;27487:2;;;27501:18;;:::i;:::-;27487:2;27546:1;27543;27539:9;27531:17;;27408:146;;;;:::o;27560:96::-;27597:7;27626:24;27644:5;27626:24;:::i;:::-;27615:35;;27605:51;;;:::o;27662:90::-;27696:7;27739:5;27732:13;27725:21;27714:32;;27704:48;;;:::o;27758:77::-;27795:7;27824:5;27813:16;;27803:32;;;:::o;27841:149::-;27877:7;27917:66;27910:5;27906:78;27895:89;;27885:105;;;:::o;27996:126::-;28033:7;28073:42;28066:5;28062:54;28051:65;;28041:81;;;:::o;28128:77::-;28165:7;28194:5;28183:16;;28173:32;;;:::o;28211:101::-;28247:7;28287:18;28280:5;28276:30;28265:41;;28255:57;;;:::o;28318:154::-;28402:6;28397:3;28392;28379:30;28464:1;28455:6;28450:3;28446:16;28439:27;28369:103;;;:::o;28478:307::-;28546:1;28556:113;28570:6;28567:1;28564:13;28556:113;;;28655:1;28650:3;28646:11;28640:18;28636:1;28631:3;28627:11;28620:39;28592:2;28589:1;28585:10;28580:15;;28556:113;;;28687:6;28684:1;28681:13;28678:2;;;28767:1;28758:6;28753:3;28749:16;28742:27;28678:2;28527:258;;;;:::o;28791:320::-;28835:6;28872:1;28866:4;28862:12;28852:22;;28919:1;28913:4;28909:12;28940:18;28930:2;;28996:4;28988:6;28984:17;28974:27;;28930:2;29058;29050:6;29047:14;29027:18;29024:38;29021:2;;;29077:18;;:::i;:::-;29021:2;28842:269;;;;:::o;29117:281::-;29200:27;29222:4;29200:27;:::i;:::-;29192:6;29188:40;29330:6;29318:10;29315:22;29294:18;29282:10;29279:34;29276:62;29273:2;;;29341:18;;:::i;:::-;29273:2;29381:10;29377:2;29370:22;29160:238;;;:::o;29404:233::-;29443:3;29466:24;29484:5;29466:24;:::i;:::-;29457:33;;29512:66;29505:5;29502:77;29499:2;;;29582:18;;:::i;:::-;29499:2;29629:1;29622:5;29618:13;29611:20;;29447:190;;;:::o;29643:100::-;29682:7;29711:26;29731:5;29711:26;:::i;:::-;29700:37;;29690:53;;;:::o;29749:94::-;29788:7;29817:20;29831:5;29817:20;:::i;:::-;29806:31;;29796:47;;;:::o;29849:176::-;29881:1;29898:20;29916:1;29898:20;:::i;:::-;29893:25;;29932:20;29950:1;29932:20;:::i;:::-;29927:25;;29971:1;29961:2;;29976:18;;:::i;:::-;29961:2;30017:1;30014;30010:9;30005:14;;29883:142;;;;:::o;30031:180::-;30079:77;30076:1;30069:88;30176:4;30173:1;30166:15;30200:4;30197:1;30190:15;30217:180;30265:77;30262:1;30255:88;30362:4;30359:1;30352:15;30386:4;30383:1;30376:15;30403:180;30451:77;30448:1;30441:88;30548:4;30545:1;30538:15;30572:4;30569:1;30562:15;30589:180;30637:77;30634:1;30627:88;30734:4;30731:1;30724:15;30758:4;30755:1;30748:15;30775:102;30816:6;30867:2;30863:7;30858:2;30851:5;30847:14;30843:28;30833:38;;30823:54;;;:::o;30883:94::-;30916:8;30964:5;30960:2;30956:14;30935:35;;30925:52;;;:::o;30983:225::-;31123:34;31119:1;31111:6;31107:14;31100:58;31192:8;31187:2;31179:6;31175:15;31168:33;31089:119;:::o;31214:228::-;31354:34;31350:1;31342:6;31338:14;31331:58;31423:11;31418:2;31410:6;31406:15;31399:36;31320:122;:::o;31448:168::-;31588:20;31584:1;31576:6;31572:14;31565:44;31554:62;:::o;31622:170::-;31762:22;31758:1;31750:6;31746:14;31739:46;31728:64;:::o;31798:176::-;31938:28;31934:1;31926:6;31922:14;31915:52;31904:70;:::o;31980:175::-;32120:27;32116:1;32108:6;32104:14;32097:51;32086:69;:::o;32161:170::-;32301:22;32297:1;32289:6;32285:14;32278:46;32267:64;:::o;32337:182::-;32477:34;32473:1;32465:6;32461:14;32454:58;32443:76;:::o;32525:172::-;32665:24;32661:1;32653:6;32649:14;32642:48;32631:66;:::o;32703:234::-;32843:34;32839:1;32831:6;32827:14;32820:58;32912:17;32907:2;32899:6;32895:15;32888:42;32809:128;:::o;32943:172::-;33083:24;33079:1;33071:6;33067:14;33060:48;33049:66;:::o;33121:166::-;33261:18;33257:1;33249:6;33245:14;33238:42;33227:60;:::o;33293:168::-;33433:20;33429:1;33421:6;33417:14;33410:44;33399:62;:::o;33467:122::-;33540:24;33558:5;33540:24;:::i;:::-;33533:5;33530:35;33520:2;;33579:1;33576;33569:12;33520:2;33510:79;:::o;33595:116::-;33665:21;33680:5;33665:21;:::i;:::-;33658:5;33655:32;33645:2;;33701:1;33698;33691:12;33645:2;33635:76;:::o;33717:122::-;33790:24;33808:5;33790:24;:::i;:::-;33783:5;33780:35;33770:2;;33829:1;33826;33819:12;33770:2;33760:79;:::o;33845:120::-;33917:23;33934:5;33917:23;:::i;:::-;33910:5;33907:34;33897:2;;33955:1;33952;33945:12;33897:2;33887:78;:::o;33971:122::-;34044:24;34062:5;34044:24;:::i;:::-;34037:5;34034:35;34024:2;;34083:1;34080;34073:12;34024:2;34014:79;:::o

Swarm Source

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