ETH Price: $3,117.55 (+2.94%)
Gas: 3 Gwei

Token

The Blinkless Museum (BLKM)
 

Overview

Max Total Supply

11,234 BLKM

Holders

2,142

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x147315b89468da7f7026ae4d3ddfa9fc5490b4ea
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:
BlinklessMuseum

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/BlinklessMuseum.sol


pragma solidity ^0.8.4;

/****************************************************************
* The Blinkless Museum
* code by @digitalkemical
*****************************************************************/








contract BlinklessMuseum is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply {

    uint public optixMintPrice = 10000 ether; // cost to mint in optix
    uint public currentlyMinting = 1; // token id thats currently minting
    uint public pvmRewards = 1; // number of tokens minted during pvm
    IERC20 public optixContract; // optix contract address
    address public depositAddress = 0xf794E26f81831028a9b54314722224B9D7BD9Af3; // address to deposit optix
    bool public pvmActive = true; // switch to enable/disable pvm 
    string public metadataURI; // uri to metadata
    string public name = "The Blinkless Museum"; // name of collection
    string public symbol = "BLKM"; // symbol of collection

    constructor(address _optixContract) ERC1155("") {
        // set optix contract
        optixContract = IERC20(_optixContract);
    }

    /**
    * mint a token with optix
    */
    function mintWithOptix() public whenNotPaused
    {
        require(currentlyMinting > 0, "Mint not active.");

        // transfer optix (must have approval already!)
        optixContract.transferFrom(msg.sender,address(depositAddress),optixMintPrice);
        // mint the token
        _mint(msg.sender, currentlyMinting, 1, "0x00");

    }

    /**
    * set pvm rewards
    */
    function setPvmRewards(uint _pvmRewards) public onlyOwner {
        // set pvm rewards
        pvmRewards = _pvmRewards;
    }

    /**
    * set optix contract address
    */
    function setOptixContract(address _optixContract) public onlyOwner {
        // set optix contract
        optixContract = IERC20(_optixContract);
    }

     /**
    * set currently minting token id
    */
    function setCurrentlyMinting(uint _currentlyMinting) public onlyOwner {
        // set id of token to mint
        currentlyMinting = _currentlyMinting;
    }

    /**
    * toggle PVM on/off
    */
    function togglePVM() public onlyOwner {
        if(pvmActive == true){
            pvmActive = false;
        } else {
            pvmActive = true;
        }
    }

    /**
    * set new metadata uri
    */
    function setURI(string memory newuri) public onlyOwner {
        metadataURI = newuri;
    }

    /**
    * set new mint price
    */
    function setMintPrice(uint _price) public onlyOwner {
        optixMintPrice = _price;
    }

    /**
    * pause 
    */
    function pause() public onlyOwner {
        _pause();
    }

    /**
    * unpause 
    */
    function unpause() public onlyOwner {
        _unpause();
    }

    /**
    * owner mint
    */
    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    /**
    * owner batch mint
    */
    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    /**
    * transfer hook for supply
    */
    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
        
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);

        //pvm must be active, minting art and the recipient must have a zero optix balance
        if(pvmActive && currentlyMinting > 0 && optixContract.balanceOf(to) == 0 && balanceOf(to,id) == 1){
            // mint the token - PVM
            _mint(from, currentlyMinting, pvmRewards, "0x00");
        }
    }


    function uri(uint256 _tokenId) public view virtual override returns (string memory) {
         return bytes(metadataURI).length != 0 ? string(abi.encodePacked(metadataURI, Strings.toString(_tokenId),'.json')) : '';
    }

    function tokenURI(uint256 _tokenId) public view virtual  returns (string memory) {
         return bytes(metadataURI).length != 0 ? string(abi.encodePacked(metadataURI, Strings.toString(_tokenId),'.json')) : '';
    }

    function contractURI() public view virtual  returns (string memory) {
         return bytes(metadataURI).length != 0 ? string(abi.encodePacked(metadataURI, 'museum','.json')) : '';
    }

     /*
    * Withdraw by owner
    */
    function withdrawMoney() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }


    /*
    * These are here to receive ETH sent to the contract address
    */
    receive() external payable {}

    fallback() external payable {}
   
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_optixContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentlyMinting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintWithOptix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"optixContract","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"optixMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pvmActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pvmRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_currentlyMinting","type":"uint256"}],"name":"setCurrentlyMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_optixContract","type":"address"}],"name":"setOptixContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pvmRewards","type":"uint256"}],"name":"setPvmRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePVM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269021e19e0c9bab24000006005556001600655600160075573f794e26f81831028a9b54314722224b9d7bd9af3600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960146101000a81548160ff0219169083151502179055506040518060400160405280601481526020017f54686520426c696e6b6c657373204d757365756d000000000000000000000000815250600b9080519060200190620000d9929190620002ea565b506040518060400160405280600481526020017f424c4b4d00000000000000000000000000000000000000000000000000000000815250600c908051906020019062000127929190620002ea565b503480156200013557600080fd5b5060405162005ca938038062005ca983398181016040528101906200015b9190620003b1565b604051806020016040528060008152506200017c816200020060201b60201c565b506200019d620001916200021c60201b60201c565b6200022460201b60201c565b6000600360146101000a81548160ff02191690831515021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200049b565b806002908051906020019062000218929190620002ea565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002f89062000417565b90600052602060002090601f0160209004810192826200031c576000855562000368565b82601f106200033757805160ff191683800117855562000368565b8280016001018555821562000368579182015b82811115620003675782518255916020019190600101906200034a565b5b5090506200037791906200037b565b5090565b5b80821115620003965760008160009055506001016200037c565b5090565b600081519050620003ab8162000481565b92915050565b600060208284031215620003ca57620003c96200047c565b5b6000620003da848285016200039a565b91505092915050565b6000620003f082620003f7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200043057607f821691505b602082108114156200044757620004466200044d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6200048c81620003e3565b81146200049857600080fd5b50565b6157fe80620004ab6000396000f3fe6080604052600436106102335760003560e01c80638456cb591161012e578063dd1e5bf3116100ab578063f2fde38b1161006f578063f2fde38b146107f8578063f4a0a52814610821578063f508a1151461084a578063f5298aca14610873578063fd4eccb91461089c5761023a565b8063dd1e5bf314610739578063df6533b414610750578063e8a3d48514610767578063e985e9c514610792578063f242432a146107cf5761023a565b8063ac446002116100f2578063ac44600214610654578063b31b09af1461066b578063bd85b03914610694578063c733bb20146106d1578063c87b56dd146106fc5761023a565b80638456cb59146105935780638da5cb5b146105aa57806395d89b41146105d5578063a22cb46514610600578063ab8d38a6146106295761023a565b80633f4ba83a116101bc5780635c975abb116101805780635c975abb146104d45780636b20c454146104ff578063715018a614610528578063731133e91461053f57806377a4cfe1146105685761023a565b80633f4ba83a146103ef57806347230c59146104065780634e1273f4146104315780634f558e791461046e57806356fd4b21146104ab5761023a565b806306fdde031161020357806306fdde031461030a5780630e89341c146103355780631f7fdffa1461037257806328f833b71461039b5780632eb2c2d6146103c65761023a565b8062fdd58e1461023c57806301ffc9a71461027957806302fe5305146102b657806303ee438c146102df5761023a565b3661023a57005b005b34801561024857600080fd5b50610263600480360381019061025e9190613f16565b6108c7565b6040516102709190614b8c565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b91906140d1565b610990565b6040516102ad91906148b4565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d8919061412b565b610a72565b005b3480156102eb57600080fd5b506102f4610b08565b60405161030191906148ea565b60405180910390f35b34801561031657600080fd5b5061031f610b96565b60405161032c91906148ea565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190614174565b610c24565b60405161036991906148ea565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190613e1b565b610c85565b005b3480156103a757600080fd5b506103b0610d13565b6040516103bd9190614747565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190613c2a565b610d39565b005b3480156103fb57600080fd5b50610404610dda565b005b34801561041257600080fd5b5061041b610e60565b6040516104289190614b8c565b60405180910390f35b34801561043d57600080fd5b506104586004803603810190610453919061402c565b610e66565b604051610465919061485b565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190614174565b610f7f565b6040516104a291906148b4565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190614174565b610f93565b005b3480156104e057600080fd5b506104e9611019565b6040516104f691906148b4565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613d90565b611030565b005b34801561053457600080fd5b5061053d6110cd565b005b34801561054b57600080fd5b5061056660048036038101906105619190613fa9565b611155565b005b34801561057457600080fd5b5061057d6111e3565b60405161058a9190614b8c565b60405180910390f35b34801561059f57600080fd5b506105a86111e9565b005b3480156105b657600080fd5b506105bf61126f565b6040516105cc9190614747565b60405180910390f35b3480156105e157600080fd5b506105ea611299565b6040516105f791906148ea565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613ed6565b611327565b005b34801561063557600080fd5b5061063e61133d565b60405161064b9190614b8c565b60405180910390f35b34801561066057600080fd5b50610669611343565b005b34801561067757600080fd5b50610692600480360381019061068d9190614174565b61146e565b005b3480156106a057600080fd5b506106bb60048036038101906106b69190614174565b6114f4565b6040516106c89190614b8c565b60405180910390f35b3480156106dd57600080fd5b506106e6611511565b6040516106f391906148cf565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614174565b611537565b60405161073091906148ea565b60405180910390f35b34801561074557600080fd5b5061074e611598565b005b34801561075c57600080fd5b5061076561166e565b005b34801561077357600080fd5b5061077c611817565b60405161078991906148ea565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613bea565b61186c565b6040516107c691906148b4565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613cf9565b611900565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613bbd565b611ad5565b005b34801561082d57600080fd5b5061084860048036038101906108439190614174565b611bcd565b005b34801561085657600080fd5b50610871600480360381019061086c9190613bbd565b611c53565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613f56565b611d13565b005b3480156108a857600080fd5b506108b1611db0565b6040516108be91906148b4565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061496c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6b5750610a6a82611dc3565b5b9050919050565b610a7a611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610a9861126f565b73ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590614aac565b60405180910390fd5b80600a9080519060200190610b0492919061386b565b5050565b600a8054610b1590614ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614ef2565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b505050505081565b600b8054610ba390614ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90614ef2565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b505050505081565b60606000600a8054610c3590614ef2565b90501415610c525760405180602001604052806000815250610c7e565b600a610c5d83611e35565b604051602001610c6e9291906146d6565b6040516020818303038152906040525b9050919050565b610c8d611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610cab61126f565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890614aac565b60405180910390fd5b610d0d84848484611f96565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d41611e2d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d875750610d8685610d81611e2d565b61186c565b5b610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90614a2c565b60405180910390fd5b610dd385858585856121c3565b5050505050565b610de2611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610e0061126f565b73ffffffffffffffffffffffffffffffffffffffff1614610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614aac565b60405180910390fd5b610e5e6124e5565b565b60065481565b60608151835114610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614b2c565b60405180910390fd5b6000835167ffffffffffffffff811115610ec957610ec861508b565b5b604051908082528060200260200182016040528015610ef75781602001602082028036833780820191505090505b50905060005b8451811015610f7457610f44858281518110610f1c57610f1b61505c565b5b6020026020010151858381518110610f3757610f3661505c565b5b60200260200101516108c7565b828281518110610f5757610f5661505c565b5b60200260200101818152505080610f6d90614f55565b9050610efd565b508091505092915050565b600080610f8b836114f4565b119050919050565b610f9b611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610fb961126f565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614aac565b60405180910390fd5b8060068190555050565b6000600360149054906101000a900460ff16905090565b611038611e2d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061107e575061107d83611078611e2d565b61186c565b5b6110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906149cc565b60405180910390fd5b6110c8838383612587565b505050565b6110d5611e2d565b73ffffffffffffffffffffffffffffffffffffffff166110f361126f565b73ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614aac565b60405180910390fd5b6111536000612856565b565b61115d611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661117b61126f565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890614aac565b60405180910390fd5b6111dd8484848461291c565b50505050565b60075481565b6111f1611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661120f61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614aac565b60405180910390fd5b61126d612acd565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c80546112a690614ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546112d290614ef2565b801561131f5780601f106112f45761010080835404028352916020019161131f565b820191906000526020600020905b81548152906001019060200180831161130257829003601f168201915b505050505081565b611339611332611e2d565b8383612b70565b5050565b60055481565b61134b611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661136961126f565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614aac565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516113e590614732565b60006040518083038185875af1925050503d8060008114611422576040519150601f19603f3d011682016040523d82523d6000602084013e611427565b606091505b505090508061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614aec565b60405180910390fd5b50565b611476611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661149461126f565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614aac565b60405180910390fd5b8060078190555050565b600060046000838152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600a805461154890614ef2565b905014156115655760405180602001604052806000815250611591565b600a61157083611e35565b6040516020016115819291906146d6565b6040516020818303038152906040525b9050919050565b6115a0611e2d565b73ffffffffffffffffffffffffffffffffffffffff166115be61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614aac565b60405180910390fd5b60011515600960149054906101000a900460ff1615151415611650576000600960146101000a81548160ff02191690831515021790555061166c565b6001600960146101000a81548160ff0219169083151502179055505b565b611676611019565b156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad906149ec565b60405180910390fd5b6000600654116116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614a4c565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005546040518463ffffffff1660e01b815260040161177e939291906147ca565b602060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d091906140a4565b506118153360065460016040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525061291c565b565b60606000600a805461182890614ef2565b905014156118455760405180602001604052806000815250611867565b600a6040516020016118579190614705565b6040516020818303038152906040525b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611908611e2d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061194e575061194d85611948611e2d565b61186c565b5b61198d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611984906149cc565b60405180910390fd5b61199a8585858585612cdd565b600960149054906101000a900460ff1680156119b857506000600654115b8015611a6e57506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401611a1c9190614747565b60206040518083038186803b158015611a3457600080fd5b505afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c91906141a1565b145b8015611a8357506001611a8185856108c7565b145b15611ace57611acd856006546007546040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525061291c565b5b5050505050565b611add611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611afb61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890614aac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb89061498c565b60405180910390fd5b611bca81612856565b50565b611bd5611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611bf361126f565b73ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614aac565b60405180910390fd5b8060058190555050565b611c5b611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611c7961126f565b73ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614aac565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d1b611e2d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611d615750611d6083611d5b611e2d565b61186c565b5b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906149cc565b60405180910390fd5b611dab838383612f79565b505050565b600960149054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415611e7d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f91565b600082905060005b60008214611eaf578080611e9890614f55565b915050600a82611ea89190614da1565b9150611e85565b60008167ffffffffffffffff811115611ecb57611eca61508b565b5b6040519080825280601f01601f191660200182016040528015611efd5781602001600182028036833780820191505090505b5090505b60008514611f8a57600182611f169190614dd2565b9150600a85611f259190614f9e565b6030611f319190614d4b565b60f81b818381518110611f4757611f4661505c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f839190614da1565b9450611f01565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90614b6c565b60405180910390fd5b815183511461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190614b4c565b60405180910390fd5b6000612054611e2d565b9050612065816000878787876131c0565b60005b845181101561211e578381815181106120845761208361505c565b5b60200260200101516000808784815181106120a2576120a161505c565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121049190614d4b565b92505081905550808061211690614f55565b915050612068565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161219692919061487d565b60405180910390a46121ad8160008787878761321e565b6121bc81600087878787613226565b5050505050565b8151835114612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90614b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614a0c565b60405180910390fd5b6000612281611e2d565b90506122918187878787876131c0565b60005b84518110156124425760008582815181106122b2576122b161505c565b5b6020026020010151905060008583815181106122d1576122d061505c565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614a8c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124279190614d4b565b925050819055505050508061243b90614f55565b9050612294565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124b992919061487d565b60405180910390a46124cf81878787878761321e565b6124dd818787878787613226565b505050505050565b6124ed611019565b61252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239061494c565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612570611e2d565b60405161257d9190614747565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90614a6c565b60405180910390fd5b805182511461263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290614b4c565b60405180910390fd5b6000612645611e2d565b9050612665818560008686604051806020016040528060008152506131c0565b60005b83518110156127b25760008482815181106126865761268561505c565b5b6020026020010151905060008483815181106126a5576126a461505c565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d906149ac565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806127aa90614f55565b915050612668565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161282a92919061487d565b60405180910390a46128508185600086866040518060200160405280600081525061321e565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614b6c565b60405180910390fd5b6000612996611e2d565b905060006129a38561340d565b905060006129b08561340d565b90506129c1836000898585896131c0565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a209190614d4b565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a9e929190614ba7565b60405180910390a4612ab58360008985858961321e565b612ac483600089898989613487565b50505050505050565b612ad5611019565b15612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c906149ec565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b59611e2d565b604051612b669190614747565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd690614b0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cd091906148b4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4490614a0c565b60405180910390fd5b6000612d57611e2d565b90506000612d648561340d565b90506000612d718561340d565b9050612d818389898585896131c0565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f90614a8c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ecd9190614d4b565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612f4a929190614ba7565b60405180910390a4612f60848a8a86868a61321e565b612f6e848a8a8a8a8a613487565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe090614a6c565b60405180910390fd5b6000612ff3611e2d565b905060006130008461340d565b9050600061300d8461340d565b905061302d838760008585604051806020016040528060008152506131c0565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156130c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bb906149ac565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613191929190614ba7565b60405180910390a46131b78488600086866040518060200160405280600081525061321e565b50505050505050565b6131c8611019565b15613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff906149ec565b60405180910390fd5b61321686868686868661366e565b505050505050565b505050505050565b6132458473ffffffffffffffffffffffffffffffffffffffff16613840565b15613405578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161328b959493929190614762565b602060405180830381600087803b1580156132a557600080fd5b505af19250505080156132d657506040513d601f19601f820116820180604052508101906132d391906140fe565b60015b61337c576132e26150ba565b806308c379a0141561333f57506132f76156d6565b806133025750613341565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333691906148ea565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061490c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fa9061492c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561342c5761342b61508b565b5b60405190808252806020026020018201604052801561345a5781602001602082028036833780820191505090505b50905082816000815181106134725761347161505c565b5b60200260200101818152505080915050919050565b6134a68473ffffffffffffffffffffffffffffffffffffffff16613840565b15613666578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016134ec959493929190614801565b602060405180830381600087803b15801561350657600080fd5b505af192505050801561353757506040513d601f19601f8201168201806040525081019061353491906140fe565b60015b6135dd576135436150ba565b806308c379a014156135a057506135586156d6565b8061356357506135a2565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359791906148ea565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d49061490c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365b9061492c565b60405180910390fd5b505b505050505050565b61367c868686868686613863565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561372e5760005b835181101561372c578281815181106136d0576136cf61505c565b5b6020026020010151600460008684815181106136ef576136ee61505c565b5b6020026020010151815260200190815260200160002060008282546137149190614d4b565b925050819055508061372590614f55565b90506136b4565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138385760005b83518110156138365760008482815181106137845761378361505c565b5b6020026020010151905060008483815181106137a3576137a261505c565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015613808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ff90614acc565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061382f90614f55565b9050613766565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461387790614ef2565b90600052602060002090601f01602090048101928261389957600085556138e0565b82601f106138b257805160ff19168380011785556138e0565b828001600101855582156138e0579182015b828111156138df5782518255916020019190600101906138c4565b5b5090506138ed91906138f1565b5090565b5b8082111561390a5760008160009055506001016138f2565b5090565b600061392161391c84614bf5565b614bd0565b90508083825260208201905082856020860282011115613944576139436150e1565b5b60005b85811015613974578161395a8882613a72565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399161398c84614c21565b614bd0565b905080838252602082019050828560208602820111156139b4576139b36150e1565b5b60005b858110156139e457816139ca8882613b93565b8452602084019350602083019250506001810190506139b7565b5050509392505050565b6000613a016139fc84614c4d565b614bd0565b905082815260208101848484011115613a1d57613a1c6150e6565b5b613a28848285614eb0565b509392505050565b6000613a43613a3e84614c7e565b614bd0565b905082815260208101848484011115613a5f57613a5e6150e6565b5b613a6a848285614eb0565b509392505050565b600081359050613a818161576c565b92915050565b600082601f830112613a9c57613a9b6150dc565b5b8135613aac84826020860161390e565b91505092915050565b600082601f830112613aca57613ac96150dc565b5b8135613ada84826020860161397e565b91505092915050565b600081359050613af281615783565b92915050565b600081519050613b0781615783565b92915050565b600081359050613b1c8161579a565b92915050565b600081519050613b318161579a565b92915050565b600082601f830112613b4c57613b4b6150dc565b5b8135613b5c8482602086016139ee565b91505092915050565b600082601f830112613b7a57613b796150dc565b5b8135613b8a848260208601613a30565b91505092915050565b600081359050613ba2816157b1565b92915050565b600081519050613bb7816157b1565b92915050565b600060208284031215613bd357613bd26150f0565b5b6000613be184828501613a72565b91505092915050565b60008060408385031215613c0157613c006150f0565b5b6000613c0f85828601613a72565b9250506020613c2085828601613a72565b9150509250929050565b600080600080600060a08688031215613c4657613c456150f0565b5b6000613c5488828901613a72565b9550506020613c6588828901613a72565b945050604086013567ffffffffffffffff811115613c8657613c856150eb565b5b613c9288828901613ab5565b935050606086013567ffffffffffffffff811115613cb357613cb26150eb565b5b613cbf88828901613ab5565b925050608086013567ffffffffffffffff811115613ce057613cdf6150eb565b5b613cec88828901613b37565b9150509295509295909350565b600080600080600060a08688031215613d1557613d146150f0565b5b6000613d2388828901613a72565b9550506020613d3488828901613a72565b9450506040613d4588828901613b93565b9350506060613d5688828901613b93565b925050608086013567ffffffffffffffff811115613d7757613d766150eb565b5b613d8388828901613b37565b9150509295509295909350565b600080600060608486031215613da957613da86150f0565b5b6000613db786828701613a72565b935050602084013567ffffffffffffffff811115613dd857613dd76150eb565b5b613de486828701613ab5565b925050604084013567ffffffffffffffff811115613e0557613e046150eb565b5b613e1186828701613ab5565b9150509250925092565b60008060008060808587031215613e3557613e346150f0565b5b6000613e4387828801613a72565b945050602085013567ffffffffffffffff811115613e6457613e636150eb565b5b613e7087828801613ab5565b935050604085013567ffffffffffffffff811115613e9157613e906150eb565b5b613e9d87828801613ab5565b925050606085013567ffffffffffffffff811115613ebe57613ebd6150eb565b5b613eca87828801613b37565b91505092959194509250565b60008060408385031215613eed57613eec6150f0565b5b6000613efb85828601613a72565b9250506020613f0c85828601613ae3565b9150509250929050565b60008060408385031215613f2d57613f2c6150f0565b5b6000613f3b85828601613a72565b9250506020613f4c85828601613b93565b9150509250929050565b600080600060608486031215613f6f57613f6e6150f0565b5b6000613f7d86828701613a72565b9350506020613f8e86828701613b93565b9250506040613f9f86828701613b93565b9150509250925092565b60008060008060808587031215613fc357613fc26150f0565b5b6000613fd187828801613a72565b9450506020613fe287828801613b93565b9350506040613ff387828801613b93565b925050606085013567ffffffffffffffff811115614014576140136150eb565b5b61402087828801613b37565b91505092959194509250565b60008060408385031215614043576140426150f0565b5b600083013567ffffffffffffffff811115614061576140606150eb565b5b61406d85828601613a87565b925050602083013567ffffffffffffffff81111561408e5761408d6150eb565b5b61409a85828601613ab5565b9150509250929050565b6000602082840312156140ba576140b96150f0565b5b60006140c884828501613af8565b91505092915050565b6000602082840312156140e7576140e66150f0565b5b60006140f584828501613b0d565b91505092915050565b600060208284031215614114576141136150f0565b5b600061412284828501613b22565b91505092915050565b600060208284031215614141576141406150f0565b5b600082013567ffffffffffffffff81111561415f5761415e6150eb565b5b61416b84828501613b65565b91505092915050565b60006020828403121561418a576141896150f0565b5b600061419884828501613b93565b91505092915050565b6000602082840312156141b7576141b66150f0565b5b60006141c584828501613ba8565b91505092915050565b60006141da83836146b8565b60208301905092915050565b6141ef81614e06565b82525050565b600061420082614cd4565b61420a8185614d02565b935061421583614caf565b8060005b8381101561424657815161422d88826141ce565b975061423883614cf5565b925050600181019050614219565b5085935050505092915050565b61425c81614e18565b82525050565b600061426d82614cdf565b6142778185614d13565b9350614287818560208601614ebf565b614290816150f5565b840191505092915050565b6142a481614e7a565b82525050565b60006142b582614cea565b6142bf8185614d2f565b93506142cf818560208601614ebf565b6142d8816150f5565b840191505092915050565b60006142ee82614cea565b6142f88185614d40565b9350614308818560208601614ebf565b80840191505092915050565b6000815461432181614ef2565b61432b8186614d40565b9450600182166000811461434657600181146143575761438a565b60ff1983168652818601935061438a565b61436085614cbf565b60005b8381101561438257815481890152600182019150602081019050614363565b838801955050505b50505092915050565b60006143a0603483614d2f565b91506143ab82615113565b604082019050919050565b60006143c3602883614d2f565b91506143ce82615162565b604082019050919050565b60006143e6601483614d2f565b91506143f1826151b1565b602082019050919050565b6000614409602b83614d2f565b9150614414826151da565b604082019050919050565b600061442c602683614d2f565b915061443782615229565b604082019050919050565b600061444f602483614d2f565b915061445a82615278565b604082019050919050565b6000614472602983614d2f565b915061447d826152c7565b604082019050919050565b6000614495601083614d2f565b91506144a082615316565b602082019050919050565b60006144b8602583614d2f565b91506144c38261533f565b604082019050919050565b60006144db603283614d2f565b91506144e68261538e565b604082019050919050565b60006144fe601083614d2f565b9150614509826153dd565b602082019050919050565b6000614521602383614d2f565b915061452c82615406565b604082019050919050565b6000614544602a83614d2f565b915061454f82615455565b604082019050919050565b6000614567600583614d40565b9150614572826154a4565b600582019050919050565b600061458a602083614d2f565b9150614595826154cd565b602082019050919050565b60006145ad602883614d2f565b91506145b8826154f6565b604082019050919050565b60006145d0600083614d24565b91506145db82615545565b600082019050919050565b60006145f3601083614d2f565b91506145fe82615548565b602082019050919050565b6000614616600683614d40565b915061462182615571565b600682019050919050565b6000614639602983614d2f565b91506146448261559a565b604082019050919050565b600061465c602983614d2f565b9150614667826155e9565b604082019050919050565b600061467f602883614d2f565b915061468a82615638565b604082019050919050565b60006146a2602183614d2f565b91506146ad82615687565b604082019050919050565b6146c181614e70565b82525050565b6146d081614e70565b82525050565b60006146e28285614314565b91506146ee82846142e3565b91506146f98261455a565b91508190509392505050565b60006147118284614314565b915061471c82614609565b91506147278261455a565b915081905092915050565b600061473d826145c3565b9150819050919050565b600060208201905061475c60008301846141e6565b92915050565b600060a08201905061477760008301886141e6565b61478460208301876141e6565b818103604083015261479681866141f5565b905081810360608301526147aa81856141f5565b905081810360808301526147be8184614262565b90509695505050505050565b60006060820190506147df60008301866141e6565b6147ec60208301856141e6565b6147f960408301846146c7565b949350505050565b600060a08201905061481660008301886141e6565b61482360208301876141e6565b61483060408301866146c7565b61483d60608301856146c7565b818103608083015261484f8184614262565b90509695505050505050565b6000602082019050818103600083015261487581846141f5565b905092915050565b6000604082019050818103600083015261489781856141f5565b905081810360208301526148ab81846141f5565b90509392505050565b60006020820190506148c96000830184614253565b92915050565b60006020820190506148e4600083018461429b565b92915050565b6000602082019050818103600083015261490481846142aa565b905092915050565b6000602082019050818103600083015261492581614393565b9050919050565b60006020820190508181036000830152614945816143b6565b9050919050565b60006020820190508181036000830152614965816143d9565b9050919050565b60006020820190508181036000830152614985816143fc565b9050919050565b600060208201905081810360008301526149a58161441f565b9050919050565b600060208201905081810360008301526149c581614442565b9050919050565b600060208201905081810360008301526149e581614465565b9050919050565b60006020820190508181036000830152614a0581614488565b9050919050565b60006020820190508181036000830152614a25816144ab565b9050919050565b60006020820190508181036000830152614a45816144ce565b9050919050565b60006020820190508181036000830152614a65816144f1565b9050919050565b60006020820190508181036000830152614a8581614514565b9050919050565b60006020820190508181036000830152614aa581614537565b9050919050565b60006020820190508181036000830152614ac58161457d565b9050919050565b60006020820190508181036000830152614ae5816145a0565b9050919050565b60006020820190508181036000830152614b05816145e6565b9050919050565b60006020820190508181036000830152614b258161462c565b9050919050565b60006020820190508181036000830152614b458161464f565b9050919050565b60006020820190508181036000830152614b6581614672565b9050919050565b60006020820190508181036000830152614b8581614695565b9050919050565b6000602082019050614ba160008301846146c7565b92915050565b6000604082019050614bbc60008301856146c7565b614bc960208301846146c7565b9392505050565b6000614bda614beb565b9050614be68282614f24565b919050565b6000604051905090565b600067ffffffffffffffff821115614c1057614c0f61508b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c3c57614c3b61508b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c6857614c6761508b565b5b614c71826150f5565b9050602081019050919050565b600067ffffffffffffffff821115614c9957614c9861508b565b5b614ca2826150f5565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d5682614e70565b9150614d6183614e70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9657614d95614fcf565b5b828201905092915050565b6000614dac82614e70565b9150614db783614e70565b925082614dc757614dc6614ffe565b5b828204905092915050565b6000614ddd82614e70565b9150614de883614e70565b925082821015614dfb57614dfa614fcf565b5b828203905092915050565b6000614e1182614e50565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e8582614e8c565b9050919050565b6000614e9782614e9e565b9050919050565b6000614ea982614e50565b9050919050565b82818337600083830152505050565b60005b83811015614edd578082015181840152602081019050614ec2565b83811115614eec576000848401525b50505050565b60006002820490506001821680614f0a57607f821691505b60208210811415614f1e57614f1d61502d565b5b50919050565b614f2d826150f5565b810181811067ffffffffffffffff82111715614f4c57614f4b61508b565b5b80604052505050565b6000614f6082614e70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f9357614f92614fcf565b5b600182019050919050565b6000614fa982614e70565b9150614fb483614e70565b925082614fc457614fc3614ffe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156150d95760046000803e6150d6600051615106565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d696e74206e6f74206163746976652e00000000000000000000000000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f6d757365756d0000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156156e657615769565b6156ee614beb565b60043d036004823e80513d602482011167ffffffffffffffff82111715615716575050615769565b808201805167ffffffffffffffff8111156157345750505050615769565b80602083010160043d038501811115615751575050505050615769565b61576082602001850186614f24565b82955050505050505b90565b61577581614e06565b811461578057600080fd5b50565b61578c81614e18565b811461579757600080fd5b50565b6157a381614e24565b81146157ae57600080fd5b50565b6157ba81614e70565b81146157c557600080fd5b5056fea264697066735822122098fcc8535b09b31a83b641ccd2cfccd01034f10652ad0b686f80db64d350e05e64736f6c63430008070033000000000000000000000000a93fce39d926527af68b8520fb55e2f74d9201b5

Deployed Bytecode

0x6080604052600436106102335760003560e01c80638456cb591161012e578063dd1e5bf3116100ab578063f2fde38b1161006f578063f2fde38b146107f8578063f4a0a52814610821578063f508a1151461084a578063f5298aca14610873578063fd4eccb91461089c5761023a565b8063dd1e5bf314610739578063df6533b414610750578063e8a3d48514610767578063e985e9c514610792578063f242432a146107cf5761023a565b8063ac446002116100f2578063ac44600214610654578063b31b09af1461066b578063bd85b03914610694578063c733bb20146106d1578063c87b56dd146106fc5761023a565b80638456cb59146105935780638da5cb5b146105aa57806395d89b41146105d5578063a22cb46514610600578063ab8d38a6146106295761023a565b80633f4ba83a116101bc5780635c975abb116101805780635c975abb146104d45780636b20c454146104ff578063715018a614610528578063731133e91461053f57806377a4cfe1146105685761023a565b80633f4ba83a146103ef57806347230c59146104065780634e1273f4146104315780634f558e791461046e57806356fd4b21146104ab5761023a565b806306fdde031161020357806306fdde031461030a5780630e89341c146103355780631f7fdffa1461037257806328f833b71461039b5780632eb2c2d6146103c65761023a565b8062fdd58e1461023c57806301ffc9a71461027957806302fe5305146102b657806303ee438c146102df5761023a565b3661023a57005b005b34801561024857600080fd5b50610263600480360381019061025e9190613f16565b6108c7565b6040516102709190614b8c565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b91906140d1565b610990565b6040516102ad91906148b4565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d8919061412b565b610a72565b005b3480156102eb57600080fd5b506102f4610b08565b60405161030191906148ea565b60405180910390f35b34801561031657600080fd5b5061031f610b96565b60405161032c91906148ea565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190614174565b610c24565b60405161036991906148ea565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190613e1b565b610c85565b005b3480156103a757600080fd5b506103b0610d13565b6040516103bd9190614747565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190613c2a565b610d39565b005b3480156103fb57600080fd5b50610404610dda565b005b34801561041257600080fd5b5061041b610e60565b6040516104289190614b8c565b60405180910390f35b34801561043d57600080fd5b506104586004803603810190610453919061402c565b610e66565b604051610465919061485b565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190614174565b610f7f565b6040516104a291906148b4565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190614174565b610f93565b005b3480156104e057600080fd5b506104e9611019565b6040516104f691906148b4565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190613d90565b611030565b005b34801561053457600080fd5b5061053d6110cd565b005b34801561054b57600080fd5b5061056660048036038101906105619190613fa9565b611155565b005b34801561057457600080fd5b5061057d6111e3565b60405161058a9190614b8c565b60405180910390f35b34801561059f57600080fd5b506105a86111e9565b005b3480156105b657600080fd5b506105bf61126f565b6040516105cc9190614747565b60405180910390f35b3480156105e157600080fd5b506105ea611299565b6040516105f791906148ea565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613ed6565b611327565b005b34801561063557600080fd5b5061063e61133d565b60405161064b9190614b8c565b60405180910390f35b34801561066057600080fd5b50610669611343565b005b34801561067757600080fd5b50610692600480360381019061068d9190614174565b61146e565b005b3480156106a057600080fd5b506106bb60048036038101906106b69190614174565b6114f4565b6040516106c89190614b8c565b60405180910390f35b3480156106dd57600080fd5b506106e6611511565b6040516106f391906148cf565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614174565b611537565b60405161073091906148ea565b60405180910390f35b34801561074557600080fd5b5061074e611598565b005b34801561075c57600080fd5b5061076561166e565b005b34801561077357600080fd5b5061077c611817565b60405161078991906148ea565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190613bea565b61186c565b6040516107c691906148b4565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f19190613cf9565b611900565b005b34801561080457600080fd5b5061081f600480360381019061081a9190613bbd565b611ad5565b005b34801561082d57600080fd5b5061084860048036038101906108439190614174565b611bcd565b005b34801561085657600080fd5b50610871600480360381019061086c9190613bbd565b611c53565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613f56565b611d13565b005b3480156108a857600080fd5b506108b1611db0565b6040516108be91906148b4565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061496c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6b5750610a6a82611dc3565b5b9050919050565b610a7a611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610a9861126f565b73ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590614aac565b60405180910390fd5b80600a9080519060200190610b0492919061386b565b5050565b600a8054610b1590614ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4190614ef2565b8015610b8e5780601f10610b6357610100808354040283529160200191610b8e565b820191906000526020600020905b815481529060010190602001808311610b7157829003601f168201915b505050505081565b600b8054610ba390614ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcf90614ef2565b8015610c1c5780601f10610bf157610100808354040283529160200191610c1c565b820191906000526020600020905b815481529060010190602001808311610bff57829003601f168201915b505050505081565b60606000600a8054610c3590614ef2565b90501415610c525760405180602001604052806000815250610c7e565b600a610c5d83611e35565b604051602001610c6e9291906146d6565b6040516020818303038152906040525b9050919050565b610c8d611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610cab61126f565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890614aac565b60405180910390fd5b610d0d84848484611f96565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d41611e2d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d875750610d8685610d81611e2d565b61186c565b5b610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90614a2c565b60405180910390fd5b610dd385858585856121c3565b5050505050565b610de2611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610e0061126f565b73ffffffffffffffffffffffffffffffffffffffff1614610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90614aac565b60405180910390fd5b610e5e6124e5565b565b60065481565b60608151835114610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390614b2c565b60405180910390fd5b6000835167ffffffffffffffff811115610ec957610ec861508b565b5b604051908082528060200260200182016040528015610ef75781602001602082028036833780820191505090505b50905060005b8451811015610f7457610f44858281518110610f1c57610f1b61505c565b5b6020026020010151858381518110610f3757610f3661505c565b5b60200260200101516108c7565b828281518110610f5757610f5661505c565b5b60200260200101818152505080610f6d90614f55565b9050610efd565b508091505092915050565b600080610f8b836114f4565b119050919050565b610f9b611e2d565b73ffffffffffffffffffffffffffffffffffffffff16610fb961126f565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614aac565b60405180910390fd5b8060068190555050565b6000600360149054906101000a900460ff16905090565b611038611e2d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061107e575061107d83611078611e2d565b61186c565b5b6110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b4906149cc565b60405180910390fd5b6110c8838383612587565b505050565b6110d5611e2d565b73ffffffffffffffffffffffffffffffffffffffff166110f361126f565b73ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614aac565b60405180910390fd5b6111536000612856565b565b61115d611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661117b61126f565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890614aac565b60405180910390fd5b6111dd8484848461291c565b50505050565b60075481565b6111f1611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661120f61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614aac565b60405180910390fd5b61126d612acd565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c80546112a690614ef2565b80601f01602080910402602001604051908101604052809291908181526020018280546112d290614ef2565b801561131f5780601f106112f45761010080835404028352916020019161131f565b820191906000526020600020905b81548152906001019060200180831161130257829003601f168201915b505050505081565b611339611332611e2d565b8383612b70565b5050565b60055481565b61134b611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661136961126f565b73ffffffffffffffffffffffffffffffffffffffff16146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690614aac565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516113e590614732565b60006040518083038185875af1925050503d8060008114611422576040519150601f19603f3d011682016040523d82523d6000602084013e611427565b606091505b505090508061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614aec565b60405180910390fd5b50565b611476611e2d565b73ffffffffffffffffffffffffffffffffffffffff1661149461126f565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190614aac565b60405180910390fd5b8060078190555050565b600060046000838152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600a805461154890614ef2565b905014156115655760405180602001604052806000815250611591565b600a61157083611e35565b6040516020016115819291906146d6565b6040516020818303038152906040525b9050919050565b6115a0611e2d565b73ffffffffffffffffffffffffffffffffffffffff166115be61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614aac565b60405180910390fd5b60011515600960149054906101000a900460ff1615151415611650576000600960146101000a81548160ff02191690831515021790555061166c565b6001600960146101000a81548160ff0219169083151502179055505b565b611676611019565b156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad906149ec565b60405180910390fd5b6000600654116116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290614a4c565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005546040518463ffffffff1660e01b815260040161177e939291906147ca565b602060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d091906140a4565b506118153360065460016040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525061291c565b565b60606000600a805461182890614ef2565b905014156118455760405180602001604052806000815250611867565b600a6040516020016118579190614705565b6040516020818303038152906040525b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611908611e2d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061194e575061194d85611948611e2d565b61186c565b5b61198d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611984906149cc565b60405180910390fd5b61199a8585858585612cdd565b600960149054906101000a900460ff1680156119b857506000600654115b8015611a6e57506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401611a1c9190614747565b60206040518083038186803b158015611a3457600080fd5b505afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c91906141a1565b145b8015611a8357506001611a8185856108c7565b145b15611ace57611acd856006546007546040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525061291c565b5b5050505050565b611add611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611afb61126f565b73ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890614aac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb89061498c565b60405180910390fd5b611bca81612856565b50565b611bd5611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611bf361126f565b73ffffffffffffffffffffffffffffffffffffffff1614611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614aac565b60405180910390fd5b8060058190555050565b611c5b611e2d565b73ffffffffffffffffffffffffffffffffffffffff16611c7961126f565b73ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614aac565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d1b611e2d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611d615750611d6083611d5b611e2d565b61186c565b5b611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d97906149cc565b60405180910390fd5b611dab838383612f79565b505050565b600960149054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415611e7d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f91565b600082905060005b60008214611eaf578080611e9890614f55565b915050600a82611ea89190614da1565b9150611e85565b60008167ffffffffffffffff811115611ecb57611eca61508b565b5b6040519080825280601f01601f191660200182016040528015611efd5781602001600182028036833780820191505090505b5090505b60008514611f8a57600182611f169190614dd2565b9150600a85611f259190614f9e565b6030611f319190614d4b565b60f81b818381518110611f4757611f4661505c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f839190614da1565b9450611f01565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90614b6c565b60405180910390fd5b815183511461204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190614b4c565b60405180910390fd5b6000612054611e2d565b9050612065816000878787876131c0565b60005b845181101561211e578381815181106120845761208361505c565b5b60200260200101516000808784815181106120a2576120a161505c565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121049190614d4b565b92505081905550808061211690614f55565b915050612068565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161219692919061487d565b60405180910390a46121ad8160008787878761321e565b6121bc81600087878787613226565b5050505050565b8151835114612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90614b4c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90614a0c565b60405180910390fd5b6000612281611e2d565b90506122918187878787876131c0565b60005b84518110156124425760008582815181106122b2576122b161505c565b5b6020026020010151905060008583815181106122d1576122d061505c565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990614a8c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124279190614d4b565b925050819055505050508061243b90614f55565b9050612294565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124b992919061487d565b60405180910390a46124cf81878787878761321e565b6124dd818787878787613226565b505050505050565b6124ed611019565b61252c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125239061494c565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612570611e2d565b60405161257d9190614747565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee90614a6c565b60405180910390fd5b805182511461263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263290614b4c565b60405180910390fd5b6000612645611e2d565b9050612665818560008686604051806020016040528060008152506131c0565b60005b83518110156127b25760008482815181106126865761268561505c565b5b6020026020010151905060008483815181106126a5576126a461505c565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d906149ac565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806127aa90614f55565b915050612668565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161282a92919061487d565b60405180910390a46128508185600086866040518060200160405280600081525061321e565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561298c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298390614b6c565b60405180910390fd5b6000612996611e2d565b905060006129a38561340d565b905060006129b08561340d565b90506129c1836000898585896131c0565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a209190614d4b565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a9e929190614ba7565b60405180910390a4612ab58360008985858961321e565b612ac483600089898989613487565b50505050505050565b612ad5611019565b15612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c906149ec565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b59611e2d565b604051612b669190614747565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd690614b0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cd091906148b4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4490614a0c565b60405180910390fd5b6000612d57611e2d565b90506000612d648561340d565b90506000612d718561340d565b9050612d818389898585896131c0565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0f90614a8c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ecd9190614d4b565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612f4a929190614ba7565b60405180910390a4612f60848a8a86868a61321e565b612f6e848a8a8a8a8a613487565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe090614a6c565b60405180910390fd5b6000612ff3611e2d565b905060006130008461340d565b9050600061300d8461340d565b905061302d838760008585604051806020016040528060008152506131c0565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156130c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bb906149ac565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613191929190614ba7565b60405180910390a46131b78488600086866040518060200160405280600081525061321e565b50505050505050565b6131c8611019565b15613208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ff906149ec565b60405180910390fd5b61321686868686868661366e565b505050505050565b505050505050565b6132458473ffffffffffffffffffffffffffffffffffffffff16613840565b15613405578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161328b959493929190614762565b602060405180830381600087803b1580156132a557600080fd5b505af19250505080156132d657506040513d601f19601f820116820180604052508101906132d391906140fe565b60015b61337c576132e26150ba565b806308c379a0141561333f57506132f76156d6565b806133025750613341565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333691906148ea565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061490c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fa9061492c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561342c5761342b61508b565b5b60405190808252806020026020018201604052801561345a5781602001602082028036833780820191505090505b50905082816000815181106134725761347161505c565b5b60200260200101818152505080915050919050565b6134a68473ffffffffffffffffffffffffffffffffffffffff16613840565b15613666578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016134ec959493929190614801565b602060405180830381600087803b15801561350657600080fd5b505af192505050801561353757506040513d601f19601f8201168201806040525081019061353491906140fe565b60015b6135dd576135436150ba565b806308c379a014156135a057506135586156d6565b8061356357506135a2565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359791906148ea565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d49061490c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365b9061492c565b60405180910390fd5b505b505050505050565b61367c868686868686613863565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561372e5760005b835181101561372c578281815181106136d0576136cf61505c565b5b6020026020010151600460008684815181106136ef576136ee61505c565b5b6020026020010151815260200190815260200160002060008282546137149190614d4b565b925050819055508061372590614f55565b90506136b4565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138385760005b83518110156138365760008482815181106137845761378361505c565b5b6020026020010151905060008483815181106137a3576137a261505c565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015613808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ff90614acc565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061382f90614f55565b9050613766565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461387790614ef2565b90600052602060002090601f01602090048101928261389957600085556138e0565b82601f106138b257805160ff19168380011785556138e0565b828001600101855582156138e0579182015b828111156138df5782518255916020019190600101906138c4565b5b5090506138ed91906138f1565b5090565b5b8082111561390a5760008160009055506001016138f2565b5090565b600061392161391c84614bf5565b614bd0565b90508083825260208201905082856020860282011115613944576139436150e1565b5b60005b85811015613974578161395a8882613a72565b845260208401935060208301925050600181019050613947565b5050509392505050565b600061399161398c84614c21565b614bd0565b905080838252602082019050828560208602820111156139b4576139b36150e1565b5b60005b858110156139e457816139ca8882613b93565b8452602084019350602083019250506001810190506139b7565b5050509392505050565b6000613a016139fc84614c4d565b614bd0565b905082815260208101848484011115613a1d57613a1c6150e6565b5b613a28848285614eb0565b509392505050565b6000613a43613a3e84614c7e565b614bd0565b905082815260208101848484011115613a5f57613a5e6150e6565b5b613a6a848285614eb0565b509392505050565b600081359050613a818161576c565b92915050565b600082601f830112613a9c57613a9b6150dc565b5b8135613aac84826020860161390e565b91505092915050565b600082601f830112613aca57613ac96150dc565b5b8135613ada84826020860161397e565b91505092915050565b600081359050613af281615783565b92915050565b600081519050613b0781615783565b92915050565b600081359050613b1c8161579a565b92915050565b600081519050613b318161579a565b92915050565b600082601f830112613b4c57613b4b6150dc565b5b8135613b5c8482602086016139ee565b91505092915050565b600082601f830112613b7a57613b796150dc565b5b8135613b8a848260208601613a30565b91505092915050565b600081359050613ba2816157b1565b92915050565b600081519050613bb7816157b1565b92915050565b600060208284031215613bd357613bd26150f0565b5b6000613be184828501613a72565b91505092915050565b60008060408385031215613c0157613c006150f0565b5b6000613c0f85828601613a72565b9250506020613c2085828601613a72565b9150509250929050565b600080600080600060a08688031215613c4657613c456150f0565b5b6000613c5488828901613a72565b9550506020613c6588828901613a72565b945050604086013567ffffffffffffffff811115613c8657613c856150eb565b5b613c9288828901613ab5565b935050606086013567ffffffffffffffff811115613cb357613cb26150eb565b5b613cbf88828901613ab5565b925050608086013567ffffffffffffffff811115613ce057613cdf6150eb565b5b613cec88828901613b37565b9150509295509295909350565b600080600080600060a08688031215613d1557613d146150f0565b5b6000613d2388828901613a72565b9550506020613d3488828901613a72565b9450506040613d4588828901613b93565b9350506060613d5688828901613b93565b925050608086013567ffffffffffffffff811115613d7757613d766150eb565b5b613d8388828901613b37565b9150509295509295909350565b600080600060608486031215613da957613da86150f0565b5b6000613db786828701613a72565b935050602084013567ffffffffffffffff811115613dd857613dd76150eb565b5b613de486828701613ab5565b925050604084013567ffffffffffffffff811115613e0557613e046150eb565b5b613e1186828701613ab5565b9150509250925092565b60008060008060808587031215613e3557613e346150f0565b5b6000613e4387828801613a72565b945050602085013567ffffffffffffffff811115613e6457613e636150eb565b5b613e7087828801613ab5565b935050604085013567ffffffffffffffff811115613e9157613e906150eb565b5b613e9d87828801613ab5565b925050606085013567ffffffffffffffff811115613ebe57613ebd6150eb565b5b613eca87828801613b37565b91505092959194509250565b60008060408385031215613eed57613eec6150f0565b5b6000613efb85828601613a72565b9250506020613f0c85828601613ae3565b9150509250929050565b60008060408385031215613f2d57613f2c6150f0565b5b6000613f3b85828601613a72565b9250506020613f4c85828601613b93565b9150509250929050565b600080600060608486031215613f6f57613f6e6150f0565b5b6000613f7d86828701613a72565b9350506020613f8e86828701613b93565b9250506040613f9f86828701613b93565b9150509250925092565b60008060008060808587031215613fc357613fc26150f0565b5b6000613fd187828801613a72565b9450506020613fe287828801613b93565b9350506040613ff387828801613b93565b925050606085013567ffffffffffffffff811115614014576140136150eb565b5b61402087828801613b37565b91505092959194509250565b60008060408385031215614043576140426150f0565b5b600083013567ffffffffffffffff811115614061576140606150eb565b5b61406d85828601613a87565b925050602083013567ffffffffffffffff81111561408e5761408d6150eb565b5b61409a85828601613ab5565b9150509250929050565b6000602082840312156140ba576140b96150f0565b5b60006140c884828501613af8565b91505092915050565b6000602082840312156140e7576140e66150f0565b5b60006140f584828501613b0d565b91505092915050565b600060208284031215614114576141136150f0565b5b600061412284828501613b22565b91505092915050565b600060208284031215614141576141406150f0565b5b600082013567ffffffffffffffff81111561415f5761415e6150eb565b5b61416b84828501613b65565b91505092915050565b60006020828403121561418a576141896150f0565b5b600061419884828501613b93565b91505092915050565b6000602082840312156141b7576141b66150f0565b5b60006141c584828501613ba8565b91505092915050565b60006141da83836146b8565b60208301905092915050565b6141ef81614e06565b82525050565b600061420082614cd4565b61420a8185614d02565b935061421583614caf565b8060005b8381101561424657815161422d88826141ce565b975061423883614cf5565b925050600181019050614219565b5085935050505092915050565b61425c81614e18565b82525050565b600061426d82614cdf565b6142778185614d13565b9350614287818560208601614ebf565b614290816150f5565b840191505092915050565b6142a481614e7a565b82525050565b60006142b582614cea565b6142bf8185614d2f565b93506142cf818560208601614ebf565b6142d8816150f5565b840191505092915050565b60006142ee82614cea565b6142f88185614d40565b9350614308818560208601614ebf565b80840191505092915050565b6000815461432181614ef2565b61432b8186614d40565b9450600182166000811461434657600181146143575761438a565b60ff1983168652818601935061438a565b61436085614cbf565b60005b8381101561438257815481890152600182019150602081019050614363565b838801955050505b50505092915050565b60006143a0603483614d2f565b91506143ab82615113565b604082019050919050565b60006143c3602883614d2f565b91506143ce82615162565b604082019050919050565b60006143e6601483614d2f565b91506143f1826151b1565b602082019050919050565b6000614409602b83614d2f565b9150614414826151da565b604082019050919050565b600061442c602683614d2f565b915061443782615229565b604082019050919050565b600061444f602483614d2f565b915061445a82615278565b604082019050919050565b6000614472602983614d2f565b915061447d826152c7565b604082019050919050565b6000614495601083614d2f565b91506144a082615316565b602082019050919050565b60006144b8602583614d2f565b91506144c38261533f565b604082019050919050565b60006144db603283614d2f565b91506144e68261538e565b604082019050919050565b60006144fe601083614d2f565b9150614509826153dd565b602082019050919050565b6000614521602383614d2f565b915061452c82615406565b604082019050919050565b6000614544602a83614d2f565b915061454f82615455565b604082019050919050565b6000614567600583614d40565b9150614572826154a4565b600582019050919050565b600061458a602083614d2f565b9150614595826154cd565b602082019050919050565b60006145ad602883614d2f565b91506145b8826154f6565b604082019050919050565b60006145d0600083614d24565b91506145db82615545565b600082019050919050565b60006145f3601083614d2f565b91506145fe82615548565b602082019050919050565b6000614616600683614d40565b915061462182615571565b600682019050919050565b6000614639602983614d2f565b91506146448261559a565b604082019050919050565b600061465c602983614d2f565b9150614667826155e9565b604082019050919050565b600061467f602883614d2f565b915061468a82615638565b604082019050919050565b60006146a2602183614d2f565b91506146ad82615687565b604082019050919050565b6146c181614e70565b82525050565b6146d081614e70565b82525050565b60006146e28285614314565b91506146ee82846142e3565b91506146f98261455a565b91508190509392505050565b60006147118284614314565b915061471c82614609565b91506147278261455a565b915081905092915050565b600061473d826145c3565b9150819050919050565b600060208201905061475c60008301846141e6565b92915050565b600060a08201905061477760008301886141e6565b61478460208301876141e6565b818103604083015261479681866141f5565b905081810360608301526147aa81856141f5565b905081810360808301526147be8184614262565b90509695505050505050565b60006060820190506147df60008301866141e6565b6147ec60208301856141e6565b6147f960408301846146c7565b949350505050565b600060a08201905061481660008301886141e6565b61482360208301876141e6565b61483060408301866146c7565b61483d60608301856146c7565b818103608083015261484f8184614262565b90509695505050505050565b6000602082019050818103600083015261487581846141f5565b905092915050565b6000604082019050818103600083015261489781856141f5565b905081810360208301526148ab81846141f5565b90509392505050565b60006020820190506148c96000830184614253565b92915050565b60006020820190506148e4600083018461429b565b92915050565b6000602082019050818103600083015261490481846142aa565b905092915050565b6000602082019050818103600083015261492581614393565b9050919050565b60006020820190508181036000830152614945816143b6565b9050919050565b60006020820190508181036000830152614965816143d9565b9050919050565b60006020820190508181036000830152614985816143fc565b9050919050565b600060208201905081810360008301526149a58161441f565b9050919050565b600060208201905081810360008301526149c581614442565b9050919050565b600060208201905081810360008301526149e581614465565b9050919050565b60006020820190508181036000830152614a0581614488565b9050919050565b60006020820190508181036000830152614a25816144ab565b9050919050565b60006020820190508181036000830152614a45816144ce565b9050919050565b60006020820190508181036000830152614a65816144f1565b9050919050565b60006020820190508181036000830152614a8581614514565b9050919050565b60006020820190508181036000830152614aa581614537565b9050919050565b60006020820190508181036000830152614ac58161457d565b9050919050565b60006020820190508181036000830152614ae5816145a0565b9050919050565b60006020820190508181036000830152614b05816145e6565b9050919050565b60006020820190508181036000830152614b258161462c565b9050919050565b60006020820190508181036000830152614b458161464f565b9050919050565b60006020820190508181036000830152614b6581614672565b9050919050565b60006020820190508181036000830152614b8581614695565b9050919050565b6000602082019050614ba160008301846146c7565b92915050565b6000604082019050614bbc60008301856146c7565b614bc960208301846146c7565b9392505050565b6000614bda614beb565b9050614be68282614f24565b919050565b6000604051905090565b600067ffffffffffffffff821115614c1057614c0f61508b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c3c57614c3b61508b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614c6857614c6761508b565b5b614c71826150f5565b9050602081019050919050565b600067ffffffffffffffff821115614c9957614c9861508b565b5b614ca2826150f5565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d5682614e70565b9150614d6183614e70565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d9657614d95614fcf565b5b828201905092915050565b6000614dac82614e70565b9150614db783614e70565b925082614dc757614dc6614ffe565b5b828204905092915050565b6000614ddd82614e70565b9150614de883614e70565b925082821015614dfb57614dfa614fcf565b5b828203905092915050565b6000614e1182614e50565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614e8582614e8c565b9050919050565b6000614e9782614e9e565b9050919050565b6000614ea982614e50565b9050919050565b82818337600083830152505050565b60005b83811015614edd578082015181840152602081019050614ec2565b83811115614eec576000848401525b50505050565b60006002820490506001821680614f0a57607f821691505b60208210811415614f1e57614f1d61502d565b5b50919050565b614f2d826150f5565b810181811067ffffffffffffffff82111715614f4c57614f4b61508b565b5b80604052505050565b6000614f6082614e70565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f9357614f92614fcf565b5b600182019050919050565b6000614fa982614e70565b9150614fb483614e70565b925082614fc457614fc3614ffe565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156150d95760046000803e6150d6600051615106565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d696e74206e6f74206163746976652e00000000000000000000000000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f6d757365756d0000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156156e657615769565b6156ee614beb565b60043d036004823e80513d602482011167ffffffffffffffff82111715615716575050615769565b808201805167ffffffffffffffff8111156157345750505050615769565b80602083010160043d038501811115615751575050505050615769565b61576082602001850186614f24565b82955050505050505b90565b61577581614e06565b811461578057600080fd5b50565b61578c81614e18565b811461579757600080fd5b50565b6157a381614e24565b81146157ae57600080fd5b50565b6157ba81614e70565b81146157c557600080fd5b5056fea264697066735822122098fcc8535b09b31a83b641ccd2cfccd01034f10652ad0b686f80db64d350e05e64736f6c63430008070033

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

000000000000000000000000a93fce39d926527af68b8520fb55e2f74d9201b5

-----Decoded View---------------
Arg [0] : _optixContract (address): 0xa93fce39D926527Af68B8520FB55e2f74D9201b5

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a93fce39d926527af68b8520fb55e2f74d9201b5


Deployed Bytecode Sourcemap

49945:5285:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28207:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27230:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52114:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50496:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50547:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54190:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52820:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50319:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30146:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52494:65;;;;;;;;;;;;;:::i;:::-;;50113:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28604:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44538:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51680:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4522:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46433:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7421:103;;;;;;;;;;;;;:::i;:::-;;52602:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50188:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52392:61;;;;;;;;;;;;;:::i;:::-;;6770:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50619:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29201:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50041:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54885:178;;;;;;;;;;;;;:::i;:::-;;51273:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44327:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50259:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54420:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51891:170;;;;;;;;;;;;;:::i;:::-;;50873:352;;;;;;;;;;;;;:::i;:::-;;54647:188;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29428:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53464:716;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7679:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52259:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51461:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46104:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50428:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28207:231;28293:7;28340:1;28321:21;;:7;:21;;;;28313:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28408:9;:13;28418:2;28408:13;;;;;;;;;;;:22;28422:7;28408:22;;;;;;;;;;;;;;;;28401:29;;28207:231;;;;:::o;27230:310::-;27332:4;27384:26;27369:41;;;:11;:41;;;;:110;;;;27442:37;27427:52;;;:11;:52;;;;27369:110;:163;;;;27496:36;27520:11;27496:23;:36::i;:::-;27369:163;27349:183;;27230:310;;;:::o;52114:94::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52194:6:::1;52180:11;:20;;;;;;;;;;;;:::i;:::-;;52114:94:::0;:::o;50496:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50547:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54190:222::-;54259:13;54322:1;54299:11;54293:25;;;;;:::i;:::-;;;:30;;:111;;;;;;;;;;;;;;;;;54350:11;54363:26;54380:8;54363:16;:26::i;:::-;54333:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54293:111;54286:118;;54190:222;;;:::o;52820:191::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52969:34:::1;52980:2;52984:3;52989:7;52998:4;52969:10;:34::i;:::-;52820:191:::0;;;;:::o;50319:74::-;;;;;;;;;;;;;:::o;30146:442::-;30387:12;:10;:12::i;:::-;30379:20;;:4;:20;;;:60;;;;30403:36;30420:4;30426:12;:10;:12::i;:::-;30403:16;:36::i;:::-;30379:60;30357:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;30528:52;30551:4;30557:2;30561:3;30566:7;30575:4;30528:22;:52::i;:::-;30146:442;;;;;:::o;52494:65::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52541:10:::1;:8;:10::i;:::-;52494:65::o:0;50113:32::-;;;;:::o;28604:524::-;28760:16;28821:3;:10;28802:8;:15;:29;28794:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28890:30;28937:8;:15;28923:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28890:63;;28971:9;28966:122;28990:8;:15;28986:1;:19;28966:122;;;29046:30;29056:8;29065:1;29056:11;;;;;;;;:::i;:::-;;;;;;;;29069:3;29073:1;29069:6;;;;;;;;:::i;:::-;;;;;;;;29046:9;:30::i;:::-;29027:13;29041:1;29027:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;29007:3;;;;:::i;:::-;;;28966:122;;;;29107:13;29100:20;;;28604:524;;;;:::o;44538:122::-;44595:4;44651:1;44619:29;44645:2;44619:25;:29::i;:::-;:33;44612:40;;44538:122;;;:::o;51680:161::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51816:17:::1;51797:16;:36;;;;51680:161:::0;:::o;4522:86::-;4569:4;4593:7;;;;;;;;;;;4586:14;;4522:86;:::o;46433:353::-;46609:12;:10;:12::i;:::-;46598:23;;:7;:23;;;:66;;;;46625:39;46642:7;46651:12;:10;:12::i;:::-;46625:16;:39::i;:::-;46598:66;46576:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;46746:32;46757:7;46766:3;46771:6;46746:10;:32::i;:::-;46433:353;;;:::o;7421:103::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:30:::1;7513:1;7486:18;:30::i;:::-;7421:103::o:0;52602:169::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52731:32:::1;52737:7;52746:2;52750:6;52758:4;52731:5;:32::i;:::-;52602:169:::0;;;;:::o;50188:26::-;;;;:::o;52392:61::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52437:8:::1;:6;:8::i;:::-;52392:61::o:0;6770:87::-;6816:7;6843:6;;;;;;;;;;;6836:13;;6770:87;:::o;50619:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29201:155::-;29296:52;29315:12;:10;:12::i;:::-;29329:8;29339;29296:18;:52::i;:::-;29201:155;;:::o;50041:40::-;;;;:::o;54885:178::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54941:12:::1;54959:10;:15;;54982:21;54959:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54940:68;;;55027:7;55019:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;54929:134;54885:178::o:0;51273:129::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51383:11:::1;51370:10;:24;;;;51273:129:::0;:::o;44327:113::-;44389:7;44416:12;:16;44429:2;44416:16;;;;;;;;;;;;44409:23;;44327:113;;;:::o;50259:27::-;;;;;;;;;;;;;:::o;54420:219::-;54486:13;54549:1;54526:11;54520:25;;;;;:::i;:::-;;;:30;;:111;;;;;;;;;;;;;;;;;54577:11;54590:26;54607:8;54590:16;:26::i;:::-;54560:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54520:111;54513:118;;54420:219;;;:::o;51891:170::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51956:4:::1;51943:17;;:9;;;;;;;;;;;:17;;;51940:114;;;51988:5;51976:9;;:17;;;;;;;;;;;;;;;;;;51940:114;;;52038:4;52026:9;;:16;;;;;;;;;;;;;;;;;;51940:114;51891:170::o:0;50873:352::-;4848:8;:6;:8::i;:::-;4847:9;4839:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;50962:1:::1;50943:16;;:20;50935:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;51054:13;;;;;;;;;;;:26;;;51081:10;51100:14;;;;;;;;;;;51116;;51054:77;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51169:46;51175:10;51187:16;;51205:1;51169:46;;;;;;;;;;;;;;;;::::0;:5:::1;:46::i;:::-;50873:352::o:0;54647:188::-;54700:13;54763:1;54740:11;54734:25;;;;;:::i;:::-;;;:30;;:93;;;;;;;;;;;;;;;;;54791:11;54774:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;54734:93;54727:100;;54647:188;:::o;29428:168::-;29527:4;29551:18;:27;29570:7;29551:27;;;;;;;;;;;;;;;:37;29579:8;29551:37;;;;;;;;;;;;;;;;;;;;;;;;;29544:44;;29428:168;;;;:::o;53464:716::-;53680:12;:10;:12::i;:::-;53672:20;;:4;:20;;;:60;;;;53696:36;53713:4;53719:12;:10;:12::i;:::-;53696:16;:36::i;:::-;53672:60;53650:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;53812:45;53830:4;53836:2;53840;53844:6;53852:4;53812:17;:45::i;:::-;53965:9;;;;;;;;;;;:33;;;;;53997:1;53978:16;;:20;53965:33;:69;;;;;54033:1;54002:13;;;;;;;;;;;:23;;;54026:2;54002:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;53965:69;:94;;;;;54058:1;54038:16;54048:2;54051;54038:9;:16::i;:::-;:21;53965:94;53962:211;;;54112:49;54118:4;54124:16;;54142:10;;54112:49;;;;;;;;;;;;;;;;;:5;:49::i;:::-;53962:211;53464:716;;;;;:::o;7679:201::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7788:1:::1;7768:22;;:8;:22;;;;7760:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7844:28;7863:8;7844:18;:28::i;:::-;7679:201:::0;:::o;52259:94::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52339:6:::1;52322:14;:23;;;;52259:94:::0;:::o;51461:155::-;7001:12;:10;:12::i;:::-;6990:23;;:7;:5;:7::i;:::-;:23;;;6982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51593:14:::1;51570:13;;:38;;;;;;;;;;;;;;;;;;51461:155:::0;:::o;46104:321::-;46255:12;:10;:12::i;:::-;46244:23;;:7;:23;;;:66;;;;46271:39;46288:7;46297:12;:10;:12::i;:::-;46271:16;:39::i;:::-;46244:66;46222:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;46392:25;46398:7;46407:2;46411:5;46392;:25::i;:::-;46104:321;;;:::o;50428:28::-;;;;;;;;;;;;;:::o;18523:157::-;18608:4;18647:25;18632:40;;;:11;:40;;;;18625:47;;18523:157;;;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;35933:813::-;36125:1;36111:16;;:2;:16;;;;36103:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36198:7;:14;36184:3;:10;:28;36176:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36270:16;36289:12;:10;:12::i;:::-;36270:31;;36314:66;36335:8;36353:1;36357:2;36361:3;36366:7;36375:4;36314:20;:66::i;:::-;36398:9;36393:103;36417:3;:10;36413:1;:14;36393:103;;;36474:7;36482:1;36474:10;;;;;;;;:::i;:::-;;;;;;;;36449:9;:17;36459:3;36463:1;36459:6;;;;;;;;:::i;:::-;;;;;;;;36449:17;;;;;;;;;;;:21;36467:2;36449:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;36429:3;;;;;:::i;:::-;;;;36393:103;;;;36549:2;36513:53;;36545:1;36513:53;;36527:8;36513:53;;;36553:3;36558:7;36513:53;;;;;;;:::i;:::-;;;;;;;;36579:65;36599:8;36617:1;36621:2;36625:3;36630:7;36639:4;36579:19;:65::i;:::-;36657:81;36693:8;36711:1;36715:2;36719:3;36724:7;36733:4;36657:35;:81::i;:::-;36092:654;35933:813;;;;:::o;32384:1146::-;32611:7;:14;32597:3;:10;:28;32589:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32703:1;32689:16;;:2;:16;;;;32681:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32760:16;32779:12;:10;:12::i;:::-;32760:31;;32804:60;32825:8;32835:4;32841:2;32845:3;32850:7;32859:4;32804:20;:60::i;:::-;32882:9;32877:421;32901:3;:10;32897:1;:14;32877:421;;;32933:10;32946:3;32950:1;32946:6;;;;;;;;:::i;:::-;;;;;;;;32933:19;;32967:14;32984:7;32992:1;32984:10;;;;;;;;:::i;:::-;;;;;;;;32967:27;;33011:19;33033:9;:13;33043:2;33033:13;;;;;;;;;;;:19;33047:4;33033:19;;;;;;;;;;;;;;;;33011:41;;33090:6;33075:11;:21;;33067:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33223:6;33209:11;:20;33187:9;:13;33197:2;33187:13;;;;;;;;;;;:19;33201:4;33187:19;;;;;;;;;;;;;;;:42;;;;33280:6;33259:9;:13;33269:2;33259:13;;;;;;;;;;;:17;33273:2;33259:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32918:380;;;32913:3;;;;:::i;:::-;;;32877:421;;;;33345:2;33315:47;;33339:4;33315:47;;33329:8;33315:47;;;33349:3;33354:7;33315:47;;;;;;;:::i;:::-;;;;;;;;33375:59;33395:8;33405:4;33411:2;33415:3;33420:7;33429:4;33375:19;:59::i;:::-;33447:75;33483:8;33493:4;33499:2;33503:3;33508:7;33517:4;33447:35;:75::i;:::-;32578:952;32384:1146;;;;;:::o;5581:120::-;5125:8;:6;:8::i;:::-;5117:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5650:5:::1;5640:7;;:15;;;;;;;;;;;;;;;;;;5671:22;5680:12;:10;:12::i;:::-;5671:22;;;;;;:::i;:::-;;;;;;;;5581:120::o:0;38007:969::-;38175:1;38159:18;;:4;:18;;;;38151:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38250:7;:14;38236:3;:10;:28;38228:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38322:16;38341:12;:10;:12::i;:::-;38322:31;;38366:66;38387:8;38397:4;38411:1;38415:3;38420:7;38366:66;;;;;;;;;;;;:20;:66::i;:::-;38450:9;38445:373;38469:3;:10;38465:1;:14;38445:373;;;38501:10;38514:3;38518:1;38514:6;;;;;;;;:::i;:::-;;;;;;;;38501:19;;38535:14;38552:7;38560:1;38552:10;;;;;;;;:::i;:::-;;;;;;;;38535:27;;38579:19;38601:9;:13;38611:2;38601:13;;;;;;;;;;;:19;38615:4;38601:19;;;;;;;;;;;;;;;;38579:41;;38658:6;38643:11;:21;;38635:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38785:6;38771:11;:20;38749:9;:13;38759:2;38749:13;;;;;;;;;;;:19;38763:4;38749:19;;;;;;;;;;;;;;;:42;;;;38486:332;;;38481:3;;;;;:::i;:::-;;;;38445:373;;;;38873:1;38835:55;;38859:4;38835:55;;38849:8;38835:55;;;38877:3;38882:7;38835:55;;;;;;;:::i;:::-;;;;;;;;38903:65;38923:8;38933:4;38947:1;38951:3;38956:7;38903:65;;;;;;;;;;;;:19;:65::i;:::-;38140:836;38007:969;;;:::o;8040:191::-;8114:16;8133:6;;;;;;;;;;;8114:25;;8159:8;8150:6;;:17;;;;;;;;;;;;;;;;;;8214:8;8183:40;;8204:8;8183:40;;;;;;;;;;;;8103:128;8040:191;:::o;34848:729::-;35015:1;35001:16;;:2;:16;;;;34993:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35068:16;35087:12;:10;:12::i;:::-;35068:31;;35110:20;35133:21;35151:2;35133:17;:21::i;:::-;35110:44;;35165:24;35192:25;35210:6;35192:17;:25::i;:::-;35165:52;;35230:66;35251:8;35269:1;35273:2;35277:3;35282:7;35291:4;35230:20;:66::i;:::-;35330:6;35309:9;:13;35319:2;35309:13;;;;;;;;;;;:17;35323:2;35309:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35389:2;35352:52;;35385:1;35352:52;;35367:8;35352:52;;;35393:2;35397:6;35352:52;;;;;;;:::i;:::-;;;;;;;;35417:65;35437:8;35455:1;35459:2;35463:3;35468:7;35477:4;35417:19;:65::i;:::-;35495:74;35526:8;35544:1;35548:2;35552;35556:6;35564:4;35495:30;:74::i;:::-;34982:595;;;34848:729;;;;:::o;5322:118::-;4848:8;:6;:8::i;:::-;4847:9;4839:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5392:4:::1;5382:7;;:14;;;;;;;;;;;;;;;;;;5412:20;5419:12;:10;:12::i;:::-;5412:20;;;;;;:::i;:::-;;;;;;;;5322:118::o:0;39118:331::-;39273:8;39264:17;;:5;:17;;;;39256:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39376:8;39338:18;:25;39357:5;39338:25;;;;;;;;;;;;;;;:35;39364:8;39338:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39422:8;39400:41;;39415:5;39400:41;;;39432:8;39400:41;;;;;;:::i;:::-;;;;;;;;39118:331;;;:::o;31052:974::-;31254:1;31240:16;;:2;:16;;;;31232:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31311:16;31330:12;:10;:12::i;:::-;31311:31;;31353:20;31376:21;31394:2;31376:17;:21::i;:::-;31353:44;;31408:24;31435:25;31453:6;31435:17;:25::i;:::-;31408:52;;31473:60;31494:8;31504:4;31510:2;31514:3;31519:7;31528:4;31473:20;:60::i;:::-;31546:19;31568:9;:13;31578:2;31568:13;;;;;;;;;;;:19;31582:4;31568:19;;;;;;;;;;;;;;;;31546:41;;31621:6;31606:11;:21;;31598:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31746:6;31732:11;:20;31710:9;:13;31720:2;31710:13;;;;;;;;;;;:19;31724:4;31710:19;;;;;;;;;;;;;;;:42;;;;31795:6;31774:9;:13;31784:2;31774:13;;;;;;;;;;;:17;31788:2;31774:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31850:2;31819:46;;31844:4;31819:46;;31834:8;31819:46;;;31854:2;31858:6;31819:46;;;;;;;:::i;:::-;;;;;;;;31878:59;31898:8;31908:4;31914:2;31918:3;31923:7;31932:4;31878:19;:59::i;:::-;31950:68;31981:8;31991:4;31997:2;32001;32005:6;32013:4;31950:30;:68::i;:::-;31221:805;;;;31052:974;;;;;:::o;36996:808::-;37139:1;37123:18;;:4;:18;;;;37115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37194:16;37213:12;:10;:12::i;:::-;37194:31;;37236:20;37259:21;37277:2;37259:17;:21::i;:::-;37236:44;;37291:24;37318:25;37336:6;37318:17;:25::i;:::-;37291:52;;37356:66;37377:8;37387:4;37401:1;37405:3;37410:7;37356:66;;;;;;;;;;;;:20;:66::i;:::-;37435:19;37457:9;:13;37467:2;37457:13;;;;;;;;;;;:19;37471:4;37457:19;;;;;;;;;;;;;;;;37435:41;;37510:6;37495:11;:21;;37487:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37629:6;37615:11;:20;37593:9;:13;37603:2;37593:13;;;;;;;;;;;:19;37607:4;37593:19;;;;;;;;;;;;;;;:42;;;;37703:1;37664:54;;37689:4;37664:54;;37679:8;37664:54;;;37707:2;37711:6;37664:54;;;;;;;:::i;:::-;;;;;;;;37731:65;37751:8;37761:4;37775:1;37779:3;37784:7;37731:65;;;;;;;;;;;;:19;:65::i;:::-;37104:700;;;;36996:808;;;:::o;53068:324::-;4848:8;:6;:8::i;:::-;4847:9;4839:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53308:66:::1;53335:8;53345:4;53351:2;53355:3;53360:7;53369:4;53308:26;:66::i;:::-;53068:324:::0;;;;;;:::o;41581:220::-;;;;;;;:::o;42561:813::-;42801:15;:2;:13;;;:15::i;:::-;42797:570;;;42854:2;42837:43;;;42881:8;42891:4;42897:3;42902:7;42911:4;42837:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42833:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;43229:6;43222:14;;;;;;;;;;;:::i;:::-;;;;;;;;42833:523;;;43278:62;;;;;;;;;;:::i;:::-;;;;;;;;42833:523;43010:48;;;42998:60;;;:8;:60;;;;42994:159;;43083:50;;;;;;;;;;:::i;:::-;;;;;;;;42994:159;42917:251;42797:570;42561:813;;;;;;:::o;43382:198::-;43448:16;43477:22;43516:1;43502:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43477:41;;43540:7;43529:5;43535:1;43529:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;43567:5;43560:12;;;43382:198;;;:::o;41809:744::-;42024:15;:2;:13;;;:15::i;:::-;42020:526;;;42077:2;42060:38;;;42099:8;42109:4;42115:2;42119:6;42127:4;42060:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42056:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42408:6;42401:14;;;;;;;;;;;:::i;:::-;;;;;;;;42056:479;;;42457:62;;;;;;;;;;:::i;:::-;;;;;;;;42056:479;42194:43;;;42182:55;;;:8;:55;;;;42178:154;;42262:50;;;;;;;;;;:::i;:::-;;;;;;;;42178:154;42133:214;42020:526;41809:744;;;;;;:::o;44735:931::-;44974:66;45001:8;45011:4;45017:2;45021:3;45026:7;45035:4;44974:26;:66::i;:::-;45073:1;45057:18;;:4;:18;;;45053:160;;;45097:9;45092:110;45116:3;:10;45112:1;:14;45092:110;;;45176:7;45184:1;45176:10;;;;;;;;:::i;:::-;;;;;;;;45152:12;:20;45165:3;45169:1;45165:6;;;;;;;;:::i;:::-;;;;;;;;45152:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;45128:3;;;;:::i;:::-;;;45092:110;;;;45053:160;45243:1;45229:16;;:2;:16;;;45225:434;;;45267:9;45262:386;45286:3;:10;45282:1;:14;45262:386;;;45322:10;45335:3;45339:1;45335:6;;;;;;;;:::i;:::-;;;;;;;;45322:19;;45360:14;45377:7;45385:1;45377:10;;;;;;;;:::i;:::-;;;;;;;;45360:27;;45406:14;45423:12;:16;45436:2;45423:16;;;;;;;;;;;;45406:33;;45476:6;45466;:16;;45458:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45607:6;45598;:15;45579:12;:16;45592:2;45579:16;;;;;;;;;;;:34;;;;45303:345;;;45298:3;;;;:::i;:::-;;;45262:386;;;;45225:434;44735:931;;;;;;:::o;9471:326::-;9531:4;9788:1;9766:7;:19;;;:23;9759:30;;9471:326;;;:::o;40405:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3455:5;3486:6;3480:13;3471:22;;3502:30;3526:5;3502:30;:::i;:::-;3401:137;;;;:::o;3544:::-;3589:5;3627:6;3614:20;3605:29;;3643:32;3669:5;3643:32;:::i;:::-;3544:137;;;;:::o;3687:141::-;3743:5;3774:6;3768:13;3759:22;;3790:32;3816:5;3790:32;:::i;:::-;3687:141;;;;:::o;3847:338::-;3902:5;3951:3;3944:4;3936:6;3932:17;3928:27;3918:122;;3959:79;;:::i;:::-;3918:122;4076:6;4063:20;4101:78;4175:3;4167:6;4160:4;4152:6;4148:17;4101:78;:::i;:::-;4092:87;;3908:277;3847:338;;;;:::o;4205:340::-;4261:5;4310:3;4303:4;4295:6;4291:17;4287:27;4277:122;;4318:79;;:::i;:::-;4277:122;4435:6;4422:20;4460:79;4535:3;4527:6;4520:4;4512:6;4508:17;4460:79;:::i;:::-;4451:88;;4267:278;4205:340;;;;:::o;4551:139::-;4597:5;4635:6;4622:20;4613:29;;4651:33;4678:5;4651:33;:::i;:::-;4551:139;;;;:::o;4696:143::-;4753:5;4784:6;4778:13;4769:22;;4800:33;4827:5;4800:33;:::i;:::-;4696:143;;;;:::o;4845:329::-;4904:6;4953:2;4941:9;4932:7;4928:23;4924:32;4921:119;;;4959:79;;:::i;:::-;4921:119;5079:1;5104:53;5149:7;5140:6;5129:9;5125:22;5104:53;:::i;:::-;5094:63;;5050:117;4845:329;;;;:::o;5180:474::-;5248:6;5256;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5558:2;5584:53;5629:7;5620:6;5609:9;5605:22;5584:53;:::i;:::-;5574:63;;5529:118;5180:474;;;;;:::o;5660:1509::-;5814:6;5822;5830;5838;5846;5895:3;5883:9;5874:7;5870:23;5866:33;5863:120;;;5902:79;;:::i;:::-;5863:120;6022:1;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5993:117;6149:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6120:118;6305:2;6294:9;6290:18;6277:32;6336:18;6328:6;6325:30;6322:117;;;6358:79;;:::i;:::-;6322:117;6463:78;6533:7;6524:6;6513:9;6509:22;6463:78;:::i;:::-;6453:88;;6248:303;6618:2;6607:9;6603:18;6590:32;6649:18;6641:6;6638:30;6635:117;;;6671:79;;:::i;:::-;6635:117;6776:78;6846:7;6837:6;6826:9;6822:22;6776:78;:::i;:::-;6766:88;;6561:303;6931:3;6920:9;6916:19;6903:33;6963:18;6955:6;6952:30;6949:117;;;6985:79;;:::i;:::-;6949:117;7090:62;7144:7;7135:6;7124:9;7120:22;7090:62;:::i;:::-;7080:72;;6874:288;5660:1509;;;;;;;;:::o;7175:1089::-;7279:6;7287;7295;7303;7311;7360:3;7348:9;7339:7;7335:23;7331:33;7328:120;;;7367:79;;:::i;:::-;7328:120;7487:1;7512:53;7557:7;7548:6;7537:9;7533:22;7512:53;:::i;:::-;7502:63;;7458:117;7614:2;7640:53;7685:7;7676:6;7665:9;7661:22;7640:53;:::i;:::-;7630:63;;7585:118;7742:2;7768:53;7813:7;7804:6;7793:9;7789:22;7768:53;:::i;:::-;7758:63;;7713:118;7870:2;7896:53;7941:7;7932:6;7921:9;7917:22;7896:53;:::i;:::-;7886:63;;7841:118;8026:3;8015:9;8011:19;7998:33;8058:18;8050:6;8047:30;8044:117;;;8080:79;;:::i;:::-;8044:117;8185:62;8239:7;8230:6;8219:9;8215:22;8185:62;:::i;:::-;8175:72;;7969:288;7175:1089;;;;;;;;:::o;8270:1039::-;8397:6;8405;8413;8462:2;8450:9;8441:7;8437:23;8433:32;8430:119;;;8468:79;;:::i;:::-;8430:119;8588:1;8613:53;8658:7;8649:6;8638:9;8634:22;8613:53;:::i;:::-;8603:63;;8559:117;8743:2;8732:9;8728:18;8715:32;8774:18;8766:6;8763:30;8760:117;;;8796:79;;:::i;:::-;8760:117;8901:78;8971:7;8962:6;8951:9;8947:22;8901:78;:::i;:::-;8891:88;;8686:303;9056:2;9045:9;9041:18;9028:32;9087:18;9079:6;9076:30;9073:117;;;9109:79;;:::i;:::-;9073:117;9214:78;9284:7;9275:6;9264:9;9260:22;9214:78;:::i;:::-;9204:88;;8999:303;8270:1039;;;;;:::o;9315:1363::-;9460:6;9468;9476;9484;9533:3;9521:9;9512:7;9508:23;9504:33;9501:120;;;9540:79;;:::i;:::-;9501:120;9660:1;9685:53;9730:7;9721:6;9710:9;9706:22;9685:53;:::i;:::-;9675:63;;9631:117;9815:2;9804:9;9800:18;9787:32;9846:18;9838:6;9835:30;9832:117;;;9868:79;;:::i;:::-;9832:117;9973:78;10043:7;10034:6;10023:9;10019:22;9973:78;:::i;:::-;9963:88;;9758:303;10128:2;10117:9;10113:18;10100:32;10159:18;10151:6;10148:30;10145:117;;;10181:79;;:::i;:::-;10145:117;10286:78;10356:7;10347:6;10336:9;10332:22;10286:78;:::i;:::-;10276:88;;10071:303;10441:2;10430:9;10426:18;10413:32;10472:18;10464:6;10461:30;10458:117;;;10494:79;;:::i;:::-;10458:117;10599:62;10653:7;10644:6;10633:9;10629:22;10599:62;:::i;:::-;10589:72;;10384:287;9315:1363;;;;;;;:::o;10684:468::-;10749:6;10757;10806:2;10794:9;10785:7;10781:23;10777:32;10774:119;;;10812:79;;:::i;:::-;10774:119;10932:1;10957:53;11002:7;10993:6;10982:9;10978:22;10957:53;:::i;:::-;10947:63;;10903:117;11059:2;11085:50;11127:7;11118:6;11107:9;11103:22;11085:50;:::i;:::-;11075:60;;11030:115;10684:468;;;;;:::o;11158:474::-;11226:6;11234;11283:2;11271:9;11262:7;11258:23;11254:32;11251:119;;;11289:79;;:::i;:::-;11251:119;11409:1;11434:53;11479:7;11470:6;11459:9;11455:22;11434:53;:::i;:::-;11424:63;;11380:117;11536:2;11562:53;11607:7;11598:6;11587:9;11583:22;11562:53;:::i;:::-;11552:63;;11507:118;11158:474;;;;;:::o;11638:619::-;11715:6;11723;11731;11780:2;11768:9;11759:7;11755:23;11751:32;11748:119;;;11786:79;;:::i;:::-;11748:119;11906:1;11931:53;11976:7;11967:6;11956:9;11952:22;11931:53;:::i;:::-;11921:63;;11877:117;12033:2;12059:53;12104:7;12095:6;12084:9;12080:22;12059:53;:::i;:::-;12049:63;;12004:118;12161:2;12187:53;12232:7;12223:6;12212:9;12208:22;12187:53;:::i;:::-;12177:63;;12132:118;11638:619;;;;;:::o;12263:943::-;12358:6;12366;12374;12382;12431:3;12419:9;12410:7;12406:23;12402:33;12399:120;;;12438:79;;:::i;:::-;12399:120;12558:1;12583:53;12628:7;12619:6;12608:9;12604:22;12583:53;:::i;:::-;12573:63;;12529:117;12685:2;12711:53;12756:7;12747:6;12736:9;12732:22;12711:53;:::i;:::-;12701:63;;12656:118;12813:2;12839:53;12884:7;12875:6;12864:9;12860:22;12839:53;:::i;:::-;12829:63;;12784:118;12969:2;12958:9;12954:18;12941:32;13000:18;12992:6;12989:30;12986:117;;;13022:79;;:::i;:::-;12986:117;13127:62;13181:7;13172:6;13161:9;13157:22;13127:62;:::i;:::-;13117:72;;12912:287;12263:943;;;;;;;:::o;13212:894::-;13330:6;13338;13387:2;13375:9;13366:7;13362:23;13358:32;13355:119;;;13393:79;;:::i;:::-;13355:119;13541:1;13530:9;13526:17;13513:31;13571:18;13563:6;13560:30;13557:117;;;13593:79;;:::i;:::-;13557:117;13698:78;13768:7;13759:6;13748:9;13744:22;13698:78;:::i;:::-;13688:88;;13484:302;13853:2;13842:9;13838:18;13825:32;13884:18;13876:6;13873:30;13870:117;;;13906:79;;:::i;:::-;13870:117;14011:78;14081:7;14072:6;14061:9;14057:22;14011:78;:::i;:::-;14001:88;;13796:303;13212:894;;;;;:::o;14112:345::-;14179:6;14228:2;14216:9;14207:7;14203:23;14199:32;14196:119;;;14234:79;;:::i;:::-;14196:119;14354:1;14379:61;14432:7;14423:6;14412:9;14408:22;14379:61;:::i;:::-;14369:71;;14325:125;14112:345;;;;:::o;14463:327::-;14521:6;14570:2;14558:9;14549:7;14545:23;14541:32;14538:119;;;14576:79;;:::i;:::-;14538:119;14696:1;14721:52;14765:7;14756:6;14745:9;14741:22;14721:52;:::i;:::-;14711:62;;14667:116;14463:327;;;;:::o;14796:349::-;14865:6;14914:2;14902:9;14893:7;14889:23;14885:32;14882:119;;;14920:79;;:::i;:::-;14882:119;15040:1;15065:63;15120:7;15111:6;15100:9;15096:22;15065:63;:::i;:::-;15055:73;;15011:127;14796:349;;;;:::o;15151:509::-;15220:6;15269:2;15257:9;15248:7;15244:23;15240:32;15237:119;;;15275:79;;:::i;:::-;15237:119;15423:1;15412:9;15408:17;15395:31;15453:18;15445:6;15442:30;15439:117;;;15475:79;;:::i;:::-;15439:117;15580:63;15635:7;15626:6;15615:9;15611:22;15580:63;:::i;:::-;15570:73;;15366:287;15151:509;;;;:::o;15666:329::-;15725:6;15774:2;15762:9;15753:7;15749:23;15745:32;15742:119;;;15780:79;;:::i;:::-;15742:119;15900:1;15925:53;15970:7;15961:6;15950:9;15946:22;15925:53;:::i;:::-;15915:63;;15871:117;15666:329;;;;:::o;16001:351::-;16071:6;16120:2;16108:9;16099:7;16095:23;16091:32;16088:119;;;16126:79;;:::i;:::-;16088:119;16246:1;16271:64;16327:7;16318:6;16307:9;16303:22;16271:64;:::i;:::-;16261:74;;16217:128;16001:351;;;;:::o;16358:179::-;16427:10;16448:46;16490:3;16482:6;16448:46;:::i;:::-;16526:4;16521:3;16517:14;16503:28;;16358:179;;;;:::o;16543:118::-;16630:24;16648:5;16630:24;:::i;:::-;16625:3;16618:37;16543:118;;:::o;16697:732::-;16816:3;16845:54;16893:5;16845:54;:::i;:::-;16915:86;16994:6;16989:3;16915:86;:::i;:::-;16908:93;;17025:56;17075:5;17025:56;:::i;:::-;17104:7;17135:1;17120:284;17145:6;17142:1;17139:13;17120:284;;;17221:6;17215:13;17248:63;17307:3;17292:13;17248:63;:::i;:::-;17241:70;;17334:60;17387:6;17334:60;:::i;:::-;17324:70;;17180:224;17167:1;17164;17160:9;17155:14;;17120:284;;;17124:14;17420:3;17413:10;;16821:608;;;16697:732;;;;:::o;17435:109::-;17516:21;17531:5;17516:21;:::i;:::-;17511:3;17504:34;17435:109;;:::o;17550:360::-;17636:3;17664:38;17696:5;17664:38;:::i;:::-;17718:70;17781:6;17776:3;17718:70;:::i;:::-;17711:77;;17797:52;17842:6;17837:3;17830:4;17823:5;17819:16;17797:52;:::i;:::-;17874:29;17896:6;17874:29;:::i;:::-;17869:3;17865:39;17858:46;;17640:270;17550:360;;;;:::o;17916:161::-;18018:52;18064:5;18018:52;:::i;:::-;18013:3;18006:65;17916:161;;:::o;18083:364::-;18171:3;18199:39;18232:5;18199:39;:::i;:::-;18254:71;18318:6;18313:3;18254:71;:::i;:::-;18247:78;;18334:52;18379:6;18374:3;18367:4;18360:5;18356:16;18334:52;:::i;:::-;18411:29;18433:6;18411:29;:::i;:::-;18406:3;18402:39;18395:46;;18175:272;18083:364;;;;:::o;18453:377::-;18559:3;18587:39;18620:5;18587:39;:::i;:::-;18642:89;18724:6;18719:3;18642:89;:::i;:::-;18635:96;;18740:52;18785:6;18780:3;18773:4;18766:5;18762:16;18740:52;:::i;:::-;18817:6;18812:3;18808:16;18801:23;;18563:267;18453:377;;;;:::o;18860:845::-;18963:3;19000:5;18994:12;19029:36;19055:9;19029:36;:::i;:::-;19081:89;19163:6;19158:3;19081:89;:::i;:::-;19074:96;;19201:1;19190:9;19186:17;19217:1;19212:137;;;;19363:1;19358:341;;;;19179:520;;19212:137;19296:4;19292:9;19281;19277:25;19272:3;19265:38;19332:6;19327:3;19323:16;19316:23;;19212:137;;19358:341;19425:38;19457:5;19425:38;:::i;:::-;19485:1;19499:154;19513:6;19510:1;19507:13;19499:154;;;19587:7;19581:14;19577:1;19572:3;19568:11;19561:35;19637:1;19628:7;19624:15;19613:26;;19535:4;19532:1;19528:12;19523:17;;19499:154;;;19682:6;19677:3;19673:16;19666:23;;19365:334;;19179:520;;18967:738;;18860:845;;;;:::o;19711:366::-;19853:3;19874:67;19938:2;19933:3;19874:67;:::i;:::-;19867:74;;19950:93;20039:3;19950:93;:::i;:::-;20068:2;20063:3;20059:12;20052:19;;19711:366;;;:::o;20083:::-;20225:3;20246:67;20310:2;20305:3;20246:67;:::i;:::-;20239:74;;20322:93;20411:3;20322:93;:::i;:::-;20440:2;20435:3;20431:12;20424:19;;20083:366;;;:::o;20455:::-;20597:3;20618:67;20682:2;20677:3;20618:67;:::i;:::-;20611:74;;20694:93;20783:3;20694:93;:::i;:::-;20812:2;20807:3;20803:12;20796:19;;20455:366;;;:::o;20827:::-;20969:3;20990:67;21054:2;21049:3;20990:67;:::i;:::-;20983:74;;21066:93;21155:3;21066:93;:::i;:::-;21184:2;21179:3;21175:12;21168:19;;20827:366;;;:::o;21199:::-;21341:3;21362:67;21426:2;21421:3;21362:67;:::i;:::-;21355:74;;21438:93;21527:3;21438:93;:::i;:::-;21556:2;21551:3;21547:12;21540:19;;21199:366;;;:::o;21571:::-;21713:3;21734:67;21798:2;21793:3;21734:67;:::i;:::-;21727:74;;21810:93;21899:3;21810:93;:::i;:::-;21928:2;21923:3;21919:12;21912:19;;21571:366;;;:::o;21943:::-;22085:3;22106:67;22170:2;22165:3;22106:67;:::i;:::-;22099:74;;22182:93;22271:3;22182:93;:::i;:::-;22300:2;22295:3;22291:12;22284:19;;21943:366;;;:::o;22315:::-;22457:3;22478:67;22542:2;22537:3;22478:67;:::i;:::-;22471:74;;22554:93;22643:3;22554:93;:::i;:::-;22672:2;22667:3;22663:12;22656:19;;22315:366;;;:::o;22687:::-;22829:3;22850:67;22914:2;22909:3;22850:67;:::i;:::-;22843:74;;22926:93;23015:3;22926:93;:::i;:::-;23044:2;23039:3;23035:12;23028:19;;22687:366;;;:::o;23059:::-;23201:3;23222:67;23286:2;23281:3;23222:67;:::i;:::-;23215:74;;23298:93;23387:3;23298:93;:::i;:::-;23416:2;23411:3;23407:12;23400:19;;23059:366;;;:::o;23431:::-;23573:3;23594:67;23658:2;23653:3;23594:67;:::i;:::-;23587:74;;23670:93;23759:3;23670:93;:::i;:::-;23788:2;23783:3;23779:12;23772:19;;23431:366;;;:::o;23803:::-;23945:3;23966:67;24030:2;24025:3;23966:67;:::i;:::-;23959:74;;24042:93;24131:3;24042:93;:::i;:::-;24160:2;24155:3;24151:12;24144:19;;23803:366;;;:::o;24175:::-;24317:3;24338:67;24402:2;24397:3;24338:67;:::i;:::-;24331:74;;24414:93;24503:3;24414:93;:::i;:::-;24532:2;24527:3;24523:12;24516:19;;24175:366;;;:::o;24547:400::-;24707:3;24728:84;24810:1;24805:3;24728:84;:::i;:::-;24721:91;;24821:93;24910:3;24821:93;:::i;:::-;24939:1;24934:3;24930:11;24923:18;;24547:400;;;:::o;24953:366::-;25095:3;25116:67;25180:2;25175:3;25116:67;:::i;:::-;25109:74;;25192:93;25281:3;25192:93;:::i;:::-;25310:2;25305:3;25301:12;25294:19;;24953:366;;;:::o;25325:::-;25467:3;25488:67;25552:2;25547:3;25488:67;:::i;:::-;25481:74;;25564:93;25653:3;25564:93;:::i;:::-;25682:2;25677:3;25673:12;25666:19;;25325:366;;;:::o;25697:398::-;25856:3;25877:83;25958:1;25953:3;25877:83;:::i;:::-;25870:90;;25969:93;26058:3;25969:93;:::i;:::-;26087:1;26082:3;26078:11;26071:18;;25697:398;;;:::o;26101:366::-;26243:3;26264:67;26328:2;26323:3;26264:67;:::i;:::-;26257:74;;26340:93;26429:3;26340:93;:::i;:::-;26458:2;26453:3;26449:12;26442:19;;26101:366;;;:::o;26473:400::-;26633:3;26654:84;26736:1;26731:3;26654:84;:::i;:::-;26647:91;;26747:93;26836:3;26747:93;:::i;:::-;26865:1;26860:3;26856:11;26849:18;;26473:400;;;:::o;26879:366::-;27021:3;27042:67;27106:2;27101:3;27042:67;:::i;:::-;27035:74;;27118:93;27207:3;27118:93;:::i;:::-;27236:2;27231:3;27227:12;27220:19;;26879:366;;;:::o;27251:::-;27393:3;27414:67;27478:2;27473:3;27414:67;:::i;:::-;27407:74;;27490:93;27579:3;27490:93;:::i;:::-;27608:2;27603:3;27599:12;27592:19;;27251:366;;;:::o;27623:::-;27765:3;27786:67;27850:2;27845:3;27786:67;:::i;:::-;27779:74;;27862:93;27951:3;27862:93;:::i;:::-;27980:2;27975:3;27971:12;27964:19;;27623:366;;;:::o;27995:::-;28137:3;28158:67;28222:2;28217:3;28158:67;:::i;:::-;28151:74;;28234:93;28323:3;28234:93;:::i;:::-;28352:2;28347:3;28343:12;28336:19;;27995:366;;;:::o;28367:108::-;28444:24;28462:5;28444:24;:::i;:::-;28439:3;28432:37;28367:108;;:::o;28481:118::-;28568:24;28586:5;28568:24;:::i;:::-;28563:3;28556:37;28481:118;;:::o;28605:695::-;28883:3;28905:92;28993:3;28984:6;28905:92;:::i;:::-;28898:99;;29014:95;29105:3;29096:6;29014:95;:::i;:::-;29007:102;;29126:148;29270:3;29126:148;:::i;:::-;29119:155;;29291:3;29284:10;;28605:695;;;;;:::o;29306:801::-;29637:3;29659:92;29747:3;29738:6;29659:92;:::i;:::-;29652:99;;29768:148;29912:3;29768:148;:::i;:::-;29761:155;;29933:148;30077:3;29933:148;:::i;:::-;29926:155;;30098:3;30091:10;;29306:801;;;;:::o;30113:379::-;30297:3;30319:147;30462:3;30319:147;:::i;:::-;30312:154;;30483:3;30476:10;;30113:379;;;:::o;30498:222::-;30591:4;30629:2;30618:9;30614:18;30606:26;;30642:71;30710:1;30699:9;30695:17;30686:6;30642:71;:::i;:::-;30498:222;;;;:::o;30726:1053::-;31049:4;31087:3;31076:9;31072:19;31064:27;;31101:71;31169:1;31158:9;31154:17;31145:6;31101:71;:::i;:::-;31182:72;31250:2;31239:9;31235:18;31226:6;31182:72;:::i;:::-;31301:9;31295:4;31291:20;31286:2;31275:9;31271:18;31264:48;31329:108;31432:4;31423:6;31329:108;:::i;:::-;31321:116;;31484:9;31478:4;31474:20;31469:2;31458:9;31454:18;31447:48;31512:108;31615:4;31606:6;31512:108;:::i;:::-;31504:116;;31668:9;31662:4;31658:20;31652:3;31641:9;31637:19;31630:49;31696:76;31767:4;31758:6;31696:76;:::i;:::-;31688:84;;30726:1053;;;;;;;;:::o;31785:442::-;31934:4;31972:2;31961:9;31957:18;31949:26;;31985:71;32053:1;32042:9;32038:17;32029:6;31985:71;:::i;:::-;32066:72;32134:2;32123:9;32119:18;32110:6;32066:72;:::i;:::-;32148;32216:2;32205:9;32201:18;32192:6;32148:72;:::i;:::-;31785:442;;;;;;:::o;32233:751::-;32456:4;32494:3;32483:9;32479:19;32471:27;;32508:71;32576:1;32565:9;32561:17;32552:6;32508:71;:::i;:::-;32589:72;32657:2;32646:9;32642:18;32633:6;32589:72;:::i;:::-;32671;32739:2;32728:9;32724:18;32715:6;32671:72;:::i;:::-;32753;32821:2;32810:9;32806:18;32797:6;32753:72;:::i;:::-;32873:9;32867:4;32863:20;32857:3;32846:9;32842:19;32835:49;32901:76;32972:4;32963:6;32901:76;:::i;:::-;32893:84;;32233:751;;;;;;;;:::o;32990:373::-;33133:4;33171:2;33160:9;33156:18;33148:26;;33220:9;33214:4;33210:20;33206:1;33195:9;33191:17;33184:47;33248:108;33351:4;33342:6;33248:108;:::i;:::-;33240:116;;32990:373;;;;:::o;33369:634::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:108;33808:4;33799:6;33705:108;:::i;:::-;33697:116;;33860:9;33854:4;33850:20;33845:2;33834:9;33830:18;33823:48;33888:108;33991:4;33982:6;33888:108;:::i;:::-;33880:116;;33369:634;;;;;:::o;34009:210::-;34096:4;34134:2;34123:9;34119:18;34111:26;;34147:65;34209:1;34198:9;34194:17;34185:6;34147:65;:::i;:::-;34009:210;;;;:::o;34225:252::-;34333:4;34371:2;34360:9;34356:18;34348:26;;34384:86;34467:1;34456:9;34452:17;34443:6;34384:86;:::i;:::-;34225:252;;;;:::o;34483:313::-;34596:4;34634:2;34623:9;34619:18;34611:26;;34683:9;34677:4;34673:20;34669:1;34658:9;34654:17;34647:47;34711:78;34784:4;34775:6;34711:78;:::i;:::-;34703:86;;34483:313;;;;:::o;34802:419::-;34968:4;35006:2;34995:9;34991:18;34983:26;;35055:9;35049:4;35045:20;35041:1;35030:9;35026:17;35019:47;35083:131;35209:4;35083:131;:::i;:::-;35075:139;;34802:419;;;:::o;35227:::-;35393:4;35431:2;35420:9;35416:18;35408:26;;35480:9;35474:4;35470:20;35466:1;35455:9;35451:17;35444:47;35508:131;35634:4;35508:131;:::i;:::-;35500:139;;35227:419;;;:::o;35652:::-;35818:4;35856:2;35845:9;35841:18;35833:26;;35905:9;35899:4;35895:20;35891:1;35880:9;35876:17;35869:47;35933:131;36059:4;35933:131;:::i;:::-;35925:139;;35652:419;;;:::o;36077:::-;36243:4;36281:2;36270:9;36266:18;36258:26;;36330:9;36324:4;36320:20;36316:1;36305:9;36301:17;36294:47;36358:131;36484:4;36358:131;:::i;:::-;36350:139;;36077:419;;;:::o;36502:::-;36668:4;36706:2;36695:9;36691:18;36683:26;;36755:9;36749:4;36745:20;36741:1;36730:9;36726:17;36719:47;36783:131;36909:4;36783:131;:::i;:::-;36775:139;;36502:419;;;:::o;36927:::-;37093:4;37131:2;37120:9;37116:18;37108:26;;37180:9;37174:4;37170:20;37166:1;37155:9;37151:17;37144:47;37208:131;37334:4;37208:131;:::i;:::-;37200:139;;36927:419;;;:::o;37352:::-;37518:4;37556:2;37545:9;37541:18;37533:26;;37605:9;37599:4;37595:20;37591:1;37580:9;37576:17;37569:47;37633:131;37759:4;37633:131;:::i;:::-;37625:139;;37352:419;;;:::o;37777:::-;37943:4;37981:2;37970:9;37966:18;37958:26;;38030:9;38024:4;38020:20;38016:1;38005:9;38001:17;37994:47;38058:131;38184:4;38058:131;:::i;:::-;38050:139;;37777:419;;;:::o;38202:::-;38368:4;38406:2;38395:9;38391:18;38383:26;;38455:9;38449:4;38445:20;38441:1;38430:9;38426:17;38419:47;38483:131;38609:4;38483:131;:::i;:::-;38475:139;;38202:419;;;:::o;38627:::-;38793:4;38831:2;38820:9;38816:18;38808:26;;38880:9;38874:4;38870:20;38866:1;38855:9;38851:17;38844:47;38908:131;39034:4;38908:131;:::i;:::-;38900:139;;38627:419;;;:::o;39052:::-;39218:4;39256:2;39245:9;39241:18;39233:26;;39305:9;39299:4;39295:20;39291:1;39280:9;39276:17;39269:47;39333:131;39459:4;39333:131;:::i;:::-;39325:139;;39052:419;;;:::o;39477:::-;39643:4;39681:2;39670:9;39666:18;39658:26;;39730:9;39724:4;39720:20;39716:1;39705:9;39701:17;39694:47;39758:131;39884:4;39758:131;:::i;:::-;39750:139;;39477:419;;;:::o;39902:::-;40068:4;40106:2;40095:9;40091:18;40083:26;;40155:9;40149:4;40145:20;40141:1;40130:9;40126:17;40119:47;40183:131;40309:4;40183:131;:::i;:::-;40175:139;;39902:419;;;:::o;40327:::-;40493:4;40531:2;40520:9;40516:18;40508:26;;40580:9;40574:4;40570:20;40566:1;40555:9;40551:17;40544:47;40608:131;40734:4;40608:131;:::i;:::-;40600:139;;40327:419;;;:::o;40752:::-;40918:4;40956:2;40945:9;40941:18;40933:26;;41005:9;40999:4;40995:20;40991:1;40980:9;40976:17;40969:47;41033:131;41159:4;41033:131;:::i;:::-;41025:139;;40752:419;;;:::o;41177:::-;41343:4;41381:2;41370:9;41366:18;41358:26;;41430:9;41424:4;41420:20;41416:1;41405:9;41401:17;41394:47;41458:131;41584:4;41458:131;:::i;:::-;41450:139;;41177:419;;;:::o;41602:::-;41768:4;41806:2;41795:9;41791:18;41783:26;;41855:9;41849:4;41845:20;41841:1;41830:9;41826:17;41819:47;41883:131;42009:4;41883:131;:::i;:::-;41875:139;;41602:419;;;:::o;42027:::-;42193:4;42231:2;42220:9;42216:18;42208:26;;42280:9;42274:4;42270:20;42266:1;42255:9;42251:17;42244:47;42308:131;42434:4;42308:131;:::i;:::-;42300:139;;42027:419;;;:::o;42452:::-;42618:4;42656:2;42645:9;42641:18;42633:26;;42705:9;42699:4;42695:20;42691:1;42680:9;42676:17;42669:47;42733:131;42859:4;42733:131;:::i;:::-;42725:139;;42452:419;;;:::o;42877:::-;43043:4;43081:2;43070:9;43066:18;43058:26;;43130:9;43124:4;43120:20;43116:1;43105:9;43101:17;43094:47;43158:131;43284:4;43158:131;:::i;:::-;43150:139;;42877:419;;;:::o;43302:222::-;43395:4;43433:2;43422:9;43418:18;43410:26;;43446:71;43514:1;43503:9;43499:17;43490:6;43446:71;:::i;:::-;43302:222;;;;:::o;43530:332::-;43651:4;43689:2;43678:9;43674:18;43666:26;;43702:71;43770:1;43759:9;43755:17;43746:6;43702:71;:::i;:::-;43783:72;43851:2;43840:9;43836:18;43827:6;43783:72;:::i;:::-;43530:332;;;;;:::o;43868:129::-;43902:6;43929:20;;:::i;:::-;43919:30;;43958:33;43986:4;43978:6;43958:33;:::i;:::-;43868:129;;;:::o;44003:75::-;44036:6;44069:2;44063:9;44053:19;;44003:75;:::o;44084:311::-;44161:4;44251:18;44243:6;44240:30;44237:56;;;44273:18;;:::i;:::-;44237:56;44323:4;44315:6;44311:17;44303:25;;44383:4;44377;44373:15;44365:23;;44084:311;;;:::o;44401:::-;44478:4;44568:18;44560:6;44557:30;44554:56;;;44590:18;;:::i;:::-;44554:56;44640:4;44632:6;44628:17;44620:25;;44700:4;44694;44690:15;44682:23;;44401:311;;;:::o;44718:307::-;44779:4;44869:18;44861:6;44858:30;44855:56;;;44891:18;;:::i;:::-;44855:56;44929:29;44951:6;44929:29;:::i;:::-;44921:37;;45013:4;45007;45003:15;44995:23;;44718:307;;;:::o;45031:308::-;45093:4;45183:18;45175:6;45172:30;45169:56;;;45205:18;;:::i;:::-;45169:56;45243:29;45265:6;45243:29;:::i;:::-;45235:37;;45327:4;45321;45317:15;45309:23;;45031:308;;;:::o;45345:132::-;45412:4;45435:3;45427:11;;45465:4;45460:3;45456:14;45448:22;;45345:132;;;:::o;45483:141::-;45532:4;45555:3;45547:11;;45578:3;45575:1;45568:14;45612:4;45609:1;45599:18;45591:26;;45483:141;;;:::o;45630:114::-;45697:6;45731:5;45725:12;45715:22;;45630:114;;;:::o;45750:98::-;45801:6;45835:5;45829:12;45819:22;;45750:98;;;:::o;45854:99::-;45906:6;45940:5;45934:12;45924:22;;45854:99;;;:::o;45959:113::-;46029:4;46061;46056:3;46052:14;46044:22;;45959:113;;;:::o;46078:184::-;46177:11;46211:6;46206:3;46199:19;46251:4;46246:3;46242:14;46227:29;;46078:184;;;;:::o;46268:168::-;46351:11;46385:6;46380:3;46373:19;46425:4;46420:3;46416:14;46401:29;;46268:168;;;;:::o;46442:147::-;46543:11;46580:3;46565:18;;46442:147;;;;:::o;46595:169::-;46679:11;46713:6;46708:3;46701:19;46753:4;46748:3;46744:14;46729:29;;46595:169;;;;:::o;46770:148::-;46872:11;46909:3;46894:18;;46770:148;;;;:::o;46924:305::-;46964:3;46983:20;47001:1;46983:20;:::i;:::-;46978:25;;47017:20;47035:1;47017:20;:::i;:::-;47012:25;;47171:1;47103:66;47099:74;47096:1;47093:81;47090:107;;;47177:18;;:::i;:::-;47090:107;47221:1;47218;47214:9;47207:16;;46924:305;;;;:::o;47235:185::-;47275:1;47292:20;47310:1;47292:20;:::i;:::-;47287:25;;47326:20;47344:1;47326:20;:::i;:::-;47321:25;;47365:1;47355:35;;47370:18;;:::i;:::-;47355:35;47412:1;47409;47405:9;47400:14;;47235:185;;;;:::o;47426:191::-;47466:4;47486:20;47504:1;47486:20;:::i;:::-;47481:25;;47520:20;47538:1;47520:20;:::i;:::-;47515:25;;47559:1;47556;47553:8;47550:34;;;47564:18;;:::i;:::-;47550:34;47609:1;47606;47602:9;47594:17;;47426:191;;;;:::o;47623:96::-;47660:7;47689:24;47707:5;47689:24;:::i;:::-;47678:35;;47623:96;;;:::o;47725:90::-;47759:7;47802:5;47795:13;47788:21;47777:32;;47725:90;;;:::o;47821:149::-;47857:7;47897:66;47890:5;47886:78;47875:89;;47821:149;;;:::o;47976:126::-;48013:7;48053:42;48046:5;48042:54;48031:65;;47976:126;;;:::o;48108:77::-;48145:7;48174:5;48163:16;;48108:77;;;:::o;48191:141::-;48256:9;48289:37;48320:5;48289:37;:::i;:::-;48276:50;;48191:141;;;:::o;48338:126::-;48388:9;48421:37;48452:5;48421:37;:::i;:::-;48408:50;;48338:126;;;:::o;48470:113::-;48520:9;48553:24;48571:5;48553:24;:::i;:::-;48540:37;;48470:113;;;:::o;48589:154::-;48673:6;48668:3;48663;48650:30;48735:1;48726:6;48721:3;48717:16;48710:27;48589:154;;;:::o;48749:307::-;48817:1;48827:113;48841:6;48838:1;48835:13;48827:113;;;48926:1;48921:3;48917:11;48911:18;48907:1;48902:3;48898:11;48891:39;48863:2;48860:1;48856:10;48851:15;;48827:113;;;48958:6;48955:1;48952:13;48949:101;;;49038:1;49029:6;49024:3;49020:16;49013:27;48949:101;48798:258;48749:307;;;:::o;49062:320::-;49106:6;49143:1;49137:4;49133:12;49123:22;;49190:1;49184:4;49180:12;49211:18;49201:81;;49267:4;49259:6;49255:17;49245:27;;49201:81;49329:2;49321:6;49318:14;49298:18;49295:38;49292:84;;;49348:18;;:::i;:::-;49292:84;49113:269;49062:320;;;:::o;49388:281::-;49471:27;49493:4;49471:27;:::i;:::-;49463:6;49459:40;49601:6;49589:10;49586:22;49565:18;49553:10;49550:34;49547:62;49544:88;;;49612:18;;:::i;:::-;49544:88;49652:10;49648:2;49641:22;49431:238;49388:281;;:::o;49675:233::-;49714:3;49737:24;49755:5;49737:24;:::i;:::-;49728:33;;49783:66;49776:5;49773:77;49770:103;;;49853:18;;:::i;:::-;49770:103;49900:1;49893:5;49889:13;49882:20;;49675:233;;;:::o;49914:176::-;49946:1;49963:20;49981:1;49963:20;:::i;:::-;49958:25;;49997:20;50015:1;49997:20;:::i;:::-;49992:25;;50036:1;50026:35;;50041:18;;:::i;:::-;50026:35;50082:1;50079;50075:9;50070:14;;49914:176;;;;:::o;50096:180::-;50144:77;50141:1;50134:88;50241:4;50238:1;50231:15;50265:4;50262:1;50255:15;50282:180;50330:77;50327:1;50320:88;50427:4;50424:1;50417:15;50451:4;50448:1;50441:15;50468:180;50516:77;50513:1;50506:88;50613:4;50610:1;50603:15;50637:4;50634:1;50627:15;50654:180;50702:77;50699:1;50692:88;50799:4;50796:1;50789:15;50823:4;50820:1;50813:15;50840:180;50888:77;50885:1;50878:88;50985:4;50982:1;50975:15;51009:4;51006:1;50999:15;51026:183;51061:3;51099:1;51081:16;51078:23;51075:128;;;51137:1;51134;51131;51116:23;51159:34;51190:1;51184:8;51159:34;:::i;:::-;51152:41;;51075:128;51026:183;:::o;51215:117::-;51324:1;51321;51314:12;51338:117;51447:1;51444;51437:12;51461:117;51570:1;51567;51560:12;51584:117;51693:1;51690;51683:12;51707:117;51816:1;51813;51806:12;51830:102;51871:6;51922:2;51918:7;51913:2;51906:5;51902:14;51898:28;51888:38;;51830:102;;;:::o;51938:106::-;51982:8;52031:5;52026:3;52022:15;52001:36;;51938:106;;;:::o;52050:239::-;52190:34;52186:1;52178:6;52174:14;52167:58;52259:22;52254:2;52246:6;52242:15;52235:47;52050:239;:::o;52295:227::-;52435:34;52431:1;52423:6;52419:14;52412:58;52504:10;52499:2;52491:6;52487:15;52480:35;52295:227;:::o;52528:170::-;52668:22;52664:1;52656:6;52652:14;52645:46;52528:170;:::o;52704:230::-;52844:34;52840:1;52832:6;52828:14;52821:58;52913:13;52908:2;52900:6;52896:15;52889:38;52704:230;:::o;52940:225::-;53080:34;53076:1;53068:6;53064:14;53057:58;53149:8;53144:2;53136:6;53132:15;53125:33;52940:225;:::o;53171:223::-;53311:34;53307:1;53299:6;53295:14;53288:58;53380:6;53375:2;53367:6;53363:15;53356:31;53171:223;:::o;53400:228::-;53540:34;53536:1;53528:6;53524:14;53517:58;53609:11;53604:2;53596:6;53592:15;53585:36;53400:228;:::o;53634:166::-;53774:18;53770:1;53762:6;53758:14;53751:42;53634:166;:::o;53806:224::-;53946:34;53942:1;53934:6;53930:14;53923:58;54015:7;54010:2;54002:6;53998:15;53991:32;53806:224;:::o;54036:237::-;54176:34;54172:1;54164:6;54160:14;54153:58;54245:20;54240:2;54232:6;54228:15;54221:45;54036:237;:::o;54279:166::-;54419:18;54415:1;54407:6;54403:14;54396:42;54279:166;:::o;54451:222::-;54591:34;54587:1;54579:6;54575:14;54568:58;54660:5;54655:2;54647:6;54643:15;54636:30;54451:222;:::o;54679:229::-;54819:34;54815:1;54807:6;54803:14;54796:58;54888:12;54883:2;54875:6;54871:15;54864:37;54679:229;:::o;54914:155::-;55054:7;55050:1;55042:6;55038:14;55031:31;54914:155;:::o;55075:182::-;55215:34;55211:1;55203:6;55199:14;55192:58;55075:182;:::o;55263:227::-;55403:34;55399:1;55391:6;55387:14;55380:58;55472:10;55467:2;55459:6;55455:15;55448:35;55263:227;:::o;55496:114::-;;:::o;55616:166::-;55756:18;55752:1;55744:6;55740:14;55733:42;55616:166;:::o;55788:156::-;55928:8;55924:1;55916:6;55912:14;55905:32;55788:156;:::o;55950:228::-;56090:34;56086:1;56078:6;56074:14;56067:58;56159:11;56154:2;56146:6;56142:15;56135:36;55950:228;:::o;56184:::-;56324:34;56320:1;56312:6;56308:14;56301:58;56393:11;56388:2;56380:6;56376:15;56369:36;56184:228;:::o;56418:227::-;56558:34;56554:1;56546:6;56542:14;56535:58;56627:10;56622:2;56614:6;56610:15;56603:35;56418:227;:::o;56651:220::-;56791:34;56787:1;56779:6;56775:14;56768:58;56860:3;56855:2;56847:6;56843:15;56836:28;56651:220;:::o;56877:711::-;56916:3;56954:4;56936:16;56933:26;56930:39;;;56962:5;;56930:39;56991:20;;:::i;:::-;57066:1;57048:16;57044:24;57041:1;57035:4;57020:49;57099:4;57093:11;57198:16;57191:4;57183:6;57179:17;57176:39;57143:18;57135:6;57132:30;57116:113;57113:146;;;57244:5;;;;57113:146;57290:6;57284:4;57280:17;57326:3;57320:10;57353:18;57345:6;57342:30;57339:43;;;57375:5;;;;;;57339:43;57423:6;57416:4;57411:3;57407:14;57403:27;57482:1;57464:16;57460:24;57454:4;57450:35;57445:3;57442:44;57439:57;;;57489:5;;;;;;;57439:57;57506;57554:6;57548:4;57544:17;57536:6;57532:30;57526:4;57506:57;:::i;:::-;57579:3;57572:10;;56920:668;;;;;56877:711;;:::o;57594:122::-;57667:24;57685:5;57667:24;:::i;:::-;57660:5;57657:35;57647:63;;57706:1;57703;57696:12;57647:63;57594:122;:::o;57722:116::-;57792:21;57807:5;57792:21;:::i;:::-;57785:5;57782:32;57772:60;;57828:1;57825;57818:12;57772:60;57722:116;:::o;57844:120::-;57916:23;57933:5;57916:23;:::i;:::-;57909:5;57906:34;57896:62;;57954:1;57951;57944:12;57896:62;57844:120;:::o;57970:122::-;58043:24;58061:5;58043:24;:::i;:::-;58036:5;58033:35;58023:63;;58082:1;58079;58072:12;58023:63;57970:122;:::o

Swarm Source

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