ETH Price: $2,442.78 (-8.88%)

Token

Genesis Gradients by Beaming (GNGR)
 

Overview

Max Total Supply

222 GNGR

Holders

171

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 GNGR
0x60DA36B9060911fB1123Cb201402D41EdBFD2D3c
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:
GenesisGradients

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-31
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol



pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol



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

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



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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



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

// File: contracts/beaming/GenesisGradients.sol


pragma solidity >=0.7.0 <0.9.0;




// Genesis Gradients by Beaming

contract GenesisGradients is ERC721Enumerable, ReentrancyGuard, Ownable {
    string baseTokenURI;
    bool public tokenURIFrozen = false;
    address public payoutAddress;
    uint256 public totalTokens;

    uint256 public mintPrice = 0.15 ether;
    // ======== Provenance =========
    string public provenanceHash = "";

    bool public saleIsActive = false;
    bool public preSaleIsActive = false;
    mapping(address => bool) private presaleList;

    constructor(
        string memory name,
        string memory symbol,
        uint256 _totalTokens,
        address _payoutAddress
    ) ERC721(name, symbol) {
        baseTokenURI;
        totalTokens = _totalTokens;
        payoutAddress = _payoutAddress;
        for (uint256 i = 0; i < 41; i++) {
            _safeMint(payoutAddress, nextTokenId());
        }
    }

    function nextTokenId() internal view returns (uint256) {
        return totalSupply() + 1;
    }

    function addToAllowList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Can't mint to the null address");
            presaleList[addresses[i]] = true;
        }
    }

    function withdraw() external onlyOwner {
        payable(payoutAddress).transfer(address(this).balance);
    }

    function mint() external payable nonReentrant {
        require(saleIsActive, "Sale not active");
        require(msg.value >= mintPrice, "More eth required");
        require(totalSupply() < totalTokens, "Sold out");
        require(balanceOf(_msgSender()) == 0, "Only 1 per wallet");
        _safeMint(_msgSender(), nextTokenId());
    }

    function mintPresale() external payable nonReentrant {
        require(preSaleIsActive, "Presale not active");
        require(msg.value >= mintPrice, 'More eth required');
        require(totalSupply() < totalTokens, "Sold out");
        require(presaleList[_msgSender()] == true, "Not on presale list");
        require(balanceOf(_msgSender()) == 0, "Only 1 per wallet");
        presaleList[_msgSender()] = false;
        _safeMint(_msgSender(), nextTokenId());
    }

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

    function freezeBaseURI() public onlyOwner {
        tokenURIFrozen = true;
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        require(tokenURIFrozen == false, 'Token URIs are Frozen');
        baseTokenURI = baseURI;
    }

    function setPayoutAddress(address _payoutAddress) public onlyOwner {
        payoutAddress = _payoutAddress;
    }


    // ======== Provenance =========
    function setProvenanceHash(string memory _provenanceHash) public onlyOwner {
        provenanceHash = _provenanceHash;
    }

    function flipSaleState() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function flipPreSaleState() public onlyOwner {
        preSaleIsActive = !preSaleIsActive;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        mintPrice = _newPrice;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"internalType":"address","name":"_payoutAddress","type":"address"}],"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":"addresses","type":"address[]"}],"name":"addToAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeBaseURI","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":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"payoutAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_payoutAddress","type":"address"}],"name":"setPayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600d60006101000a81548160ff021916908315150217905550670214e8348c4f0000600f5560405180602001604052806000815250601090805190602001906200005292919062000cbb565b506000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200009657600080fd5b5060405162005fb838038062005fb88339818101604052810190620000bc919062000e60565b83838160009080519060200190620000d692919062000cbb565b508060019080519060200190620000ef92919062000cbb565b5050506001600a819055506200011a6200010e620001d360201b60201c565b620001db60201b60201c565b81600e8190555080600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b6029811015620001c857620001b2600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620001a6620002a160201b60201c565b620002c660201b60201c565b8080620001bf906200131b565b91505062000165565b5050505050620015b7565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001620002b5620002ec60201b60201c565b620002c1919062001177565b905090565b620002e8828260405180602001604052806000815250620002f960201b60201c565b5050565b6000600880549050905090565b6200030b83836200036760201b60201c565b6200032060008484846200054d60201b60201c565b62000362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003599062001063565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d190620010c9565b60405180910390fd5b620003eb816200070760201b60201c565b156200042e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004259062001085565b60405180910390fd5b62000442600083836200077360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000494919062001177565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200057b8473ffffffffffffffffffffffffffffffffffffffff16620008ba60201b62001fbe1760201c565b15620006fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005ad620001d360201b60201c565b8786866040518563ffffffff1660e01b8152600401620005d194939291906200100f565b602060405180830381600087803b158015620005ec57600080fd5b505af19250505080156200062057506040513d601f19601f820116820180604052508101906200061d919062000e2e565b60015b620006a9573d806000811462000653576040519150601f19603f3d011682016040523d82523d6000602084013e62000658565b606091505b50600081511415620006a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006989062001063565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006ff565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200078b838383620008cd60201b62001fd11760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620007d857620007d281620008d260201b60201c565b62000820565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200081f576200081e83826200091b60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200086d57620008678162000a9860201b60201c565b620008b5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008b457620008b3828262000b7460201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009358462000c0060201b620012d91760201c565b620009419190620011d4565b905060006007600084815260200190815260200160002054905081811462000a27576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000aae9190620011d4565b905060006009600084815260200190815260200160002054905060006008838154811062000ae15762000ae0620013f6565b5b90600052602060002001549050806008838154811062000b065762000b05620013f6565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000b585762000b57620013c7565b5b6001900381819060005260206000200160009055905550505050565b600062000b8c8362000c0060201b620012d91760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6b90620010a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000cc990620012af565b90600052602060002090601f01602090048101928262000ced576000855562000d39565b82601f1062000d0857805160ff191683800117855562000d39565b8280016001018555821562000d39579182015b8281111562000d3857825182559160200191906001019062000d1b565b5b50905062000d48919062000d4c565b5090565b5b8082111562000d6757600081600090555060010162000d4d565b5090565b600062000d8262000d7c8462001114565b620010eb565b90508281526020810184848401111562000da15762000da062001459565b5b62000dae84828562001279565b509392505050565b60008151905062000dc78162001569565b92915050565b60008151905062000dde8162001583565b92915050565b600082601f83011262000dfc5762000dfb62001454565b5b815162000e0e84826020860162000d6b565b91505092915050565b60008151905062000e28816200159d565b92915050565b60006020828403121562000e475762000e4662001463565b5b600062000e578482850162000dcd565b91505092915050565b6000806000806080858703121562000e7d5762000e7c62001463565b5b600085015167ffffffffffffffff81111562000e9e5762000e9d6200145e565b5b62000eac8782880162000de4565b945050602085015167ffffffffffffffff81111562000ed05762000ecf6200145e565b5b62000ede8782880162000de4565b935050604062000ef18782880162000e17565b925050606062000f048782880162000db6565b91505092959194509250565b62000f1b816200120f565b82525050565b600062000f2e826200114a565b62000f3a818562001155565b935062000f4c81856020860162001279565b62000f578162001468565b840191505092915050565b600062000f7160328362001166565b915062000f7e8262001479565b604082019050919050565b600062000f98601c8362001166565b915062000fa582620014c8565b602082019050919050565b600062000fbf602a8362001166565b915062000fcc82620014f1565b604082019050919050565b600062000fe660208362001166565b915062000ff38262001540565b602082019050919050565b62001009816200126f565b82525050565b600060808201905062001026600083018762000f10565b62001035602083018662000f10565b62001044604083018562000ffe565b818103606083015262001058818462000f21565b905095945050505050565b600060208201905081810360008301526200107e8162000f62565b9050919050565b60006020820190508181036000830152620010a08162000f89565b9050919050565b60006020820190508181036000830152620010c28162000fb0565b9050919050565b60006020820190508181036000830152620010e48162000fd7565b9050919050565b6000620010f76200110a565b9050620011058282620012e5565b919050565b6000604051905090565b600067ffffffffffffffff82111562001132576200113162001425565b5b6200113d8262001468565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001184826200126f565b915062001191836200126f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011c957620011c862001369565b5b828201905092915050565b6000620011e1826200126f565b9150620011ee836200126f565b92508282101562001204576200120362001369565b5b828203905092915050565b60006200121c826200124f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620012995780820151818401526020810190506200127c565b83811115620012a9576000848401525b50505050565b60006002820490506001821680620012c857607f821691505b60208210811415620012df57620012de62001398565b5b50919050565b620012f08262001468565b810181811067ffffffffffffffff8211171562001312576200131162001425565b5b80604052505050565b600062001328826200126f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200135e576200135d62001369565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62001574816200120f565b81146200158057600080fd5b50565b6200158e8162001223565b81146200159a57600080fd5b50565b620015a8816200126f565b8114620015b457600080fd5b50565b6149f180620015c76000396000f3fe60806040526004361061021a5760003560e01c80636817c76c11610123578063b88d4fde116100ab578063e7bc82081161006f578063e7bc82081461076b578063e985e9c514610782578063eb8d2444146107bf578063f0325549146107ea578063f2fde38b146108015761021a565b8063b88d4fde146106a5578063c29de630146106ce578063c6ab67a3146106f9578063c87b56dd14610724578063db599698146107615761021a565b80637e1c0c09116100f25780637e1c0c09146105d25780638da5cb5b146105fd57806391b7f5ed1461062857806395d89b4114610651578063a22cb4651461067c5761021a565b80636817c76c1461052a57806370a0823114610555578063715018a6146105925780637263cfe2146105a95761021a565b80632f745c59116101a657806342842e0e1161017557806342842e0e146104335780634f6ccce71461045c57806355f804b3146104995780635b8d02d7146104c25780636352211e146104ed5761021a565b80632f745c591461039f57806333ea51a8146103dc57806334918dfd146104055780633ccfd60b1461041c5761021a565b806310969523116101ed57806310969523146102ed5780631249c58b1461031657806318160ddd146103205780631f0234d81461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613503565b61082a565b6040516102539190613adf565b60405180910390f35b34801561026857600080fd5b506102716108a4565b60405161027e9190613afa565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906135a6565b610936565b6040516102bb9190613a78565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613476565b6109bb565b005b3480156102f957600080fd5b50610314600480360381019061030f919061355d565b610ad3565b005b61031e610b69565b005b34801561032c57600080fd5b50610335610d0a565b6040516103429190613e7c565b60405180910390f35b34801561035757600080fd5b50610360610d17565b60405161036d9190613adf565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190613360565b610d2a565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190613476565b610d8a565b6040516103d39190613e7c565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906132f3565b610e2f565b005b34801561041157600080fd5b5061041a610eef565b005b34801561042857600080fd5b50610431610f97565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613360565b61107e565b005b34801561046857600080fd5b50610483600480360381019061047e91906135a6565b61109e565b6040516104909190613e7c565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb919061355d565b61110f565b005b3480156104ce57600080fd5b506104d76111fb565b6040516104e49190613a78565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906135a6565b611221565b6040516105219190613a78565b60405180910390f35b34801561053657600080fd5b5061053f6112d3565b60405161054c9190613e7c565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906132f3565b6112d9565b6040516105899190613e7c565b60405180910390f35b34801561059e57600080fd5b506105a7611391565b005b3480156105b557600080fd5b506105d060048036038101906105cb91906134b6565b611419565b005b3480156105de57600080fd5b506105e76115d1565b6040516105f49190613e7c565b60405180910390f35b34801561060957600080fd5b506106126115d7565b60405161061f9190613a78565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906135a6565b611601565b005b34801561065d57600080fd5b50610666611687565b6040516106739190613afa565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613436565b611719565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906133b3565b61189a565b005b3480156106da57600080fd5b506106e36118fc565b6040516106f09190613adf565b60405180910390f35b34801561070557600080fd5b5061070e61190f565b60405161071b9190613afa565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906135a6565b61199d565b6040516107589190613afa565b60405180910390f35b610769611a44565b005b34801561077757600080fd5b50610780611cde565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613320565b611d77565b6040516107b69190613adf565b60405180910390f35b3480156107cb57600080fd5b506107d4611e0b565b6040516107e19190613adf565b60405180910390f35b3480156107f657600080fd5b506107ff611e1e565b005b34801561080d57600080fd5b50610828600480360381019061082391906132f3565b611ec6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089d575061089c82611fd6565b5b9050919050565b6060600080546108b3906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546108df906140d2565b801561092c5780601f106109015761010080835404028352916020019161092c565b820191906000526020600020905b81548152906001019060200180831161090f57829003601f168201915b5050505050905090565b6000610941826120b8565b610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790613cfc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611221565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a56612124565b73ffffffffffffffffffffffffffffffffffffffff161480610a855750610a8481610a7f612124565b611d77565b5b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613c7c565b60405180910390fd5b610ace838361212c565b505050565b610adb612124565b73ffffffffffffffffffffffffffffffffffffffff16610af96115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613d3c565b60405180910390fd5b8060109080519060200190610b659291906130b1565b5050565b6002600a541415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613e5c565b60405180910390fd5b6002600a81905550601160009054906101000a900460ff16610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613c5c565b60405180910390fd5b600f54341015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613ddc565b60405180910390fd5b600e54610c56610d0a565b10610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613e1c565b60405180910390fd5b6000610ca8610ca3612124565b6112d9565b14610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613bbc565b60405180910390fd5b610d00610cf3612124565b610cfb6121e5565b612200565b6001600a81905550565b6000600880549050905090565b601160019054906101000a900460ff1681565b610d3b610d35612124565b8261221e565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613dfc565b60405180910390fd5b610d858383836122fc565b505050565b6000610d95836112d9565b8210610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613b3c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e37612124565b73ffffffffffffffffffffffffffffffffffffffff16610e556115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290613d3c565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ef7612124565b73ffffffffffffffffffffffffffffffffffffffff16610f156115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613d3c565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b610f9f612124565b73ffffffffffffffffffffffffffffffffffffffff16610fbd6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90613d3c565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107b573d6000803e3d6000fd5b50565b6110998383836040518060200160405280600081525061189a565b505050565b60006110a8610d0a565b82106110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613e3c565b60405180910390fd5b600882815481106110fd576110fc61426b565b5b90600052602060002001549050919050565b611117612124565b73ffffffffffffffffffffffffffffffffffffffff166111356115d7565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613d3c565b60405180910390fd5b60001515600d60009054906101000a900460ff161515146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890613d1c565b60405180910390fd5b80600c90805190602001906111f79291906130b1565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613cbc565b60405180910390fd5b80915050919050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613c9c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611399612124565b73ffffffffffffffffffffffffffffffffffffffff166113b76115d7565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613d3c565b60405180910390fd5b6114176000612558565b565b611421612124565b73ffffffffffffffffffffffffffffffffffffffff1661143f6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613d3c565b60405180910390fd5b60005b828290508110156115cc57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114ce576114cd61426b565b5b90506020020160208101906114e391906132f3565b73ffffffffffffffffffffffffffffffffffffffff16141561153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190613b1c565b60405180910390fd5b6001601260008585858181106115535761155261426b565b5b905060200201602081019061156891906132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115c490614135565b915050611498565b505050565b600e5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611609612124565b73ffffffffffffffffffffffffffffffffffffffff166116276115d7565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613d3c565b60405180910390fd5b80600f8190555050565b606060018054611696906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546116c2906140d2565b801561170f5780601f106116e45761010080835404028352916020019161170f565b820191906000526020600020905b8154815290600101906020018083116116f257829003601f168201915b5050505050905090565b611721612124565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613bfc565b60405180910390fd5b806005600061179c612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611849612124565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188e9190613adf565b60405180910390a35050565b6118ab6118a5612124565b8361221e565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613dfc565b60405180910390fd5b6118f68484848461261e565b50505050565b600d60009054906101000a900460ff1681565b6010805461191c906140d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611948906140d2565b80156119955780601f1061196a57610100808354040283529160200191611995565b820191906000526020600020905b81548152906001019060200180831161197857829003601f168201915b505050505081565b60606119a8826120b8565b6119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90613d9c565b60405180910390fd5b60006119f161267a565b90506000815111611a115760405180602001604052806000815250611a3c565b80611a1b8461270c565b604051602001611a2c929190613a54565b6040516020818303038152906040525b915050919050565b6002600a541415611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613e5c565b60405180910390fd5b6002600a81905550601160019054906101000a900460ff16611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613c1c565b60405180910390fd5b600f54341015611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ddc565b60405180910390fd5b600e54611b31610d0a565b10611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613e1c565b60405180910390fd5b6001151560126000611b81612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290613d5c565b60405180910390fd5b6000611c1d611c18612124565b6112d9565b14611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613bbc565b60405180910390fd5b600060126000611c6b612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd4611cc7612124565b611ccf6121e5565b612200565b6001600a81905550565b611ce6612124565b73ffffffffffffffffffffffffffffffffffffffff16611d046115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613d3c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b611e26612124565b73ffffffffffffffffffffffffffffffffffffffff16611e446115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613d3c565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b611ece612124565b73ffffffffffffffffffffffffffffffffffffffff16611eec6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990613d3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990613b7c565b60405180910390fd5b611fbb81612558565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b157506120b08261286d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661219f83611221565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060016121f1610d0a565b6121fb9190613f61565b905090565b61221a8282604051806020016040528060008152506128d7565b5050565b6000612229826120b8565b612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f90613c3c565b60405180910390fd5b600061227383611221565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e257508373ffffffffffffffffffffffffffffffffffffffff166122ca84610936565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f357506122f28185611d77565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231c82611221565b73ffffffffffffffffffffffffffffffffffffffff1614612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613bdc565b60405180910390fd5b6123ed838383612932565b6123f860008261212c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124489190613fe8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249f9190613f61565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126298484846122fc565b61263584848484612a46565b612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90613b5c565b60405180910390fd5b50505050565b6060600c8054612689906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546126b5906140d2565b80156127025780601f106126d757610100808354040283529160200191612702565b820191906000526020600020905b8154815290600101906020018083116126e557829003601f168201915b5050505050905090565b60606000821415612754576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612868565b600082905060005b6000821461278657808061276f90614135565b915050600a8261277f9190613fb7565b915061275c565b60008167ffffffffffffffff8111156127a2576127a161429a565b5b6040519080825280601f01601f1916602001820160405280156127d45781602001600182028036833780820191505090505b5090505b60008514612861576001826127ed9190613fe8565b9150600a856127fc919061417e565b60306128089190613f61565b60f81b81838151811061281e5761281d61426b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561285a9190613fb7565b94506127d8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128e18383612bdd565b6128ee6000848484612a46565b61292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490613b5c565b60405180910390fd5b505050565b61293d838383611fd1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129805761297b81612dab565b6129bf565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129be576129bd8382612df4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a02576129fd81612f61565b612a41565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a4057612a3f8282613032565b5b5b505050565b6000612a678473ffffffffffffffffffffffffffffffffffffffff16611fbe565b15612bd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a90612124565b8786866040518563ffffffff1660e01b8152600401612ab29493929190613a93565b602060405180830381600087803b158015612acc57600080fd5b505af1925050508015612afd57506040513d601f19601f82011682018060405250810190612afa9190613530565b60015b612b80573d8060008114612b2d576040519150601f19603f3d011682016040523d82523d6000602084013e612b32565b606091505b50600081511415612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90613b5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd5565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490613cdc565b60405180910390fd5b612c56816120b8565b15612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90613b9c565b60405180910390fd5b612ca260008383612932565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf29190613f61565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e01846112d9565b612e0b9190613fe8565b9050600060076000848152602001908152602001600020549050818114612ef0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f759190613fe8565b9050600060096000848152602001908152602001600020549050600060088381548110612fa557612fa461426b565b5b906000526020600020015490508060088381548110612fc757612fc661426b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130165761301561423c565b5b6001900381819060005260206000200160009055905550505050565b600061303d836112d9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130bd906140d2565b90600052602060002090601f0160209004810192826130df5760008555613126565b82601f106130f857805160ff1916838001178555613126565b82800160010185558215613126579182015b8281111561312557825182559160200191906001019061310a565b5b5090506131339190613137565b5090565b5b80821115613150576000816000905550600101613138565b5090565b600061316761316284613ebc565b613e97565b905082815260208101848484011115613183576131826142d8565b5b61318e848285614090565b509392505050565b60006131a96131a484613eed565b613e97565b9050828152602081018484840111156131c5576131c46142d8565b5b6131d0848285614090565b509392505050565b6000813590506131e78161495f565b92915050565b60008083601f840112613203576132026142ce565b5b8235905067ffffffffffffffff8111156132205761321f6142c9565b5b60208301915083602082028301111561323c5761323b6142d3565b5b9250929050565b60008135905061325281614976565b92915050565b6000813590506132678161498d565b92915050565b60008151905061327c8161498d565b92915050565b600082601f830112613297576132966142ce565b5b81356132a7848260208601613154565b91505092915050565b600082601f8301126132c5576132c46142ce565b5b81356132d5848260208601613196565b91505092915050565b6000813590506132ed816149a4565b92915050565b600060208284031215613309576133086142e2565b5b6000613317848285016131d8565b91505092915050565b60008060408385031215613337576133366142e2565b5b6000613345858286016131d8565b9250506020613356858286016131d8565b9150509250929050565b600080600060608486031215613379576133786142e2565b5b6000613387868287016131d8565b9350506020613398868287016131d8565b92505060406133a9868287016132de565b9150509250925092565b600080600080608085870312156133cd576133cc6142e2565b5b60006133db878288016131d8565b94505060206133ec878288016131d8565b93505060406133fd878288016132de565b925050606085013567ffffffffffffffff81111561341e5761341d6142dd565b5b61342a87828801613282565b91505092959194509250565b6000806040838503121561344d5761344c6142e2565b5b600061345b858286016131d8565b925050602061346c85828601613243565b9150509250929050565b6000806040838503121561348d5761348c6142e2565b5b600061349b858286016131d8565b92505060206134ac858286016132de565b9150509250929050565b600080602083850312156134cd576134cc6142e2565b5b600083013567ffffffffffffffff8111156134eb576134ea6142dd565b5b6134f7858286016131ed565b92509250509250929050565b600060208284031215613519576135186142e2565b5b600061352784828501613258565b91505092915050565b600060208284031215613546576135456142e2565b5b60006135548482850161326d565b91505092915050565b600060208284031215613573576135726142e2565b5b600082013567ffffffffffffffff811115613591576135906142dd565b5b61359d848285016132b0565b91505092915050565b6000602082840312156135bc576135bb6142e2565b5b60006135ca848285016132de565b91505092915050565b6135dc8161401c565b82525050565b6135eb8161402e565b82525050565b60006135fc82613f1e565b6136068185613f34565b935061361681856020860161409f565b61361f816142e7565b840191505092915050565b600061363582613f29565b61363f8185613f45565b935061364f81856020860161409f565b613658816142e7565b840191505092915050565b600061366e82613f29565b6136788185613f56565b935061368881856020860161409f565b80840191505092915050565b60006136a1601e83613f45565b91506136ac826142f8565b602082019050919050565b60006136c4602b83613f45565b91506136cf82614321565b604082019050919050565b60006136e7603283613f45565b91506136f282614370565b604082019050919050565b600061370a602683613f45565b9150613715826143bf565b604082019050919050565b600061372d601c83613f45565b91506137388261440e565b602082019050919050565b6000613750601183613f45565b915061375b82614437565b602082019050919050565b6000613773602483613f45565b915061377e82614460565b604082019050919050565b6000613796601983613f45565b91506137a1826144af565b602082019050919050565b60006137b9601283613f45565b91506137c4826144d8565b602082019050919050565b60006137dc602c83613f45565b91506137e782614501565b604082019050919050565b60006137ff600f83613f45565b915061380a82614550565b602082019050919050565b6000613822603883613f45565b915061382d82614579565b604082019050919050565b6000613845602a83613f45565b9150613850826145c8565b604082019050919050565b6000613868602983613f45565b915061387382614617565b604082019050919050565b600061388b602083613f45565b915061389682614666565b602082019050919050565b60006138ae602c83613f45565b91506138b98261468f565b604082019050919050565b60006138d1601583613f45565b91506138dc826146de565b602082019050919050565b60006138f4602083613f45565b91506138ff82614707565b602082019050919050565b6000613917601383613f45565b915061392282614730565b602082019050919050565b600061393a602983613f45565b915061394582614759565b604082019050919050565b600061395d602f83613f45565b9150613968826147a8565b604082019050919050565b6000613980602183613f45565b915061398b826147f7565b604082019050919050565b60006139a3601183613f45565b91506139ae82614846565b602082019050919050565b60006139c6603183613f45565b91506139d18261486f565b604082019050919050565b60006139e9600883613f45565b91506139f4826148be565b602082019050919050565b6000613a0c602c83613f45565b9150613a17826148e7565b604082019050919050565b6000613a2f601f83613f45565b9150613a3a82614936565b602082019050919050565b613a4e81614086565b82525050565b6000613a608285613663565b9150613a6c8284613663565b91508190509392505050565b6000602082019050613a8d60008301846135d3565b92915050565b6000608082019050613aa860008301876135d3565b613ab560208301866135d3565b613ac26040830185613a45565b8181036060830152613ad481846135f1565b905095945050505050565b6000602082019050613af460008301846135e2565b92915050565b60006020820190508181036000830152613b14818461362a565b905092915050565b60006020820190508181036000830152613b3581613694565b9050919050565b60006020820190508181036000830152613b55816136b7565b9050919050565b60006020820190508181036000830152613b75816136da565b9050919050565b60006020820190508181036000830152613b95816136fd565b9050919050565b60006020820190508181036000830152613bb581613720565b9050919050565b60006020820190508181036000830152613bd581613743565b9050919050565b60006020820190508181036000830152613bf581613766565b9050919050565b60006020820190508181036000830152613c1581613789565b9050919050565b60006020820190508181036000830152613c35816137ac565b9050919050565b60006020820190508181036000830152613c55816137cf565b9050919050565b60006020820190508181036000830152613c75816137f2565b9050919050565b60006020820190508181036000830152613c9581613815565b9050919050565b60006020820190508181036000830152613cb581613838565b9050919050565b60006020820190508181036000830152613cd58161385b565b9050919050565b60006020820190508181036000830152613cf58161387e565b9050919050565b60006020820190508181036000830152613d15816138a1565b9050919050565b60006020820190508181036000830152613d35816138c4565b9050919050565b60006020820190508181036000830152613d55816138e7565b9050919050565b60006020820190508181036000830152613d758161390a565b9050919050565b60006020820190508181036000830152613d958161392d565b9050919050565b60006020820190508181036000830152613db581613950565b9050919050565b60006020820190508181036000830152613dd581613973565b9050919050565b60006020820190508181036000830152613df581613996565b9050919050565b60006020820190508181036000830152613e15816139b9565b9050919050565b60006020820190508181036000830152613e35816139dc565b9050919050565b60006020820190508181036000830152613e55816139ff565b9050919050565b60006020820190508181036000830152613e7581613a22565b9050919050565b6000602082019050613e916000830184613a45565b92915050565b6000613ea1613eb2565b9050613ead8282614104565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed757613ed661429a565b5b613ee0826142e7565b9050602081019050919050565b600067ffffffffffffffff821115613f0857613f0761429a565b5b613f11826142e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f6c82614086565b9150613f7783614086565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fac57613fab6141af565b5b828201905092915050565b6000613fc282614086565b9150613fcd83614086565b925082613fdd57613fdc6141de565b5b828204905092915050565b6000613ff382614086565b9150613ffe83614086565b925082821015614011576140106141af565b5b828203905092915050565b600061402782614066565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140bd5780820151818401526020810190506140a2565b838111156140cc576000848401525b50505050565b600060028204905060018216806140ea57607f821691505b602082108114156140fe576140fd61420d565b5b50919050565b61410d826142e7565b810181811067ffffffffffffffff8211171561412c5761412b61429a565b5b80604052505050565b600061414082614086565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614173576141726141af565b5b600182019050919050565b600061418982614086565b915061419483614086565b9250826141a4576141a36141de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e2774206d696e7420746f20746865206e756c6c20616464726573730000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c792031207065722077616c6c6574000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f546f6b656e2055524973206172652046726f7a656e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6f726520657468207265717569726564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6149688161401c565b811461497357600080fd5b50565b61497f8161402e565b811461498a57600080fd5b50565b6149968161403a565b81146149a157600080fd5b50565b6149ad81614086565b81146149b857600080fd5b5056fea2646970667358221220eceff44b10945f0bc84df88a020849c1434abd49fe8e8ca49f9fdc9a1ef0e7da64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000de000000000000000000000000ed2f4b1e08e010cc72d4b8dde7d565a83344c328000000000000000000000000000000000000000000000000000000000000001c47656e65736973204772616469656e7473206279204265616d696e67000000000000000000000000000000000000000000000000000000000000000000000004474e475200000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636817c76c11610123578063b88d4fde116100ab578063e7bc82081161006f578063e7bc82081461076b578063e985e9c514610782578063eb8d2444146107bf578063f0325549146107ea578063f2fde38b146108015761021a565b8063b88d4fde146106a5578063c29de630146106ce578063c6ab67a3146106f9578063c87b56dd14610724578063db599698146107615761021a565b80637e1c0c09116100f25780637e1c0c09146105d25780638da5cb5b146105fd57806391b7f5ed1461062857806395d89b4114610651578063a22cb4651461067c5761021a565b80636817c76c1461052a57806370a0823114610555578063715018a6146105925780637263cfe2146105a95761021a565b80632f745c59116101a657806342842e0e1161017557806342842e0e146104335780634f6ccce71461045c57806355f804b3146104995780635b8d02d7146104c25780636352211e146104ed5761021a565b80632f745c591461039f57806333ea51a8146103dc57806334918dfd146104055780633ccfd60b1461041c5761021a565b806310969523116101ed57806310969523146102ed5780631249c58b1461031657806318160ddd146103205780631f0234d81461034b57806323b872dd146103765761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613503565b61082a565b6040516102539190613adf565b60405180910390f35b34801561026857600080fd5b506102716108a4565b60405161027e9190613afa565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906135a6565b610936565b6040516102bb9190613a78565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613476565b6109bb565b005b3480156102f957600080fd5b50610314600480360381019061030f919061355d565b610ad3565b005b61031e610b69565b005b34801561032c57600080fd5b50610335610d0a565b6040516103429190613e7c565b60405180910390f35b34801561035757600080fd5b50610360610d17565b60405161036d9190613adf565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190613360565b610d2a565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190613476565b610d8a565b6040516103d39190613e7c565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906132f3565b610e2f565b005b34801561041157600080fd5b5061041a610eef565b005b34801561042857600080fd5b50610431610f97565b005b34801561043f57600080fd5b5061045a60048036038101906104559190613360565b61107e565b005b34801561046857600080fd5b50610483600480360381019061047e91906135a6565b61109e565b6040516104909190613e7c565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb919061355d565b61110f565b005b3480156104ce57600080fd5b506104d76111fb565b6040516104e49190613a78565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f91906135a6565b611221565b6040516105219190613a78565b60405180910390f35b34801561053657600080fd5b5061053f6112d3565b60405161054c9190613e7c565b60405180910390f35b34801561056157600080fd5b5061057c600480360381019061057791906132f3565b6112d9565b6040516105899190613e7c565b60405180910390f35b34801561059e57600080fd5b506105a7611391565b005b3480156105b557600080fd5b506105d060048036038101906105cb91906134b6565b611419565b005b3480156105de57600080fd5b506105e76115d1565b6040516105f49190613e7c565b60405180910390f35b34801561060957600080fd5b506106126115d7565b60405161061f9190613a78565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a91906135a6565b611601565b005b34801561065d57600080fd5b50610666611687565b6040516106739190613afa565b60405180910390f35b34801561068857600080fd5b506106a3600480360381019061069e9190613436565b611719565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906133b3565b61189a565b005b3480156106da57600080fd5b506106e36118fc565b6040516106f09190613adf565b60405180910390f35b34801561070557600080fd5b5061070e61190f565b60405161071b9190613afa565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906135a6565b61199d565b6040516107589190613afa565b60405180910390f35b610769611a44565b005b34801561077757600080fd5b50610780611cde565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613320565b611d77565b6040516107b69190613adf565b60405180910390f35b3480156107cb57600080fd5b506107d4611e0b565b6040516107e19190613adf565b60405180910390f35b3480156107f657600080fd5b506107ff611e1e565b005b34801561080d57600080fd5b50610828600480360381019061082391906132f3565b611ec6565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089d575061089c82611fd6565b5b9050919050565b6060600080546108b3906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546108df906140d2565b801561092c5780601f106109015761010080835404028352916020019161092c565b820191906000526020600020905b81548152906001019060200180831161090f57829003601f168201915b5050505050905090565b6000610941826120b8565b610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790613cfc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611221565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90613dbc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a56612124565b73ffffffffffffffffffffffffffffffffffffffff161480610a855750610a8481610a7f612124565b611d77565b5b610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb90613c7c565b60405180910390fd5b610ace838361212c565b505050565b610adb612124565b73ffffffffffffffffffffffffffffffffffffffff16610af96115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613d3c565b60405180910390fd5b8060109080519060200190610b659291906130b1565b5050565b6002600a541415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690613e5c565b60405180910390fd5b6002600a81905550601160009054906101000a900460ff16610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613c5c565b60405180910390fd5b600f54341015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613ddc565b60405180910390fd5b600e54610c56610d0a565b10610c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8d90613e1c565b60405180910390fd5b6000610ca8610ca3612124565b6112d9565b14610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613bbc565b60405180910390fd5b610d00610cf3612124565b610cfb6121e5565b612200565b6001600a81905550565b6000600880549050905090565b601160019054906101000a900460ff1681565b610d3b610d35612124565b8261221e565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613dfc565b60405180910390fd5b610d858383836122fc565b505050565b6000610d95836112d9565b8210610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90613b3c565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e37612124565b73ffffffffffffffffffffffffffffffffffffffff16610e556115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290613d3c565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610ef7612124565b73ffffffffffffffffffffffffffffffffffffffff16610f156115d7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6290613d3c565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b610f9f612124565b73ffffffffffffffffffffffffffffffffffffffff16610fbd6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90613d3c565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561107b573d6000803e3d6000fd5b50565b6110998383836040518060200160405280600081525061189a565b505050565b60006110a8610d0a565b82106110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613e3c565b60405180910390fd5b600882815481106110fd576110fc61426b565b5b90600052602060002001549050919050565b611117612124565b73ffffffffffffffffffffffffffffffffffffffff166111356115d7565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613d3c565b60405180910390fd5b60001515600d60009054906101000a900460ff161515146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890613d1c565b60405180910390fd5b80600c90805190602001906111f79291906130b1565b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613cbc565b60405180910390fd5b80915050919050565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613c9c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611399612124565b73ffffffffffffffffffffffffffffffffffffffff166113b76115d7565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490613d3c565b60405180910390fd5b6114176000612558565b565b611421612124565b73ffffffffffffffffffffffffffffffffffffffff1661143f6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613d3c565b60405180910390fd5b60005b828290508110156115cc57600073ffffffffffffffffffffffffffffffffffffffff168383838181106114ce576114cd61426b565b5b90506020020160208101906114e391906132f3565b73ffffffffffffffffffffffffffffffffffffffff16141561153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190613b1c565b60405180910390fd5b6001601260008585858181106115535761155261426b565b5b905060200201602081019061156891906132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115c490614135565b915050611498565b505050565b600e5481565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611609612124565b73ffffffffffffffffffffffffffffffffffffffff166116276115d7565b73ffffffffffffffffffffffffffffffffffffffff161461167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613d3c565b60405180910390fd5b80600f8190555050565b606060018054611696906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546116c2906140d2565b801561170f5780601f106116e45761010080835404028352916020019161170f565b820191906000526020600020905b8154815290600101906020018083116116f257829003601f168201915b5050505050905090565b611721612124565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613bfc565b60405180910390fd5b806005600061179c612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611849612124565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161188e9190613adf565b60405180910390a35050565b6118ab6118a5612124565b8361221e565b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190613dfc565b60405180910390fd5b6118f68484848461261e565b50505050565b600d60009054906101000a900460ff1681565b6010805461191c906140d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611948906140d2565b80156119955780601f1061196a57610100808354040283529160200191611995565b820191906000526020600020905b81548152906001019060200180831161197857829003601f168201915b505050505081565b60606119a8826120b8565b6119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de90613d9c565b60405180910390fd5b60006119f161267a565b90506000815111611a115760405180602001604052806000815250611a3c565b80611a1b8461270c565b604051602001611a2c929190613a54565b6040516020818303038152906040525b915050919050565b6002600a541415611a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8190613e5c565b60405180910390fd5b6002600a81905550601160019054906101000a900460ff16611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890613c1c565b60405180910390fd5b600f54341015611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90613ddc565b60405180910390fd5b600e54611b31610d0a565b10611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6890613e1c565b60405180910390fd5b6001151560126000611b81612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290613d5c565b60405180910390fd5b6000611c1d611c18612124565b6112d9565b14611c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5490613bbc565b60405180910390fd5b600060126000611c6b612124565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cd4611cc7612124565b611ccf6121e5565b612200565b6001600a81905550565b611ce6612124565b73ffffffffffffffffffffffffffffffffffffffff16611d046115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613d3c565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b611e26612124565b73ffffffffffffffffffffffffffffffffffffffff16611e446115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190613d3c565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b611ece612124565b73ffffffffffffffffffffffffffffffffffffffff16611eec6115d7565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990613d3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990613b7c565b60405180910390fd5b611fbb81612558565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120b157506120b08261286d565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661219f83611221565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600060016121f1610d0a565b6121fb9190613f61565b905090565b61221a8282604051806020016040528060008152506128d7565b5050565b6000612229826120b8565b612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f90613c3c565b60405180910390fd5b600061227383611221565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122e257508373ffffffffffffffffffffffffffffffffffffffff166122ca84610936565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f357506122f28185611d77565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661231c82611221565b73ffffffffffffffffffffffffffffffffffffffff1614612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613d7c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613bdc565b60405180910390fd5b6123ed838383612932565b6123f860008261212c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124489190613fe8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461249f9190613f61565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126298484846122fc565b61263584848484612a46565b612674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266b90613b5c565b60405180910390fd5b50505050565b6060600c8054612689906140d2565b80601f01602080910402602001604051908101604052809291908181526020018280546126b5906140d2565b80156127025780601f106126d757610100808354040283529160200191612702565b820191906000526020600020905b8154815290600101906020018083116126e557829003601f168201915b5050505050905090565b60606000821415612754576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612868565b600082905060005b6000821461278657808061276f90614135565b915050600a8261277f9190613fb7565b915061275c565b60008167ffffffffffffffff8111156127a2576127a161429a565b5b6040519080825280601f01601f1916602001820160405280156127d45781602001600182028036833780820191505090505b5090505b60008514612861576001826127ed9190613fe8565b9150600a856127fc919061417e565b60306128089190613f61565b60f81b81838151811061281e5761281d61426b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561285a9190613fb7565b94506127d8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128e18383612bdd565b6128ee6000848484612a46565b61292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490613b5c565b60405180910390fd5b505050565b61293d838383611fd1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129805761297b81612dab565b6129bf565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129be576129bd8382612df4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a02576129fd81612f61565b612a41565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a4057612a3f8282613032565b5b5b505050565b6000612a678473ffffffffffffffffffffffffffffffffffffffff16611fbe565b15612bd0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a90612124565b8786866040518563ffffffff1660e01b8152600401612ab29493929190613a93565b602060405180830381600087803b158015612acc57600080fd5b505af1925050508015612afd57506040513d601f19601f82011682018060405250810190612afa9190613530565b60015b612b80573d8060008114612b2d576040519150601f19603f3d011682016040523d82523d6000602084013e612b32565b606091505b50600081511415612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90613b5c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612bd5565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4490613cdc565b60405180910390fd5b612c56816120b8565b15612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90613b9c565b60405180910390fd5b612ca260008383612932565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cf29190613f61565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e01846112d9565b612e0b9190613fe8565b9050600060076000848152602001908152602001600020549050818114612ef0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f759190613fe8565b9050600060096000848152602001908152602001600020549050600060088381548110612fa557612fa461426b565b5b906000526020600020015490508060088381548110612fc757612fc661426b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130165761301561423c565b5b6001900381819060005260206000200160009055905550505050565b600061303d836112d9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130bd906140d2565b90600052602060002090601f0160209004810192826130df5760008555613126565b82601f106130f857805160ff1916838001178555613126565b82800160010185558215613126579182015b8281111561312557825182559160200191906001019061310a565b5b5090506131339190613137565b5090565b5b80821115613150576000816000905550600101613138565b5090565b600061316761316284613ebc565b613e97565b905082815260208101848484011115613183576131826142d8565b5b61318e848285614090565b509392505050565b60006131a96131a484613eed565b613e97565b9050828152602081018484840111156131c5576131c46142d8565b5b6131d0848285614090565b509392505050565b6000813590506131e78161495f565b92915050565b60008083601f840112613203576132026142ce565b5b8235905067ffffffffffffffff8111156132205761321f6142c9565b5b60208301915083602082028301111561323c5761323b6142d3565b5b9250929050565b60008135905061325281614976565b92915050565b6000813590506132678161498d565b92915050565b60008151905061327c8161498d565b92915050565b600082601f830112613297576132966142ce565b5b81356132a7848260208601613154565b91505092915050565b600082601f8301126132c5576132c46142ce565b5b81356132d5848260208601613196565b91505092915050565b6000813590506132ed816149a4565b92915050565b600060208284031215613309576133086142e2565b5b6000613317848285016131d8565b91505092915050565b60008060408385031215613337576133366142e2565b5b6000613345858286016131d8565b9250506020613356858286016131d8565b9150509250929050565b600080600060608486031215613379576133786142e2565b5b6000613387868287016131d8565b9350506020613398868287016131d8565b92505060406133a9868287016132de565b9150509250925092565b600080600080608085870312156133cd576133cc6142e2565b5b60006133db878288016131d8565b94505060206133ec878288016131d8565b93505060406133fd878288016132de565b925050606085013567ffffffffffffffff81111561341e5761341d6142dd565b5b61342a87828801613282565b91505092959194509250565b6000806040838503121561344d5761344c6142e2565b5b600061345b858286016131d8565b925050602061346c85828601613243565b9150509250929050565b6000806040838503121561348d5761348c6142e2565b5b600061349b858286016131d8565b92505060206134ac858286016132de565b9150509250929050565b600080602083850312156134cd576134cc6142e2565b5b600083013567ffffffffffffffff8111156134eb576134ea6142dd565b5b6134f7858286016131ed565b92509250509250929050565b600060208284031215613519576135186142e2565b5b600061352784828501613258565b91505092915050565b600060208284031215613546576135456142e2565b5b60006135548482850161326d565b91505092915050565b600060208284031215613573576135726142e2565b5b600082013567ffffffffffffffff811115613591576135906142dd565b5b61359d848285016132b0565b91505092915050565b6000602082840312156135bc576135bb6142e2565b5b60006135ca848285016132de565b91505092915050565b6135dc8161401c565b82525050565b6135eb8161402e565b82525050565b60006135fc82613f1e565b6136068185613f34565b935061361681856020860161409f565b61361f816142e7565b840191505092915050565b600061363582613f29565b61363f8185613f45565b935061364f81856020860161409f565b613658816142e7565b840191505092915050565b600061366e82613f29565b6136788185613f56565b935061368881856020860161409f565b80840191505092915050565b60006136a1601e83613f45565b91506136ac826142f8565b602082019050919050565b60006136c4602b83613f45565b91506136cf82614321565b604082019050919050565b60006136e7603283613f45565b91506136f282614370565b604082019050919050565b600061370a602683613f45565b9150613715826143bf565b604082019050919050565b600061372d601c83613f45565b91506137388261440e565b602082019050919050565b6000613750601183613f45565b915061375b82614437565b602082019050919050565b6000613773602483613f45565b915061377e82614460565b604082019050919050565b6000613796601983613f45565b91506137a1826144af565b602082019050919050565b60006137b9601283613f45565b91506137c4826144d8565b602082019050919050565b60006137dc602c83613f45565b91506137e782614501565b604082019050919050565b60006137ff600f83613f45565b915061380a82614550565b602082019050919050565b6000613822603883613f45565b915061382d82614579565b604082019050919050565b6000613845602a83613f45565b9150613850826145c8565b604082019050919050565b6000613868602983613f45565b915061387382614617565b604082019050919050565b600061388b602083613f45565b915061389682614666565b602082019050919050565b60006138ae602c83613f45565b91506138b98261468f565b604082019050919050565b60006138d1601583613f45565b91506138dc826146de565b602082019050919050565b60006138f4602083613f45565b91506138ff82614707565b602082019050919050565b6000613917601383613f45565b915061392282614730565b602082019050919050565b600061393a602983613f45565b915061394582614759565b604082019050919050565b600061395d602f83613f45565b9150613968826147a8565b604082019050919050565b6000613980602183613f45565b915061398b826147f7565b604082019050919050565b60006139a3601183613f45565b91506139ae82614846565b602082019050919050565b60006139c6603183613f45565b91506139d18261486f565b604082019050919050565b60006139e9600883613f45565b91506139f4826148be565b602082019050919050565b6000613a0c602c83613f45565b9150613a17826148e7565b604082019050919050565b6000613a2f601f83613f45565b9150613a3a82614936565b602082019050919050565b613a4e81614086565b82525050565b6000613a608285613663565b9150613a6c8284613663565b91508190509392505050565b6000602082019050613a8d60008301846135d3565b92915050565b6000608082019050613aa860008301876135d3565b613ab560208301866135d3565b613ac26040830185613a45565b8181036060830152613ad481846135f1565b905095945050505050565b6000602082019050613af460008301846135e2565b92915050565b60006020820190508181036000830152613b14818461362a565b905092915050565b60006020820190508181036000830152613b3581613694565b9050919050565b60006020820190508181036000830152613b55816136b7565b9050919050565b60006020820190508181036000830152613b75816136da565b9050919050565b60006020820190508181036000830152613b95816136fd565b9050919050565b60006020820190508181036000830152613bb581613720565b9050919050565b60006020820190508181036000830152613bd581613743565b9050919050565b60006020820190508181036000830152613bf581613766565b9050919050565b60006020820190508181036000830152613c1581613789565b9050919050565b60006020820190508181036000830152613c35816137ac565b9050919050565b60006020820190508181036000830152613c55816137cf565b9050919050565b60006020820190508181036000830152613c75816137f2565b9050919050565b60006020820190508181036000830152613c9581613815565b9050919050565b60006020820190508181036000830152613cb581613838565b9050919050565b60006020820190508181036000830152613cd58161385b565b9050919050565b60006020820190508181036000830152613cf58161387e565b9050919050565b60006020820190508181036000830152613d15816138a1565b9050919050565b60006020820190508181036000830152613d35816138c4565b9050919050565b60006020820190508181036000830152613d55816138e7565b9050919050565b60006020820190508181036000830152613d758161390a565b9050919050565b60006020820190508181036000830152613d958161392d565b9050919050565b60006020820190508181036000830152613db581613950565b9050919050565b60006020820190508181036000830152613dd581613973565b9050919050565b60006020820190508181036000830152613df581613996565b9050919050565b60006020820190508181036000830152613e15816139b9565b9050919050565b60006020820190508181036000830152613e35816139dc565b9050919050565b60006020820190508181036000830152613e55816139ff565b9050919050565b60006020820190508181036000830152613e7581613a22565b9050919050565b6000602082019050613e916000830184613a45565b92915050565b6000613ea1613eb2565b9050613ead8282614104565b919050565b6000604051905090565b600067ffffffffffffffff821115613ed757613ed661429a565b5b613ee0826142e7565b9050602081019050919050565b600067ffffffffffffffff821115613f0857613f0761429a565b5b613f11826142e7565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f6c82614086565b9150613f7783614086565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fac57613fab6141af565b5b828201905092915050565b6000613fc282614086565b9150613fcd83614086565b925082613fdd57613fdc6141de565b5b828204905092915050565b6000613ff382614086565b9150613ffe83614086565b925082821015614011576140106141af565b5b828203905092915050565b600061402782614066565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140bd5780820151818401526020810190506140a2565b838111156140cc576000848401525b50505050565b600060028204905060018216806140ea57607f821691505b602082108114156140fe576140fd61420d565b5b50919050565b61410d826142e7565b810181811067ffffffffffffffff8211171561412c5761412b61429a565b5b80604052505050565b600061414082614086565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614173576141726141af565b5b600182019050919050565b600061418982614086565b915061419483614086565b9250826141a4576141a36141de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e2774206d696e7420746f20746865206e756c6c20616464726573730000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f6e6c792031207065722077616c6c6574000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f50726573616c65206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f546f6b656e2055524973206172652046726f7a656e0000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f74206f6e2070726573616c65206c69737400000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6f726520657468207265717569726564000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6149688161401c565b811461497357600080fd5b50565b61497f8161402e565b811461498a57600080fd5b50565b6149968161403a565b81146149a157600080fd5b50565b6149ad81614086565b81146149b857600080fd5b5056fea2646970667358221220eceff44b10945f0bc84df88a020849c1434abd49fe8e8ca49f9fdc9a1ef0e7da64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000de000000000000000000000000ed2f4b1e08e010cc72d4b8dde7d565a83344c328000000000000000000000000000000000000000000000000000000000000001c47656e65736973204772616469656e7473206279204265616d696e67000000000000000000000000000000000000000000000000000000000000000000000004474e475200000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Genesis Gradients by Beaming
Arg [1] : symbol (string): GNGR
Arg [2] : _totalTokens (uint256): 222
Arg [3] : _payoutAddress (address): 0xed2f4b1e08e010cC72D4b8DDE7d565A83344c328

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000de
Arg [3] : 000000000000000000000000ed2f4b1e08e010cc72d4b8dde7d565a83344c328
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [5] : 47656e65736973204772616469656e7473206279204265616d696e6700000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 474e475200000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45957:3206:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39680:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27572:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29131:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28654:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48727:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47336:345;;;:::i;:::-;;40320:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46336:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30021:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39988:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48563:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48861:89;;;;;;;;;;;;;:::i;:::-;;47216:112;;;;;;;;;;;;;:::i;:::-;;30431:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40510:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48386:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46103:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27266:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46173:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26996:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7283:94;;;;;;;;;;;;;:::i;:::-;;46927:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46138:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6632:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49064:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29424:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30687:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46062:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27916:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47689:478;;;:::i;:::-;;48296:82;;;;;;;;;;;;;:::i;:::-;;29790:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46297:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48958:98;;;;;;;;;;;;;:::i;:::-;;7532:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39680:224;39782:4;39821:35;39806:50;;;:11;:50;;;;:90;;;;39860:36;39884:11;39860:23;:36::i;:::-;39806:90;39799:97;;39680:224;;;:::o;27572:100::-;27626:13;27659:5;27652:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27572:100;:::o;29131:221::-;29207:7;29235:16;29243:7;29235;:16::i;:::-;29227:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29320:15;:24;29336:7;29320:24;;;;;;;;;;;;;;;;;;;;;29313:31;;29131:221;;;:::o;28654:411::-;28735:13;28751:23;28766:7;28751:14;:23::i;:::-;28735:39;;28799:5;28793:11;;:2;:11;;;;28785:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28893:5;28877:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28902:37;28919:5;28926:12;:10;:12::i;:::-;28902:16;:37::i;:::-;28877:62;28855:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29036:21;29045:2;29049:7;29036:8;:21::i;:::-;28724:341;28654:411;;:::o;48727:126::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48830:15:::1;48813:14;:32;;;;;;;;;;;;:::i;:::-;;48727:126:::0;:::o;47336:345::-;1780:1;2376:7;;:19;;2368:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1780:1;2509:7;:18;;;;47401:12:::1;;;;;;;;;;;47393:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;47465:9;;47452;:22;;47444:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47531:11;;47515:13;:11;:13::i;:::-;:27;47507:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47601:1;47574:23;47584:12;:10;:12::i;:::-;47574:9;:23::i;:::-;:28;47566:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47635:38;47645:12;:10;:12::i;:::-;47659:13;:11;:13::i;:::-;47635:9;:38::i;:::-;1736:1:::0;2688:7;:22;;;;47336:345::o;40320:113::-;40381:7;40408:10;:17;;;;40401:24;;40320:113;:::o;46336:35::-;;;;;;;;;;;;;:::o;30021:339::-;30216:41;30235:12;:10;:12::i;:::-;30249:7;30216:18;:41::i;:::-;30208:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30324:28;30334:4;30340:2;30344:7;30324:9;:28::i;:::-;30021:339;;;:::o;39988:256::-;40085:7;40121:23;40138:5;40121:16;:23::i;:::-;40113:5;:31;40105:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40210:12;:19;40223:5;40210:19;;;;;;;;;;;;;;;:26;40230:5;40210:26;;;;;;;;;;;;40203:33;;39988:256;;;;:::o;48563:116::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48657:14:::1;48641:13;;:30;;;;;;;;;;;;;;;;;;48563:116:::0;:::o;48861:89::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48930:12:::1;;;;;;;;;;;48929:13;48914:12;;:28;;;;;;;;;;;;;;;;;;48861:89::o:0;47216:112::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47274:13:::1;;;;;;;;;;;47266:31;;:54;47298:21;47266:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47216:112::o:0;30431:185::-;30569:39;30586:4;30592:2;30596:7;30569:39;;;;;;;;;;;;:16;:39::i;:::-;30431:185;;;:::o;40510:233::-;40585:7;40621:30;:28;:30::i;:::-;40613:5;:38;40605:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40718:10;40729:5;40718:17;;;;;;;;:::i;:::-;;;;;;;;;;40711:24;;40510:233;;;:::o;48386:169::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48483:5:::1;48465:23;;:14;;;;;;;;;;;:23;;;48457:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48540:7;48525:12;:22;;;;;;;;;;;;:::i;:::-;;48386:169:::0;:::o;46103:28::-;;;;;;;;;;;;;:::o;27266:239::-;27338:7;27358:13;27374:7;:16;27382:7;27374:16;;;;;;;;;;;;;;;;;;;;;27358:32;;27426:1;27409:19;;:5;:19;;;;27401:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27492:5;27485:12;;;27266:239;;;:::o;46173:37::-;;;;:::o;26996:208::-;27068:7;27113:1;27096:19;;:5;:19;;;;27088:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:9;:16;27190:5;27180:16;;;;;;;;;;;;;;;;27173:23;;26996:208;;;:::o;7283:94::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7348:21:::1;7366:1;7348:9;:21::i;:::-;7283:94::o:0;46927:281::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47016:9:::1;47011:190;47035:9;;:16;;47031:1;:20;47011:190;;;47105:1;47081:26;;:9;;47091:1;47081:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;47073:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47185:4;47157:11;:25;47169:9;;47179:1;47169:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47157:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;47053:3;;;;;:::i;:::-;;;;47011:190;;;;46927:281:::0;;:::o;46138:26::-;;;;:::o;6632:87::-;6678:7;6705:6;;;;;;;;;;;6698:13;;6632:87;:::o;49064:96::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49143:9:::1;49131;:21;;;;49064:96:::0;:::o;27741:104::-;27797:13;27830:7;27823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27741:104;:::o;29424:295::-;29539:12;:10;:12::i;:::-;29527:24;;:8;:24;;;;29519:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29639:8;29594:18;:32;29613:12;:10;:12::i;:::-;29594:32;;;;;;;;;;;;;;;:42;29627:8;29594:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29692:8;29663:48;;29678:12;:10;:12::i;:::-;29663:48;;;29702:8;29663:48;;;;;;:::i;:::-;;;;;;;;29424:295;;:::o;30687:328::-;30862:41;30881:12;:10;:12::i;:::-;30895:7;30862:18;:41::i;:::-;30854:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:39;30982:4;30988:2;30992:7;31001:5;30968:13;:39::i;:::-;30687:328;;;;:::o;46062:34::-;;;;;;;;;;;;;:::o;46255:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27916:334::-;27989:13;28023:16;28031:7;28023;:16::i;:::-;28015:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28104:21;28128:10;:8;:10::i;:::-;28104:34;;28180:1;28162:7;28156:21;:25;:86;;;;;;;;;;;;;;;;;28208:7;28217:18;:7;:16;:18::i;:::-;28191:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28156:86;28149:93;;;27916:334;;;:::o;47689:478::-;1780:1;2376:7;;:19;;2368:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1780:1;2509:7;:18;;;;47761:15:::1;;;;;;;;;;;47753:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47831:9;;47818;:22;;47810:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47897:11;;47881:13;:11;:13::i;:::-;:27;47873:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;47969:4;47940:33;;:11;:25;47952:12;:10;:12::i;:::-;47940:25;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;47932:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48043:1;48016:23;48026:12;:10;:12::i;:::-;48016:9;:23::i;:::-;:28;48008:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48105:5;48077:11;:25;48089:12;:10;:12::i;:::-;48077:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;48121:38;48131:12;:10;:12::i;:::-;48145:13;:11;:13::i;:::-;48121:9;:38::i;:::-;1736:1:::0;2688:7;:22;;;;47689:478::o;48296:82::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48366:4:::1;48349:14;;:21;;;;;;;;;;;;;;;;;;48296:82::o:0;29790:164::-;29887:4;29911:18;:25;29930:5;29911:25;;;;;;;;;;;;;;;:35;29937:8;29911:35;;;;;;;;;;;;;;;;;;;;;;;;;29904:42;;29790:164;;;;:::o;46297:32::-;;;;;;;;;;;;;:::o;48958:98::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49033:15:::1;;;;;;;;;;;49032:16;49014:15;;:34;;;;;;;;;;;;;;;;;;48958:98::o:0;7532:192::-;6863:12;:10;:12::i;:::-;6852:23;;:7;:5;:7::i;:::-;:23;;;6844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7641:1:::1;7621:22;;:8;:22;;;;7613:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7697:19;7707:8;7697:9;:19::i;:::-;7532:192:::0;:::o;8678:387::-;8738:4;8946:12;9013:7;9001:20;8993:28;;9056:1;9049:4;:8;9042:15;;;8678:387;;;:::o;38617:126::-;;;;:::o;26639:293::-;26741:4;26789:25;26774:40;;;:11;:40;;;;:101;;;;26842:33;26827:48;;;:11;:48;;;;26774:101;:150;;;;26888:36;26912:11;26888:23;:36::i;:::-;26774:150;26758:166;;26639:293;;;:::o;32525:127::-;32590:4;32642:1;32614:30;;:7;:16;32622:7;32614:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32607:37;;32525:127;;;:::o;5420:98::-;5473:7;5500:10;5493:17;;5420:98;:::o;36507:174::-;36609:2;36582:15;:24;36598:7;36582:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36665:7;36661:2;36627:46;;36636:23;36651:7;36636:14;:23::i;:::-;36627:46;;;;;;;;;;;;36507:174;;:::o;46821:98::-;46867:7;46910:1;46894:13;:11;:13::i;:::-;:17;;;;:::i;:::-;46887:24;;46821:98;:::o;33509:110::-;33585:26;33595:2;33599:7;33585:26;;;;;;;;;;;;:9;:26::i;:::-;33509:110;;:::o;32819:348::-;32912:4;32937:16;32945:7;32937;:16::i;:::-;32929:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33013:13;33029:23;33044:7;33029:14;:23::i;:::-;33013:39;;33082:5;33071:16;;:7;:16;;;:51;;;;33115:7;33091:31;;:20;33103:7;33091:11;:20::i;:::-;:31;;;33071:51;:87;;;;33126:32;33143:5;33150:7;33126:16;:32::i;:::-;33071:87;33063:96;;;32819:348;;;;:::o;35811:578::-;35970:4;35943:31;;:23;35958:7;35943:14;:23::i;:::-;:31;;;35935:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36053:1;36039:16;;:2;:16;;;;36031:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:39;36130:4;36136:2;36140:7;36109:20;:39::i;:::-;36213:29;36230:1;36234:7;36213:8;:29::i;:::-;36274:1;36255:9;:15;36265:4;36255:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36303:1;36286:9;:13;36296:2;36286:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36334:2;36315:7;:16;36323:7;36315:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36373:7;36369:2;36354:27;;36363:4;36354:27;;;;;;;;;;;;35811:578;;;:::o;7732:173::-;7788:16;7807:6;;;;;;;;;;;7788:25;;7833:8;7824:6;;:17;;;;;;;;;;;;;;;;;;7888:8;7857:40;;7878:8;7857:40;;;;;;;;;;;;7777:128;7732:173;:::o;31897:315::-;32054:28;32064:4;32070:2;32074:7;32054:9;:28::i;:::-;32101:48;32124:4;32130:2;32134:7;32143:5;32101:22;:48::i;:::-;32093:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:315;;;;:::o;48175:113::-;48235:13;48268:12;48261:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48175:113;:::o;3036:723::-;3092:13;3322:1;3313:5;:10;3309:53;;;3340:10;;;;;;;;;;;;;;;;;;;;;3309:53;3372:12;3387:5;3372:20;;3403:14;3428:78;3443:1;3435:4;:9;3428:78;;3461:8;;;;;:::i;:::-;;;;3492:2;3484:10;;;;;:::i;:::-;;;3428:78;;;3516:19;3548:6;3538:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3516:39;;3566:154;3582:1;3573:5;:10;3566:154;;3610:1;3600:11;;;;;:::i;:::-;;;3677:2;3669:5;:10;;;;:::i;:::-;3656:2;:24;;;;:::i;:::-;3643:39;;3626:6;3633;3626:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3706:2;3697:11;;;;;:::i;:::-;;;3566:154;;;3744:6;3730:21;;;;;3036:723;;;;:::o;18618:157::-;18703:4;18742:25;18727:40;;;:11;:40;;;;18720:47;;18618:157;;;:::o;33846:321::-;33976:18;33982:2;33986:7;33976:5;:18::i;:::-;34027:54;34058:1;34062:2;34066:7;34075:5;34027:22;:54::i;:::-;34005:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33846:321;;;:::o;41356:589::-;41500:45;41527:4;41533:2;41537:7;41500:26;:45::i;:::-;41578:1;41562:18;;:4;:18;;;41558:187;;;41597:40;41629:7;41597:31;:40::i;:::-;41558:187;;;41667:2;41659:10;;:4;:10;;;41655:90;;41686:47;41719:4;41725:7;41686:32;:47::i;:::-;41655:90;41558:187;41773:1;41759:16;;:2;:16;;;41755:183;;;41792:45;41829:7;41792:36;:45::i;:::-;41755:183;;;41865:4;41859:10;;:2;:10;;;41855:83;;41886:40;41914:2;41918:7;41886:27;:40::i;:::-;41855:83;41755:183;41356:589;;;:::o;37246:799::-;37401:4;37422:15;:2;:13;;;:15::i;:::-;37418:620;;;37474:2;37458:36;;;37495:12;:10;:12::i;:::-;37509:4;37515:7;37524:5;37458:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37454:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37717:1;37700:6;:13;:18;37696:272;;;37743:60;;;;;;;;;;:::i;:::-;;;;;;;;37696:272;37918:6;37912:13;37903:6;37899:2;37895:15;37888:38;37454:529;37591:41;;;37581:51;;;:6;:51;;;;37574:58;;;;;37418:620;38022:4;38015:11;;37246:799;;;;;;;:::o;34503:382::-;34597:1;34583:16;;:2;:16;;;;34575:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34656:16;34664:7;34656;:16::i;:::-;34655:17;34647:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34718:45;34747:1;34751:2;34755:7;34718:20;:45::i;:::-;34793:1;34776:9;:13;34786:2;34776:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34824:2;34805:7;:16;34813:7;34805:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34869:7;34865:2;34844:33;;34861:1;34844:33;;;;;;;;;;;;34503:382;;:::o;42668:164::-;42772:10;:17;;;;42745:15;:24;42761:7;42745:24;;;;;;;;;;;:44;;;;42800:10;42816:7;42800:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42668:164;:::o;43459:988::-;43725:22;43775:1;43750:22;43767:4;43750:16;:22::i;:::-;:26;;;;:::i;:::-;43725:51;;43787:18;43808:17;:26;43826:7;43808:26;;;;;;;;;;;;43787:47;;43955:14;43941:10;:28;43937:328;;43986:19;44008:12;:18;44021:4;44008:18;;;;;;;;;;;;;;;:34;44027:14;44008:34;;;;;;;;;;;;43986:56;;44092:11;44059:12;:18;44072:4;44059:18;;;;;;;;;;;;;;;:30;44078:10;44059:30;;;;;;;;;;;:44;;;;44209:10;44176:17;:30;44194:11;44176:30;;;;;;;;;;;:43;;;;43971:294;43937:328;44361:17;:26;44379:7;44361:26;;;;;;;;;;;44354:33;;;44405:12;:18;44418:4;44405:18;;;;;;;;;;;;;;;:34;44424:14;44405:34;;;;;;;;;;;44398:41;;;43540:907;;43459:988;;:::o;44742:1079::-;44995:22;45040:1;45020:10;:17;;;;:21;;;;:::i;:::-;44995:46;;45052:18;45073:15;:24;45089:7;45073:24;;;;;;;;;;;;45052:45;;45424:19;45446:10;45457:14;45446:26;;;;;;;;:::i;:::-;;;;;;;;;;45424:48;;45510:11;45485:10;45496;45485:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45621:10;45590:15;:28;45606:11;45590:28;;;;;;;;;;;:41;;;;45762:15;:24;45778:7;45762:24;;;;;;;;;;;45755:31;;;45797:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44813:1008;;;44742:1079;:::o;42246:221::-;42331:14;42348:20;42365:2;42348:16;:20::i;:::-;42331:37;;42406:7;42379:12;:16;42392:2;42379:16;;;;;;;;;;;;;;;:24;42396:6;42379:24;;;;;;;;;;;:34;;;;42453:6;42424:17;:26;42442:7;42424:26;;;;;;;;;;;:35;;;;42320:147;42246:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:118::-;8401:24;8419:5;8401:24;:::i;:::-;8396:3;8389:37;8314:118;;:::o;8438:109::-;8519:21;8534:5;8519:21;:::i;:::-;8514:3;8507:34;8438:109;;:::o;8553:360::-;8639:3;8667:38;8699:5;8667:38;:::i;:::-;8721:70;8784:6;8779:3;8721:70;:::i;:::-;8714:77;;8800:52;8845:6;8840:3;8833:4;8826:5;8822:16;8800:52;:::i;:::-;8877:29;8899:6;8877:29;:::i;:::-;8872:3;8868:39;8861:46;;8643:270;8553:360;;;;:::o;8919:364::-;9007:3;9035:39;9068:5;9035:39;:::i;:::-;9090:71;9154:6;9149:3;9090:71;:::i;:::-;9083:78;;9170:52;9215:6;9210:3;9203:4;9196:5;9192:16;9170:52;:::i;:::-;9247:29;9269:6;9247:29;:::i;:::-;9242:3;9238:39;9231:46;;9011:272;8919:364;;;;:::o;9289:377::-;9395:3;9423:39;9456:5;9423:39;:::i;:::-;9478:89;9560:6;9555:3;9478:89;:::i;:::-;9471:96;;9576:52;9621:6;9616:3;9609:4;9602:5;9598:16;9576:52;:::i;:::-;9653:6;9648:3;9644:16;9637:23;;9399:267;9289:377;;;;:::o;9672:366::-;9814:3;9835:67;9899:2;9894:3;9835:67;:::i;:::-;9828:74;;9911:93;10000:3;9911:93;:::i;:::-;10029:2;10024:3;10020:12;10013:19;;9672:366;;;:::o;10044:::-;10186:3;10207:67;10271:2;10266:3;10207:67;:::i;:::-;10200:74;;10283:93;10372:3;10283:93;:::i;:::-;10401:2;10396:3;10392:12;10385:19;;10044:366;;;:::o;10416:::-;10558:3;10579:67;10643:2;10638:3;10579:67;:::i;:::-;10572:74;;10655:93;10744:3;10655:93;:::i;:::-;10773:2;10768:3;10764:12;10757:19;;10416:366;;;:::o;10788:::-;10930:3;10951:67;11015:2;11010:3;10951:67;:::i;:::-;10944:74;;11027:93;11116:3;11027:93;:::i;:::-;11145:2;11140:3;11136:12;11129:19;;10788:366;;;:::o;11160:::-;11302:3;11323:67;11387:2;11382:3;11323:67;:::i;:::-;11316:74;;11399:93;11488:3;11399:93;:::i;:::-;11517:2;11512:3;11508:12;11501:19;;11160:366;;;:::o;11532:::-;11674:3;11695:67;11759:2;11754:3;11695:67;:::i;:::-;11688:74;;11771:93;11860:3;11771:93;:::i;:::-;11889:2;11884:3;11880:12;11873:19;;11532:366;;;:::o;11904:::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:::-;12418:3;12439:67;12503:2;12498:3;12439:67;:::i;:::-;12432:74;;12515:93;12604:3;12515:93;:::i;:::-;12633:2;12628:3;12624:12;12617:19;;12276:366;;;:::o;12648:::-;12790:3;12811:67;12875:2;12870:3;12811:67;:::i;:::-;12804:74;;12887:93;12976:3;12887:93;:::i;:::-;13005:2;13000:3;12996:12;12989:19;;12648:366;;;:::o;13020:::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:::-;13534:3;13555:67;13619:2;13614:3;13555:67;:::i;:::-;13548:74;;13631:93;13720:3;13631:93;:::i;:::-;13749:2;13744:3;13740:12;13733:19;;13392:366;;;:::o;13764:::-;13906:3;13927:67;13991:2;13986:3;13927:67;:::i;:::-;13920:74;;14003:93;14092:3;14003:93;:::i;:::-;14121:2;14116:3;14112:12;14105:19;;13764:366;;;:::o;14136:::-;14278:3;14299:67;14363:2;14358:3;14299:67;:::i;:::-;14292:74;;14375:93;14464:3;14375:93;:::i;:::-;14493:2;14488:3;14484:12;14477:19;;14136:366;;;:::o;14508:::-;14650:3;14671:67;14735:2;14730:3;14671:67;:::i;:::-;14664:74;;14747:93;14836:3;14747:93;:::i;:::-;14865:2;14860:3;14856:12;14849:19;;14508:366;;;:::o;14880:::-;15022:3;15043:67;15107:2;15102:3;15043:67;:::i;:::-;15036:74;;15119:93;15208:3;15119:93;:::i;:::-;15237:2;15232:3;15228:12;15221:19;;14880:366;;;:::o;15252:::-;15394:3;15415:67;15479:2;15474:3;15415:67;:::i;:::-;15408:74;;15491:93;15580:3;15491:93;:::i;:::-;15609:2;15604:3;15600:12;15593:19;;15252:366;;;:::o;15624:::-;15766:3;15787:67;15851:2;15846:3;15787:67;:::i;:::-;15780:74;;15863:93;15952:3;15863:93;:::i;:::-;15981:2;15976:3;15972:12;15965:19;;15624:366;;;:::o;15996:::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:::-;16510:3;16531:67;16595:2;16590:3;16531:67;:::i;:::-;16524:74;;16607:93;16696:3;16607:93;:::i;:::-;16725:2;16720:3;16716:12;16709:19;;16368:366;;;:::o;16740:::-;16882:3;16903:67;16967:2;16962:3;16903:67;:::i;:::-;16896:74;;16979:93;17068:3;16979:93;:::i;:::-;17097:2;17092:3;17088:12;17081:19;;16740:366;;;:::o;17112:::-;17254:3;17275:67;17339:2;17334:3;17275:67;:::i;:::-;17268:74;;17351:93;17440:3;17351:93;:::i;:::-;17469:2;17464:3;17460:12;17453:19;;17112:366;;;:::o;17484:::-;17626:3;17647:67;17711:2;17706:3;17647:67;:::i;:::-;17640:74;;17723:93;17812:3;17723:93;:::i;:::-;17841:2;17836:3;17832:12;17825:19;;17484:366;;;:::o;17856:::-;17998:3;18019:67;18083:2;18078:3;18019:67;:::i;:::-;18012:74;;18095:93;18184:3;18095:93;:::i;:::-;18213:2;18208:3;18204:12;18197:19;;17856:366;;;:::o;18228:::-;18370:3;18391:67;18455:2;18450:3;18391:67;:::i;:::-;18384:74;;18467:93;18556:3;18467:93;:::i;:::-;18585:2;18580:3;18576:12;18569:19;;18228:366;;;:::o;18600:365::-;18742:3;18763:66;18827:1;18822:3;18763:66;:::i;:::-;18756:73;;18838:93;18927:3;18838:93;:::i;:::-;18956:2;18951:3;18947:12;18940:19;;18600:365;;;:::o;18971:366::-;19113:3;19134:67;19198:2;19193:3;19134:67;:::i;:::-;19127:74;;19210:93;19299:3;19210:93;:::i;:::-;19328:2;19323:3;19319:12;19312:19;;18971:366;;;:::o;19343:::-;19485:3;19506:67;19570:2;19565:3;19506:67;:::i;:::-;19499:74;;19582:93;19671:3;19582:93;:::i;:::-;19700:2;19695:3;19691:12;19684:19;;19343:366;;;:::o;19715:118::-;19802:24;19820:5;19802:24;:::i;:::-;19797:3;19790:37;19715:118;;:::o;19839:435::-;20019:3;20041:95;20132:3;20123:6;20041:95;:::i;:::-;20034:102;;20153:95;20244:3;20235:6;20153:95;:::i;:::-;20146:102;;20265:3;20258:10;;19839:435;;;;;:::o;20280:222::-;20373:4;20411:2;20400:9;20396:18;20388:26;;20424:71;20492:1;20481:9;20477:17;20468:6;20424:71;:::i;:::-;20280:222;;;;:::o;20508:640::-;20703:4;20741:3;20730:9;20726:19;20718:27;;20755:71;20823:1;20812:9;20808:17;20799:6;20755:71;:::i;:::-;20836:72;20904:2;20893:9;20889:18;20880:6;20836:72;:::i;:::-;20918;20986:2;20975:9;20971:18;20962:6;20918:72;:::i;:::-;21037:9;21031:4;21027:20;21022:2;21011:9;21007:18;21000:48;21065:76;21136:4;21127:6;21065:76;:::i;:::-;21057:84;;20508:640;;;;;;;:::o;21154:210::-;21241:4;21279:2;21268:9;21264:18;21256:26;;21292:65;21354:1;21343:9;21339:17;21330:6;21292:65;:::i;:::-;21154:210;;;;:::o;21370:313::-;21483:4;21521:2;21510:9;21506:18;21498:26;;21570:9;21564:4;21560:20;21556:1;21545:9;21541:17;21534:47;21598:78;21671:4;21662:6;21598:78;:::i;:::-;21590:86;;21370:313;;;;:::o;21689:419::-;21855:4;21893:2;21882:9;21878:18;21870:26;;21942:9;21936:4;21932:20;21928:1;21917:9;21913:17;21906:47;21970:131;22096:4;21970:131;:::i;:::-;21962:139;;21689:419;;;:::o;22114:::-;22280:4;22318:2;22307:9;22303:18;22295:26;;22367:9;22361:4;22357:20;22353:1;22342:9;22338:17;22331:47;22395:131;22521:4;22395:131;:::i;:::-;22387:139;;22114:419;;;:::o;22539:::-;22705:4;22743:2;22732:9;22728:18;22720:26;;22792:9;22786:4;22782:20;22778:1;22767:9;22763:17;22756:47;22820:131;22946:4;22820:131;:::i;:::-;22812:139;;22539:419;;;:::o;22964:::-;23130:4;23168:2;23157:9;23153:18;23145:26;;23217:9;23211:4;23207:20;23203:1;23192:9;23188:17;23181:47;23245:131;23371:4;23245:131;:::i;:::-;23237:139;;22964:419;;;:::o;23389:::-;23555:4;23593:2;23582:9;23578:18;23570:26;;23642:9;23636:4;23632:20;23628:1;23617:9;23613:17;23606:47;23670:131;23796:4;23670:131;:::i;:::-;23662:139;;23389:419;;;:::o;23814:::-;23980:4;24018:2;24007:9;24003:18;23995:26;;24067:9;24061:4;24057:20;24053:1;24042:9;24038:17;24031:47;24095:131;24221:4;24095:131;:::i;:::-;24087:139;;23814:419;;;:::o;24239:::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24239:419;;;:::o;24664:::-;24830:4;24868:2;24857:9;24853:18;24845:26;;24917:9;24911:4;24907:20;24903:1;24892:9;24888:17;24881:47;24945:131;25071:4;24945:131;:::i;:::-;24937:139;;24664:419;;;:::o;25089:::-;25255:4;25293:2;25282:9;25278:18;25270:26;;25342:9;25336:4;25332:20;25328:1;25317:9;25313:17;25306:47;25370:131;25496:4;25370:131;:::i;:::-;25362:139;;25089:419;;;:::o;25514:::-;25680:4;25718:2;25707:9;25703:18;25695:26;;25767:9;25761:4;25757:20;25753:1;25742:9;25738:17;25731:47;25795:131;25921:4;25795:131;:::i;:::-;25787:139;;25514:419;;;:::o;25939:::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:::-;26530:4;26568:2;26557:9;26553:18;26545:26;;26617:9;26611:4;26607:20;26603:1;26592:9;26588:17;26581:47;26645:131;26771:4;26645:131;:::i;:::-;26637:139;;26364:419;;;:::o;26789:::-;26955:4;26993:2;26982:9;26978:18;26970:26;;27042:9;27036:4;27032:20;27028:1;27017:9;27013:17;27006:47;27070:131;27196:4;27070:131;:::i;:::-;27062:139;;26789:419;;;:::o;27214:::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27467:9;27461:4;27457:20;27453:1;27442:9;27438:17;27431:47;27495:131;27621:4;27495:131;:::i;:::-;27487:139;;27214:419;;;:::o;27639:::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27639:419;;;:::o;28064:::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28317:9;28311:4;28307:20;28303:1;28292:9;28288:17;28281:47;28345:131;28471:4;28345:131;:::i;:::-;28337:139;;28064:419;;;:::o;28489:::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28489:419;;;:::o;28914:::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:::-;29505:4;29543:2;29532:9;29528:18;29520:26;;29592:9;29586:4;29582:20;29578:1;29567:9;29563:17;29556:47;29620:131;29746:4;29620:131;:::i;:::-;29612:139;;29339:419;;;:::o;29764:::-;29930:4;29968:2;29957:9;29953:18;29945:26;;30017:9;30011:4;30007:20;30003:1;29992:9;29988:17;29981:47;30045:131;30171:4;30045:131;:::i;:::-;30037:139;;29764:419;;;:::o;30189:::-;30355:4;30393:2;30382:9;30378:18;30370:26;;30442:9;30436:4;30432:20;30428:1;30417:9;30413:17;30406:47;30470:131;30596:4;30470:131;:::i;:::-;30462:139;;30189:419;;;:::o;30614:::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:::-;31205:4;31243:2;31232:9;31228:18;31220:26;;31292:9;31286:4;31282:20;31278:1;31267:9;31263:17;31256:47;31320:131;31446:4;31320:131;:::i;:::-;31312:139;;31039:419;;;:::o;31464:::-;31630:4;31668:2;31657:9;31653:18;31645:26;;31717:9;31711:4;31707:20;31703:1;31692:9;31688:17;31681:47;31745:131;31871:4;31745:131;:::i;:::-;31737:139;;31464:419;;;:::o;31889:::-;32055:4;32093:2;32082:9;32078:18;32070:26;;32142:9;32136:4;32132:20;32128:1;32117:9;32113:17;32106:47;32170:131;32296:4;32170:131;:::i;:::-;32162:139;;31889:419;;;:::o;32314:::-;32480:4;32518:2;32507:9;32503:18;32495:26;;32567:9;32561:4;32557:20;32553:1;32542:9;32538:17;32531:47;32595:131;32721:4;32595:131;:::i;:::-;32587:139;;32314:419;;;:::o;32739:::-;32905:4;32943:2;32932:9;32928:18;32920:26;;32992:9;32986:4;32982:20;32978:1;32967:9;32963:17;32956:47;33020:131;33146:4;33020:131;:::i;:::-;33012:139;;32739:419;;;:::o;33164:222::-;33257:4;33295:2;33284:9;33280:18;33272:26;;33308:71;33376:1;33365:9;33361:17;33352:6;33308:71;:::i;:::-;33164:222;;;;:::o;33392:129::-;33426:6;33453:20;;:::i;:::-;33443:30;;33482:33;33510:4;33502:6;33482:33;:::i;:::-;33392:129;;;:::o;33527:75::-;33560:6;33593:2;33587:9;33577:19;;33527:75;:::o;33608:307::-;33669:4;33759:18;33751:6;33748:30;33745:56;;;33781:18;;:::i;:::-;33745:56;33819:29;33841:6;33819:29;:::i;:::-;33811:37;;33903:4;33897;33893:15;33885:23;;33608:307;;;:::o;33921:308::-;33983:4;34073:18;34065:6;34062:30;34059:56;;;34095:18;;:::i;:::-;34059:56;34133:29;34155:6;34133:29;:::i;:::-;34125:37;;34217:4;34211;34207:15;34199:23;;33921:308;;;:::o;34235:98::-;34286:6;34320:5;34314:12;34304:22;;34235:98;;;:::o;34339:99::-;34391:6;34425:5;34419:12;34409:22;;34339:99;;;:::o;34444:168::-;34527:11;34561:6;34556:3;34549:19;34601:4;34596:3;34592:14;34577:29;;34444:168;;;;:::o;34618:169::-;34702:11;34736:6;34731:3;34724:19;34776:4;34771:3;34767:14;34752:29;;34618:169;;;;:::o;34793:148::-;34895:11;34932:3;34917:18;;34793:148;;;;:::o;34947:305::-;34987:3;35006:20;35024:1;35006:20;:::i;:::-;35001:25;;35040:20;35058:1;35040:20;:::i;:::-;35035:25;;35194:1;35126:66;35122:74;35119:1;35116:81;35113:107;;;35200:18;;:::i;:::-;35113:107;35244:1;35241;35237:9;35230:16;;34947:305;;;;:::o;35258:185::-;35298:1;35315:20;35333:1;35315:20;:::i;:::-;35310:25;;35349:20;35367:1;35349:20;:::i;:::-;35344:25;;35388:1;35378:35;;35393:18;;:::i;:::-;35378:35;35435:1;35432;35428:9;35423:14;;35258:185;;;;:::o;35449:191::-;35489:4;35509:20;35527:1;35509:20;:::i;:::-;35504:25;;35543:20;35561:1;35543:20;:::i;:::-;35538:25;;35582:1;35579;35576:8;35573:34;;;35587:18;;:::i;:::-;35573:34;35632:1;35629;35625:9;35617:17;;35449:191;;;;:::o;35646:96::-;35683:7;35712:24;35730:5;35712:24;:::i;:::-;35701:35;;35646:96;;;:::o;35748:90::-;35782:7;35825:5;35818:13;35811:21;35800:32;;35748:90;;;:::o;35844:149::-;35880:7;35920:66;35913:5;35909:78;35898:89;;35844:149;;;:::o;35999:126::-;36036:7;36076:42;36069:5;36065:54;36054:65;;35999:126;;;:::o;36131:77::-;36168:7;36197:5;36186:16;;36131:77;;;:::o;36214:154::-;36298:6;36293:3;36288;36275:30;36360:1;36351:6;36346:3;36342:16;36335:27;36214:154;;;:::o;36374:307::-;36442:1;36452:113;36466:6;36463:1;36460:13;36452:113;;;36551:1;36546:3;36542:11;36536:18;36532:1;36527:3;36523:11;36516:39;36488:2;36485:1;36481:10;36476:15;;36452:113;;;36583:6;36580:1;36577:13;36574:101;;;36663:1;36654:6;36649:3;36645:16;36638:27;36574:101;36423:258;36374:307;;;:::o;36687:320::-;36731:6;36768:1;36762:4;36758:12;36748:22;;36815:1;36809:4;36805:12;36836:18;36826:81;;36892:4;36884:6;36880:17;36870:27;;36826:81;36954:2;36946:6;36943:14;36923:18;36920:38;36917:84;;;36973:18;;:::i;:::-;36917:84;36738:269;36687:320;;;:::o;37013:281::-;37096:27;37118:4;37096:27;:::i;:::-;37088:6;37084:40;37226:6;37214:10;37211:22;37190:18;37178:10;37175:34;37172:62;37169:88;;;37237:18;;:::i;:::-;37169:88;37277:10;37273:2;37266:22;37056:238;37013:281;;:::o;37300:233::-;37339:3;37362:24;37380:5;37362:24;:::i;:::-;37353:33;;37408:66;37401:5;37398:77;37395:103;;;37478:18;;:::i;:::-;37395:103;37525:1;37518:5;37514:13;37507:20;;37300:233;;;:::o;37539:176::-;37571:1;37588:20;37606:1;37588:20;:::i;:::-;37583:25;;37622:20;37640:1;37622:20;:::i;:::-;37617:25;;37661:1;37651:35;;37666:18;;:::i;:::-;37651:35;37707:1;37704;37700:9;37695:14;;37539:176;;;;:::o;37721:180::-;37769:77;37766:1;37759:88;37866:4;37863:1;37856:15;37890:4;37887:1;37880:15;37907:180;37955:77;37952:1;37945:88;38052:4;38049:1;38042:15;38076:4;38073:1;38066:15;38093:180;38141:77;38138:1;38131:88;38238:4;38235:1;38228:15;38262:4;38259:1;38252:15;38279:180;38327:77;38324:1;38317:88;38424:4;38421:1;38414:15;38448:4;38445:1;38438:15;38465:180;38513:77;38510:1;38503:88;38610:4;38607:1;38600:15;38634:4;38631:1;38624:15;38651:180;38699:77;38696:1;38689:88;38796:4;38793:1;38786:15;38820:4;38817:1;38810:15;38837:117;38946:1;38943;38936:12;38960:117;39069:1;39066;39059:12;39083:117;39192:1;39189;39182:12;39206:117;39315:1;39312;39305:12;39329:117;39438:1;39435;39428:12;39452:117;39561:1;39558;39551:12;39575:102;39616:6;39667:2;39663:7;39658:2;39651:5;39647:14;39643:28;39633:38;;39575:102;;;:::o;39683:180::-;39823:32;39819:1;39811:6;39807:14;39800:56;39683:180;:::o;39869:230::-;40009:34;40005:1;39997:6;39993:14;39986:58;40078:13;40073:2;40065:6;40061:15;40054:38;39869:230;:::o;40105:237::-;40245:34;40241:1;40233:6;40229:14;40222:58;40314:20;40309:2;40301:6;40297:15;40290:45;40105:237;:::o;40348:225::-;40488:34;40484:1;40476:6;40472:14;40465:58;40557:8;40552:2;40544:6;40540:15;40533:33;40348:225;:::o;40579:178::-;40719:30;40715:1;40707:6;40703:14;40696:54;40579:178;:::o;40763:167::-;40903:19;40899:1;40891:6;40887:14;40880:43;40763:167;:::o;40936:223::-;41076:34;41072:1;41064:6;41060:14;41053:58;41145:6;41140:2;41132:6;41128:15;41121:31;40936:223;:::o;41165:175::-;41305:27;41301:1;41293:6;41289:14;41282:51;41165:175;:::o;41346:168::-;41486:20;41482:1;41474:6;41470:14;41463:44;41346:168;:::o;41520:231::-;41660:34;41656:1;41648:6;41644:14;41637:58;41729:14;41724:2;41716:6;41712:15;41705:39;41520:231;:::o;41757:165::-;41897:17;41893:1;41885:6;41881:14;41874:41;41757:165;:::o;41928:243::-;42068:34;42064:1;42056:6;42052:14;42045:58;42137:26;42132:2;42124:6;42120:15;42113:51;41928:243;:::o;42177:229::-;42317:34;42313:1;42305:6;42301:14;42294:58;42386:12;42381:2;42373:6;42369:15;42362:37;42177:229;:::o;42412:228::-;42552:34;42548:1;42540:6;42536:14;42529:58;42621:11;42616:2;42608:6;42604:15;42597:36;42412:228;:::o;42646:182::-;42786:34;42782:1;42774:6;42770:14;42763:58;42646:182;:::o;42834:231::-;42974:34;42970:1;42962:6;42958:14;42951:58;43043:14;43038:2;43030:6;43026:15;43019:39;42834:231;:::o;43071:171::-;43211:23;43207:1;43199:6;43195:14;43188:47;43071:171;:::o;43248:182::-;43388:34;43384:1;43376:6;43372:14;43365:58;43248:182;:::o;43436:169::-;43576:21;43572:1;43564:6;43560:14;43553:45;43436:169;:::o;43611:228::-;43751:34;43747:1;43739:6;43735:14;43728:58;43820:11;43815:2;43807:6;43803:15;43796:36;43611:228;:::o;43845:234::-;43985:34;43981:1;43973:6;43969:14;43962:58;44054:17;44049:2;44041:6;44037:15;44030:42;43845:234;:::o;44085:220::-;44225:34;44221:1;44213:6;44209:14;44202:58;44294:3;44289:2;44281:6;44277:15;44270:28;44085:220;:::o;44311:167::-;44451:19;44447:1;44439:6;44435:14;44428:43;44311:167;:::o;44484:236::-;44624:34;44620:1;44612:6;44608:14;44601:58;44693:19;44688:2;44680:6;44676:15;44669:44;44484:236;:::o;44726:158::-;44866:10;44862:1;44854:6;44850:14;44843:34;44726:158;:::o;44890:231::-;45030:34;45026:1;45018:6;45014:14;45007:58;45099:14;45094:2;45086:6;45082:15;45075:39;44890:231;:::o;45127:181::-;45267:33;45263:1;45255:6;45251:14;45244:57;45127:181;:::o;45314:122::-;45387:24;45405:5;45387:24;:::i;:::-;45380:5;45377:35;45367:63;;45426:1;45423;45416:12;45367:63;45314:122;:::o;45442:116::-;45512:21;45527:5;45512:21;:::i;:::-;45505:5;45502:32;45492:60;;45548:1;45545;45538:12;45492:60;45442:116;:::o;45564:120::-;45636:23;45653:5;45636:23;:::i;:::-;45629:5;45626:34;45616:62;;45674:1;45671;45664:12;45616:62;45564:120;:::o;45690:122::-;45763:24;45781:5;45763:24;:::i;:::-;45756:5;45753:35;45743:63;;45802:1;45799;45792:12;45743:63;45690:122;:::o

Swarm Source

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