ETH Price: $2,510.45 (+0.46%)

Token

3DB_Fuel (FUEL)
 

Overview

Max Total Supply

333 FUEL

Holders

49

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
longzu-onion.eth
Balance
8 FUEL
0xd37d18ccffe418396e47c9fffd9aa92802fca49c
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:
Fuel

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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


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


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



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



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



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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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





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


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _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 {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}



pragma solidity ^0.8.0;




pragma solidity ^0.8.0;



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

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

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


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}



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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


 contract Fuel is ERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    string private PROVENANCE;
    string private baseURI;
    
    uint256 public maxSupply;
    uint256 public price = 0.00 ether;

    bool public presaleActive = false;
    bool public saleActive = false;

    mapping (address => uint256) public presaleWhitelist;
    
    //map team addresses 
    
    address private constant AAddress = 0xb14E779E48b19481AAEEB28949aE75cC85DA625D;
   
  
    

    constructor(string memory name, string memory symbol, uint256 supply) ERC721(name, symbol) {
        maxSupply = supply;
    }
    
    function reserve() public onlyOwner {
        uint256 supply = totalSupply();
        for (uint256 i = 0; i < 33; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function mintPresale(uint256 numberOfMints) public payable {
        uint256 supply = totalSupply();
        uint256 reserved = presaleWhitelist[msg.sender];
        require(presaleActive,                              "Presale must be active to mint");
        require(reserved > 0,                               "No tokens reserved for this address");
        require(numberOfMints <= reserved,                  "Can't mint more than reserved");
        require(supply.add(numberOfMints) <= maxSupply,     "Purchase would exceed max supply of tokens");
        require(price.mul(numberOfMints) == msg.value,      "Ether value sent is not correct");
        presaleWhitelist[msg.sender] = reserved - numberOfMints;

        for(uint256 i; i < numberOfMints; i++){
            _safeMint( msg.sender, supply + i );
        }
    }
    
    function mint(uint256 numberOfMints) public payable {
        uint256 supply = totalSupply();
        require(saleActive,                                 "Sale must be active to mint");
        require(numberOfMints > 0 && numberOfMints < 10,    "Invalid purchase amount");
        require(supply.add(numberOfMints) <= maxSupply,     "Purchase would exceed max supply of tokens");
        require(price.mul(numberOfMints) == msg.value,      "Ether value sent is not correct");
        
        for(uint256 i; i < numberOfMints; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function editPresale(address[] calldata presaleAddresses, uint256[] calldata amount) public onlyOwner {
        for(uint256 i; i < presaleAddresses.length; i++){
            presaleWhitelist[presaleAddresses[i]] = amount[i];
        }
    }
    
    function walletOfOwner(address owner) external view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokensId;
    }
    
    function withdrawAll() public payable onlyOwner {
        uint256 balance = address(this).balance;

        require(balance > 0);
        _withdraw(AAddress, balance.mul(100).div(100));
        
   
    }

     function _withdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{value: _amount}("");
        require(success, "Transfer failed.");
    }

    function togglePresale() public onlyOwner {
        presaleActive = !presaleActive;
    }

    function toggleSale() public onlyOwner {
        saleActive = !saleActive;
    }

    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }


    function setProvenance(string memory provenance) private onlyOwner {
        PROVENANCE = provenance;
    }
    
    function setBaseURI(string memory uri) public onlyOwner {
        baseURI = uri;
    }
    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"presaleAddresses","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"editPresale","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":"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600e556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200004c57600080fd5b50604051620052d0380380620052d0833981810160405281019062000072919062000370565b828281600090816200008591906200064b565b5080600190816200009791906200064b565b505050620000ba620000ae620000ca60201b60201c565b620000d260201b60201c565b80600d8190555050505062000732565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200020182620001b6565b810181811067ffffffffffffffff82111715620002235762000222620001c7565b5b80604052505050565b60006200023862000198565b9050620002468282620001f6565b919050565b600067ffffffffffffffff821115620002695762000268620001c7565b5b6200027482620001b6565b9050602081019050919050565b60005b83811015620002a157808201518184015260208101905062000284565b83811115620002b1576000848401525b50505050565b6000620002ce620002c8846200024b565b6200022c565b905082815260208101848484011115620002ed57620002ec620001b1565b5b620002fa84828562000281565b509392505050565b600082601f8301126200031a5762000319620001ac565b5b81516200032c848260208601620002b7565b91505092915050565b6000819050919050565b6200034a8162000335565b81146200035657600080fd5b50565b6000815190506200036a816200033f565b92915050565b6000806000606084860312156200038c576200038b620001a2565b5b600084015167ffffffffffffffff811115620003ad57620003ac620001a7565b5b620003bb8682870162000302565b935050602084015167ffffffffffffffff811115620003df57620003de620001a7565b5b620003ed8682870162000302565b9250506040620004008682870162000359565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200045d57607f821691505b60208210810362000473576200047262000415565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200049e565b620004e986836200049e565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200052c62000526620005208462000335565b62000501565b62000335565b9050919050565b6000819050919050565b62000548836200050b565b62000560620005578262000533565b848454620004ab565b825550505050565b600090565b6200057762000568565b620005848184846200053d565b505050565b5b81811015620005ac57620005a06000826200056d565b6001810190506200058a565b5050565b601f821115620005fb57620005c58162000479565b620005d0846200048e565b81016020851015620005e0578190505b620005f8620005ef856200048e565b83018262000589565b50505b505050565b600082821c905092915050565b6000620006206000198460080262000600565b1980831691505092915050565b60006200063b83836200060d565b9150826002028217905092915050565b62000656826200040a565b67ffffffffffffffff811115620006725762000671620001c7565b5b6200067e825462000444565b6200068b828285620005b0565b600060209050601f831160018114620006c35760008415620006ae578287015190505b620006ba85826200062d565b8655506200072a565b601f198416620006d38662000479565b60005b82811015620006fd57848901518255600182019150602085019450602081019050620006d6565b868310156200071d578489015162000719601f8916826200060d565b8355505b6001600288020188555050505b505050505050565b614b8e80620007426000396000f3fe6080604052600436106101f95760003560e01c8063715018a61161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb01146106dd578063e985e9c514610708578063eb8835ab14610745578063f2fde38b14610782578063f759867a146107ab576101f9565b8063a22cb46514610637578063b88d4fde14610660578063c87b56dd14610689578063cd3293de146106c6576101f9565b806391b7f5ed116100dc57806391b7f5ed1461059c57806395d89b41146105c5578063a035b1fe146105f0578063a0712d681461061b576101f9565b8063715018a6146105395780637d8966e414610550578063853828b6146105675780638da5cb5b14610571576101f9565b8063343937431161019057806353135ca01161015f57806353135ca01461044057806355f804b31461046b5780636352211e1461049457806368428a1b146104d157806370a08231146104fc576101f9565b8063343937431461038657806342842e0e1461039d578063438b6300146103c65780634f6ccce714610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f757806326ed7155146103205780632f745c5914610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612ef7565b6107c7565b6040516102329190612f3f565b60405180910390f35b34801561024757600080fd5b50610250610841565b60405161025d9190612ff3565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061304b565b6108d3565b60405161029a91906130b9565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613100565b610958565b005b3480156102d857600080fd5b506102e1610a6f565b6040516102ee919061314f565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061316a565b610a7c565b005b34801561032c57600080fd5b5061034760048036038101906103429190613278565b610adc565b005b34801561035557600080fd5b50610370600480360381019061036b9190613100565b610c04565b60405161037d919061314f565b60405180910390f35b34801561039257600080fd5b5061039b610ca9565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061316a565b610d51565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906132f9565b610d71565b6040516103fa91906133e4565b60405180910390f35b34801561040f57600080fd5b5061042a6004803603810190610425919061304b565b610e1f565b604051610437919061314f565b60405180910390f35b34801561044c57600080fd5b50610455610e90565b6040516104629190612f3f565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190613536565b610ea3565b005b3480156104a057600080fd5b506104bb60048036038101906104b6919061304b565b610f32565b6040516104c891906130b9565b60405180910390f35b3480156104dd57600080fd5b506104e6610fe3565b6040516104f39190612f3f565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906132f9565b610ff6565b604051610530919061314f565b60405180910390f35b34801561054557600080fd5b5061054e6110ad565b005b34801561055c57600080fd5b50610565611135565b005b61056f6111dd565b005b34801561057d57600080fd5b506105866112b2565b60405161059391906130b9565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061304b565b6112dc565b005b3480156105d157600080fd5b506105da611362565b6040516105e79190612ff3565b60405180910390f35b3480156105fc57600080fd5b506106056113f4565b604051610612919061314f565b60405180910390f35b6106356004803603810190610630919061304b565b6113fa565b005b34801561064357600080fd5b5061065e600480360381019061065991906135ab565b611589565b005b34801561066c57600080fd5b506106876004803603810190610682919061368c565b611709565b005b34801561069557600080fd5b506106b060048036038101906106ab919061304b565b61176b565b6040516106bd9190612ff3565b60405180910390f35b3480156106d257600080fd5b506106db611812565b005b3480156106e957600080fd5b506106f26118d2565b6040516106ff919061314f565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061370f565b6118d8565b60405161073c9190612f3f565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906132f9565b61196c565b604051610779919061314f565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906132f9565b611984565b005b6107c560048036038101906107c0919061304b565b611a7b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083a575061083982611cd5565b5b9050919050565b6060600080546108509061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461087c9061377e565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108de82611db7565b61091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490613821565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096382610f32565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906138b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f2611e23565b73ffffffffffffffffffffffffffffffffffffffff161480610a215750610a2081610a1b611e23565b6118d8565b5b610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790613945565b60405180910390fd5b610a6a8383611e2b565b505050565b6000600880549050905090565b610a8d610a87611e23565b82611ee4565b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac3906139d7565b60405180910390fd5b610ad7838383611fc2565b505050565b610ae4611e23565b73ffffffffffffffffffffffffffffffffffffffff16610b026112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90613a43565b60405180910390fd5b60005b84849050811015610bfd57828282818110610b7957610b78613a63565b5b9050602002013560106000878785818110610b9757610b96613a63565b5b9050602002016020810190610bac91906132f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610bf590613ac1565b915050610b5b565b5050505050565b6000610c0f83610ff6565b8210610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613b7b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cb1611e23565b73ffffffffffffffffffffffffffffffffffffffff16610ccf6112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613a43565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610d6c83838360405180602001604052806000815250611709565b505050565b60606000610d7e83610ff6565b905060008167ffffffffffffffff811115610d9c57610d9b61340b565b5b604051908082528060200260200182016040528015610dca5781602001602082028036833780820191505090505b50905060005b82811015610e1457610de28582610c04565b828281518110610df557610df4613a63565b5b6020026020010181815250508080610e0c90613ac1565b915050610dd0565b508092505050919050565b6000610e29610a6f565b8210610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190613c0d565b60405180910390fd5b60088281548110610e7e57610e7d613a63565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b610eab611e23565b73ffffffffffffffffffffffffffffffffffffffff16610ec96112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613a43565b60405180910390fd5b80600c9081610f2e9190613dd9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613f1d565b60405180910390fd5b80915050919050565b600f60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90613faf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b5611e23565b73ffffffffffffffffffffffffffffffffffffffff166110d36112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090613a43565b60405180910390fd5b611133600061221d565b565b61113d611e23565b73ffffffffffffffffffffffffffffffffffffffff1661115b6112b2565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613a43565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6111e5611e23565b73ffffffffffffffffffffffffffffffffffffffff166112036112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090613a43565b60405180910390fd5b60004790506000811161126b57600080fd5b6112af73b14e779e48b19481aaeeb28949ae75cc85da625d6112aa606461129c6064866122e390919063ffffffff16565b6122f990919063ffffffff16565b61230f565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112e4611e23565b73ffffffffffffffffffffffffffffffffffffffff166113026112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613a43565b60405180910390fd5b80600e8190555050565b6060600180546113719061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461139d9061377e565b80156113ea5780601f106113bf576101008083540402835291602001916113ea565b820191906000526020600020905b8154815290600101906020018083116113cd57829003601f168201915b5050505050905090565b600e5481565b6000611404610a6f565b9050600f60019054906101000a900460ff16611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c9061401b565b60405180910390fd5b6000821180156114655750600a82105b6114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614087565b60405180910390fd5b600d546114ba83836123c090919063ffffffff16565b11156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290614119565b60405180910390fd5b3461151183600e546122e390919063ffffffff16565b14611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890614185565b60405180910390fd5b60005b828110156115845761157133828461156c91906141a5565b6123d6565b808061157c90613ac1565b915050611554565b505050565b611591611e23565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614247565b60405180910390fd5b806005600061160b611e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116b8611e23565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116fd9190612f3f565b60405180910390a35050565b61171a611714611e23565b83611ee4565b611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906139d7565b60405180910390fd5b611765848484846123f4565b50505050565b606061177682611db7565b6117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906142d9565b60405180910390fd5b60006117bf612450565b905060008151116117df576040518060200160405280600081525061180a565b806117e9846124e2565b6040516020016117fa929190614335565b6040516020818303038152906040525b915050919050565b61181a611e23565b73ffffffffffffffffffffffffffffffffffffffff166118386112b2565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613a43565b60405180910390fd5b6000611898610a6f565b905060005b60218110156118ce576118bb3382846118b691906141a5565b6123d6565b80806118c690613ac1565b91505061189d565b5050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60106020528060005260406000206000915090505481565b61198c611e23565b73ffffffffffffffffffffffffffffffffffffffff166119aa6112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613a43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a66906143cb565b60405180910390fd5b611a788161221d565b50565b6000611a85610a6f565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614437565b60405180910390fd5b60008111611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b54906144c9565b60405180910390fd5b80831115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790614535565b60405180910390fd5b600d54611bb684846123c090919063ffffffff16565b1115611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614119565b60405180910390fd5b34611c0d84600e546122e390919063ffffffff16565b14611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614185565b60405180910390fd5b8281611c599190614555565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b83811015611ccf57611cbc338285611cb791906141a5565b6123d6565b8080611cc790613ac1565b915050611c9f565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611da057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611db05750611daf82612642565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e9e83610f32565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eef82611db7565b611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906145fb565b60405180910390fd5b6000611f3983610f32565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa857508373ffffffffffffffffffffffffffffffffffffffff16611f90846108d3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fb95750611fb881856118d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fe282610f32565b73ffffffffffffffffffffffffffffffffffffffff1614612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f9061468d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e9061471f565b60405180910390fd5b6120b28383836126ac565b6120bd600082611e2b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210d9190614555565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216491906141a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122f1919061473f565b905092915050565b6000818361230791906147c8565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123359061482a565b60006040518083038185875af1925050503d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b50509050806123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061488b565b60405180910390fd5b505050565b600081836123ce91906141a5565b905092915050565b6123f08282604051806020016040528060008152506127be565b5050565b6123ff848484611fc2565b61240b84848484612819565b61244a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061491d565b60405180910390fd5b50505050565b6060600c805461245f9061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461248b9061377e565b80156124d85780601f106124ad576101008083540402835291602001916124d8565b820191906000526020600020905b8154815290600101906020018083116124bb57829003601f168201915b5050505050905090565b606060008203612529576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061263d565b600082905060005b6000821461255b57808061254490613ac1565b915050600a8261255491906147c8565b9150612531565b60008167ffffffffffffffff8111156125775761257661340b565b5b6040519080825280601f01601f1916602001820160405280156125a95781602001600182028036833780820191505090505b5090505b60008514612636576001826125c29190614555565b9150600a856125d1919061493d565b60306125dd91906141a5565b60f81b8183815181106125f3576125f2613a63565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262f91906147c8565b94506125ad565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126b78383836129a0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f9576126f4816129a5565b612738565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127375761273683826129ee565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361277a5761277581612b5b565b6127b9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127b8576127b78282612c2c565b5b5b505050565b6127c88383612cab565b6127d56000848484612819565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b9061491d565b60405180910390fd5b505050565b600061283a8473ffffffffffffffffffffffffffffffffffffffff16612e78565b15612993578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612863611e23565b8786866040518563ffffffff1660e01b815260040161288594939291906149c3565b6020604051808303816000875af19250505080156128c157506040513d601f19601f820116820180604052508101906128be9190614a24565b60015b612943573d80600081146128f1576040519150601f19603f3d011682016040523d82523d6000602084013e6128f6565b606091505b50600081510361293b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129329061491d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612998565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129fb84610ff6565b612a059190614555565b9050600060076000848152602001908152602001600020549050818114612aea576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b6f9190614555565b9050600060096000848152602001908152602001600020549050600060088381548110612b9f57612b9e613a63565b5b906000526020600020015490508060088381548110612bc157612bc0613a63565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c1057612c0f614a51565b5b6001900381819060005260206000200160009055905550505050565b6000612c3783610ff6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614acc565b60405180910390fd5b612d2381611db7565b15612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90614b38565b60405180910390fd5b612d6f600083836126ac565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dbf91906141a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ed481612e9f565b8114612edf57600080fd5b50565b600081359050612ef181612ecb565b92915050565b600060208284031215612f0d57612f0c612e95565b5b6000612f1b84828501612ee2565b91505092915050565b60008115159050919050565b612f3981612f24565b82525050565b6000602082019050612f546000830184612f30565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f94578082015181840152602081019050612f79565b83811115612fa3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fc582612f5a565b612fcf8185612f65565b9350612fdf818560208601612f76565b612fe881612fa9565b840191505092915050565b6000602082019050818103600083015261300d8184612fba565b905092915050565b6000819050919050565b61302881613015565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b60006020828403121561306157613060612e95565b5b600061306f84828501613036565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130a382613078565b9050919050565b6130b381613098565b82525050565b60006020820190506130ce60008301846130aa565b92915050565b6130dd81613098565b81146130e857600080fd5b50565b6000813590506130fa816130d4565b92915050565b6000806040838503121561311757613116612e95565b5b6000613125858286016130eb565b925050602061313685828601613036565b9150509250929050565b61314981613015565b82525050565b60006020820190506131646000830184613140565b92915050565b60008060006060848603121561318357613182612e95565b5b6000613191868287016130eb565b93505060206131a2868287016130eb565b92505060406131b386828701613036565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126131e2576131e16131bd565b5b8235905067ffffffffffffffff8111156131ff576131fe6131c2565b5b60208301915083602082028301111561321b5761321a6131c7565b5b9250929050565b60008083601f840112613238576132376131bd565b5b8235905067ffffffffffffffff811115613255576132546131c2565b5b602083019150836020820283011115613271576132706131c7565b5b9250929050565b6000806000806040858703121561329257613291612e95565b5b600085013567ffffffffffffffff8111156132b0576132af612e9a565b5b6132bc878288016131cc565b9450945050602085013567ffffffffffffffff8111156132df576132de612e9a565b5b6132eb87828801613222565b925092505092959194509250565b60006020828403121561330f5761330e612e95565b5b600061331d848285016130eb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61335b81613015565b82525050565b600061336d8383613352565b60208301905092915050565b6000602082019050919050565b600061339182613326565b61339b8185613331565b93506133a683613342565b8060005b838110156133d75781516133be8882613361565b97506133c983613379565b9250506001810190506133aa565b5085935050505092915050565b600060208201905081810360008301526133fe8184613386565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344382612fa9565b810181811067ffffffffffffffff821117156134625761346161340b565b5b80604052505050565b6000613475612e8b565b9050613481828261343a565b919050565b600067ffffffffffffffff8211156134a1576134a061340b565b5b6134aa82612fa9565b9050602081019050919050565b82818337600083830152505050565b60006134d96134d484613486565b61346b565b9050828152602081018484840111156134f5576134f4613406565b5b6135008482856134b7565b509392505050565b600082601f83011261351d5761351c6131bd565b5b813561352d8482602086016134c6565b91505092915050565b60006020828403121561354c5761354b612e95565b5b600082013567ffffffffffffffff81111561356a57613569612e9a565b5b61357684828501613508565b91505092915050565b61358881612f24565b811461359357600080fd5b50565b6000813590506135a58161357f565b92915050565b600080604083850312156135c2576135c1612e95565b5b60006135d0858286016130eb565b92505060206135e185828601613596565b9150509250929050565b600067ffffffffffffffff8211156136065761360561340b565b5b61360f82612fa9565b9050602081019050919050565b600061362f61362a846135eb565b61346b565b90508281526020810184848401111561364b5761364a613406565b5b6136568482856134b7565b509392505050565b600082601f830112613673576136726131bd565b5b813561368384826020860161361c565b91505092915050565b600080600080608085870312156136a6576136a5612e95565b5b60006136b4878288016130eb565b94505060206136c5878288016130eb565b93505060406136d687828801613036565b925050606085013567ffffffffffffffff8111156136f7576136f6612e9a565b5b6137038782880161365e565b91505092959194509250565b6000806040838503121561372657613725612e95565b5b6000613734858286016130eb565b9250506020613745858286016130eb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379657607f821691505b6020821081036137a9576137a861374f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061380b602c83612f65565b9150613816826137af565b604082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061389d602183612f65565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061392f603883612f65565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139c1603183612f65565b91506139cc82613965565b604082019050919050565b600060208201905081810360008301526139f0816139b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a2d602083612f65565b9150613a38826139f7565b602082019050919050565b60006020820190508181036000830152613a5c81613a20565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613acc82613015565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613afe57613afd613a92565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613b65602b83612f65565b9150613b7082613b09565b604082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613bf7602c83612f65565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c52565b613c998683613c52565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cd6613cd1613ccc84613015565b613cb1565b613015565b9050919050565b6000819050919050565b613cf083613cbb565b613d04613cfc82613cdd565b848454613c5f565b825550505050565b600090565b613d19613d0c565b613d24818484613ce7565b505050565b5b81811015613d4857613d3d600082613d11565b600181019050613d2a565b5050565b601f821115613d8d57613d5e81613c2d565b613d6784613c42565b81016020851015613d76578190505b613d8a613d8285613c42565b830182613d29565b50505b505050565b600082821c905092915050565b6000613db060001984600802613d92565b1980831691505092915050565b6000613dc98383613d9f565b9150826002028217905092915050565b613de282612f5a565b67ffffffffffffffff811115613dfb57613dfa61340b565b5b613e05825461377e565b613e10828285613d4c565b600060209050601f831160018114613e435760008415613e31578287015190505b613e3b8582613dbd565b865550613ea3565b601f198416613e5186613c2d565b60005b82811015613e7957848901518255600182019150602085019450602081019050613e54565b86831015613e965784890151613e92601f891682613d9f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613f07602983612f65565b9150613f1282613eab565b604082019050919050565b60006020820190508181036000830152613f3681613efa565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f99602a83612f65565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000614005601b83612f65565b915061401082613fcf565b602082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000614071601783612f65565b915061407c8261403b565b602082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b6000614103602a83612f65565b915061410e826140a7565b604082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061416f601f83612f65565b915061417a82614139565b602082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b60006141b082613015565b91506141bb83613015565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141f0576141ef613a92565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614231601983612f65565b915061423c826141fb565b602082019050919050565b6000602082019050818103600083015261426081614224565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142c3602f83612f65565b91506142ce82614267565b604082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b600081905092915050565b600061430f82612f5a565b61431981856142f9565b9350614329818560208601612f76565b80840191505092915050565b60006143418285614304565b915061434d8284614304565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143b5602683612f65565b91506143c082614359565b604082019050919050565b600060208201905081810360008301526143e4816143a8565b9050919050565b7f50726573616c65206d7573742062652061637469766520746f206d696e740000600082015250565b6000614421601e83612f65565b915061442c826143eb565b602082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144b3602383612f65565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b600061451f601d83612f65565b915061452a826144e9565b602082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b600061456082613015565b915061456b83613015565b92508282101561457e5761457d613a92565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006145e5602c83612f65565b91506145f082614589565b604082019050919050565b60006020820190508181036000830152614614816145d8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614677602983612f65565b91506146828261461b565b604082019050919050565b600060208201905081810360008301526146a68161466a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614709602483612f65565b9150614714826146ad565b604082019050919050565b60006020820190508181036000830152614738816146fc565b9050919050565b600061474a82613015565b915061475583613015565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561478e5761478d613a92565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147d382613015565b91506147de83613015565b9250826147ee576147ed614799565b5b828204905092915050565b600081905092915050565b50565b60006148146000836147f9565b915061481f82614804565b600082019050919050565b600061483582614807565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614875601083612f65565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614907603283612f65565b9150614912826148ab565b604082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b600061494882613015565b915061495383613015565b92508261496357614962614799565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149958261496e565b61499f8185614979565b93506149af818560208601612f76565b6149b881612fa9565b840191505092915050565b60006080820190506149d860008301876130aa565b6149e560208301866130aa565b6149f26040830185613140565b8181036060830152614a04818461498a565b905095945050505050565b600081519050614a1e81612ecb565b92915050565b600060208284031215614a3a57614a39612e95565b5b6000614a4884828501614a0f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ab6602083612f65565b9150614ac182614a80565b602082019050919050565b60006020820190508181036000830152614ae581614aa9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b22601c83612f65565b9150614b2d82614aec565b602082019050919050565b60006020820190508181036000830152614b5181614b15565b905091905056fea26469706673582212202658684a73c311faa885d4416574a0832d8efe7e95b018a5fb50d5697613476264736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014d00000000000000000000000000000000000000000000000000000000000000083344425f4675656c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044655454c00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c8063715018a61161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb01146106dd578063e985e9c514610708578063eb8835ab14610745578063f2fde38b14610782578063f759867a146107ab576101f9565b8063a22cb46514610637578063b88d4fde14610660578063c87b56dd14610689578063cd3293de146106c6576101f9565b806391b7f5ed116100dc57806391b7f5ed1461059c57806395d89b41146105c5578063a035b1fe146105f0578063a0712d681461061b576101f9565b8063715018a6146105395780637d8966e414610550578063853828b6146105675780638da5cb5b14610571576101f9565b8063343937431161019057806353135ca01161015f57806353135ca01461044057806355f804b31461046b5780636352211e1461049457806368428a1b146104d157806370a08231146104fc576101f9565b8063343937431461038657806342842e0e1461039d578063438b6300146103c65780634f6ccce714610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f757806326ed7155146103205780632f745c5914610349576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612ef7565b6107c7565b6040516102329190612f3f565b60405180910390f35b34801561024757600080fd5b50610250610841565b60405161025d9190612ff3565b60405180910390f35b34801561027257600080fd5b5061028d6004803603810190610288919061304b565b6108d3565b60405161029a91906130b9565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190613100565b610958565b005b3480156102d857600080fd5b506102e1610a6f565b6040516102ee919061314f565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061316a565b610a7c565b005b34801561032c57600080fd5b5061034760048036038101906103429190613278565b610adc565b005b34801561035557600080fd5b50610370600480360381019061036b9190613100565b610c04565b60405161037d919061314f565b60405180910390f35b34801561039257600080fd5b5061039b610ca9565b005b3480156103a957600080fd5b506103c460048036038101906103bf919061316a565b610d51565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906132f9565b610d71565b6040516103fa91906133e4565b60405180910390f35b34801561040f57600080fd5b5061042a6004803603810190610425919061304b565b610e1f565b604051610437919061314f565b60405180910390f35b34801561044c57600080fd5b50610455610e90565b6040516104629190612f3f565b60405180910390f35b34801561047757600080fd5b50610492600480360381019061048d9190613536565b610ea3565b005b3480156104a057600080fd5b506104bb60048036038101906104b6919061304b565b610f32565b6040516104c891906130b9565b60405180910390f35b3480156104dd57600080fd5b506104e6610fe3565b6040516104f39190612f3f565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906132f9565b610ff6565b604051610530919061314f565b60405180910390f35b34801561054557600080fd5b5061054e6110ad565b005b34801561055c57600080fd5b50610565611135565b005b61056f6111dd565b005b34801561057d57600080fd5b506105866112b2565b60405161059391906130b9565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be919061304b565b6112dc565b005b3480156105d157600080fd5b506105da611362565b6040516105e79190612ff3565b60405180910390f35b3480156105fc57600080fd5b506106056113f4565b604051610612919061314f565b60405180910390f35b6106356004803603810190610630919061304b565b6113fa565b005b34801561064357600080fd5b5061065e600480360381019061065991906135ab565b611589565b005b34801561066c57600080fd5b506106876004803603810190610682919061368c565b611709565b005b34801561069557600080fd5b506106b060048036038101906106ab919061304b565b61176b565b6040516106bd9190612ff3565b60405180910390f35b3480156106d257600080fd5b506106db611812565b005b3480156106e957600080fd5b506106f26118d2565b6040516106ff919061314f565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061370f565b6118d8565b60405161073c9190612f3f565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906132f9565b61196c565b604051610779919061314f565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a491906132f9565b611984565b005b6107c560048036038101906107c0919061304b565b611a7b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061083a575061083982611cd5565b5b9050919050565b6060600080546108509061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461087c9061377e565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b60006108de82611db7565b61091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091490613821565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096382610f32565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca906138b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f2611e23565b73ffffffffffffffffffffffffffffffffffffffff161480610a215750610a2081610a1b611e23565b6118d8565b5b610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790613945565b60405180910390fd5b610a6a8383611e2b565b505050565b6000600880549050905090565b610a8d610a87611e23565b82611ee4565b610acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac3906139d7565b60405180910390fd5b610ad7838383611fc2565b505050565b610ae4611e23565b73ffffffffffffffffffffffffffffffffffffffff16610b026112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f90613a43565b60405180910390fd5b60005b84849050811015610bfd57828282818110610b7957610b78613a63565b5b9050602002013560106000878785818110610b9757610b96613a63565b5b9050602002016020810190610bac91906132f9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610bf590613ac1565b915050610b5b565b5050505050565b6000610c0f83610ff6565b8210610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613b7b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cb1611e23565b73ffffffffffffffffffffffffffffffffffffffff16610ccf6112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1c90613a43565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610d6c83838360405180602001604052806000815250611709565b505050565b60606000610d7e83610ff6565b905060008167ffffffffffffffff811115610d9c57610d9b61340b565b5b604051908082528060200260200182016040528015610dca5781602001602082028036833780820191505090505b50905060005b82811015610e1457610de28582610c04565b828281518110610df557610df4613a63565b5b6020026020010181815250508080610e0c90613ac1565b915050610dd0565b508092505050919050565b6000610e29610a6f565b8210610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6190613c0d565b60405180910390fd5b60088281548110610e7e57610e7d613a63565b5b90600052602060002001549050919050565b600f60009054906101000a900460ff1681565b610eab611e23565b73ffffffffffffffffffffffffffffffffffffffff16610ec96112b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1690613a43565b60405180910390fd5b80600c9081610f2e9190613dd9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd190613f1d565b60405180910390fd5b80915050919050565b600f60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90613faf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b5611e23565b73ffffffffffffffffffffffffffffffffffffffff166110d36112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112090613a43565b60405180910390fd5b611133600061221d565b565b61113d611e23565b73ffffffffffffffffffffffffffffffffffffffff1661115b6112b2565b73ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890613a43565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6111e5611e23565b73ffffffffffffffffffffffffffffffffffffffff166112036112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090613a43565b60405180910390fd5b60004790506000811161126b57600080fd5b6112af73b14e779e48b19481aaeeb28949ae75cc85da625d6112aa606461129c6064866122e390919063ffffffff16565b6122f990919063ffffffff16565b61230f565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112e4611e23565b73ffffffffffffffffffffffffffffffffffffffff166113026112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613a43565b60405180910390fd5b80600e8190555050565b6060600180546113719061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461139d9061377e565b80156113ea5780601f106113bf576101008083540402835291602001916113ea565b820191906000526020600020905b8154815290600101906020018083116113cd57829003601f168201915b5050505050905090565b600e5481565b6000611404610a6f565b9050600f60019054906101000a900460ff16611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c9061401b565b60405180910390fd5b6000821180156114655750600a82105b6114a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149b90614087565b60405180910390fd5b600d546114ba83836123c090919063ffffffff16565b11156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290614119565b60405180910390fd5b3461151183600e546122e390919063ffffffff16565b14611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890614185565b60405180910390fd5b60005b828110156115845761157133828461156c91906141a5565b6123d6565b808061157c90613ac1565b915050611554565b505050565b611591611e23565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590614247565b60405180910390fd5b806005600061160b611e23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116b8611e23565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116fd9190612f3f565b60405180910390a35050565b61171a611714611e23565b83611ee4565b611759576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611750906139d7565b60405180910390fd5b611765848484846123f4565b50505050565b606061177682611db7565b6117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac906142d9565b60405180910390fd5b60006117bf612450565b905060008151116117df576040518060200160405280600081525061180a565b806117e9846124e2565b6040516020016117fa929190614335565b6040516020818303038152906040525b915050919050565b61181a611e23565b73ffffffffffffffffffffffffffffffffffffffff166118386112b2565b73ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613a43565b60405180910390fd5b6000611898610a6f565b905060005b60218110156118ce576118bb3382846118b691906141a5565b6123d6565b80806118c690613ac1565b91505061189d565b5050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60106020528060005260406000206000915090505481565b61198c611e23565b73ffffffffffffffffffffffffffffffffffffffff166119aa6112b2565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613a43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a66906143cb565b60405180910390fd5b611a788161221d565b50565b6000611a85610a6f565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614437565b60405180910390fd5b60008111611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b54906144c9565b60405180910390fd5b80831115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790614535565b60405180910390fd5b600d54611bb684846123c090919063ffffffff16565b1115611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee90614119565b60405180910390fd5b34611c0d84600e546122e390919063ffffffff16565b14611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614185565b60405180910390fd5b8281611c599190614555565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b83811015611ccf57611cbc338285611cb791906141a5565b6123d6565b8080611cc790613ac1565b915050611c9f565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611da057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611db05750611daf82612642565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e9e83610f32565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eef82611db7565b611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f25906145fb565b60405180910390fd5b6000611f3983610f32565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fa857508373ffffffffffffffffffffffffffffffffffffffff16611f90846108d3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fb95750611fb881856118d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fe282610f32565b73ffffffffffffffffffffffffffffffffffffffff1614612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f9061468d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209e9061471f565b60405180910390fd5b6120b28383836126ac565b6120bd600082611e2b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210d9190614555565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216491906141a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122f1919061473f565b905092915050565b6000818361230791906147c8565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123359061482a565b60006040518083038185875af1925050503d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b50509050806123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061488b565b60405180910390fd5b505050565b600081836123ce91906141a5565b905092915050565b6123f08282604051806020016040528060008152506127be565b5050565b6123ff848484611fc2565b61240b84848484612819565b61244a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061491d565b60405180910390fd5b50505050565b6060600c805461245f9061377e565b80601f016020809104026020016040519081016040528092919081815260200182805461248b9061377e565b80156124d85780601f106124ad576101008083540402835291602001916124d8565b820191906000526020600020905b8154815290600101906020018083116124bb57829003601f168201915b5050505050905090565b606060008203612529576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061263d565b600082905060005b6000821461255b57808061254490613ac1565b915050600a8261255491906147c8565b9150612531565b60008167ffffffffffffffff8111156125775761257661340b565b5b6040519080825280601f01601f1916602001820160405280156125a95781602001600182028036833780820191505090505b5090505b60008514612636576001826125c29190614555565b9150600a856125d1919061493d565b60306125dd91906141a5565b60f81b8183815181106125f3576125f2613a63565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262f91906147c8565b94506125ad565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126b78383836129a0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126f9576126f4816129a5565b612738565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127375761273683826129ee565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361277a5761277581612b5b565b6127b9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127b8576127b78282612c2c565b5b5b505050565b6127c88383612cab565b6127d56000848484612819565b612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b9061491d565b60405180910390fd5b505050565b600061283a8473ffffffffffffffffffffffffffffffffffffffff16612e78565b15612993578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612863611e23565b8786866040518563ffffffff1660e01b815260040161288594939291906149c3565b6020604051808303816000875af19250505080156128c157506040513d601f19601f820116820180604052508101906128be9190614a24565b60015b612943573d80600081146128f1576040519150601f19603f3d011682016040523d82523d6000602084013e6128f6565b606091505b50600081510361293b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129329061491d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612998565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129fb84610ff6565b612a059190614555565b9050600060076000848152602001908152602001600020549050818114612aea576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b6f9190614555565b9050600060096000848152602001908152602001600020549050600060088381548110612b9f57612b9e613a63565b5b906000526020600020015490508060088381548110612bc157612bc0613a63565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c1057612c0f614a51565b5b6001900381819060005260206000200160009055905550505050565b6000612c3783610ff6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614acc565b60405180910390fd5b612d2381611db7565b15612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90614b38565b60405180910390fd5b612d6f600083836126ac565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dbf91906141a5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ed481612e9f565b8114612edf57600080fd5b50565b600081359050612ef181612ecb565b92915050565b600060208284031215612f0d57612f0c612e95565b5b6000612f1b84828501612ee2565b91505092915050565b60008115159050919050565b612f3981612f24565b82525050565b6000602082019050612f546000830184612f30565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f94578082015181840152602081019050612f79565b83811115612fa3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fc582612f5a565b612fcf8185612f65565b9350612fdf818560208601612f76565b612fe881612fa9565b840191505092915050565b6000602082019050818103600083015261300d8184612fba565b905092915050565b6000819050919050565b61302881613015565b811461303357600080fd5b50565b6000813590506130458161301f565b92915050565b60006020828403121561306157613060612e95565b5b600061306f84828501613036565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130a382613078565b9050919050565b6130b381613098565b82525050565b60006020820190506130ce60008301846130aa565b92915050565b6130dd81613098565b81146130e857600080fd5b50565b6000813590506130fa816130d4565b92915050565b6000806040838503121561311757613116612e95565b5b6000613125858286016130eb565b925050602061313685828601613036565b9150509250929050565b61314981613015565b82525050565b60006020820190506131646000830184613140565b92915050565b60008060006060848603121561318357613182612e95565b5b6000613191868287016130eb565b93505060206131a2868287016130eb565b92505060406131b386828701613036565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126131e2576131e16131bd565b5b8235905067ffffffffffffffff8111156131ff576131fe6131c2565b5b60208301915083602082028301111561321b5761321a6131c7565b5b9250929050565b60008083601f840112613238576132376131bd565b5b8235905067ffffffffffffffff811115613255576132546131c2565b5b602083019150836020820283011115613271576132706131c7565b5b9250929050565b6000806000806040858703121561329257613291612e95565b5b600085013567ffffffffffffffff8111156132b0576132af612e9a565b5b6132bc878288016131cc565b9450945050602085013567ffffffffffffffff8111156132df576132de612e9a565b5b6132eb87828801613222565b925092505092959194509250565b60006020828403121561330f5761330e612e95565b5b600061331d848285016130eb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61335b81613015565b82525050565b600061336d8383613352565b60208301905092915050565b6000602082019050919050565b600061339182613326565b61339b8185613331565b93506133a683613342565b8060005b838110156133d75781516133be8882613361565b97506133c983613379565b9250506001810190506133aa565b5085935050505092915050565b600060208201905081810360008301526133fe8184613386565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61344382612fa9565b810181811067ffffffffffffffff821117156134625761346161340b565b5b80604052505050565b6000613475612e8b565b9050613481828261343a565b919050565b600067ffffffffffffffff8211156134a1576134a061340b565b5b6134aa82612fa9565b9050602081019050919050565b82818337600083830152505050565b60006134d96134d484613486565b61346b565b9050828152602081018484840111156134f5576134f4613406565b5b6135008482856134b7565b509392505050565b600082601f83011261351d5761351c6131bd565b5b813561352d8482602086016134c6565b91505092915050565b60006020828403121561354c5761354b612e95565b5b600082013567ffffffffffffffff81111561356a57613569612e9a565b5b61357684828501613508565b91505092915050565b61358881612f24565b811461359357600080fd5b50565b6000813590506135a58161357f565b92915050565b600080604083850312156135c2576135c1612e95565b5b60006135d0858286016130eb565b92505060206135e185828601613596565b9150509250929050565b600067ffffffffffffffff8211156136065761360561340b565b5b61360f82612fa9565b9050602081019050919050565b600061362f61362a846135eb565b61346b565b90508281526020810184848401111561364b5761364a613406565b5b6136568482856134b7565b509392505050565b600082601f830112613673576136726131bd565b5b813561368384826020860161361c565b91505092915050565b600080600080608085870312156136a6576136a5612e95565b5b60006136b4878288016130eb565b94505060206136c5878288016130eb565b93505060406136d687828801613036565b925050606085013567ffffffffffffffff8111156136f7576136f6612e9a565b5b6137038782880161365e565b91505092959194509250565b6000806040838503121561372657613725612e95565b5b6000613734858286016130eb565b9250506020613745858286016130eb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379657607f821691505b6020821081036137a9576137a861374f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061380b602c83612f65565b9150613816826137af565b604082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061389d602183612f65565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061392f603883612f65565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139c1603183612f65565b91506139cc82613965565b604082019050919050565b600060208201905081810360008301526139f0816139b4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a2d602083612f65565b9150613a38826139f7565b602082019050919050565b60006020820190508181036000830152613a5c81613a20565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613acc82613015565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613afe57613afd613a92565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613b65602b83612f65565b9150613b7082613b09565b604082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613bf7602c83612f65565b9150613c0282613b9b565b604082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c52565b613c998683613c52565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cd6613cd1613ccc84613015565b613cb1565b613015565b9050919050565b6000819050919050565b613cf083613cbb565b613d04613cfc82613cdd565b848454613c5f565b825550505050565b600090565b613d19613d0c565b613d24818484613ce7565b505050565b5b81811015613d4857613d3d600082613d11565b600181019050613d2a565b5050565b601f821115613d8d57613d5e81613c2d565b613d6784613c42565b81016020851015613d76578190505b613d8a613d8285613c42565b830182613d29565b50505b505050565b600082821c905092915050565b6000613db060001984600802613d92565b1980831691505092915050565b6000613dc98383613d9f565b9150826002028217905092915050565b613de282612f5a565b67ffffffffffffffff811115613dfb57613dfa61340b565b5b613e05825461377e565b613e10828285613d4c565b600060209050601f831160018114613e435760008415613e31578287015190505b613e3b8582613dbd565b865550613ea3565b601f198416613e5186613c2d565b60005b82811015613e7957848901518255600182019150602085019450602081019050613e54565b86831015613e965784890151613e92601f891682613d9f565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613f07602983612f65565b9150613f1282613eab565b604082019050919050565b60006020820190508181036000830152613f3681613efa565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613f99602a83612f65565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b6000614005601b83612f65565b915061401082613fcf565b602082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b6000614071601783612f65565b915061407c8261403b565b602082019050919050565b600060208201905081810360008301526140a081614064565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f6620746f6b656e7300000000000000000000000000000000000000000000602082015250565b6000614103602a83612f65565b915061410e826140a7565b604082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b600061416f601f83612f65565b915061417a82614139565b602082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b60006141b082613015565b91506141bb83613015565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141f0576141ef613a92565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614231601983612f65565b915061423c826141fb565b602082019050919050565b6000602082019050818103600083015261426081614224565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006142c3602f83612f65565b91506142ce82614267565b604082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b600081905092915050565b600061430f82612f5a565b61431981856142f9565b9350614329818560208601612f76565b80840191505092915050565b60006143418285614304565b915061434d8284614304565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143b5602683612f65565b91506143c082614359565b604082019050919050565b600060208201905081810360008301526143e4816143a8565b9050919050565b7f50726573616c65206d7573742062652061637469766520746f206d696e740000600082015250565b6000614421601e83612f65565b915061442c826143eb565b602082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f4e6f20746f6b656e7320726573657276656420666f722074686973206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144b3602383612f65565b91506144be82614457565b604082019050919050565b600060208201905081810360008301526144e2816144a6565b9050919050565b7f43616e2774206d696e74206d6f7265207468616e207265736572766564000000600082015250565b600061451f601d83612f65565b915061452a826144e9565b602082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b600061456082613015565b915061456b83613015565b92508282101561457e5761457d613a92565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006145e5602c83612f65565b91506145f082614589565b604082019050919050565b60006020820190508181036000830152614614816145d8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614677602983612f65565b91506146828261461b565b604082019050919050565b600060208201905081810360008301526146a68161466a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614709602483612f65565b9150614714826146ad565b604082019050919050565b60006020820190508181036000830152614738816146fc565b9050919050565b600061474a82613015565b915061475583613015565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561478e5761478d613a92565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147d382613015565b91506147de83613015565b9250826147ee576147ed614799565b5b828204905092915050565b600081905092915050565b50565b60006148146000836147f9565b915061481f82614804565b600082019050919050565b600061483582614807565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000614875601083612f65565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614907603283612f65565b9150614912826148ab565b604082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b600061494882613015565b915061495383613015565b92508261496357614962614799565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149958261496e565b61499f8185614979565b93506149af818560208601612f76565b6149b881612fa9565b840191505092915050565b60006080820190506149d860008301876130aa565b6149e560208301866130aa565b6149f26040830185613140565b8181036060830152614a04818461498a565b905095945050505050565b600081519050614a1e81612ecb565b92915050565b600060208284031215614a3a57614a39612e95565b5b6000614a4884828501614a0f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ab6602083612f65565b9150614ac182614a80565b602082019050919050565b60006020820190508181036000830152614ae581614aa9565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b22601c83612f65565b9150614b2d82614aec565b602082019050919050565b60006020820190508181036000830152614b5181614b15565b905091905056fea26469706673582212202658684a73c311faa885d4416574a0832d8efe7e95b018a5fb50d5697613476264736f6c634300080f0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014d00000000000000000000000000000000000000000000000000000000000000083344425f4675656c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044655454c00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): 3DB_Fuel
Arg [1] : symbol (string): FUEL
Arg [2] : supply (uint256): 333

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000000000000000000000014d
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 3344425f4675656c000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4655454c00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

49228:3972:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33955:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21017:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22576:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22099:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34595:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23466:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51572:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34263:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52589:91;;;;;;;;;;;;;:::i;:::-;;23876:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51828:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34785:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49489:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52997:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20711:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49529:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20441:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41699:94;;;;;;;;;;;;;:::i;:::-;;52688:82;;;;;;;;;;;;;:::i;:::-;;52181:211;;;:::i;:::-;;41048:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52778:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21186:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49447:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50957:607;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22869:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24132:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21361:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49908:188;;;;;;;;;;;;;:::i;:::-;;49416:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23235:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49568:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41948:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50104:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33955:224;34057:4;34096:35;34081:50;;;:11;:50;;;;:90;;;;34135:36;34159:11;34135:23;:36::i;:::-;34081:90;34074:97;;33955:224;;;:::o;21017:100::-;21071:13;21104:5;21097:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21017:100;:::o;22576:221::-;22652:7;22680:16;22688:7;22680;:16::i;:::-;22672:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22765:15;:24;22781:7;22765:24;;;;;;;;;;;;;;;;;;;;;22758:31;;22576:221;;;:::o;22099:411::-;22180:13;22196:23;22211:7;22196:14;:23::i;:::-;22180:39;;22244:5;22238:11;;:2;:11;;;22230:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22338:5;22322:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22347:37;22364:5;22371:12;:10;:12::i;:::-;22347:16;:37::i;:::-;22322:62;22300:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22481:21;22490:2;22494:7;22481:8;:21::i;:::-;22169:341;22099:411;;:::o;34595:113::-;34656:7;34683:10;:17;;;;34676:24;;34595:113;:::o;23466:339::-;23661:41;23680:12;:10;:12::i;:::-;23694:7;23661:18;:41::i;:::-;23653:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23769:28;23779:4;23785:2;23789:7;23769:9;:28::i;:::-;23466:339;;;:::o;51572:244::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51689:9:::1;51685:124;51704:16;;:23;;51700:1;:27;51685:124;;;51788:6;;51795:1;51788:9;;;;;;;:::i;:::-;;;;;;;;51748:16;:37;51765:16;;51782:1;51765:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51748:37;;;;;;;;;;;;;;;:49;;;;51729:3;;;;;:::i;:::-;;;;51685:124;;;;51572:244:::0;;;;:::o;34263:256::-;34360:7;34396:23;34413:5;34396:16;:23::i;:::-;34388:5;:31;34380:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34485:12;:19;34498:5;34485:19;;;;;;;;;;;;;;;:26;34505:5;34485:26;;;;;;;;;;;;34478:33;;34263:256;;;;:::o;52589:91::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52659:13:::1;;;;;;;;;;;52658:14;52642:13;;:30;;;;;;;;;;;;;;;;;;52589:91::o:0;23876:185::-;24014:39;24031:4;24037:2;24041:7;24014:39;;;;;;;;;;;;:16;:39::i;:::-;23876:185;;;:::o;51828:341::-;51888:16;51917:18;51938:16;51948:5;51938:9;:16::i;:::-;51917:37;;51967:25;52009:10;51995:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51967:53;;52035:9;52031:105;52050:10;52046:1;:14;52031:105;;;52095:29;52115:5;52122:1;52095:19;:29::i;:::-;52081:8;52090:1;52081:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;52062:3;;;;;:::i;:::-;;;;52031:105;;;;52153:8;52146:15;;;;51828:341;;;:::o;34785:233::-;34860:7;34896:30;:28;:30::i;:::-;34888:5;:38;34880:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34993:10;35004:5;34993:17;;;;;;;;:::i;:::-;;;;;;;;;;34986:24;;34785:233;;;:::o;49489:33::-;;;;;;;;;;;;;:::o;52997:88::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53074:3:::1;53064:7;:13;;;;;;:::i;:::-;;52997:88:::0;:::o;20711:239::-;20783:7;20803:13;20819:7;:16;20827:7;20819:16;;;;;;;;;;;;;;;;;;;;;20803:32;;20871:1;20854:19;;:5;:19;;;20846:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20937:5;20930:12;;;20711:239;;;:::o;49529:30::-;;;;;;;;;;;;;:::o;20441:208::-;20513:7;20558:1;20541:19;;:5;:19;;;20533:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20625:9;:16;20635:5;20625:16;;;;;;;;;;;;;;;;20618:23;;20441:208;;;:::o;41699:94::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41764:21:::1;41782:1;41764:9;:21::i;:::-;41699:94::o:0;52688:82::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52752:10:::1;;;;;;;;;;;52751:11;52738:10;;:24;;;;;;;;;;;;;;;;;;52688:82::o:0;52181:211::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52240:15:::1;52258:21;52240:39;;52310:1;52300:7;:11;52292:20;;;::::0;::::1;;52323:46;49702:42;52343:25;52364:3;52343:16;52355:3;52343:7;:11;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;52323:9;:46::i;:::-;52229:163;52181:211::o:0;41048:87::-;41094:7;41121:6;;;;;;;;;;;41114:13;;41048:87;:::o;52778:88::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52850:8:::1;52842:5;:16;;;;52778:88:::0;:::o;21186:104::-;21242:13;21275:7;21268:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21186:104;:::o;49447:33::-;;;;:::o;50957:607::-;51020:14;51037:13;:11;:13::i;:::-;51020:30;;51069:10;;;;;;;;;;;51061:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;51178:1;51162:13;:17;:39;;;;;51199:2;51183:13;:18;51162:39;51154:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51280:9;;51251:25;51262:13;51251:6;:10;;:25;;;;:::i;:::-;:38;;51243:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51387:9;51359:24;51369:13;51359:5;;:9;;:24;;;;:::i;:::-;:37;51351:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;51462:9;51458:99;51477:13;51473:1;:17;51458:99;;;51512:33;51522:10;51543:1;51534:6;:10;;;;:::i;:::-;51512:9;:33::i;:::-;51492:3;;;;;:::i;:::-;;;;51458:99;;;;51009:555;50957:607;:::o;22869:295::-;22984:12;:10;:12::i;:::-;22972:24;;:8;:24;;;22964:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23084:8;23039:18;:32;23058:12;:10;:12::i;:::-;23039:32;;;;;;;;;;;;;;;:42;23072:8;23039:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23137:8;23108:48;;23123:12;:10;:12::i;:::-;23108:48;;;23147:8;23108:48;;;;;;:::i;:::-;;;;;;;;22869:295;;:::o;24132:328::-;24307:41;24326:12;:10;:12::i;:::-;24340:7;24307:18;:41::i;:::-;24299:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24413:39;24427:4;24433:2;24437:7;24446:5;24413:13;:39::i;:::-;24132:328;;;;:::o;21361:334::-;21434:13;21468:16;21476:7;21468;:16::i;:::-;21460:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21549:21;21573:10;:8;:10::i;:::-;21549:34;;21625:1;21607:7;21601:21;:25;:86;;;;;;;;;;;;;;;;;21653:7;21662:18;:7;:16;:18::i;:::-;21636:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21601:86;21594:93;;;21361:334;;;:::o;49908:188::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49955:14:::1;49972:13;:11;:13::i;:::-;49955:30;;50001:9;49996:93;50020:2;50016:1;:6;49996:93;;;50044:33;50054:10;50075:1;50066:6;:10;;;;:::i;:::-;50044:9;:33::i;:::-;50024:3;;;;;:::i;:::-;;;;49996:93;;;;49944:152;49908:188::o:0;49416:24::-;;;;:::o;23235:164::-;23332:4;23356:18;:25;23375:5;23356:25;;;;;;;;;;;;;;;:35;23382:8;23356:35;;;;;;;;;;;;;;;;;;;;;;;;;23349:42;;23235:164;;;;:::o;49568:52::-;;;;;;;;;;;;;;;;;:::o;41948:192::-;41279:12;:10;:12::i;:::-;41268:23;;:7;:5;:7::i;:::-;:23;;;41260:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42057:1:::1;42037:22;;:8;:22;;::::0;42029:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42113:19;42123:8;42113:9;:19::i;:::-;41948:192:::0;:::o;50104:841::-;50174:14;50191:13;:11;:13::i;:::-;50174:30;;50215:16;50234;:28;50251:10;50234:28;;;;;;;;;;;;;;;;50215:47;;50281:13;;;;;;;;;;;50273:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;50388:1;50377:8;:12;50369:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;50495:8;50478:13;:25;;50470:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;50602:9;;50573:25;50584:13;50573:6;:10;;:25;;;;:::i;:::-;:38;;50565:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50709:9;50681:24;50691:13;50681:5;;:9;;:24;;;;:::i;:::-;:37;50673:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;50812:13;50801:8;:24;;;;:::i;:::-;50770:16;:28;50787:10;50770:28;;;;;;;;;;;;;;;:55;;;;50842:9;50838:100;50857:13;50853:1;:17;50838:100;;;50891:35;50902:10;50923:1;50914:6;:10;;;;:::i;:::-;50891:9;:35::i;:::-;50872:3;;;;;:::i;:::-;;;;50838:100;;;;50163:782;;50104:841;:::o;20072:305::-;20174:4;20226:25;20211:40;;;:11;:40;;;;:105;;;;20283:33;20268:48;;;:11;:48;;;;20211:105;:158;;;;20333:36;20357:11;20333:23;:36::i;:::-;20211:158;20191:178;;20072:305;;;:::o;25970:127::-;26035:4;26087:1;26059:30;;:7;:16;26067:7;26059:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26052:37;;25970:127;;;:::o;1381:98::-;1434:7;1461:10;1454:17;;1381:98;:::o;29952:174::-;30054:2;30027:15;:24;30043:7;30027:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30110:7;30106:2;30072:46;;30081:23;30096:7;30081:14;:23::i;:::-;30072:46;;;;;;;;;;;;29952:174;;:::o;26264:348::-;26357:4;26382:16;26390:7;26382;:16::i;:::-;26374:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26458:13;26474:23;26489:7;26474:14;:23::i;:::-;26458:39;;26527:5;26516:16;;:7;:16;;;:51;;;;26560:7;26536:31;;:20;26548:7;26536:11;:20::i;:::-;:31;;;26516:51;:87;;;;26571:32;26588:5;26595:7;26571:16;:32::i;:::-;26516:87;26508:96;;;26264:348;;;;:::o;29256:578::-;29415:4;29388:31;;:23;29403:7;29388:14;:23::i;:::-;:31;;;29380:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29498:1;29484:16;;:2;:16;;;29476:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29554:39;29575:4;29581:2;29585:7;29554:20;:39::i;:::-;29658:29;29675:1;29679:7;29658:8;:29::i;:::-;29719:1;29700:9;:15;29710:4;29700:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29748:1;29731:9;:13;29741:2;29731:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29779:2;29760:7;:16;29768:7;29760:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29818:7;29814:2;29799:27;;29808:4;29799:27;;;;;;;;;;;;29256:578;;;:::o;42148:173::-;42204:16;42223:6;;;;;;;;;;;42204:25;;42249:8;42240:6;;:17;;;;;;;;;;;;;;;;;;42304:8;42273:40;;42294:8;42273:40;;;;;;;;;;;;42193:128;42148:173;:::o;45798:98::-;45856:7;45887:1;45883;:5;;;;:::i;:::-;45876:12;;45798:98;;;;:::o;46197:::-;46255:7;46286:1;46282;:5;;;;:::i;:::-;46275:12;;46197:98;;;;:::o;52401:180::-;52475:12;52493:8;:13;;52514:7;52493:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52474:52;;;52545:7;52537:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;52463:118;52401:180;;:::o;45060:98::-;45118:7;45149:1;45145;:5;;;;:::i;:::-;45138:12;;45060:98;;;;:::o;26954:110::-;27030:26;27040:2;27044:7;27030:26;;;;;;;;;;;;:9;:26::i;:::-;26954:110;;:::o;25342:315::-;25499:28;25509:4;25515:2;25519:7;25499:9;:28::i;:::-;25546:48;25569:4;25575:2;25579:7;25588:5;25546:22;:48::i;:::-;25538:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25342:315;;;;:::o;53097:100::-;53149:13;53182:7;53175:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53097:100;:::o;1850:723::-;1906:13;2136:1;2127:5;:10;2123:53;;2154:10;;;;;;;;;;;;;;;;;;;;;2123:53;2186:12;2201:5;2186:20;;2217:14;2242:78;2257:1;2249:4;:9;2242:78;;2275:8;;;;;:::i;:::-;;;;2306:2;2298:10;;;;;:::i;:::-;;;2242:78;;;2330:19;2362:6;2352:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2330:39;;2380:154;2396:1;2387:5;:10;2380:154;;2424:1;2414:11;;;;;:::i;:::-;;;2491:2;2483:5;:10;;;;:::i;:::-;2470:2;:24;;;;:::i;:::-;2457:39;;2440:6;2447;2440:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2520:2;2511:11;;;;;:::i;:::-;;;2380:154;;;2558:6;2544:21;;;;;1850:723;;;;:::o;18679:157::-;18764:4;18803:25;18788:40;;;:11;:40;;;;18781:47;;18679:157;;;:::o;35631:589::-;35775:45;35802:4;35808:2;35812:7;35775:26;:45::i;:::-;35853:1;35837:18;;:4;:18;;;35833:187;;35872:40;35904:7;35872:31;:40::i;:::-;35833:187;;;35942:2;35934:10;;:4;:10;;;35930:90;;35961:47;35994:4;36000:7;35961:32;:47::i;:::-;35930:90;35833:187;36048:1;36034:16;;:2;:16;;;36030:183;;36067:45;36104:7;36067:36;:45::i;:::-;36030:183;;;36140:4;36134:10;;:2;:10;;;36130:83;;36161:40;36189:2;36193:7;36161:27;:40::i;:::-;36130:83;36030:183;35631:589;;;:::o;27291:321::-;27421:18;27427:2;27431:7;27421:5;:18::i;:::-;27472:54;27503:1;27507:2;27511:7;27520:5;27472:22;:54::i;:::-;27450:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27291:321;;;:::o;30691:799::-;30846:4;30867:15;:2;:13;;;:15::i;:::-;30863:620;;;30919:2;30903:36;;;30940:12;:10;:12::i;:::-;30954:4;30960:7;30969:5;30903:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30899:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31162:1;31145:6;:13;:18;31141:272;;31188:60;;;;;;;;;;:::i;:::-;;;;;;;;31141:272;31363:6;31357:13;31348:6;31344:2;31340:15;31333:38;30899:529;31036:41;;;31026:51;;;:6;:51;;;;31019:58;;;;;30863:620;31467:4;31460:11;;30691:799;;;;;;;:::o;32062:126::-;;;;:::o;36943:164::-;37047:10;:17;;;;37020:15;:24;37036:7;37020:24;;;;;;;;;;;:44;;;;37075:10;37091:7;37075:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36943:164;:::o;37734:988::-;38000:22;38050:1;38025:22;38042:4;38025:16;:22::i;:::-;:26;;;;:::i;:::-;38000:51;;38062:18;38083:17;:26;38101:7;38083:26;;;;;;;;;;;;38062:47;;38230:14;38216:10;:28;38212:328;;38261:19;38283:12;:18;38296:4;38283:18;;;;;;;;;;;;;;;:34;38302:14;38283:34;;;;;;;;;;;;38261:56;;38367:11;38334:12;:18;38347:4;38334:18;;;;;;;;;;;;;;;:30;38353:10;38334:30;;;;;;;;;;;:44;;;;38484:10;38451:17;:30;38469:11;38451:30;;;;;;;;;;;:43;;;;38246:294;38212:328;38636:17;:26;38654:7;38636:26;;;;;;;;;;;38629:33;;;38680:12;:18;38693:4;38680:18;;;;;;;;;;;;;;;:34;38699:14;38680:34;;;;;;;;;;;38673:41;;;37815:907;;37734:988;;:::o;39017:1079::-;39270:22;39315:1;39295:10;:17;;;;:21;;;;:::i;:::-;39270:46;;39327:18;39348:15;:24;39364:7;39348:24;;;;;;;;;;;;39327:45;;39699:19;39721:10;39732:14;39721:26;;;;;;;;:::i;:::-;;;;;;;;;;39699:48;;39785:11;39760:10;39771;39760:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39896:10;39865:15;:28;39881:11;39865:28;;;;;;;;;;;:41;;;;40037:15;:24;40053:7;40037:24;;;;;;;;;;;40030:31;;;40072:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39088:1008;;;39017:1079;:::o;36521:221::-;36606:14;36623:20;36640:2;36623:16;:20::i;:::-;36606:37;;36681:7;36654:12;:16;36667:2;36654:16;;;;;;;;;;;;;;;:24;36671:6;36654:24;;;;;;;;;;;:34;;;;36728:6;36699:17;:26;36717:7;36699:26;;;;;;;;;;;:35;;;;36595:147;36521:221;;:::o;27948:382::-;28042:1;28028:16;;:2;:16;;;28020:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28101:16;28109:7;28101;:16::i;:::-;28100:17;28092:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28163:45;28192:1;28196:2;28200:7;28163:20;:45::i;:::-;28238:1;28221:9;:13;28231:2;28221:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28269:2;28250:7;:16;28258:7;28250:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28314:7;28310:2;28289:33;;28306:1;28289:33;;;;;;;;;;;;27948:382;;:::o;10611:387::-;10671:4;10879:12;10946:7;10934:20;10926:28;;10989:1;10982:4;:8;10975:15;;;10611:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6301:568;6374:8;6384:6;6434:3;6427:4;6419:6;6415:17;6411:27;6401:122;;6442:79;;:::i;:::-;6401:122;6555:6;6542:20;6532:30;;6585:18;6577:6;6574:30;6571:117;;;6607:79;;:::i;:::-;6571:117;6721:4;6713:6;6709:17;6697:29;;6775:3;6767:4;6759:6;6755:17;6745:8;6741:32;6738:41;6735:128;;;6782:79;;:::i;:::-;6735:128;6301:568;;;;;:::o;6892:::-;6965:8;6975:6;7025:3;7018:4;7010:6;7006:17;7002:27;6992:122;;7033:79;;:::i;:::-;6992:122;7146:6;7133:20;7123:30;;7176:18;7168:6;7165:30;7162:117;;;7198:79;;:::i;:::-;7162:117;7312:4;7304:6;7300:17;7288:29;;7366:3;7358:4;7350:6;7346:17;7336:8;7332:32;7329:41;7326:128;;;7373:79;;:::i;:::-;7326:128;6892:568;;;;;:::o;7466:934::-;7588:6;7596;7604;7612;7661:2;7649:9;7640:7;7636:23;7632:32;7629:119;;;7667:79;;:::i;:::-;7629:119;7815:1;7804:9;7800:17;7787:31;7845:18;7837:6;7834:30;7831:117;;;7867:79;;:::i;:::-;7831:117;7980:80;8052:7;8043:6;8032:9;8028:22;7980:80;:::i;:::-;7962:98;;;;7758:312;8137:2;8126:9;8122:18;8109:32;8168:18;8160:6;8157:30;8154:117;;;8190:79;;:::i;:::-;8154:117;8303:80;8375:7;8366:6;8355:9;8351:22;8303:80;:::i;:::-;8285:98;;;;8080:313;7466:934;;;;;;;:::o;8406:329::-;8465:6;8514:2;8502:9;8493:7;8489:23;8485:32;8482:119;;;8520:79;;:::i;:::-;8482:119;8640:1;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8611:117;8406:329;;;;:::o;8741:114::-;8808:6;8842:5;8836:12;8826:22;;8741:114;;;:::o;8861:184::-;8960:11;8994:6;8989:3;8982:19;9034:4;9029:3;9025:14;9010:29;;8861:184;;;;:::o;9051:132::-;9118:4;9141:3;9133:11;;9171:4;9166:3;9162:14;9154:22;;9051:132;;;:::o;9189:108::-;9266:24;9284:5;9266:24;:::i;:::-;9261:3;9254:37;9189:108;;:::o;9303:179::-;9372:10;9393:46;9435:3;9427:6;9393:46;:::i;:::-;9471:4;9466:3;9462:14;9448:28;;9303:179;;;;:::o;9488:113::-;9558:4;9590;9585:3;9581:14;9573:22;;9488:113;;;:::o;9637:732::-;9756:3;9785:54;9833:5;9785:54;:::i;:::-;9855:86;9934:6;9929:3;9855:86;:::i;:::-;9848:93;;9965:56;10015:5;9965:56;:::i;:::-;10044:7;10075:1;10060:284;10085:6;10082:1;10079:13;10060:284;;;10161:6;10155:13;10188:63;10247:3;10232:13;10188:63;:::i;:::-;10181:70;;10274:60;10327:6;10274:60;:::i;:::-;10264:70;;10120:224;10107:1;10104;10100:9;10095:14;;10060:284;;;10064:14;10360:3;10353:10;;9761:608;;;9637:732;;;;:::o;10375:373::-;10518:4;10556:2;10545:9;10541:18;10533:26;;10605:9;10599:4;10595:20;10591:1;10580:9;10576:17;10569:47;10633:108;10736:4;10727:6;10633:108;:::i;:::-;10625:116;;10375:373;;;;:::o;10754:117::-;10863:1;10860;10853:12;10877:180;10925:77;10922:1;10915:88;11022:4;11019:1;11012:15;11046:4;11043:1;11036:15;11063:281;11146:27;11168:4;11146:27;:::i;:::-;11138:6;11134:40;11276:6;11264:10;11261:22;11240:18;11228:10;11225:34;11222:62;11219:88;;;11287:18;;:::i;:::-;11219:88;11327:10;11323:2;11316:22;11106:238;11063:281;;:::o;11350:129::-;11384:6;11411:20;;:::i;:::-;11401:30;;11440:33;11468:4;11460:6;11440:33;:::i;:::-;11350:129;;;:::o;11485:308::-;11547:4;11637:18;11629:6;11626:30;11623:56;;;11659:18;;:::i;:::-;11623:56;11697:29;11719:6;11697:29;:::i;:::-;11689:37;;11781:4;11775;11771:15;11763:23;;11485:308;;;:::o;11799:154::-;11883:6;11878:3;11873;11860:30;11945:1;11936:6;11931:3;11927:16;11920:27;11799:154;;;:::o;11959:412::-;12037:5;12062:66;12078:49;12120:6;12078:49;:::i;:::-;12062:66;:::i;:::-;12053:75;;12151:6;12144:5;12137:21;12189:4;12182:5;12178:16;12227:3;12218:6;12213:3;12209:16;12206:25;12203:112;;;12234:79;;:::i;:::-;12203:112;12324:41;12358:6;12353:3;12348;12324:41;:::i;:::-;12043:328;11959:412;;;;;:::o;12391:340::-;12447:5;12496:3;12489:4;12481:6;12477:17;12473:27;12463:122;;12504:79;;:::i;:::-;12463:122;12621:6;12608:20;12646:79;12721:3;12713:6;12706:4;12698:6;12694:17;12646:79;:::i;:::-;12637:88;;12453:278;12391:340;;;;:::o;12737:509::-;12806:6;12855:2;12843:9;12834:7;12830:23;12826:32;12823:119;;;12861:79;;:::i;:::-;12823:119;13009:1;12998:9;12994:17;12981:31;13039:18;13031:6;13028:30;13025:117;;;13061:79;;:::i;:::-;13025:117;13166:63;13221:7;13212:6;13201:9;13197:22;13166:63;:::i;:::-;13156:73;;12952:287;12737:509;;;;:::o;13252:116::-;13322:21;13337:5;13322:21;:::i;:::-;13315:5;13312:32;13302:60;;13358:1;13355;13348:12;13302:60;13252:116;:::o;13374:133::-;13417:5;13455:6;13442:20;13433:29;;13471:30;13495:5;13471:30;:::i;:::-;13374:133;;;;:::o;13513:468::-;13578:6;13586;13635:2;13623:9;13614:7;13610:23;13606:32;13603:119;;;13641:79;;:::i;:::-;13603:119;13761:1;13786:53;13831:7;13822:6;13811:9;13807:22;13786:53;:::i;:::-;13776:63;;13732:117;13888:2;13914:50;13956:7;13947:6;13936:9;13932:22;13914:50;:::i;:::-;13904:60;;13859:115;13513:468;;;;;:::o;13987:307::-;14048:4;14138:18;14130:6;14127:30;14124:56;;;14160:18;;:::i;:::-;14124:56;14198:29;14220:6;14198:29;:::i;:::-;14190:37;;14282:4;14276;14272:15;14264:23;;13987:307;;;:::o;14300:410::-;14377:5;14402:65;14418:48;14459:6;14418:48;:::i;:::-;14402:65;:::i;:::-;14393:74;;14490:6;14483:5;14476:21;14528:4;14521:5;14517:16;14566:3;14557:6;14552:3;14548:16;14545:25;14542:112;;;14573:79;;:::i;:::-;14542:112;14663:41;14697:6;14692:3;14687;14663:41;:::i;:::-;14383:327;14300:410;;;;;:::o;14729:338::-;14784:5;14833:3;14826:4;14818:6;14814:17;14810:27;14800:122;;14841:79;;:::i;:::-;14800:122;14958:6;14945:20;14983:78;15057:3;15049:6;15042:4;15034:6;15030:17;14983:78;:::i;:::-;14974:87;;14790:277;14729:338;;;;:::o;15073:943::-;15168:6;15176;15184;15192;15241:3;15229:9;15220:7;15216:23;15212:33;15209:120;;;15248:79;;:::i;:::-;15209:120;15368:1;15393:53;15438:7;15429:6;15418:9;15414:22;15393:53;:::i;:::-;15383:63;;15339:117;15495:2;15521:53;15566:7;15557:6;15546:9;15542:22;15521:53;:::i;:::-;15511:63;;15466:118;15623:2;15649:53;15694:7;15685:6;15674:9;15670:22;15649:53;:::i;:::-;15639:63;;15594:118;15779:2;15768:9;15764:18;15751:32;15810:18;15802:6;15799:30;15796:117;;;15832:79;;:::i;:::-;15796:117;15937:62;15991:7;15982:6;15971:9;15967:22;15937:62;:::i;:::-;15927:72;;15722:287;15073:943;;;;;;;:::o;16022:474::-;16090:6;16098;16147:2;16135:9;16126:7;16122:23;16118:32;16115:119;;;16153:79;;:::i;:::-;16115:119;16273:1;16298:53;16343:7;16334:6;16323:9;16319:22;16298:53;:::i;:::-;16288:63;;16244:117;16400:2;16426:53;16471:7;16462:6;16451:9;16447:22;16426:53;:::i;:::-;16416:63;;16371:118;16022:474;;;;;:::o;16502:180::-;16550:77;16547:1;16540:88;16647:4;16644:1;16637:15;16671:4;16668:1;16661:15;16688:320;16732:6;16769:1;16763:4;16759:12;16749:22;;16816:1;16810:4;16806:12;16837:18;16827:81;;16893:4;16885:6;16881:17;16871:27;;16827:81;16955:2;16947:6;16944:14;16924:18;16921:38;16918:84;;16974:18;;:::i;:::-;16918:84;16739:269;16688:320;;;:::o;17014:231::-;17154:34;17150:1;17142:6;17138:14;17131:58;17223:14;17218:2;17210:6;17206:15;17199:39;17014:231;:::o;17251:366::-;17393:3;17414:67;17478:2;17473:3;17414:67;:::i;:::-;17407:74;;17490:93;17579:3;17490:93;:::i;:::-;17608:2;17603:3;17599:12;17592:19;;17251:366;;;:::o;17623:419::-;17789:4;17827:2;17816:9;17812:18;17804:26;;17876:9;17870:4;17866:20;17862:1;17851:9;17847:17;17840:47;17904:131;18030:4;17904:131;:::i;:::-;17896:139;;17623:419;;;:::o;18048:220::-;18188:34;18184:1;18176:6;18172:14;18165:58;18257:3;18252:2;18244:6;18240:15;18233:28;18048:220;:::o;18274:366::-;18416:3;18437:67;18501:2;18496:3;18437:67;:::i;:::-;18430:74;;18513:93;18602:3;18513:93;:::i;:::-;18631:2;18626:3;18622:12;18615:19;;18274:366;;;:::o;18646:419::-;18812:4;18850:2;18839:9;18835:18;18827:26;;18899:9;18893:4;18889:20;18885:1;18874:9;18870:17;18863:47;18927:131;19053:4;18927:131;:::i;:::-;18919:139;;18646:419;;;:::o;19071:243::-;19211:34;19207:1;19199:6;19195:14;19188:58;19280:26;19275:2;19267:6;19263:15;19256:51;19071:243;:::o;19320:366::-;19462:3;19483:67;19547:2;19542:3;19483:67;:::i;:::-;19476:74;;19559:93;19648:3;19559:93;:::i;:::-;19677:2;19672:3;19668:12;19661:19;;19320:366;;;:::o;19692:419::-;19858:4;19896:2;19885:9;19881:18;19873:26;;19945:9;19939:4;19935:20;19931:1;19920:9;19916:17;19909:47;19973:131;20099:4;19973:131;:::i;:::-;19965:139;;19692:419;;;:::o;20117:236::-;20257:34;20253:1;20245:6;20241:14;20234:58;20326:19;20321:2;20313:6;20309:15;20302:44;20117:236;:::o;20359:366::-;20501:3;20522:67;20586:2;20581:3;20522:67;:::i;:::-;20515:74;;20598:93;20687:3;20598:93;:::i;:::-;20716:2;20711:3;20707:12;20700:19;;20359:366;;;:::o;20731:419::-;20897:4;20935:2;20924:9;20920:18;20912:26;;20984:9;20978:4;20974:20;20970:1;20959:9;20955:17;20948:47;21012:131;21138:4;21012:131;:::i;:::-;21004:139;;20731:419;;;:::o;21156:182::-;21296:34;21292:1;21284:6;21280:14;21273:58;21156:182;:::o;21344:366::-;21486:3;21507:67;21571:2;21566:3;21507:67;:::i;:::-;21500:74;;21583:93;21672:3;21583:93;:::i;:::-;21701:2;21696:3;21692:12;21685:19;;21344:366;;;:::o;21716:419::-;21882:4;21920:2;21909:9;21905:18;21897:26;;21969:9;21963:4;21959:20;21955:1;21944:9;21940:17;21933:47;21997:131;22123:4;21997:131;:::i;:::-;21989:139;;21716:419;;;:::o;22141:180::-;22189:77;22186:1;22179:88;22286:4;22283:1;22276:15;22310:4;22307:1;22300:15;22327:180;22375:77;22372:1;22365:88;22472:4;22469:1;22462:15;22496:4;22493:1;22486:15;22513:233;22552:3;22575:24;22593:5;22575:24;:::i;:::-;22566:33;;22621:66;22614:5;22611:77;22608:103;;22691:18;;:::i;:::-;22608:103;22738:1;22731:5;22727:13;22720:20;;22513:233;;;:::o;22752:230::-;22892:34;22888:1;22880:6;22876:14;22869:58;22961:13;22956:2;22948:6;22944:15;22937:38;22752:230;:::o;22988:366::-;23130:3;23151:67;23215:2;23210:3;23151:67;:::i;:::-;23144:74;;23227:93;23316:3;23227:93;:::i;:::-;23345:2;23340:3;23336:12;23329:19;;22988:366;;;:::o;23360:419::-;23526:4;23564:2;23553:9;23549:18;23541:26;;23613:9;23607:4;23603:20;23599:1;23588:9;23584:17;23577:47;23641:131;23767:4;23641:131;:::i;:::-;23633:139;;23360:419;;;:::o;23785:231::-;23925:34;23921:1;23913:6;23909:14;23902:58;23994:14;23989:2;23981:6;23977:15;23970:39;23785:231;:::o;24022:366::-;24164:3;24185:67;24249:2;24244:3;24185:67;:::i;:::-;24178:74;;24261:93;24350:3;24261:93;:::i;:::-;24379:2;24374:3;24370:12;24363:19;;24022:366;;;:::o;24394:419::-;24560:4;24598:2;24587:9;24583:18;24575:26;;24647:9;24641:4;24637:20;24633:1;24622:9;24618:17;24611:47;24675:131;24801:4;24675:131;:::i;:::-;24667:139;;24394:419;;;:::o;24819:141::-;24868:4;24891:3;24883:11;;24914:3;24911:1;24904:14;24948:4;24945:1;24935:18;24927:26;;24819:141;;;:::o;24966:93::-;25003:6;25050:2;25045;25038:5;25034:14;25030:23;25020:33;;24966:93;;;:::o;25065:107::-;25109:8;25159:5;25153:4;25149:16;25128:37;;25065:107;;;;:::o;25178:393::-;25247:6;25297:1;25285:10;25281:18;25320:97;25350:66;25339:9;25320:97;:::i;:::-;25438:39;25468:8;25457:9;25438:39;:::i;:::-;25426:51;;25510:4;25506:9;25499:5;25495:21;25486:30;;25559:4;25549:8;25545:19;25538:5;25535:30;25525:40;;25254:317;;25178:393;;;;;:::o;25577:60::-;25605:3;25626:5;25619:12;;25577:60;;;:::o;25643:142::-;25693:9;25726:53;25744:34;25753:24;25771:5;25753:24;:::i;:::-;25744:34;:::i;:::-;25726:53;:::i;:::-;25713:66;;25643:142;;;:::o;25791:75::-;25834:3;25855:5;25848:12;;25791:75;;;:::o;25872:269::-;25982:39;26013:7;25982:39;:::i;:::-;26043:91;26092:41;26116:16;26092:41;:::i;:::-;26084:6;26077:4;26071:11;26043:91;:::i;:::-;26037:4;26030:105;25948:193;25872:269;;;:::o;26147:73::-;26192:3;26147:73;:::o;26226:189::-;26303:32;;:::i;:::-;26344:65;26402:6;26394;26388:4;26344:65;:::i;:::-;26279:136;26226:189;;:::o;26421:186::-;26481:120;26498:3;26491:5;26488:14;26481:120;;;26552:39;26589:1;26582:5;26552:39;:::i;:::-;26525:1;26518:5;26514:13;26505:22;;26481:120;;;26421:186;;:::o;26613:543::-;26714:2;26709:3;26706:11;26703:446;;;26748:38;26780:5;26748:38;:::i;:::-;26832:29;26850:10;26832:29;:::i;:::-;26822:8;26818:44;27015:2;27003:10;27000:18;26997:49;;;27036:8;27021:23;;26997:49;27059:80;27115:22;27133:3;27115:22;:::i;:::-;27105:8;27101:37;27088:11;27059:80;:::i;:::-;26718:431;;26703:446;26613:543;;;:::o;27162:117::-;27216:8;27266:5;27260:4;27256:16;27235:37;;27162:117;;;;:::o;27285:169::-;27329:6;27362:51;27410:1;27406:6;27398:5;27395:1;27391:13;27362:51;:::i;:::-;27358:56;27443:4;27437;27433:15;27423:25;;27336:118;27285:169;;;;:::o;27459:295::-;27535:4;27681:29;27706:3;27700:4;27681:29;:::i;:::-;27673:37;;27743:3;27740:1;27736:11;27730:4;27727:21;27719:29;;27459:295;;;;:::o;27759:1395::-;27876:37;27909:3;27876:37;:::i;:::-;27978:18;27970:6;27967:30;27964:56;;;28000:18;;:::i;:::-;27964:56;28044:38;28076:4;28070:11;28044:38;:::i;:::-;28129:67;28189:6;28181;28175:4;28129:67;:::i;:::-;28223:1;28247:4;28234:17;;28279:2;28271:6;28268:14;28296:1;28291:618;;;;28953:1;28970:6;28967:77;;;29019:9;29014:3;29010:19;29004:26;28995:35;;28967:77;29070:67;29130:6;29123:5;29070:67;:::i;:::-;29064:4;29057:81;28926:222;28261:887;;28291:618;28343:4;28339:9;28331:6;28327:22;28377:37;28409:4;28377:37;:::i;:::-;28436:1;28450:208;28464:7;28461:1;28458:14;28450:208;;;28543:9;28538:3;28534:19;28528:26;28520:6;28513:42;28594:1;28586:6;28582:14;28572:24;;28641:2;28630:9;28626:18;28613:31;;28487:4;28484:1;28480:12;28475:17;;28450:208;;;28686:6;28677:7;28674:19;28671:179;;;28744:9;28739:3;28735:19;28729:26;28787:48;28829:4;28821:6;28817:17;28806:9;28787:48;:::i;:::-;28779:6;28772:64;28694:156;28671:179;28896:1;28892;28884:6;28880:14;28876:22;28870:4;28863:36;28298:611;;;28261:887;;27851:1303;;;27759:1395;;:::o;29160:228::-;29300:34;29296:1;29288:6;29284:14;29277:58;29369:11;29364:2;29356:6;29352:15;29345:36;29160:228;:::o;29394:366::-;29536:3;29557:67;29621:2;29616:3;29557:67;:::i;:::-;29550:74;;29633:93;29722:3;29633:93;:::i;:::-;29751:2;29746:3;29742:12;29735:19;;29394:366;;;:::o;29766:419::-;29932:4;29970:2;29959:9;29955:18;29947:26;;30019:9;30013:4;30009:20;30005:1;29994:9;29990:17;29983:47;30047:131;30173:4;30047:131;:::i;:::-;30039:139;;29766:419;;;:::o;30191:229::-;30331:34;30327:1;30319:6;30315:14;30308:58;30400:12;30395:2;30387:6;30383:15;30376:37;30191:229;:::o;30426:366::-;30568:3;30589:67;30653:2;30648:3;30589:67;:::i;:::-;30582:74;;30665:93;30754:3;30665:93;:::i;:::-;30783:2;30778:3;30774:12;30767:19;;30426:366;;;:::o;30798:419::-;30964:4;31002:2;30991:9;30987:18;30979:26;;31051:9;31045:4;31041:20;31037:1;31026:9;31022:17;31015:47;31079:131;31205:4;31079:131;:::i;:::-;31071:139;;30798:419;;;:::o;31223:177::-;31363:29;31359:1;31351:6;31347:14;31340:53;31223:177;:::o;31406:366::-;31548:3;31569:67;31633:2;31628:3;31569:67;:::i;:::-;31562:74;;31645:93;31734:3;31645:93;:::i;:::-;31763:2;31758:3;31754:12;31747:19;;31406:366;;;:::o;31778:419::-;31944:4;31982:2;31971:9;31967:18;31959:26;;32031:9;32025:4;32021:20;32017:1;32006:9;32002:17;31995:47;32059:131;32185:4;32059:131;:::i;:::-;32051:139;;31778:419;;;:::o;32203:173::-;32343:25;32339:1;32331:6;32327:14;32320:49;32203:173;:::o;32382:366::-;32524:3;32545:67;32609:2;32604:3;32545:67;:::i;:::-;32538:74;;32621:93;32710:3;32621:93;:::i;:::-;32739:2;32734:3;32730:12;32723:19;;32382:366;;;:::o;32754:419::-;32920:4;32958:2;32947:9;32943:18;32935:26;;33007:9;33001:4;32997:20;32993:1;32982:9;32978:17;32971:47;33035:131;33161:4;33035:131;:::i;:::-;33027:139;;32754:419;;;:::o;33179:229::-;33319:34;33315:1;33307:6;33303:14;33296:58;33388:12;33383:2;33375:6;33371:15;33364:37;33179:229;:::o;33414:366::-;33556:3;33577:67;33641:2;33636:3;33577:67;:::i;:::-;33570:74;;33653:93;33742:3;33653:93;:::i;:::-;33771:2;33766:3;33762:12;33755:19;;33414:366;;;:::o;33786:419::-;33952:4;33990:2;33979:9;33975:18;33967:26;;34039:9;34033:4;34029:20;34025:1;34014:9;34010:17;34003:47;34067:131;34193:4;34067:131;:::i;:::-;34059:139;;33786:419;;;:::o;34211:181::-;34351:33;34347:1;34339:6;34335:14;34328:57;34211:181;:::o;34398:366::-;34540:3;34561:67;34625:2;34620:3;34561:67;:::i;:::-;34554:74;;34637:93;34726:3;34637:93;:::i;:::-;34755:2;34750:3;34746:12;34739:19;;34398:366;;;:::o;34770:419::-;34936:4;34974:2;34963:9;34959:18;34951:26;;35023:9;35017:4;35013:20;35009:1;34998:9;34994:17;34987:47;35051:131;35177:4;35051:131;:::i;:::-;35043:139;;34770:419;;;:::o;35195:305::-;35235:3;35254:20;35272:1;35254:20;:::i;:::-;35249:25;;35288:20;35306:1;35288:20;:::i;:::-;35283:25;;35442:1;35374:66;35370:74;35367:1;35364:81;35361:107;;;35448:18;;:::i;:::-;35361:107;35492:1;35489;35485:9;35478:16;;35195:305;;;;:::o;35506:175::-;35646:27;35642:1;35634:6;35630:14;35623:51;35506:175;:::o;35687:366::-;35829:3;35850:67;35914:2;35909:3;35850:67;:::i;:::-;35843:74;;35926:93;36015:3;35926:93;:::i;:::-;36044:2;36039:3;36035:12;36028:19;;35687:366;;;:::o;36059:419::-;36225:4;36263:2;36252:9;36248:18;36240:26;;36312:9;36306:4;36302:20;36298:1;36287:9;36283:17;36276:47;36340:131;36466:4;36340:131;:::i;:::-;36332:139;;36059:419;;;:::o;36484:234::-;36624:34;36620:1;36612:6;36608:14;36601:58;36693:17;36688:2;36680:6;36676:15;36669:42;36484:234;:::o;36724:366::-;36866:3;36887:67;36951:2;36946:3;36887:67;:::i;:::-;36880:74;;36963:93;37052:3;36963:93;:::i;:::-;37081:2;37076:3;37072:12;37065:19;;36724:366;;;:::o;37096:419::-;37262:4;37300:2;37289:9;37285:18;37277:26;;37349:9;37343:4;37339:20;37335:1;37324:9;37320:17;37313:47;37377:131;37503:4;37377:131;:::i;:::-;37369:139;;37096:419;;;:::o;37521:148::-;37623:11;37660:3;37645:18;;37521:148;;;;:::o;37675:377::-;37781:3;37809:39;37842:5;37809:39;:::i;:::-;37864:89;37946:6;37941:3;37864:89;:::i;:::-;37857:96;;37962:52;38007:6;38002:3;37995:4;37988:5;37984:16;37962:52;:::i;:::-;38039:6;38034:3;38030:16;38023:23;;37785:267;37675:377;;;;:::o;38058:435::-;38238:3;38260:95;38351:3;38342:6;38260:95;:::i;:::-;38253:102;;38372:95;38463:3;38454:6;38372:95;:::i;:::-;38365:102;;38484:3;38477:10;;38058:435;;;;;:::o;38499:225::-;38639:34;38635:1;38627:6;38623:14;38616:58;38708:8;38703:2;38695:6;38691:15;38684:33;38499:225;:::o;38730:366::-;38872:3;38893:67;38957:2;38952:3;38893:67;:::i;:::-;38886:74;;38969:93;39058:3;38969:93;:::i;:::-;39087:2;39082:3;39078:12;39071:19;;38730:366;;;:::o;39102:419::-;39268:4;39306:2;39295:9;39291:18;39283:26;;39355:9;39349:4;39345:20;39341:1;39330:9;39326:17;39319:47;39383:131;39509:4;39383:131;:::i;:::-;39375:139;;39102:419;;;:::o;39527:180::-;39667:32;39663:1;39655:6;39651:14;39644:56;39527:180;:::o;39713:366::-;39855:3;39876:67;39940:2;39935:3;39876:67;:::i;:::-;39869:74;;39952:93;40041:3;39952:93;:::i;:::-;40070:2;40065:3;40061:12;40054:19;;39713:366;;;:::o;40085:419::-;40251:4;40289:2;40278:9;40274:18;40266:26;;40338:9;40332:4;40328:20;40324:1;40313:9;40309:17;40302:47;40366:131;40492:4;40366:131;:::i;:::-;40358:139;;40085:419;;;:::o;40510:222::-;40650:34;40646:1;40638:6;40634:14;40627:58;40719:5;40714:2;40706:6;40702:15;40695:30;40510:222;:::o;40738:366::-;40880:3;40901:67;40965:2;40960:3;40901:67;:::i;:::-;40894:74;;40977:93;41066:3;40977:93;:::i;:::-;41095:2;41090:3;41086:12;41079:19;;40738:366;;;:::o;41110:419::-;41276:4;41314:2;41303:9;41299:18;41291:26;;41363:9;41357:4;41353:20;41349:1;41338:9;41334:17;41327:47;41391:131;41517:4;41391:131;:::i;:::-;41383:139;;41110:419;;;:::o;41535:179::-;41675:31;41671:1;41663:6;41659:14;41652:55;41535:179;:::o;41720:366::-;41862:3;41883:67;41947:2;41942:3;41883:67;:::i;:::-;41876:74;;41959:93;42048:3;41959:93;:::i;:::-;42077:2;42072:3;42068:12;42061:19;;41720:366;;;:::o;42092:419::-;42258:4;42296:2;42285:9;42281:18;42273:26;;42345:9;42339:4;42335:20;42331:1;42320:9;42316:17;42309:47;42373:131;42499:4;42373:131;:::i;:::-;42365:139;;42092:419;;;:::o;42517:191::-;42557:4;42577:20;42595:1;42577:20;:::i;:::-;42572:25;;42611:20;42629:1;42611:20;:::i;:::-;42606:25;;42650:1;42647;42644:8;42641:34;;;42655:18;;:::i;:::-;42641:34;42700:1;42697;42693:9;42685:17;;42517:191;;;;:::o;42714:231::-;42854:34;42850:1;42842:6;42838:14;42831:58;42923:14;42918:2;42910:6;42906:15;42899:39;42714:231;:::o;42951:366::-;43093:3;43114:67;43178:2;43173:3;43114:67;:::i;:::-;43107:74;;43190:93;43279:3;43190:93;:::i;:::-;43308:2;43303:3;43299:12;43292:19;;42951:366;;;:::o;43323:419::-;43489:4;43527:2;43516:9;43512:18;43504:26;;43576:9;43570:4;43566:20;43562:1;43551:9;43547:17;43540:47;43604:131;43730:4;43604:131;:::i;:::-;43596:139;;43323:419;;;:::o;43748:228::-;43888:34;43884:1;43876:6;43872:14;43865:58;43957:11;43952:2;43944:6;43940:15;43933:36;43748:228;:::o;43982:366::-;44124:3;44145:67;44209:2;44204:3;44145:67;:::i;:::-;44138:74;;44221:93;44310:3;44221:93;:::i;:::-;44339:2;44334:3;44330:12;44323:19;;43982:366;;;:::o;44354:419::-;44520:4;44558:2;44547:9;44543:18;44535:26;;44607:9;44601:4;44597:20;44593:1;44582:9;44578:17;44571:47;44635:131;44761:4;44635:131;:::i;:::-;44627:139;;44354:419;;;:::o;44779:223::-;44919:34;44915:1;44907:6;44903:14;44896:58;44988:6;44983:2;44975:6;44971:15;44964:31;44779:223;:::o;45008:366::-;45150:3;45171:67;45235:2;45230:3;45171:67;:::i;:::-;45164:74;;45247:93;45336:3;45247:93;:::i;:::-;45365:2;45360:3;45356:12;45349:19;;45008:366;;;:::o;45380:419::-;45546:4;45584:2;45573:9;45569:18;45561:26;;45633:9;45627:4;45623:20;45619:1;45608:9;45604:17;45597:47;45661:131;45787:4;45661:131;:::i;:::-;45653:139;;45380:419;;;:::o;45805:348::-;45845:7;45868:20;45886:1;45868:20;:::i;:::-;45863:25;;45902:20;45920:1;45902:20;:::i;:::-;45897:25;;46090:1;46022:66;46018:74;46015:1;46012:81;46007:1;46000:9;45993:17;45989:105;45986:131;;;46097:18;;:::i;:::-;45986:131;46145:1;46142;46138:9;46127:20;;45805:348;;;;:::o;46159:180::-;46207:77;46204:1;46197:88;46304:4;46301:1;46294:15;46328:4;46325:1;46318:15;46345:185;46385:1;46402:20;46420:1;46402:20;:::i;:::-;46397:25;;46436:20;46454:1;46436:20;:::i;:::-;46431:25;;46475:1;46465:35;;46480:18;;:::i;:::-;46465:35;46522:1;46519;46515:9;46510:14;;46345:185;;;;:::o;46536:147::-;46637:11;46674:3;46659:18;;46536:147;;;;:::o;46689:114::-;;:::o;46809:398::-;46968:3;46989:83;47070:1;47065:3;46989:83;:::i;:::-;46982:90;;47081:93;47170:3;47081:93;:::i;:::-;47199:1;47194:3;47190:11;47183:18;;46809:398;;;:::o;47213:379::-;47397:3;47419:147;47562:3;47419:147;:::i;:::-;47412:154;;47583:3;47576:10;;47213:379;;;:::o;47598:166::-;47738:18;47734:1;47726:6;47722:14;47715:42;47598:166;:::o;47770:366::-;47912:3;47933:67;47997:2;47992:3;47933:67;:::i;:::-;47926:74;;48009:93;48098:3;48009:93;:::i;:::-;48127:2;48122:3;48118:12;48111:19;;47770:366;;;:::o;48142:419::-;48308:4;48346:2;48335:9;48331:18;48323:26;;48395:9;48389:4;48385:20;48381:1;48370:9;48366:17;48359:47;48423:131;48549:4;48423:131;:::i;:::-;48415:139;;48142:419;;;:::o;48567:237::-;48707:34;48703:1;48695:6;48691:14;48684:58;48776:20;48771:2;48763:6;48759:15;48752:45;48567:237;:::o;48810:366::-;48952:3;48973:67;49037:2;49032:3;48973:67;:::i;:::-;48966:74;;49049:93;49138:3;49049:93;:::i;:::-;49167:2;49162:3;49158:12;49151:19;;48810:366;;;:::o;49182:419::-;49348:4;49386:2;49375:9;49371:18;49363:26;;49435:9;49429:4;49425:20;49421:1;49410:9;49406:17;49399:47;49463:131;49589:4;49463:131;:::i;:::-;49455:139;;49182:419;;;:::o;49607:176::-;49639:1;49656:20;49674:1;49656:20;:::i;:::-;49651:25;;49690:20;49708:1;49690:20;:::i;:::-;49685:25;;49729:1;49719:35;;49734:18;;:::i;:::-;49719:35;49775:1;49772;49768:9;49763:14;;49607:176;;;;:::o;49789:98::-;49840:6;49874:5;49868:12;49858:22;;49789:98;;;:::o;49893:168::-;49976:11;50010:6;50005:3;49998:19;50050:4;50045:3;50041:14;50026:29;;49893:168;;;;:::o;50067:360::-;50153:3;50181:38;50213:5;50181:38;:::i;:::-;50235:70;50298:6;50293:3;50235:70;:::i;:::-;50228:77;;50314:52;50359:6;50354:3;50347:4;50340:5;50336:16;50314:52;:::i;:::-;50391:29;50413:6;50391:29;:::i;:::-;50386:3;50382:39;50375:46;;50157:270;50067:360;;;;:::o;50433:640::-;50628:4;50666:3;50655:9;50651:19;50643:27;;50680:71;50748:1;50737:9;50733:17;50724:6;50680:71;:::i;:::-;50761:72;50829:2;50818:9;50814:18;50805:6;50761:72;:::i;:::-;50843;50911:2;50900:9;50896:18;50887:6;50843:72;:::i;:::-;50962:9;50956:4;50952:20;50947:2;50936:9;50932:18;50925:48;50990:76;51061:4;51052:6;50990:76;:::i;:::-;50982:84;;50433:640;;;;;;;:::o;51079:141::-;51135:5;51166:6;51160:13;51151:22;;51182:32;51208:5;51182:32;:::i;:::-;51079:141;;;;:::o;51226:349::-;51295:6;51344:2;51332:9;51323:7;51319:23;51315:32;51312:119;;;51350:79;;:::i;:::-;51312:119;51470:1;51495:63;51550:7;51541:6;51530:9;51526:22;51495:63;:::i;:::-;51485:73;;51441:127;51226:349;;;;:::o;51581:180::-;51629:77;51626:1;51619:88;51726:4;51723:1;51716:15;51750:4;51747:1;51740:15;51767:182;51907:34;51903:1;51895:6;51891:14;51884:58;51767:182;:::o;51955:366::-;52097:3;52118:67;52182:2;52177:3;52118:67;:::i;:::-;52111:74;;52194:93;52283:3;52194:93;:::i;:::-;52312:2;52307:3;52303:12;52296:19;;51955:366;;;:::o;52327:419::-;52493:4;52531:2;52520:9;52516:18;52508:26;;52580:9;52574:4;52570:20;52566:1;52555:9;52551:17;52544:47;52608:131;52734:4;52608:131;:::i;:::-;52600:139;;52327:419;;;:::o;52752:178::-;52892:30;52888:1;52880:6;52876:14;52869:54;52752:178;:::o;52936:366::-;53078:3;53099:67;53163:2;53158:3;53099:67;:::i;:::-;53092:74;;53175:93;53264:3;53175:93;:::i;:::-;53293:2;53288:3;53284:12;53277:19;;52936:366;;;:::o;53308:419::-;53474:4;53512:2;53501:9;53497:18;53489:26;;53561:9;53555:4;53551:20;53547:1;53536:9;53532:17;53525:47;53589:131;53715:4;53589:131;:::i;:::-;53581:139;;53308:419;;;:::o

Swarm Source

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