ETH Price: $2,578.08 (-1.26%)

Token

Lazer Soda (LAZERSODA)
 

Overview

Max Total Supply

417 LAZERSODA

Holders

198

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
apprehend.eth
Balance
1 LAZERSODA
0xa1E41F1C2F4c30e9738973D7B8E723578578dC36
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:
LazerSoda

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2021-09-28
*/

// libraries

// Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// Strings.sol

pragma solidity ^0.8.0;

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

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

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

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

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

}

// interfaces

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

// IERC721.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

// IERC721Metadata.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// IERCEnumerable.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

// IERCReceiver.sol

pragma solidity ^0.8.0;

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

// contracts

// 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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

// ERC721.sol

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

// ERC721Enumerable.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

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

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

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

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

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

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

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

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

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

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

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

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

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

// IBlootMF.sol

interface IBlootMF is IERC721 {
    function isDiamond(address diamond) external view returns (bool);
    function isFounder(address founder) external view returns (bool);
}

// LazerSoda.sol

pragma solidity ^0.8.0;

contract LazerSoda is ERC721Enumerable, Ownable {

    using Strings for uint256;
    
    uint256 constant private _priceWithBloot = 0.05 ether;
    uint256 constant private _price = 0.06 ether;
    uint256 constant private MAX_TOTAL_PUBLIC = 300;
    uint256 constant private MAX_TOTAL_DONORS = 200;
    uint256 constant private MAX_TOTAL = 500;
    
    address private constant WITHDRAWAL_ADDRESS = 0x0A0Da512157d16f456C837a93a91c12f4B703672;
    address private constant BLOOTMF_ADDRESS = 0xff006C70Ccfe8552E344B299d28AA84CEfda8B11;
    address private constant BLOOT_ADDRESS = 0x4F8730E0b32B04beaa5757e5aea3aeF970E5B613;
    
    string _baseTokenURI;
    bool public _paused = true;
    uint256 private donorMintCount;
    uint256 private publicMintCount;
    
    mapping(address => bool) private diamondMap;
    mapping(address => bool) private founderMap;

    ERC721 bloot = ERC721(BLOOT_ADDRESS);
    IBlootMF blootMF = IBlootMF(BLOOTMF_ADDRESS);

    constructor(string memory baseURI) ERC721("Lazer Soda", "LAZERSODA")  {
        setBaseURI(baseURI);
    }
    
    // Public Mint
    //
    function mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require(!_paused, "Minting is paused" );
        require(publicMintCount + 1 <= MAX_TOTAL_PUBLIC, "Exceeds maximum supply");
        require(num < 10, "You can mint a maximum of 10 Sodas in one transaction" );
        require(msg.value >= _price * num, "Ether sent is not correct" );
       
        for(uint256 i = 1; i <= num; i++){
            publicMintCount++;
            _safeMint( msg.sender, supply + i );
        }
    }
    
    // Mint with Bloot or BlootMF
    //
    function mintWithBloot(uint256 num) public payable {
        require((bloot.balanceOf(msg.sender) >= 1) || (blootMF.balanceOf(msg.sender) >= 1), "You need to hold a Bloot or BlootMF to mint");
       
        uint256 supply = totalSupply();
        require(supply + 1 <= MAX_TOTAL, "Exceeds maximum supply");
        require(!_paused, "Minting is paused" );
        require(publicMintCount + 1 <= MAX_TOTAL_PUBLIC, "Exceeds maximum public supply");
        require(num < 10, "You can mint a maximum of 10 Sodas in one transaction" );
        require(msg.value >= _priceWithBloot * num, "Ether sent is not correct" );

        for(uint256 i = 1; i <= num; i++){
            publicMintCount++;
            _safeMint( msg.sender, supply + i );
        }
    }
    
    
    // Mint as Diamond (can mint one)
    //
    function mintAsDiamond() public payable {
        
        // check if paused
        require(!_paused, "Minting is paused" );
        
        // diamond-related checks
        require(blootMF.isDiamond(msg.sender), "Sender is not a Diamond");
        require(!diamondMap[msg.sender], "Sender has already minted as Diamond");
       
        // supply checks
        uint256 supply = totalSupply();
        require(supply + 1 <= MAX_TOTAL, "Exceeds maximum supply");
        require(donorMintCount + 1 <= MAX_TOTAL_DONORS, "Exceeds maximum supply for donors");
      
        // update state
        donorMintCount++;
        diamondMap[msg.sender] = true;
        
         _safeMint(msg.sender, supply + 1);
    }
    
    // Mint as Founder (can mint one)
    //
    function mintAsFounder() public payable {
        
        //check if paused
        require( !_paused, "Minting is paused" );
        
        // founder-related checks
        require( blootMF.isFounder(msg.sender), "Sender is not a Founder");
        require(!founderMap[msg.sender], "Sender has already minted as Founder");
        
        // check supply
        uint256 supply = totalSupply();
        require(supply + 1 <= MAX_TOTAL, "Exceeds maximum supply");
        require(donorMintCount + 1 <= MAX_TOTAL_DONORS, "Exceeds maximum supply for donors");
        
        // update state
        donorMintCount++;
        founderMap[msg.sender] = true;
        
         _safeMint(msg.sender, supply + 1);
    }
    
    // Owner mint (to mint residual NFTs to donors)
    //
    function mintAsOwner() public onlyOwner {
        uint256 supply = totalSupply();
        require( !_paused, "Minting is paused" );
        require(supply + 1 <= MAX_TOTAL, "Exceeds maximum supply");
         _safeMint(msg.sender, supply + 1);
    }
    
    function hasFounderMinted(address _founder) public view returns (bool) {
        return founderMap[_founder];
    }
    
    function hasDiamondMinted(address _diamond) public view returns (bool) {
        return diamondMap[_diamond];
    }
    
    function getDonorMintCount() public view returns (uint256) {
        return donorMintCount;
    }
    
    function getPublicMintCount() public view returns (uint256) {
        return publicMintCount;
    }

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }

    function withdrawAll() public payable onlyOwner {
        uint256 bal = address(this).balance;
        require(payable(WITHDRAWAL_ADDRESS).send(bal));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDonorMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_diamond","type":"address"}],"name":"hasDiamondMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_founder","type":"address"}],"name":"hasFounderMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintAsDiamond","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintAsFounder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintAsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mintWithBloot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526001600c60006101000a81548160ff021916908315150217905550734f8730e0b32b04beaa5757e5aea3aef970e5b613601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ff006c70ccfe8552e344b299d28aa84cefda8b11601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b50604051620056f1380380620056f18339818101604052810190620000fc919062000470565b6040518060400160405280600a81526020017f4c617a657220536f6461000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4c415a4552534f4441000000000000000000000000000000000000000000000081525081600090805190602001906200018092919062000342565b5080600190805190602001906200019992919062000342565b5050506000620001ae6200026560201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200025e816200026d60201b60201c565b50620006c8565b600033905090565b6200027d6200026560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a36200031860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f390620004e8565b60405180910390fd5b80600b90805190602001906200031492919062000342565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200035090620005b0565b90600052602060002090601f016020900481019282620003745760008555620003c0565b82601f106200038f57805160ff1916838001178555620003c0565b82800160010185558215620003c0579182015b82811115620003bf578251825591602001919060010190620003a2565b5b509050620003cf9190620003d3565b5090565b5b80821115620003ee576000816000905550600101620003d4565b5090565b600062000409620004038462000533565b6200050a565b9050828152602081018484840111156200042857620004276200067f565b5b620004358482856200057a565b509392505050565b600082601f8301126200045557620004546200067a565b5b815162000467848260208601620003f2565b91505092915050565b60006020828403121562000489576200048862000689565b5b600082015167ffffffffffffffff811115620004aa57620004a962000684565b5b620004b8848285016200043d565b91505092915050565b6000620004d060208362000569565b9150620004dd826200069f565b602082019050919050565b600060208201905081810360008301526200050381620004c1565b9050919050565b60006200051662000529565b9050620005248282620005e6565b919050565b6000604051905090565b600067ffffffffffffffff8211156200055157620005506200064b565b5b6200055c826200068e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200059a5780820151818401526020810190506200057d565b83811115620005aa576000848401525b50505050565b60006002820490506001821680620005c957607f821691505b60208210811415620005e057620005df6200061c565b5b50919050565b620005f1826200068e565b810181811067ffffffffffffffff821117156200061357620006126200064b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61501980620006d86000396000f3fe6080604052600436106101ee5760003560e01c80635f2746471161010d578063a0712d68116100a0578063b9597a771161006f578063b9597a77146106a1578063c87b56dd146106de578063e62ac0f51461071b578063e985e9c514610725578063f2fde38b14610762576101ee565b8063a0712d6814610617578063a22cb46514610633578063b40c25d21461065c578063b88d4fde14610678576101ee565b80638283f30b116100dc5780638283f30b1461058c578063853828b6146105b75780638da5cb5b146105c157806395d89b41146105ec576101ee565b80635f274647146104f15780636352211e146104fb57806370a0823114610538578063715018a614610575576101ee565b806327b8be9811610185578063438b630011610154578063438b6300146104115780634f6ccce71461044e578063543e0d171461048b57806355f804b3146104c8576101ee565b806327b8be98146103695780632cc691e3146103805780632f745c59146103ab57806342842e0e146103e8576101ee565b8063095ea7b3116101c1578063095ea7b3146102c157806316c61ccc146102ea57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613838565b61078b565b6040516102279190613f2e565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906137de565b610805565b005b34801561026557600080fd5b5061026e61089e565b60405161027b9190613f49565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906138db565b610930565b6040516102b89190613ea5565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e3919061379e565b6109b5565b005b3480156102f657600080fd5b506102ff610acd565b60405161030c9190613f2e565b60405180910390f35b34801561032157600080fd5b5061032a610ae0565b604051610337919061430b565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613688565b610aed565b005b34801561037557600080fd5b5061037e610b4d565b005b34801561038c57600080fd5b50610395610c8f565b6040516103a2919061430b565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd919061379e565b610c99565b6040516103df919061430b565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613688565b610d3e565b005b34801561041d57600080fd5b506104386004803603810190610433919061361b565b610d5e565b6040516104459190613f0c565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906138db565b610e0c565b604051610482919061430b565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061361b565b610e7d565b6040516104bf9190613f2e565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613892565b610ed3565b005b6104f9610f69565b005b34801561050757600080fd5b50610522600480360381019061051d91906138db565b611268565b60405161052f9190613ea5565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a919061361b565b61131a565b60405161056c919061430b565b60405180910390f35b34801561058157600080fd5b5061058a6113d2565b005b34801561059857600080fd5b506105a161150f565b6040516105ae919061430b565b60405180910390f35b6105bf611519565b005b3480156105cd57600080fd5b506105d66115ef565b6040516105e39190613ea5565b60405180910390f35b3480156105f857600080fd5b50610601611619565b60405161060e9190613f49565b60405180910390f35b610631600480360381019061062c91906138db565b6116ab565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061375e565b611845565b005b610676600480360381019061067191906138db565b6119c6565b005b34801561068457600080fd5b5061069f600480360381019061069a91906136db565b611d55565b005b3480156106ad57600080fd5b506106c860048036038101906106c3919061361b565b611db7565b6040516106d59190613f2e565b60405180910390f35b3480156106ea57600080fd5b50610705600480360381019061070091906138db565b611e0d565b6040516107129190613f49565b60405180910390f35b610723611eb4565b005b34801561073157600080fd5b5061074c60048036038101906107479190613648565b6121b3565b6040516107599190613f2e565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061361b565b612247565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107fe57506107fd826123f3565b5b9050919050565b61080d6124d5565b73ffffffffffffffffffffffffffffffffffffffff1661082b6115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610878906141cb565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600080546108ad906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546108d9906145f4565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b600061093b826124dd565b61097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610971906141ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c082611268565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061422b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a506124d5565b73ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e81610a796124d5565b6121b3565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906140ab565b60405180910390fd5b610ac88383612549565b505050565b600c60009054906101000a900460ff1681565b6000600880549050905090565b610afe610af86124d5565b82612602565b610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b34906142ab565b60405180910390fd5b610b488383836126e0565b505050565b610b556124d5565b73ffffffffffffffffffffffffffffffffffffffff16610b736115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906141cb565b60405180910390fd5b6000610bd3610ae0565b9050600c60009054906101000a900460ff1615610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906142cb565b60405180910390fd5b6101f4600182610c359190614429565b1115610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d9061424b565b60405180910390fd5b610c8c33600183610c879190614429565b61293c565b50565b6000600d54905090565b6000610ca48361131a565b8210610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613f8b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d5983838360405180602001604052806000815250611d55565b505050565b60606000610d6b8361131a565b905060008167ffffffffffffffff811115610d8957610d886147bc565b5b604051908082528060200260200182016040528015610db75781602001602082028036833780820191505090505b50905060005b82811015610e0157610dcf8582610c99565b828281518110610de257610de161478d565b5b6020026020010181815250508080610df990614657565b915050610dbd565b508092505050919050565b6000610e16610ae0565b8210610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906142eb565b60405180910390fd5b60088281548110610e6b57610e6a61478d565b5b90600052602060002001549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610edb6124d5565b73ffffffffffffffffffffffffffffffffffffffff16610ef96115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906141cb565b60405180910390fd5b80600b9080519060200190610f65929190613405565b5050565b600c60009054906101000a900460ff1615610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906142cb565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7336040518263ffffffff1660e01b81526004016110149190613ea5565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611064919061380b565b6110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061412b565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111279061400b565b60405180910390fd5b600061113a610ae0565b90506101f460018261114c9190614429565b111561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061424b565b60405180910390fd5b60c86001600d5461119e9190614429565b11156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d69061414b565b60405180910390fd5b600d60008154809291906111f290614657565b91905055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611265336001836112609190614429565b61293c565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611308906140eb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611382906140cb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113da6124d5565b73ffffffffffffffffffffffffffffffffffffffff166113f86115ef565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611445906141cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e54905090565b6115216124d5565b73ffffffffffffffffffffffffffffffffffffffff1661153f6115ef565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906141cb565b60405180910390fd5b6000479050730a0da512157d16f456c837a93a91c12f4b70367273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506115ec57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611628906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611654906145f4565b80156116a15780601f10611676576101008083540402835291602001916116a1565b820191906000526020600020905b81548152906001019060200180831161168457829003601f168201915b5050505050905090565b60006116b5610ae0565b9050600c60009054906101000a900460ff1615611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe906142cb565b60405180910390fd5b61012c6001600e546117199190614429565b111561175a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117519061424b565b60405180910390fd5b600a821061179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117949061428b565b60405180910390fd5b8166d529ae9e8600006117b091906144b0565b3410156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e99061426b565b60405180910390fd5b6000600190505b82811161184057600e600081548092919061181390614657565b919050555061182d3382846118289190614429565b61293c565b808061183890614657565b9150506117f9565b505050565b61184d6124d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061406b565b60405180910390fd5b80600560006118c86124d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119756124d5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ba9190613f2e565b60405180910390a35050565b6001601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a239190613ea5565b60206040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190613908565b101580611b2b57506001601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611ad89190613ea5565b60206040518083038186803b158015611af057600080fd5b505afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190613908565b10155b611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613f6b565b60405180910390fd5b6000611b74610ae0565b90506101f4600182611b869190614429565b1115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe9061424b565b60405180910390fd5b600c60009054906101000a900460ff1615611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906142cb565b60405180910390fd5b61012c6001600e54611c299190614429565b1115611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c619061410b565b60405180910390fd5b600a8210611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca49061428b565b60405180910390fd5b8166b1a2bc2ec50000611cc091906144b0565b341015611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf99061426b565b60405180910390fd5b6000600190505b828111611d5057600e6000815480929190611d2390614657565b9190505550611d3d338284611d389190614429565b61293c565b8080611d4890614657565b915050611d09565b505050565b611d66611d606124d5565b83612602565b611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c906142ab565b60405180910390fd5b611db18484848461295a565b50505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611e18826124dd565b611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e9061420b565b60405180910390fd5b6000611e616129b6565b90506000815111611e815760405180602001604052806000815250611eac565b80611e8b84612a48565b604051602001611e9c929190613e81565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900460ff1615611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb906142cb565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841336040518263ffffffff1660e01b8152600401611f5f9190613ea5565b60206040518083038186803b158015611f7757600080fd5b505afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf919061380b565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe59061402b565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729061418b565b60405180910390fd5b6000612085610ae0565b90506101f46001826120979190614429565b11156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf9061424b565b60405180910390fd5b60c86001600d546120e99190614429565b111561212a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121219061414b565b60405180910390fd5b600d600081548092919061213d90614657565b91905055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506121b0336001836121ab9190614429565b61293c565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224f6124d5565b73ffffffffffffffffffffffffffffffffffffffff1661226d6115ef565b73ffffffffffffffffffffffffffffffffffffffff16146122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba906141cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613fcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124ce57506124cd82612ba9565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125bc83611268565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061260d826124dd565b61264c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126439061408b565b60405180910390fd5b600061265783611268565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126c657508373ffffffffffffffffffffffffffffffffffffffff166126ae84610930565b73ffffffffffffffffffffffffffffffffffffffff16145b806126d757506126d681856121b3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661270082611268565b73ffffffffffffffffffffffffffffffffffffffff1614612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d906141eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd9061404b565b60405180910390fd5b6127d1838383612c13565b6127dc600082612549565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282c919061450a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128839190614429565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612956828260405180602001604052806000815250612d27565b5050565b6129658484846126e0565b61297184848484612d82565b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790613fab565b60405180910390fd5b50505050565b6060600b80546129c5906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546129f1906145f4565b8015612a3e5780601f10612a1357610100808354040283529160200191612a3e565b820191906000526020600020905b815481529060010190602001808311612a2157829003601f168201915b5050505050905090565b60606000821415612a90576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ba4565b600082905060005b60008214612ac2578080612aab90614657565b915050600a82612abb919061447f565b9150612a98565b60008167ffffffffffffffff811115612ade57612add6147bc565b5b6040519080825280601f01601f191660200182016040528015612b105781602001600182028036833780820191505090505b5090505b60008514612b9d57600182612b29919061450a565b9150600a85612b3891906146a0565b6030612b449190614429565b60f81b818381518110612b5a57612b5961478d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b96919061447f565b9450612b14565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c1e838383612f19565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6157612c5c81612f1e565b612ca0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c9f57612c9e8382612f67565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ce357612cde816130d4565b612d22565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2157612d2082826131a5565b5b5b505050565b612d318383613224565b612d3e6000848484612d82565b612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490613fab565b60405180910390fd5b505050565b6000612da38473ffffffffffffffffffffffffffffffffffffffff166133f2565b15612f0c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dcc6124d5565b8786866040518563ffffffff1660e01b8152600401612dee9493929190613ec0565b602060405180830381600087803b158015612e0857600080fd5b505af1925050508015612e3957506040513d601f19601f82011682018060405250810190612e369190613865565b60015b612ebc573d8060008114612e69576040519150601f19603f3d011682016040523d82523d6000602084013e612e6e565b606091505b50600081511415612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab90613fab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f11565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f748461131a565b612f7e919061450a565b9050600060076000848152602001908152602001600020549050818114613063576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130e8919061450a565b90506000600960008481526020019081526020016000205490506000600883815481106131185761311761478d565b5b90600052602060002001549050806008838154811061313a5761313961478d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131895761318861475e565b5b6001900381819060005260206000200160009055905550505050565b60006131b08361131a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b9061416b565b60405180910390fd5b61329d816124dd565b156132dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d490613feb565b60405180910390fd5b6132e960008383612c13565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133399190614429565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613411906145f4565b90600052602060002090601f016020900481019282613433576000855561347a565b82601f1061344c57805160ff191683800117855561347a565b8280016001018555821561347a579182015b8281111561347957825182559160200191906001019061345e565b5b509050613487919061348b565b5090565b5b808211156134a457600081600090555060010161348c565b5090565b60006134bb6134b68461434b565b614326565b9050828152602081018484840111156134d7576134d66147f0565b5b6134e28482856145b2565b509392505050565b60006134fd6134f88461437c565b614326565b905082815260208101848484011115613519576135186147f0565b5b6135248482856145b2565b509392505050565b60008135905061353b81614f87565b92915050565b60008135905061355081614f9e565b92915050565b60008151905061356581614f9e565b92915050565b60008135905061357a81614fb5565b92915050565b60008151905061358f81614fb5565b92915050565b600082601f8301126135aa576135a96147eb565b5b81356135ba8482602086016134a8565b91505092915050565b600082601f8301126135d8576135d76147eb565b5b81356135e88482602086016134ea565b91505092915050565b60008135905061360081614fcc565b92915050565b60008151905061361581614fcc565b92915050565b600060208284031215613631576136306147fa565b5b600061363f8482850161352c565b91505092915050565b6000806040838503121561365f5761365e6147fa565b5b600061366d8582860161352c565b925050602061367e8582860161352c565b9150509250929050565b6000806000606084860312156136a1576136a06147fa565b5b60006136af8682870161352c565b93505060206136c08682870161352c565b92505060406136d1868287016135f1565b9150509250925092565b600080600080608085870312156136f5576136f46147fa565b5b60006137038782880161352c565b94505060206137148782880161352c565b9350506040613725878288016135f1565b925050606085013567ffffffffffffffff811115613746576137456147f5565b5b61375287828801613595565b91505092959194509250565b60008060408385031215613775576137746147fa565b5b60006137838582860161352c565b925050602061379485828601613541565b9150509250929050565b600080604083850312156137b5576137b46147fa565b5b60006137c38582860161352c565b92505060206137d4858286016135f1565b9150509250929050565b6000602082840312156137f4576137f36147fa565b5b600061380284828501613541565b91505092915050565b600060208284031215613821576138206147fa565b5b600061382f84828501613556565b91505092915050565b60006020828403121561384e5761384d6147fa565b5b600061385c8482850161356b565b91505092915050565b60006020828403121561387b5761387a6147fa565b5b600061388984828501613580565b91505092915050565b6000602082840312156138a8576138a76147fa565b5b600082013567ffffffffffffffff8111156138c6576138c56147f5565b5b6138d2848285016135c3565b91505092915050565b6000602082840312156138f1576138f06147fa565b5b60006138ff848285016135f1565b91505092915050565b60006020828403121561391e5761391d6147fa565b5b600061392c84828501613606565b91505092915050565b60006139418383613e63565b60208301905092915050565b6139568161453e565b82525050565b6000613967826143bd565b61397181856143eb565b935061397c836143ad565b8060005b838110156139ad5781516139948882613935565b975061399f836143de565b925050600181019050613980565b5085935050505092915050565b6139c381614550565b82525050565b60006139d4826143c8565b6139de81856143fc565b93506139ee8185602086016145c1565b6139f7816147ff565b840191505092915050565b6000613a0d826143d3565b613a17818561440d565b9350613a278185602086016145c1565b613a30816147ff565b840191505092915050565b6000613a46826143d3565b613a50818561441e565b9350613a608185602086016145c1565b80840191505092915050565b6000613a79602b8361440d565b9150613a8482614810565b604082019050919050565b6000613a9c602b8361440d565b9150613aa78261485f565b604082019050919050565b6000613abf60328361440d565b9150613aca826148ae565b604082019050919050565b6000613ae260268361440d565b9150613aed826148fd565b604082019050919050565b6000613b05601c8361440d565b9150613b108261494c565b602082019050919050565b6000613b2860248361440d565b9150613b3382614975565b604082019050919050565b6000613b4b60178361440d565b9150613b56826149c4565b602082019050919050565b6000613b6e60248361440d565b9150613b79826149ed565b604082019050919050565b6000613b9160198361440d565b9150613b9c82614a3c565b602082019050919050565b6000613bb4602c8361440d565b9150613bbf82614a65565b604082019050919050565b6000613bd760388361440d565b9150613be282614ab4565b604082019050919050565b6000613bfa602a8361440d565b9150613c0582614b03565b604082019050919050565b6000613c1d60298361440d565b9150613c2882614b52565b604082019050919050565b6000613c40601d8361440d565b9150613c4b82614ba1565b602082019050919050565b6000613c6360178361440d565b9150613c6e82614bca565b602082019050919050565b6000613c8660218361440d565b9150613c9182614bf3565b604082019050919050565b6000613ca960208361440d565b9150613cb482614c42565b602082019050919050565b6000613ccc60248361440d565b9150613cd782614c6b565b604082019050919050565b6000613cef602c8361440d565b9150613cfa82614cba565b604082019050919050565b6000613d1260208361440d565b9150613d1d82614d09565b602082019050919050565b6000613d3560298361440d565b9150613d4082614d32565b604082019050919050565b6000613d58602f8361440d565b9150613d6382614d81565b604082019050919050565b6000613d7b60218361440d565b9150613d8682614dd0565b604082019050919050565b6000613d9e60168361440d565b9150613da982614e1f565b602082019050919050565b6000613dc160198361440d565b9150613dcc82614e48565b602082019050919050565b6000613de460358361440d565b9150613def82614e71565b604082019050919050565b6000613e0760318361440d565b9150613e1282614ec0565b604082019050919050565b6000613e2a60118361440d565b9150613e3582614f0f565b602082019050919050565b6000613e4d602c8361440d565b9150613e5882614f38565b604082019050919050565b613e6c816145a8565b82525050565b613e7b816145a8565b82525050565b6000613e8d8285613a3b565b9150613e998284613a3b565b91508190509392505050565b6000602082019050613eba600083018461394d565b92915050565b6000608082019050613ed5600083018761394d565b613ee2602083018661394d565b613eef6040830185613e72565b8181036060830152613f0181846139c9565b905095945050505050565b60006020820190508181036000830152613f26818461395c565b905092915050565b6000602082019050613f4360008301846139ba565b92915050565b60006020820190508181036000830152613f638184613a02565b905092915050565b60006020820190508181036000830152613f8481613a6c565b9050919050565b60006020820190508181036000830152613fa481613a8f565b9050919050565b60006020820190508181036000830152613fc481613ab2565b9050919050565b60006020820190508181036000830152613fe481613ad5565b9050919050565b6000602082019050818103600083015261400481613af8565b9050919050565b6000602082019050818103600083015261402481613b1b565b9050919050565b6000602082019050818103600083015261404481613b3e565b9050919050565b6000602082019050818103600083015261406481613b61565b9050919050565b6000602082019050818103600083015261408481613b84565b9050919050565b600060208201905081810360008301526140a481613ba7565b9050919050565b600060208201905081810360008301526140c481613bca565b9050919050565b600060208201905081810360008301526140e481613bed565b9050919050565b6000602082019050818103600083015261410481613c10565b9050919050565b6000602082019050818103600083015261412481613c33565b9050919050565b6000602082019050818103600083015261414481613c56565b9050919050565b6000602082019050818103600083015261416481613c79565b9050919050565b6000602082019050818103600083015261418481613c9c565b9050919050565b600060208201905081810360008301526141a481613cbf565b9050919050565b600060208201905081810360008301526141c481613ce2565b9050919050565b600060208201905081810360008301526141e481613d05565b9050919050565b6000602082019050818103600083015261420481613d28565b9050919050565b6000602082019050818103600083015261422481613d4b565b9050919050565b6000602082019050818103600083015261424481613d6e565b9050919050565b6000602082019050818103600083015261426481613d91565b9050919050565b6000602082019050818103600083015261428481613db4565b9050919050565b600060208201905081810360008301526142a481613dd7565b9050919050565b600060208201905081810360008301526142c481613dfa565b9050919050565b600060208201905081810360008301526142e481613e1d565b9050919050565b6000602082019050818103600083015261430481613e40565b9050919050565b60006020820190506143206000830184613e72565b92915050565b6000614330614341565b905061433c8282614626565b919050565b6000604051905090565b600067ffffffffffffffff821115614366576143656147bc565b5b61436f826147ff565b9050602081019050919050565b600067ffffffffffffffff821115614397576143966147bc565b5b6143a0826147ff565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614434826145a8565b915061443f836145a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614474576144736146d1565b5b828201905092915050565b600061448a826145a8565b9150614495836145a8565b9250826144a5576144a4614700565b5b828204905092915050565b60006144bb826145a8565b91506144c6836145a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ff576144fe6146d1565b5b828202905092915050565b6000614515826145a8565b9150614520836145a8565b925082821015614533576145326146d1565b5b828203905092915050565b600061454982614588565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145df5780820151818401526020810190506145c4565b838111156145ee576000848401525b50505050565b6000600282049050600182168061460c57607f821691505b602082108114156146205761461f61472f565b5b50919050565b61462f826147ff565b810181811067ffffffffffffffff8211171561464e5761464d6147bc565b5b80604052505050565b6000614662826145a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946146d1565b5b600182019050919050565b60006146ab826145a8565b91506146b6836145a8565b9250826146c6576146c5614700565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f75206e65656420746f20686f6c64206120426c6f6f74206f7220426c6f6f60008201527f744d4620746f206d696e74000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53656e6465722068617320616c7265616479206d696e7465642061732044696160008201527f6d6f6e6400000000000000000000000000000000000000000000000000000000602082015250565b7f53656e646572206973206e6f74206120466f756e646572000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d207075626c696320737570706c79000000600082015250565b7f53656e646572206973206e6f742061204469616d6f6e64000000000000000000600082015250565b7f45786365656473206d6178696d756d20737570706c7920666f7220646f6e6f7260008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53656e6465722068617320616c7265616479206d696e74656420617320466f7560008201527f6e64657200000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313020536f6460008201527f617320696e206f6e65207472616e73616374696f6e0000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614f908161453e565b8114614f9b57600080fd5b50565b614fa781614550565b8114614fb257600080fd5b50565b614fbe8161455c565b8114614fc957600080fd5b50565b614fd5816145a8565b8114614fe057600080fd5b5056fea264697066735822122044aab84d5ab0107edd31adb16648c048229ce53d96814b8f592582070da547f064736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503942426d4e57774e36656f486a395851686154314b6a746452455a3554654276314a4e5a326543666147312f00000000000000000000

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c80635f2746471161010d578063a0712d68116100a0578063b9597a771161006f578063b9597a77146106a1578063c87b56dd146106de578063e62ac0f51461071b578063e985e9c514610725578063f2fde38b14610762576101ee565b8063a0712d6814610617578063a22cb46514610633578063b40c25d21461065c578063b88d4fde14610678576101ee565b80638283f30b116100dc5780638283f30b1461058c578063853828b6146105b75780638da5cb5b146105c157806395d89b41146105ec576101ee565b80635f274647146104f15780636352211e146104fb57806370a0823114610538578063715018a614610575576101ee565b806327b8be9811610185578063438b630011610154578063438b6300146104115780634f6ccce71461044e578063543e0d171461048b57806355f804b3146104c8576101ee565b806327b8be98146103695780632cc691e3146103805780632f745c59146103ab57806342842e0e146103e8576101ee565b8063095ea7b3116101c1578063095ea7b3146102c157806316c61ccc146102ea57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613838565b61078b565b6040516102279190613f2e565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906137de565b610805565b005b34801561026557600080fd5b5061026e61089e565b60405161027b9190613f49565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a691906138db565b610930565b6040516102b89190613ea5565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e3919061379e565b6109b5565b005b3480156102f657600080fd5b506102ff610acd565b60405161030c9190613f2e565b60405180910390f35b34801561032157600080fd5b5061032a610ae0565b604051610337919061430b565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613688565b610aed565b005b34801561037557600080fd5b5061037e610b4d565b005b34801561038c57600080fd5b50610395610c8f565b6040516103a2919061430b565b60405180910390f35b3480156103b757600080fd5b506103d260048036038101906103cd919061379e565b610c99565b6040516103df919061430b565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613688565b610d3e565b005b34801561041d57600080fd5b506104386004803603810190610433919061361b565b610d5e565b6040516104459190613f0c565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906138db565b610e0c565b604051610482919061430b565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad919061361b565b610e7d565b6040516104bf9190613f2e565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea9190613892565b610ed3565b005b6104f9610f69565b005b34801561050757600080fd5b50610522600480360381019061051d91906138db565b611268565b60405161052f9190613ea5565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a919061361b565b61131a565b60405161056c919061430b565b60405180910390f35b34801561058157600080fd5b5061058a6113d2565b005b34801561059857600080fd5b506105a161150f565b6040516105ae919061430b565b60405180910390f35b6105bf611519565b005b3480156105cd57600080fd5b506105d66115ef565b6040516105e39190613ea5565b60405180910390f35b3480156105f857600080fd5b50610601611619565b60405161060e9190613f49565b60405180910390f35b610631600480360381019061062c91906138db565b6116ab565b005b34801561063f57600080fd5b5061065a6004803603810190610655919061375e565b611845565b005b610676600480360381019061067191906138db565b6119c6565b005b34801561068457600080fd5b5061069f600480360381019061069a91906136db565b611d55565b005b3480156106ad57600080fd5b506106c860048036038101906106c3919061361b565b611db7565b6040516106d59190613f2e565b60405180910390f35b3480156106ea57600080fd5b50610705600480360381019061070091906138db565b611e0d565b6040516107129190613f49565b60405180910390f35b610723611eb4565b005b34801561073157600080fd5b5061074c60048036038101906107479190613648565b6121b3565b6040516107599190613f2e565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061361b565b612247565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107fe57506107fd826123f3565b5b9050919050565b61080d6124d5565b73ffffffffffffffffffffffffffffffffffffffff1661082b6115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610878906141cb565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600080546108ad906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546108d9906145f4565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b600061093b826124dd565b61097a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610971906141ab565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c082611268565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061422b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a506124d5565b73ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e81610a796124d5565b6121b3565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab5906140ab565b60405180910390fd5b610ac88383612549565b505050565b600c60009054906101000a900460ff1681565b6000600880549050905090565b610afe610af86124d5565b82612602565b610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b34906142ab565b60405180910390fd5b610b488383836126e0565b505050565b610b556124d5565b73ffffffffffffffffffffffffffffffffffffffff16610b736115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906141cb565b60405180910390fd5b6000610bd3610ae0565b9050600c60009054906101000a900460ff1615610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c906142cb565b60405180910390fd5b6101f4600182610c359190614429565b1115610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d9061424b565b60405180910390fd5b610c8c33600183610c879190614429565b61293c565b50565b6000600d54905090565b6000610ca48361131a565b8210610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90613f8b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d5983838360405180602001604052806000815250611d55565b505050565b60606000610d6b8361131a565b905060008167ffffffffffffffff811115610d8957610d886147bc565b5b604051908082528060200260200182016040528015610db75781602001602082028036833780820191505090505b50905060005b82811015610e0157610dcf8582610c99565b828281518110610de257610de161478d565b5b6020026020010181815250508080610df990614657565b915050610dbd565b508092505050919050565b6000610e16610ae0565b8210610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906142eb565b60405180910390fd5b60088281548110610e6b57610e6a61478d565b5b90600052602060002001549050919050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610edb6124d5565b73ffffffffffffffffffffffffffffffffffffffff16610ef96115ef565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f46906141cb565b60405180910390fd5b80600b9080519060200190610f65929190613405565b5050565b600c60009054906101000a900460ff1615610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906142cb565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db9844d7336040518263ffffffff1660e01b81526004016110149190613ea5565b60206040518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611064919061380b565b6110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061412b565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611130576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111279061400b565b60405180910390fd5b600061113a610ae0565b90506101f460018261114c9190614429565b111561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111849061424b565b60405180910390fd5b60c86001600d5461119e9190614429565b11156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d69061414b565b60405180910390fd5b600d60008154809291906111f290614657565b91905055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611265336001836112609190614429565b61293c565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611308906140eb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611382906140cb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113da6124d5565b73ffffffffffffffffffffffffffffffffffffffff166113f86115ef565b73ffffffffffffffffffffffffffffffffffffffff161461144e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611445906141cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e54905090565b6115216124d5565b73ffffffffffffffffffffffffffffffffffffffff1661153f6115ef565b73ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906141cb565b60405180910390fd5b6000479050730a0da512157d16f456c837a93a91c12f4b70367273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506115ec57600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611628906145f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611654906145f4565b80156116a15780601f10611676576101008083540402835291602001916116a1565b820191906000526020600020905b81548152906001019060200180831161168457829003601f168201915b5050505050905090565b60006116b5610ae0565b9050600c60009054906101000a900460ff1615611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe906142cb565b60405180910390fd5b61012c6001600e546117199190614429565b111561175a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117519061424b565b60405180910390fd5b600a821061179d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117949061428b565b60405180910390fd5b8166d529ae9e8600006117b091906144b0565b3410156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e99061426b565b60405180910390fd5b6000600190505b82811161184057600e600081548092919061181390614657565b919050555061182d3382846118289190614429565b61293c565b808061183890614657565b9150506117f9565b505050565b61184d6124d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b29061406b565b60405180910390fd5b80600560006118c86124d5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119756124d5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ba9190613f2e565b60405180910390a35050565b6001601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611a239190613ea5565b60206040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a739190613908565b101580611b2b57506001601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611ad89190613ea5565b60206040518083038186803b158015611af057600080fd5b505afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190613908565b10155b611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613f6b565b60405180910390fd5b6000611b74610ae0565b90506101f4600182611b869190614429565b1115611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe9061424b565b60405180910390fd5b600c60009054906101000a900460ff1615611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906142cb565b60405180910390fd5b61012c6001600e54611c299190614429565b1115611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c619061410b565b60405180910390fd5b600a8210611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca49061428b565b60405180910390fd5b8166b1a2bc2ec50000611cc091906144b0565b341015611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf99061426b565b60405180910390fd5b6000600190505b828111611d5057600e6000815480929190611d2390614657565b9190505550611d3d338284611d389190614429565b61293c565b8080611d4890614657565b915050611d09565b505050565b611d66611d606124d5565b83612602565b611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c906142ab565b60405180910390fd5b611db18484848461295a565b50505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060611e18826124dd565b611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e9061420b565b60405180910390fd5b6000611e616129b6565b90506000815111611e815760405180602001604052806000815250611eac565b80611e8b84612a48565b604051602001611e9c929190613e81565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900460ff1615611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb906142cb565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7b57841336040518263ffffffff1660e01b8152600401611f5f9190613ea5565b60206040518083038186803b158015611f7757600080fd5b505afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf919061380b565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe59061402b565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561207b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120729061418b565b60405180910390fd5b6000612085610ae0565b90506101f46001826120979190614429565b11156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf9061424b565b60405180910390fd5b60c86001600d546120e99190614429565b111561212a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121219061414b565b60405180910390fd5b600d600081548092919061213d90614657565b91905055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506121b0336001836121ab9190614429565b61293c565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61224f6124d5565b73ffffffffffffffffffffffffffffffffffffffff1661226d6115ef565b73ffffffffffffffffffffffffffffffffffffffff16146122c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba906141cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a90613fcb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124ce57506124cd82612ba9565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125bc83611268565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061260d826124dd565b61264c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126439061408b565b60405180910390fd5b600061265783611268565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126c657508373ffffffffffffffffffffffffffffffffffffffff166126ae84610930565b73ffffffffffffffffffffffffffffffffffffffff16145b806126d757506126d681856121b3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661270082611268565b73ffffffffffffffffffffffffffffffffffffffff1614612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d906141eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bd9061404b565b60405180910390fd5b6127d1838383612c13565b6127dc600082612549565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282c919061450a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128839190614429565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612956828260405180602001604052806000815250612d27565b5050565b6129658484846126e0565b61297184848484612d82565b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a790613fab565b60405180910390fd5b50505050565b6060600b80546129c5906145f4565b80601f01602080910402602001604051908101604052809291908181526020018280546129f1906145f4565b8015612a3e5780601f10612a1357610100808354040283529160200191612a3e565b820191906000526020600020905b815481529060010190602001808311612a2157829003601f168201915b5050505050905090565b60606000821415612a90576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ba4565b600082905060005b60008214612ac2578080612aab90614657565b915050600a82612abb919061447f565b9150612a98565b60008167ffffffffffffffff811115612ade57612add6147bc565b5b6040519080825280601f01601f191660200182016040528015612b105781602001600182028036833780820191505090505b5090505b60008514612b9d57600182612b29919061450a565b9150600a85612b3891906146a0565b6030612b449190614429565b60f81b818381518110612b5a57612b5961478d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b96919061447f565b9450612b14565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c1e838383612f19565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6157612c5c81612f1e565b612ca0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c9f57612c9e8382612f67565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ce357612cde816130d4565b612d22565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2157612d2082826131a5565b5b5b505050565b612d318383613224565b612d3e6000848484612d82565b612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490613fab565b60405180910390fd5b505050565b6000612da38473ffffffffffffffffffffffffffffffffffffffff166133f2565b15612f0c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dcc6124d5565b8786866040518563ffffffff1660e01b8152600401612dee9493929190613ec0565b602060405180830381600087803b158015612e0857600080fd5b505af1925050508015612e3957506040513d601f19601f82011682018060405250810190612e369190613865565b60015b612ebc573d8060008114612e69576040519150601f19603f3d011682016040523d82523d6000602084013e612e6e565b606091505b50600081511415612eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eab90613fab565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f11565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f748461131a565b612f7e919061450a565b9050600060076000848152602001908152602001600020549050818114613063576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130e8919061450a565b90506000600960008481526020019081526020016000205490506000600883815481106131185761311761478d565b5b90600052602060002001549050806008838154811061313a5761313961478d565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131895761318861475e565b5b6001900381819060005260206000200160009055905550505050565b60006131b08361131a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328b9061416b565b60405180910390fd5b61329d816124dd565b156132dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d490613feb565b60405180910390fd5b6132e960008383612c13565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133399190614429565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613411906145f4565b90600052602060002090601f016020900481019282613433576000855561347a565b82601f1061344c57805160ff191683800117855561347a565b8280016001018555821561347a579182015b8281111561347957825182559160200191906001019061345e565b5b509050613487919061348b565b5090565b5b808211156134a457600081600090555060010161348c565b5090565b60006134bb6134b68461434b565b614326565b9050828152602081018484840111156134d7576134d66147f0565b5b6134e28482856145b2565b509392505050565b60006134fd6134f88461437c565b614326565b905082815260208101848484011115613519576135186147f0565b5b6135248482856145b2565b509392505050565b60008135905061353b81614f87565b92915050565b60008135905061355081614f9e565b92915050565b60008151905061356581614f9e565b92915050565b60008135905061357a81614fb5565b92915050565b60008151905061358f81614fb5565b92915050565b600082601f8301126135aa576135a96147eb565b5b81356135ba8482602086016134a8565b91505092915050565b600082601f8301126135d8576135d76147eb565b5b81356135e88482602086016134ea565b91505092915050565b60008135905061360081614fcc565b92915050565b60008151905061361581614fcc565b92915050565b600060208284031215613631576136306147fa565b5b600061363f8482850161352c565b91505092915050565b6000806040838503121561365f5761365e6147fa565b5b600061366d8582860161352c565b925050602061367e8582860161352c565b9150509250929050565b6000806000606084860312156136a1576136a06147fa565b5b60006136af8682870161352c565b93505060206136c08682870161352c565b92505060406136d1868287016135f1565b9150509250925092565b600080600080608085870312156136f5576136f46147fa565b5b60006137038782880161352c565b94505060206137148782880161352c565b9350506040613725878288016135f1565b925050606085013567ffffffffffffffff811115613746576137456147f5565b5b61375287828801613595565b91505092959194509250565b60008060408385031215613775576137746147fa565b5b60006137838582860161352c565b925050602061379485828601613541565b9150509250929050565b600080604083850312156137b5576137b46147fa565b5b60006137c38582860161352c565b92505060206137d4858286016135f1565b9150509250929050565b6000602082840312156137f4576137f36147fa565b5b600061380284828501613541565b91505092915050565b600060208284031215613821576138206147fa565b5b600061382f84828501613556565b91505092915050565b60006020828403121561384e5761384d6147fa565b5b600061385c8482850161356b565b91505092915050565b60006020828403121561387b5761387a6147fa565b5b600061388984828501613580565b91505092915050565b6000602082840312156138a8576138a76147fa565b5b600082013567ffffffffffffffff8111156138c6576138c56147f5565b5b6138d2848285016135c3565b91505092915050565b6000602082840312156138f1576138f06147fa565b5b60006138ff848285016135f1565b91505092915050565b60006020828403121561391e5761391d6147fa565b5b600061392c84828501613606565b91505092915050565b60006139418383613e63565b60208301905092915050565b6139568161453e565b82525050565b6000613967826143bd565b61397181856143eb565b935061397c836143ad565b8060005b838110156139ad5781516139948882613935565b975061399f836143de565b925050600181019050613980565b5085935050505092915050565b6139c381614550565b82525050565b60006139d4826143c8565b6139de81856143fc565b93506139ee8185602086016145c1565b6139f7816147ff565b840191505092915050565b6000613a0d826143d3565b613a17818561440d565b9350613a278185602086016145c1565b613a30816147ff565b840191505092915050565b6000613a46826143d3565b613a50818561441e565b9350613a608185602086016145c1565b80840191505092915050565b6000613a79602b8361440d565b9150613a8482614810565b604082019050919050565b6000613a9c602b8361440d565b9150613aa78261485f565b604082019050919050565b6000613abf60328361440d565b9150613aca826148ae565b604082019050919050565b6000613ae260268361440d565b9150613aed826148fd565b604082019050919050565b6000613b05601c8361440d565b9150613b108261494c565b602082019050919050565b6000613b2860248361440d565b9150613b3382614975565b604082019050919050565b6000613b4b60178361440d565b9150613b56826149c4565b602082019050919050565b6000613b6e60248361440d565b9150613b79826149ed565b604082019050919050565b6000613b9160198361440d565b9150613b9c82614a3c565b602082019050919050565b6000613bb4602c8361440d565b9150613bbf82614a65565b604082019050919050565b6000613bd760388361440d565b9150613be282614ab4565b604082019050919050565b6000613bfa602a8361440d565b9150613c0582614b03565b604082019050919050565b6000613c1d60298361440d565b9150613c2882614b52565b604082019050919050565b6000613c40601d8361440d565b9150613c4b82614ba1565b602082019050919050565b6000613c6360178361440d565b9150613c6e82614bca565b602082019050919050565b6000613c8660218361440d565b9150613c9182614bf3565b604082019050919050565b6000613ca960208361440d565b9150613cb482614c42565b602082019050919050565b6000613ccc60248361440d565b9150613cd782614c6b565b604082019050919050565b6000613cef602c8361440d565b9150613cfa82614cba565b604082019050919050565b6000613d1260208361440d565b9150613d1d82614d09565b602082019050919050565b6000613d3560298361440d565b9150613d4082614d32565b604082019050919050565b6000613d58602f8361440d565b9150613d6382614d81565b604082019050919050565b6000613d7b60218361440d565b9150613d8682614dd0565b604082019050919050565b6000613d9e60168361440d565b9150613da982614e1f565b602082019050919050565b6000613dc160198361440d565b9150613dcc82614e48565b602082019050919050565b6000613de460358361440d565b9150613def82614e71565b604082019050919050565b6000613e0760318361440d565b9150613e1282614ec0565b604082019050919050565b6000613e2a60118361440d565b9150613e3582614f0f565b602082019050919050565b6000613e4d602c8361440d565b9150613e5882614f38565b604082019050919050565b613e6c816145a8565b82525050565b613e7b816145a8565b82525050565b6000613e8d8285613a3b565b9150613e998284613a3b565b91508190509392505050565b6000602082019050613eba600083018461394d565b92915050565b6000608082019050613ed5600083018761394d565b613ee2602083018661394d565b613eef6040830185613e72565b8181036060830152613f0181846139c9565b905095945050505050565b60006020820190508181036000830152613f26818461395c565b905092915050565b6000602082019050613f4360008301846139ba565b92915050565b60006020820190508181036000830152613f638184613a02565b905092915050565b60006020820190508181036000830152613f8481613a6c565b9050919050565b60006020820190508181036000830152613fa481613a8f565b9050919050565b60006020820190508181036000830152613fc481613ab2565b9050919050565b60006020820190508181036000830152613fe481613ad5565b9050919050565b6000602082019050818103600083015261400481613af8565b9050919050565b6000602082019050818103600083015261402481613b1b565b9050919050565b6000602082019050818103600083015261404481613b3e565b9050919050565b6000602082019050818103600083015261406481613b61565b9050919050565b6000602082019050818103600083015261408481613b84565b9050919050565b600060208201905081810360008301526140a481613ba7565b9050919050565b600060208201905081810360008301526140c481613bca565b9050919050565b600060208201905081810360008301526140e481613bed565b9050919050565b6000602082019050818103600083015261410481613c10565b9050919050565b6000602082019050818103600083015261412481613c33565b9050919050565b6000602082019050818103600083015261414481613c56565b9050919050565b6000602082019050818103600083015261416481613c79565b9050919050565b6000602082019050818103600083015261418481613c9c565b9050919050565b600060208201905081810360008301526141a481613cbf565b9050919050565b600060208201905081810360008301526141c481613ce2565b9050919050565b600060208201905081810360008301526141e481613d05565b9050919050565b6000602082019050818103600083015261420481613d28565b9050919050565b6000602082019050818103600083015261422481613d4b565b9050919050565b6000602082019050818103600083015261424481613d6e565b9050919050565b6000602082019050818103600083015261426481613d91565b9050919050565b6000602082019050818103600083015261428481613db4565b9050919050565b600060208201905081810360008301526142a481613dd7565b9050919050565b600060208201905081810360008301526142c481613dfa565b9050919050565b600060208201905081810360008301526142e481613e1d565b9050919050565b6000602082019050818103600083015261430481613e40565b9050919050565b60006020820190506143206000830184613e72565b92915050565b6000614330614341565b905061433c8282614626565b919050565b6000604051905090565b600067ffffffffffffffff821115614366576143656147bc565b5b61436f826147ff565b9050602081019050919050565b600067ffffffffffffffff821115614397576143966147bc565b5b6143a0826147ff565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614434826145a8565b915061443f836145a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614474576144736146d1565b5b828201905092915050565b600061448a826145a8565b9150614495836145a8565b9250826144a5576144a4614700565b5b828204905092915050565b60006144bb826145a8565b91506144c6836145a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ff576144fe6146d1565b5b828202905092915050565b6000614515826145a8565b9150614520836145a8565b925082821015614533576145326146d1565b5b828203905092915050565b600061454982614588565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145df5780820151818401526020810190506145c4565b838111156145ee576000848401525b50505050565b6000600282049050600182168061460c57607f821691505b602082108114156146205761461f61472f565b5b50919050565b61462f826147ff565b810181811067ffffffffffffffff8211171561464e5761464d6147bc565b5b80604052505050565b6000614662826145a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614695576146946146d1565b5b600182019050919050565b60006146ab826145a8565b91506146b6836145a8565b9250826146c6576146c5614700565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f596f75206e65656420746f20686f6c64206120426c6f6f74206f7220426c6f6f60008201527f744d4620746f206d696e74000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53656e6465722068617320616c7265616479206d696e7465642061732044696160008201527f6d6f6e6400000000000000000000000000000000000000000000000000000000602082015250565b7f53656e646572206973206e6f74206120466f756e646572000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d207075626c696320737570706c79000000600082015250565b7f53656e646572206973206e6f742061204469616d6f6e64000000000000000000600082015250565b7f45786365656473206d6178696d756d20737570706c7920666f7220646f6e6f7260008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53656e6465722068617320616c7265616479206d696e74656420617320466f7560008201527f6e64657200000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620313020536f6460008201527f617320696e206f6e65207472616e73616374696f6e0000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614f908161453e565b8114614f9b57600080fd5b50565b614fa781614550565b8114614fb257600080fd5b50565b614fbe8161455c565b8114614fc957600080fd5b50565b614fd5816145a8565b8114614fe057600080fd5b5056fea264697066735822122044aab84d5ab0107edd31adb16648c048229ce53d96814b8f592582070da547f064736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d503942426d4e57774e36656f486a395851686154314b6a746452455a3554654276314a4e5a326543666147312f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmP9BBmNWwN6eoHj9XQhaT1KjtdREZ5TeBv1JNZ2eCfaG1/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d503942426d4e57774e36656f486a395851686154314b6a
Arg [3] : 746452455a3554654276314a4e5a326543666147312f00000000000000000000


Deployed Bytecode Sourcemap

42504:5735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36131:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47995:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24391:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25851:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25388:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43181:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36784:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26741:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46669:254;;;;;;;;;;;;;:::i;:::-;;47193:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36452:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27117:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47413:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36974:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47064:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47885:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45064:735;;;:::i;:::-;;24085:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23815:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20722:148;;;;;;;;;;;;;:::i;:::-;;47304:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48077:159;;;:::i;:::-;;20071:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24560:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43641:533;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44229:770;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27339:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46935:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24735:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45858:738;;;:::i;:::-;;26510:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21025:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36131:237;36233:4;36272:35;36257:50;;;:11;:50;;;;:103;;;;36324:36;36348:11;36324:23;:36::i;:::-;36257:103;36250:110;;36131:237;;;:::o;47995:74::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48058:3:::1;48048:7;;:13;;;;;;;;;;;;;;;;;;47995:74:::0;:::o;24391:100::-;24445:13;24478:5;24471:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24391:100;:::o;25851:221::-;25927:7;25955:16;25963:7;25955;:16::i;:::-;25947:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26040:15;:24;26056:7;26040:24;;;;;;;;;;;;;;;;;;;;;26033:31;;25851:221;;;:::o;25388:397::-;25469:13;25485:23;25500:7;25485:14;:23::i;:::-;25469:39;;25533:5;25527:11;;:2;:11;;;;25519:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25613:5;25597:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25622:37;25639:5;25646:12;:10;:12::i;:::-;25622:16;:37::i;:::-;25597:62;25589:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25756:21;25765:2;25769:7;25756:8;:21::i;:::-;25458:327;25388:397;;:::o;43181:26::-;;;;;;;;;;;;;:::o;36784:113::-;36845:7;36872:10;:17;;;;36865:24;;36784:113;:::o;26741:305::-;26902:41;26921:12;:10;:12::i;:::-;26935:7;26902:18;:41::i;:::-;26894:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:28;27020:4;27026:2;27030:7;27010:9;:28::i;:::-;26741:305;;;:::o;46669:254::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46720:14:::1;46737:13;:11;:13::i;:::-;46720:30;;46771:7;;;;;;;;;;;46770:8;46761:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;42855:3;46829:1;46820:6;:10;;;;:::i;:::-;:23;;46812:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46882:33;46892:10;46913:1;46904:6;:10;;;;:::i;:::-;46882:9;:33::i;:::-;46709:214;46669:254::o:0;47193:99::-;47243:7;47270:14;;47263:21;;47193:99;:::o;36452:256::-;36549:7;36585:23;36602:5;36585:16;:23::i;:::-;36577:5;:31;36569:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36674:12;:19;36687:5;36674:19;;;;;;;;;;;;;;;:26;36694:5;36674:26;;;;;;;;;;;;36667:33;;36452:256;;;;:::o;27117:151::-;27221:39;27238:4;27244:2;27248:7;27221:39;;;;;;;;;;;;:16;:39::i;:::-;27117:151;;;:::o;47413:342::-;47472:16;47501:18;47522:17;47532:6;47522:9;:17::i;:::-;47501:38;;47552:25;47594:10;47580:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47552:53;;47620:9;47616:106;47635:10;47631:1;:14;47616:106;;;47680:30;47700:6;47708:1;47680:19;:30::i;:::-;47666:8;47675:1;47666:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47647:3;;;;;:::i;:::-;;;;47616:106;;;;47739:8;47732:15;;;;47413:342;;;:::o;36974:233::-;37049:7;37085:30;:28;:30::i;:::-;37077:5;:38;37069:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37182:10;37193:5;37182:17;;;;;;;;:::i;:::-;;;;;;;;;;37175:24;;36974:233;;;:::o;47064:117::-;47129:4;47153:10;:20;47164:8;47153:20;;;;;;;;;;;;;;;;;;;;;;;;;47146:27;;47064:117;;;:::o;47885:102::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47972:7:::1;47956:13;:23;;;;;;;;;;;;:::i;:::-;;47885:102:::0;:::o;45064:735::-;45162:7;;;;;;;;;;;45161:8;45153:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45256:7;;;;;;;;;;;:17;;;45274:10;45256:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45248:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45333:10;:22;45344:10;45333:22;;;;;;;;;;;;;;;;;;;;;;;;;45332:23;45324:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45442:14;45459:13;:11;:13::i;:::-;45442:30;;42855:3;45500:1;45491:6;:10;;;;:::i;:::-;:23;;45483:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42808:3;45577:1;45560:14;;:18;;;;:::i;:::-;:38;;45552:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45680:14;;:16;;;;;;;;;:::i;:::-;;;;;;45732:4;45707:10;:22;45718:10;45707:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45758:33;45768:10;45789:1;45780:6;:10;;;;:::i;:::-;45758:9;:33::i;:::-;45104:695;45064:735::o;24085:239::-;24157:7;24177:13;24193:7;:16;24201:7;24193:16;;;;;;;;;;;;;;;;;;;;;24177:32;;24245:1;24228:19;;:5;:19;;;;24220:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24311:5;24304:12;;;24085:239;;;:::o;23815:208::-;23887:7;23932:1;23915:19;;:5;:19;;;;23907:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23999:9;:16;24009:5;23999:16;;;;;;;;;;;;;;;;23992:23;;23815:208;;;:::o;20722:148::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20829:1:::1;20792:40;;20813:6;;;;;;;;;;;20792:40;;;;;;;;;;;;20860:1;20843:6;;:19;;;;;;;;;;;;;;;;;;20722:148::o:0;47304:101::-;47355:7;47382:15;;47375:22;;47304:101;:::o;48077:159::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48136:11:::1;48150:21;48136:35;;42917:42;48190:32;;:37;48223:3;48190:37;;;;;;;;;;;;;;;;;;;;;;;48182:46;;;::::0;::::1;;48125:111;48077:159::o:0;20071:87::-;20117:7;20144:6;;;;;;;;;;;20137:13;;20071:87;:::o;24560:104::-;24616:13;24649:7;24642:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24560:104;:::o;43641:533::-;43694:14;43711:13;:11;:13::i;:::-;43694:30;;43744:7;;;;;;;;;;;43743:8;43735:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42754:3;43811:1;43793:15;;:19;;;;:::i;:::-;:39;;43785:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43884:2;43878:3;:8;43870:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43986:3;42693:10;43977:12;;;;:::i;:::-;43964:9;:25;;43956:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44044:9;44056:1;44044:13;;44040:127;44064:3;44059:1;:8;44040:127;;44088:15;;:17;;;;;;;;;:::i;:::-;;;;;;44120:35;44131:10;44152:1;44143:6;:10;;;;:::i;:::-;44120:9;:35::i;:::-;44069:3;;;;;:::i;:::-;;;;44040:127;;;;43683:491;43641:533;:::o;26144:295::-;26259:12;:10;:12::i;:::-;26247:24;;:8;:24;;;;26239:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26359:8;26314:18;:32;26333:12;:10;:12::i;:::-;26314:32;;;;;;;;;;;;;;;:42;26347:8;26314:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26412:8;26383:48;;26398:12;:10;:12::i;:::-;26383:48;;;26422:8;26383:48;;;;;;:::i;:::-;;;;;;;;26144:295;;:::o;44229:770::-;44331:1;44300:5;;;;;;;;;;;:15;;;44316:10;44300:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;44299:74;;;;44371:1;44338:7;;;;;;;;;;;:17;;;44356:10;44338:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;44299:74;44291:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;44441:14;44458:13;:11;:13::i;:::-;44441:30;;42855:3;44499:1;44490:6;:10;;;;:::i;:::-;:23;;44482:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44560:7;;;;;;;;;;;44559:8;44551:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;42754:3;44627:1;44609:15;;:19;;;;:::i;:::-;:39;;44601:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;44707:2;44701:3;:8;44693:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44818:3;42642:10;44800:21;;;;:::i;:::-;44787:9;:34;;44779:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44869:9;44881:1;44869:13;;44865:127;44889:3;44884:1;:8;44865:127;;44913:15;;:17;;;;;;;;;:::i;:::-;;;;;;44945:35;44956:10;44977:1;44968:6;:10;;;;:::i;:::-;44945:9;:35::i;:::-;44894:3;;;;;:::i;:::-;;;;44865:127;;;;44280:719;44229:770;:::o;27339:285::-;27471:41;27490:12;:10;:12::i;:::-;27504:7;27471:18;:41::i;:::-;27463:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27577:39;27591:4;27597:2;27601:7;27610:5;27577:13;:39::i;:::-;27339:285;;;;:::o;46935:117::-;47000:4;47024:10;:20;47035:8;47024:20;;;;;;;;;;;;;;;;;;;;;;;;;47017:27;;46935:117;;;:::o;24735:360::-;24808:13;24842:16;24850:7;24842;:16::i;:::-;24834:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:21;24947:10;:8;:10::i;:::-;24923:34;;24999:1;24981:7;24975:21;:25;:112;;;;;;;;;;;;;;;;;25040:7;25049:18;:7;:16;:18::i;:::-;25023:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24975:112;24968:119;;;24735:360;;;:::o;45858:738::-;45956:7;;;;;;;;;;;45955:8;45946:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46051:7;;;;;;;;;;;:17;;;46069:10;46051:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46042:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46128:10;:22;46139:10;46128:22;;;;;;;;;;;;;;;;;;;;;;;;;46127:23;46119:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;46237:14;46254:13;:11;:13::i;:::-;46237:30;;42855:3;46295:1;46286:6;:10;;;;:::i;:::-;:23;;46278:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42808:3;46372:1;46355:14;;:18;;;;:::i;:::-;:38;;46347:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46477:14;;:16;;;;;;;;;:::i;:::-;;;;;;46529:4;46504:10;:22;46515:10;46504:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46555:33;46565:10;46586:1;46577:6;:10;;;;:::i;:::-;46555:9;:33::i;:::-;45898:698;45858:738::o;26510:164::-;26607:4;26631:18;:25;26650:5;26631:25;;;;;;;;;;;;;;;:35;26657:8;26631:35;;;;;;;;;;;;;;;;;;;;;;;;;26624:42;;26510:164;;;;:::o;21025:244::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20283:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21134:1:::1;21114:22;;:8;:22;;;;21106:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21224:8;21195:38;;21216:6;;;;;;;;;;;21195:38;;;;;;;;;;;;21253:8;21244:6;;:17;;;;;;;;;;;;;;;;;;21025:244:::0;:::o;23459:292::-;23561:4;23600:25;23585:40;;;:11;:40;;;;:105;;;;23657:33;23642:48;;;:11;:48;;;;23585:105;:158;;;;23707:36;23731:11;23707:23;:36::i;:::-;23585:158;23578:165;;23459:292;;;:::o;18670:98::-;18723:7;18750:10;18743:17;;18670:98;:::o;29091:127::-;29156:4;29208:1;29180:30;;:7;:16;29188:7;29180:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29173:37;;29091:127;;;:::o;32968:174::-;33070:2;33043:15;:24;33059:7;33043:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33126:7;33122:2;33088:46;;33097:23;33112:7;33097:14;:23::i;:::-;33088:46;;;;;;;;;;;;32968:174;;:::o;29385:348::-;29478:4;29503:16;29511:7;29503;:16::i;:::-;29495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29579:13;29595:23;29610:7;29595:14;:23::i;:::-;29579:39;;29648:5;29637:16;;:7;:16;;;:51;;;;29681:7;29657:31;;:20;29669:7;29657:11;:20::i;:::-;:31;;;29637:51;:87;;;;29692:32;29709:5;29716:7;29692:16;:32::i;:::-;29637:87;29629:96;;;29385:348;;;;:::o;32306:544::-;32431:4;32404:31;;:23;32419:7;32404:14;:23::i;:::-;:31;;;32396:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32514:1;32500:16;;:2;:16;;;;32492:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32570:39;32591:4;32597:2;32601:7;32570:20;:39::i;:::-;32674:29;32691:1;32695:7;32674:8;:29::i;:::-;32735:1;32716:9;:15;32726:4;32716:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32764:1;32747:9;:13;32757:2;32747:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32795:2;32776:7;:16;32784:7;32776:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32834:7;32830:2;32815:27;;32824:4;32815:27;;;;;;;;;;;;32306:544;;;:::o;30075:110::-;30151:26;30161:2;30165:7;30151:26;;;;;;;;;;;;:9;:26::i;:::-;30075:110;;:::o;28506:272::-;28620:28;28630:4;28636:2;28640:7;28620:9;:28::i;:::-;28667:48;28690:4;28696:2;28700:7;28709:5;28667:22;:48::i;:::-;28659:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28506:272;;;;:::o;47763:114::-;47823:13;47856;47849:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47763:114;:::o;8374:723::-;8430:13;8660:1;8651:5;:10;8647:53;;;8678:10;;;;;;;;;;;;;;;;;;;;;8647:53;8710:12;8725:5;8710:20;;8741:14;8766:78;8781:1;8773:4;:9;8766:78;;8799:8;;;;;:::i;:::-;;;;8830:2;8822:10;;;;;:::i;:::-;;;8766:78;;;8854:19;8886:6;8876:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8854:39;;8904:154;8920:1;8911:5;:10;8904:154;;8948:1;8938:11;;;;;:::i;:::-;;;9015:2;9007:5;:10;;;;:::i;:::-;8994:2;:24;;;;:::i;:::-;8981:39;;8964:6;8971;8964:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9044:2;9035:11;;;;;:::i;:::-;;;8904:154;;;9082:6;9068:21;;;;;8374:723;;;;:::o;22018:157::-;22103:4;22142:25;22127:40;;;:11;:40;;;;22120:47;;22018:157;;;:::o;37820:555::-;37930:45;37957:4;37963:2;37967:7;37930:26;:45::i;:::-;38008:1;37992:18;;:4;:18;;;37988:187;;;38027:40;38059:7;38027:31;:40::i;:::-;37988:187;;;38097:2;38089:10;;:4;:10;;;38085:90;;38116:47;38149:4;38155:7;38116:32;:47::i;:::-;38085:90;37988:187;38203:1;38189:16;;:2;:16;;;38185:183;;;38222:45;38259:7;38222:36;:45::i;:::-;38185:183;;;38295:4;38289:10;;:2;:10;;;38285:83;;38316:40;38344:2;38348:7;38316:27;:40::i;:::-;38285:83;38185:183;37820:555;;;:::o;30412:250::-;30508:18;30514:2;30518:7;30508:5;:18::i;:::-;30545:54;30576:1;30580:2;30584:7;30593:5;30545:22;:54::i;:::-;30537:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;30412:250;;;:::o;33707:843::-;33828:4;33854:15;:2;:13;;;:15::i;:::-;33850:693;;;33906:2;33890:36;;;33927:12;:10;:12::i;:::-;33941:4;33947:7;33956:5;33890:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33886:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34153:1;34136:6;:13;:18;34132:341;;;34179:60;;;;;;;;;;:::i;:::-;;;;;;;;34132:341;34423:6;34417:13;34408:6;34404:2;34400:15;34393:38;33886:602;34023:45;;;34013:55;;;:6;:55;;;;34006:62;;;;;33850:693;34527:4;34520:11;;33707:843;;;;;;;:::o;35163:93::-;;;;:::o;39098:164::-;39202:10;:17;;;;39175:15;:24;39191:7;39175:24;;;;;;;;;;;:44;;;;39230:10;39246:7;39230:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39098:164;:::o;39889:988::-;40155:22;40205:1;40180:22;40197:4;40180:16;:22::i;:::-;:26;;;;:::i;:::-;40155:51;;40217:18;40238:17;:26;40256:7;40238:26;;;;;;;;;;;;40217:47;;40385:14;40371:10;:28;40367:328;;40416:19;40438:12;:18;40451:4;40438:18;;;;;;;;;;;;;;;:34;40457:14;40438:34;;;;;;;;;;;;40416:56;;40522:11;40489:12;:18;40502:4;40489:18;;;;;;;;;;;;;;;:30;40508:10;40489:30;;;;;;;;;;;:44;;;;40639:10;40606:17;:30;40624:11;40606:30;;;;;;;;;;;:43;;;;40401:294;40367:328;40791:17;:26;40809:7;40791:26;;;;;;;;;;;40784:33;;;40835:12;:18;40848:4;40835:18;;;;;;;;;;;;;;;:34;40854:14;40835:34;;;;;;;;;;;40828:41;;;39970:907;;39889:988;;:::o;41172:1079::-;41425:22;41470:1;41450:10;:17;;;;:21;;;;:::i;:::-;41425:46;;41482:18;41503:15;:24;41519:7;41503:24;;;;;;;;;;;;41482:45;;41854:19;41876:10;41887:14;41876:26;;;;;;;;:::i;:::-;;;;;;;;;;41854:48;;41940:11;41915:10;41926;41915:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42051:10;42020:15;:28;42036:11;42020:28;;;;;;;;;;;:41;;;;42192:15;:24;42208:7;42192:24;;;;;;;;;;;42185:31;;;42227:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41243:1008;;;41172:1079;:::o;38676:221::-;38761:14;38778:20;38795:2;38778:16;:20::i;:::-;38761:37;;38836:7;38809:12;:16;38822:2;38809:16;;;;;;;;;;;;;;;:24;38826:6;38809:24;;;;;;;;;;;:34;;;;38883:6;38854:17;:26;38872:7;38854:26;;;;;;;;;;;:35;;;;38750:147;38676:221;;:::o;30998:382::-;31092:1;31078:16;;:2;:16;;;;31070:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31151:16;31159:7;31151;:16::i;:::-;31150:17;31142:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31213:45;31242:1;31246:2;31250:7;31213:20;:45::i;:::-;31288:1;31271:9;:13;31281:2;31271:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31319:2;31300:7;:16;31308:7;31300:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31364:7;31360:2;31339:33;;31356:1;31339:33;;;;;;;;;;;;30998:382;;:::o;848:422::-;908:4;1116:12;1227:7;1215:20;1207:28;;1261:1;1254:4;:8;1247:15;;;848:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:323::-;5968:6;6017:2;6005:9;5996:7;5992:23;5988:32;5985:119;;;6023:79;;:::i;:::-;5985:119;6143:1;6168:50;6210:7;6201:6;6190:9;6186:22;6168:50;:::i;:::-;6158:60;;6114:114;5912:323;;;;:::o;6241:345::-;6308:6;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:61;6561:7;6552:6;6541:9;6537:22;6508:61;:::i;:::-;6498:71;;6454:125;6241:345;;;;:::o;6592:327::-;6650:6;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:52;6894:7;6885:6;6874:9;6870:22;6850:52;:::i;:::-;6840:62;;6796:116;6592:327;;;;:::o;6925:349::-;6994:6;7043:2;7031:9;7022:7;7018:23;7014:32;7011:119;;;7049:79;;:::i;:::-;7011:119;7169:1;7194:63;7249:7;7240:6;7229:9;7225:22;7194:63;:::i;:::-;7184:73;;7140:127;6925:349;;;;:::o;7280:509::-;7349:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7552:1;7541:9;7537:17;7524:31;7582:18;7574:6;7571:30;7568:117;;;7604:79;;:::i;:::-;7568:117;7709:63;7764:7;7755:6;7744:9;7740:22;7709:63;:::i;:::-;7699:73;;7495:287;7280:509;;;;:::o;7795:329::-;7854:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;7795:329;;;;:::o;8130:351::-;8200:6;8249:2;8237:9;8228:7;8224:23;8220:32;8217:119;;;8255:79;;:::i;:::-;8217:119;8375:1;8400:64;8456:7;8447:6;8436:9;8432:22;8400:64;:::i;:::-;8390:74;;8346:128;8130:351;;;;:::o;8487:179::-;8556:10;8577:46;8619:3;8611:6;8577:46;:::i;:::-;8655:4;8650:3;8646:14;8632:28;;8487:179;;;;:::o;8672:118::-;8759:24;8777:5;8759:24;:::i;:::-;8754:3;8747:37;8672:118;;:::o;8826:732::-;8945:3;8974:54;9022:5;8974:54;:::i;:::-;9044:86;9123:6;9118:3;9044:86;:::i;:::-;9037:93;;9154:56;9204:5;9154:56;:::i;:::-;9233:7;9264:1;9249:284;9274:6;9271:1;9268:13;9249:284;;;9350:6;9344:13;9377:63;9436:3;9421:13;9377:63;:::i;:::-;9370:70;;9463:60;9516:6;9463:60;:::i;:::-;9453:70;;9309:224;9296:1;9293;9289:9;9284:14;;9249:284;;;9253:14;9549:3;9542:10;;8950:608;;;8826:732;;;;:::o;9564:109::-;9645:21;9660:5;9645:21;:::i;:::-;9640:3;9633:34;9564:109;;:::o;9679:360::-;9765:3;9793:38;9825:5;9793:38;:::i;:::-;9847:70;9910:6;9905:3;9847:70;:::i;:::-;9840:77;;9926:52;9971:6;9966:3;9959:4;9952:5;9948:16;9926:52;:::i;:::-;10003:29;10025:6;10003:29;:::i;:::-;9998:3;9994:39;9987:46;;9769:270;9679:360;;;;:::o;10045:364::-;10133:3;10161:39;10194:5;10161:39;:::i;:::-;10216:71;10280:6;10275:3;10216:71;:::i;:::-;10209:78;;10296:52;10341:6;10336:3;10329:4;10322:5;10318:16;10296:52;:::i;:::-;10373:29;10395:6;10373:29;:::i;:::-;10368:3;10364:39;10357:46;;10137:272;10045:364;;;;:::o;10415:377::-;10521:3;10549:39;10582:5;10549:39;:::i;:::-;10604:89;10686:6;10681:3;10604:89;:::i;:::-;10597:96;;10702:52;10747:6;10742:3;10735:4;10728:5;10724:16;10702:52;:::i;:::-;10779:6;10774:3;10770:16;10763:23;;10525:267;10415:377;;;;:::o;10798:366::-;10940:3;10961:67;11025:2;11020:3;10961:67;:::i;:::-;10954:74;;11037:93;11126:3;11037:93;:::i;:::-;11155:2;11150:3;11146:12;11139:19;;10798:366;;;:::o;11170:::-;11312:3;11333:67;11397:2;11392:3;11333:67;:::i;:::-;11326:74;;11409:93;11498:3;11409:93;:::i;:::-;11527:2;11522:3;11518:12;11511:19;;11170:366;;;:::o;11542:::-;11684:3;11705:67;11769:2;11764:3;11705:67;:::i;:::-;11698:74;;11781:93;11870:3;11781:93;:::i;:::-;11899:2;11894:3;11890:12;11883:19;;11542:366;;;:::o;11914:::-;12056:3;12077:67;12141:2;12136:3;12077:67;:::i;:::-;12070:74;;12153:93;12242:3;12153:93;:::i;:::-;12271:2;12266:3;12262:12;12255:19;;11914:366;;;:::o;12286:::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:::-;12800:3;12821:67;12885:2;12880:3;12821:67;:::i;:::-;12814:74;;12897:93;12986:3;12897:93;:::i;:::-;13015:2;13010:3;13006:12;12999:19;;12658:366;;;:::o;13030:::-;13172:3;13193:67;13257:2;13252:3;13193:67;:::i;:::-;13186:74;;13269:93;13358:3;13269:93;:::i;:::-;13387:2;13382:3;13378:12;13371:19;;13030:366;;;:::o;13402:::-;13544:3;13565:67;13629:2;13624:3;13565:67;:::i;:::-;13558:74;;13641:93;13730:3;13641:93;:::i;:::-;13759:2;13754:3;13750:12;13743:19;;13402:366;;;:::o;13774:::-;13916:3;13937:67;14001:2;13996:3;13937:67;:::i;:::-;13930:74;;14013:93;14102:3;14013:93;:::i;:::-;14131:2;14126:3;14122:12;14115:19;;13774:366;;;:::o;14146:::-;14288:3;14309:67;14373:2;14368:3;14309:67;:::i;:::-;14302:74;;14385:93;14474:3;14385:93;:::i;:::-;14503:2;14498:3;14494:12;14487:19;;14146:366;;;:::o;14518:::-;14660:3;14681:67;14745:2;14740:3;14681:67;:::i;:::-;14674:74;;14757:93;14846:3;14757:93;:::i;:::-;14875:2;14870:3;14866:12;14859:19;;14518:366;;;:::o;14890:::-;15032:3;15053:67;15117:2;15112:3;15053:67;:::i;:::-;15046:74;;15129:93;15218:3;15129:93;:::i;:::-;15247:2;15242:3;15238:12;15231:19;;14890:366;;;:::o;15262:::-;15404:3;15425:67;15489:2;15484:3;15425:67;:::i;:::-;15418:74;;15501:93;15590:3;15501:93;:::i;:::-;15619:2;15614:3;15610:12;15603:19;;15262:366;;;:::o;15634:::-;15776:3;15797:67;15861:2;15856:3;15797:67;:::i;:::-;15790:74;;15873:93;15962:3;15873:93;:::i;:::-;15991:2;15986:3;15982:12;15975:19;;15634:366;;;:::o;16006:::-;16148:3;16169:67;16233:2;16228:3;16169:67;:::i;:::-;16162:74;;16245:93;16334:3;16245:93;:::i;:::-;16363:2;16358:3;16354:12;16347:19;;16006:366;;;:::o;16378:::-;16520:3;16541:67;16605:2;16600:3;16541:67;:::i;:::-;16534:74;;16617:93;16706:3;16617:93;:::i;:::-;16735:2;16730:3;16726:12;16719:19;;16378:366;;;:::o;16750:::-;16892:3;16913:67;16977:2;16972:3;16913:67;:::i;:::-;16906:74;;16989:93;17078:3;16989:93;:::i;:::-;17107:2;17102:3;17098:12;17091:19;;16750:366;;;:::o;17122:::-;17264:3;17285:67;17349:2;17344:3;17285:67;:::i;:::-;17278:74;;17361:93;17450:3;17361:93;:::i;:::-;17479:2;17474:3;17470:12;17463:19;;17122:366;;;:::o;17494:::-;17636:3;17657:67;17721:2;17716:3;17657:67;:::i;:::-;17650:74;;17733:93;17822:3;17733:93;:::i;:::-;17851:2;17846:3;17842:12;17835:19;;17494:366;;;:::o;17866:::-;18008:3;18029:67;18093:2;18088:3;18029:67;:::i;:::-;18022:74;;18105:93;18194:3;18105:93;:::i;:::-;18223:2;18218:3;18214:12;18207:19;;17866:366;;;:::o;18238:::-;18380:3;18401:67;18465:2;18460:3;18401:67;:::i;:::-;18394:74;;18477:93;18566:3;18477:93;:::i;:::-;18595:2;18590:3;18586:12;18579:19;;18238:366;;;:::o;18610:::-;18752:3;18773:67;18837:2;18832:3;18773:67;:::i;:::-;18766:74;;18849:93;18938:3;18849:93;:::i;:::-;18967:2;18962:3;18958:12;18951:19;;18610:366;;;:::o;18982:::-;19124:3;19145:67;19209:2;19204:3;19145:67;:::i;:::-;19138:74;;19221:93;19310:3;19221:93;:::i;:::-;19339:2;19334:3;19330:12;19323:19;;18982:366;;;:::o;19354:::-;19496:3;19517:67;19581:2;19576:3;19517:67;:::i;:::-;19510:74;;19593:93;19682:3;19593:93;:::i;:::-;19711:2;19706:3;19702:12;19695:19;;19354:366;;;:::o;19726:::-;19868:3;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19965:93;20054:3;19965:93;:::i;:::-;20083:2;20078:3;20074:12;20067:19;;19726:366;;;:::o;20098:::-;20240:3;20261:67;20325:2;20320:3;20261:67;:::i;:::-;20254:74;;20337:93;20426:3;20337:93;:::i;:::-;20455:2;20450:3;20446:12;20439:19;;20098:366;;;:::o;20470:::-;20612:3;20633:67;20697:2;20692:3;20633:67;:::i;:::-;20626:74;;20709:93;20798:3;20709:93;:::i;:::-;20827:2;20822:3;20818:12;20811:19;;20470:366;;;:::o;20842:::-;20984:3;21005:67;21069:2;21064:3;21005:67;:::i;:::-;20998:74;;21081:93;21170:3;21081:93;:::i;:::-;21199:2;21194:3;21190:12;21183:19;;20842:366;;;:::o;21214:::-;21356:3;21377:67;21441:2;21436:3;21377:67;:::i;:::-;21370:74;;21453:93;21542:3;21453:93;:::i;:::-;21571:2;21566:3;21562:12;21555:19;;21214:366;;;:::o;21586:108::-;21663:24;21681:5;21663:24;:::i;:::-;21658:3;21651:37;21586:108;;:::o;21700:118::-;21787:24;21805:5;21787:24;:::i;:::-;21782:3;21775:37;21700:118;;:::o;21824:435::-;22004:3;22026:95;22117:3;22108:6;22026:95;:::i;:::-;22019:102;;22138:95;22229:3;22220:6;22138:95;:::i;:::-;22131:102;;22250:3;22243:10;;21824:435;;;;;:::o;22265:222::-;22358:4;22396:2;22385:9;22381:18;22373:26;;22409:71;22477:1;22466:9;22462:17;22453:6;22409:71;:::i;:::-;22265:222;;;;:::o;22493:640::-;22688:4;22726:3;22715:9;22711:19;22703:27;;22740:71;22808:1;22797:9;22793:17;22784:6;22740:71;:::i;:::-;22821:72;22889:2;22878:9;22874:18;22865:6;22821:72;:::i;:::-;22903;22971:2;22960:9;22956:18;22947:6;22903:72;:::i;:::-;23022:9;23016:4;23012:20;23007:2;22996:9;22992:18;22985:48;23050:76;23121:4;23112:6;23050:76;:::i;:::-;23042:84;;22493:640;;;;;;;:::o;23139:373::-;23282:4;23320:2;23309:9;23305:18;23297:26;;23369:9;23363:4;23359:20;23355:1;23344:9;23340:17;23333:47;23397:108;23500:4;23491:6;23397:108;:::i;:::-;23389:116;;23139:373;;;;:::o;23518:210::-;23605:4;23643:2;23632:9;23628:18;23620:26;;23656:65;23718:1;23707:9;23703:17;23694:6;23656:65;:::i;:::-;23518:210;;;;:::o;23734:313::-;23847:4;23885:2;23874:9;23870:18;23862:26;;23934:9;23928:4;23924:20;23920:1;23909:9;23905:17;23898:47;23962:78;24035:4;24026:6;23962:78;:::i;:::-;23954:86;;23734:313;;;;:::o;24053:419::-;24219:4;24257:2;24246:9;24242:18;24234:26;;24306:9;24300:4;24296:20;24292:1;24281:9;24277:17;24270:47;24334:131;24460:4;24334:131;:::i;:::-;24326:139;;24053:419;;;:::o;24478:::-;24644:4;24682:2;24671:9;24667:18;24659:26;;24731:9;24725:4;24721:20;24717:1;24706:9;24702:17;24695:47;24759:131;24885:4;24759:131;:::i;:::-;24751:139;;24478:419;;;:::o;24903:::-;25069:4;25107:2;25096:9;25092:18;25084:26;;25156:9;25150:4;25146:20;25142:1;25131:9;25127:17;25120:47;25184:131;25310:4;25184:131;:::i;:::-;25176:139;;24903:419;;;:::o;25328:::-;25494:4;25532:2;25521:9;25517:18;25509:26;;25581:9;25575:4;25571:20;25567:1;25556:9;25552:17;25545:47;25609:131;25735:4;25609:131;:::i;:::-;25601:139;;25328:419;;;:::o;25753:::-;25919:4;25957:2;25946:9;25942:18;25934:26;;26006:9;26000:4;25996:20;25992:1;25981:9;25977:17;25970:47;26034:131;26160:4;26034:131;:::i;:::-;26026:139;;25753:419;;;:::o;26178:::-;26344:4;26382:2;26371:9;26367:18;26359:26;;26431:9;26425:4;26421:20;26417:1;26406:9;26402:17;26395:47;26459:131;26585:4;26459:131;:::i;:::-;26451:139;;26178:419;;;:::o;26603:::-;26769:4;26807:2;26796:9;26792:18;26784:26;;26856:9;26850:4;26846:20;26842:1;26831:9;26827:17;26820:47;26884:131;27010:4;26884:131;:::i;:::-;26876:139;;26603:419;;;:::o;27028:::-;27194:4;27232:2;27221:9;27217:18;27209:26;;27281:9;27275:4;27271:20;27267:1;27256:9;27252:17;27245:47;27309:131;27435:4;27309:131;:::i;:::-;27301:139;;27028:419;;;:::o;27453:::-;27619:4;27657:2;27646:9;27642:18;27634:26;;27706:9;27700:4;27696:20;27692:1;27681:9;27677:17;27670:47;27734:131;27860:4;27734:131;:::i;:::-;27726:139;;27453:419;;;:::o;27878:::-;28044:4;28082:2;28071:9;28067:18;28059:26;;28131:9;28125:4;28121:20;28117:1;28106:9;28102:17;28095:47;28159:131;28285:4;28159:131;:::i;:::-;28151:139;;27878:419;;;:::o;28303:::-;28469:4;28507:2;28496:9;28492:18;28484:26;;28556:9;28550:4;28546:20;28542:1;28531:9;28527:17;28520:47;28584:131;28710:4;28584:131;:::i;:::-;28576:139;;28303:419;;;:::o;28728:::-;28894:4;28932:2;28921:9;28917:18;28909:26;;28981:9;28975:4;28971:20;28967:1;28956:9;28952:17;28945:47;29009:131;29135:4;29009:131;:::i;:::-;29001:139;;28728:419;;;:::o;29153:::-;29319:4;29357:2;29346:9;29342:18;29334:26;;29406:9;29400:4;29396:20;29392:1;29381:9;29377:17;29370:47;29434:131;29560:4;29434:131;:::i;:::-;29426:139;;29153:419;;;:::o;29578:::-;29744:4;29782:2;29771:9;29767:18;29759:26;;29831:9;29825:4;29821:20;29817:1;29806:9;29802:17;29795:47;29859:131;29985:4;29859:131;:::i;:::-;29851:139;;29578:419;;;:::o;30003:::-;30169:4;30207:2;30196:9;30192:18;30184:26;;30256:9;30250:4;30246:20;30242:1;30231:9;30227:17;30220:47;30284:131;30410:4;30284:131;:::i;:::-;30276:139;;30003:419;;;:::o;30428:::-;30594:4;30632:2;30621:9;30617:18;30609:26;;30681:9;30675:4;30671:20;30667:1;30656:9;30652:17;30645:47;30709:131;30835:4;30709:131;:::i;:::-;30701:139;;30428:419;;;:::o;30853:::-;31019:4;31057:2;31046:9;31042:18;31034:26;;31106:9;31100:4;31096:20;31092:1;31081:9;31077:17;31070:47;31134:131;31260:4;31134:131;:::i;:::-;31126:139;;30853:419;;;:::o;31278:::-;31444:4;31482:2;31471:9;31467:18;31459:26;;31531:9;31525:4;31521:20;31517:1;31506:9;31502:17;31495:47;31559:131;31685:4;31559:131;:::i;:::-;31551:139;;31278:419;;;:::o;31703:::-;31869:4;31907:2;31896:9;31892:18;31884:26;;31956:9;31950:4;31946:20;31942:1;31931:9;31927:17;31920:47;31984:131;32110:4;31984:131;:::i;:::-;31976:139;;31703:419;;;:::o;32128:::-;32294:4;32332:2;32321:9;32317:18;32309:26;;32381:9;32375:4;32371:20;32367:1;32356:9;32352:17;32345:47;32409:131;32535:4;32409:131;:::i;:::-;32401:139;;32128:419;;;:::o;32553:::-;32719:4;32757:2;32746:9;32742:18;32734:26;;32806:9;32800:4;32796:20;32792:1;32781:9;32777:17;32770:47;32834:131;32960:4;32834:131;:::i;:::-;32826:139;;32553:419;;;:::o;32978:::-;33144:4;33182:2;33171:9;33167:18;33159:26;;33231:9;33225:4;33221:20;33217:1;33206:9;33202:17;33195:47;33259:131;33385:4;33259:131;:::i;:::-;33251:139;;32978:419;;;:::o;33403:::-;33569:4;33607:2;33596:9;33592:18;33584:26;;33656:9;33650:4;33646:20;33642:1;33631:9;33627:17;33620:47;33684:131;33810:4;33684:131;:::i;:::-;33676:139;;33403:419;;;:::o;33828:::-;33994:4;34032:2;34021:9;34017:18;34009:26;;34081:9;34075:4;34071:20;34067:1;34056:9;34052:17;34045:47;34109:131;34235:4;34109:131;:::i;:::-;34101:139;;33828:419;;;:::o;34253:::-;34419:4;34457:2;34446:9;34442:18;34434:26;;34506:9;34500:4;34496:20;34492:1;34481:9;34477:17;34470:47;34534:131;34660:4;34534:131;:::i;:::-;34526:139;;34253:419;;;:::o;34678:::-;34844:4;34882:2;34871:9;34867:18;34859:26;;34931:9;34925:4;34921:20;34917:1;34906:9;34902:17;34895:47;34959:131;35085:4;34959:131;:::i;:::-;34951:139;;34678:419;;;:::o;35103:::-;35269:4;35307:2;35296:9;35292:18;35284:26;;35356:9;35350:4;35346:20;35342:1;35331:9;35327:17;35320:47;35384:131;35510:4;35384:131;:::i;:::-;35376:139;;35103:419;;;:::o;35528:::-;35694:4;35732:2;35721:9;35717:18;35709:26;;35781:9;35775:4;35771:20;35767:1;35756:9;35752:17;35745:47;35809:131;35935:4;35809:131;:::i;:::-;35801:139;;35528:419;;;:::o;35953:::-;36119:4;36157:2;36146:9;36142:18;36134:26;;36206:9;36200:4;36196:20;36192:1;36181:9;36177:17;36170:47;36234:131;36360:4;36234:131;:::i;:::-;36226:139;;35953:419;;;:::o;36378:222::-;36471:4;36509:2;36498:9;36494:18;36486:26;;36522:71;36590:1;36579:9;36575:17;36566:6;36522:71;:::i;:::-;36378:222;;;;:::o;36606:129::-;36640:6;36667:20;;:::i;:::-;36657:30;;36696:33;36724:4;36716:6;36696:33;:::i;:::-;36606:129;;;:::o;36741:75::-;36774:6;36807:2;36801:9;36791:19;;36741:75;:::o;36822:307::-;36883:4;36973:18;36965:6;36962:30;36959:56;;;36995:18;;:::i;:::-;36959:56;37033:29;37055:6;37033:29;:::i;:::-;37025:37;;37117:4;37111;37107:15;37099:23;;36822:307;;;:::o;37135:308::-;37197:4;37287:18;37279:6;37276:30;37273:56;;;37309:18;;:::i;:::-;37273:56;37347:29;37369:6;37347:29;:::i;:::-;37339:37;;37431:4;37425;37421:15;37413:23;;37135:308;;;:::o;37449:132::-;37516:4;37539:3;37531:11;;37569:4;37564:3;37560:14;37552:22;;37449:132;;;:::o;37587:114::-;37654:6;37688:5;37682:12;37672:22;;37587:114;;;:::o;37707:98::-;37758:6;37792:5;37786:12;37776:22;;37707:98;;;:::o;37811:99::-;37863:6;37897:5;37891:12;37881:22;;37811:99;;;:::o;37916:113::-;37986:4;38018;38013:3;38009:14;38001:22;;37916:113;;;:::o;38035:184::-;38134:11;38168:6;38163:3;38156:19;38208:4;38203:3;38199:14;38184:29;;38035:184;;;;:::o;38225:168::-;38308:11;38342:6;38337:3;38330:19;38382:4;38377:3;38373:14;38358:29;;38225:168;;;;:::o;38399:169::-;38483:11;38517:6;38512:3;38505:19;38557:4;38552:3;38548:14;38533:29;;38399:169;;;;:::o;38574:148::-;38676:11;38713:3;38698:18;;38574:148;;;;:::o;38728:305::-;38768:3;38787:20;38805:1;38787:20;:::i;:::-;38782:25;;38821:20;38839:1;38821:20;:::i;:::-;38816:25;;38975:1;38907:66;38903:74;38900:1;38897:81;38894:107;;;38981:18;;:::i;:::-;38894:107;39025:1;39022;39018:9;39011:16;;38728:305;;;;:::o;39039:185::-;39079:1;39096:20;39114:1;39096:20;:::i;:::-;39091:25;;39130:20;39148:1;39130:20;:::i;:::-;39125:25;;39169:1;39159:35;;39174:18;;:::i;:::-;39159:35;39216:1;39213;39209:9;39204:14;;39039:185;;;;:::o;39230:348::-;39270:7;39293:20;39311:1;39293:20;:::i;:::-;39288:25;;39327:20;39345:1;39327:20;:::i;:::-;39322:25;;39515:1;39447:66;39443:74;39440:1;39437:81;39432:1;39425:9;39418:17;39414:105;39411:131;;;39522:18;;:::i;:::-;39411:131;39570:1;39567;39563:9;39552:20;;39230:348;;;;:::o;39584:191::-;39624:4;39644:20;39662:1;39644:20;:::i;:::-;39639:25;;39678:20;39696:1;39678:20;:::i;:::-;39673:25;;39717:1;39714;39711:8;39708:34;;;39722:18;;:::i;:::-;39708:34;39767:1;39764;39760:9;39752:17;;39584:191;;;;:::o;39781:96::-;39818:7;39847:24;39865:5;39847:24;:::i;:::-;39836:35;;39781:96;;;:::o;39883:90::-;39917:7;39960:5;39953:13;39946:21;39935:32;;39883:90;;;:::o;39979:149::-;40015:7;40055:66;40048:5;40044:78;40033:89;;39979:149;;;:::o;40134:126::-;40171:7;40211:42;40204:5;40200:54;40189:65;;40134:126;;;:::o;40266:77::-;40303:7;40332:5;40321:16;;40266:77;;;:::o;40349:154::-;40433:6;40428:3;40423;40410:30;40495:1;40486:6;40481:3;40477:16;40470:27;40349:154;;;:::o;40509:307::-;40577:1;40587:113;40601:6;40598:1;40595:13;40587:113;;;40686:1;40681:3;40677:11;40671:18;40667:1;40662:3;40658:11;40651:39;40623:2;40620:1;40616:10;40611:15;;40587:113;;;40718:6;40715:1;40712:13;40709:101;;;40798:1;40789:6;40784:3;40780:16;40773:27;40709:101;40558:258;40509:307;;;:::o;40822:320::-;40866:6;40903:1;40897:4;40893:12;40883:22;;40950:1;40944:4;40940:12;40971:18;40961:81;;41027:4;41019:6;41015:17;41005:27;;40961:81;41089:2;41081:6;41078:14;41058:18;41055:38;41052:84;;;41108:18;;:::i;:::-;41052:84;40873:269;40822:320;;;:::o;41148:281::-;41231:27;41253:4;41231:27;:::i;:::-;41223:6;41219:40;41361:6;41349:10;41346:22;41325:18;41313:10;41310:34;41307:62;41304:88;;;41372:18;;:::i;:::-;41304:88;41412:10;41408:2;41401:22;41191:238;41148:281;;:::o;41435:233::-;41474:3;41497:24;41515:5;41497:24;:::i;:::-;41488:33;;41543:66;41536:5;41533:77;41530:103;;;41613:18;;:::i;:::-;41530:103;41660:1;41653:5;41649:13;41642:20;;41435:233;;;:::o;41674:176::-;41706:1;41723:20;41741:1;41723:20;:::i;:::-;41718:25;;41757:20;41775:1;41757:20;:::i;:::-;41752:25;;41796:1;41786:35;;41801:18;;:::i;:::-;41786:35;41842:1;41839;41835:9;41830:14;;41674:176;;;;:::o;41856:180::-;41904:77;41901:1;41894:88;42001:4;41998:1;41991:15;42025:4;42022:1;42015:15;42042:180;42090:77;42087:1;42080:88;42187:4;42184:1;42177:15;42211:4;42208:1;42201:15;42228:180;42276:77;42273:1;42266:88;42373:4;42370:1;42363:15;42397:4;42394:1;42387:15;42414:180;42462:77;42459:1;42452:88;42559:4;42556:1;42549:15;42583:4;42580:1;42573:15;42600:180;42648:77;42645:1;42638:88;42745:4;42742:1;42735:15;42769:4;42766:1;42759:15;42786:180;42834:77;42831:1;42824:88;42931:4;42928:1;42921:15;42955:4;42952:1;42945:15;42972:117;43081:1;43078;43071:12;43095:117;43204:1;43201;43194:12;43218:117;43327:1;43324;43317:12;43341:117;43450:1;43447;43440:12;43464:102;43505:6;43556:2;43552:7;43547:2;43540:5;43536:14;43532:28;43522:38;;43464:102;;;:::o;43572:230::-;43712:34;43708:1;43700:6;43696:14;43689:58;43781:13;43776:2;43768:6;43764:15;43757:38;43572:230;:::o;43808:::-;43948:34;43944:1;43936:6;43932:14;43925:58;44017:13;44012:2;44004:6;44000:15;43993:38;43808:230;:::o;44044:237::-;44184:34;44180:1;44172:6;44168:14;44161:58;44253:20;44248:2;44240:6;44236:15;44229:45;44044:237;:::o;44287:225::-;44427:34;44423:1;44415:6;44411:14;44404:58;44496:8;44491:2;44483:6;44479:15;44472:33;44287:225;:::o;44518:178::-;44658:30;44654:1;44646:6;44642:14;44635:54;44518:178;:::o;44702:223::-;44842:34;44838:1;44830:6;44826:14;44819:58;44911:6;44906:2;44898:6;44894:15;44887:31;44702:223;:::o;44931:173::-;45071:25;45067:1;45059:6;45055:14;45048:49;44931:173;:::o;45110:223::-;45250:34;45246:1;45238:6;45234:14;45227:58;45319:6;45314:2;45306:6;45302:15;45295:31;45110:223;:::o;45339:175::-;45479:27;45475:1;45467:6;45463:14;45456:51;45339:175;:::o;45520:231::-;45660:34;45656:1;45648:6;45644:14;45637:58;45729:14;45724:2;45716:6;45712:15;45705:39;45520:231;:::o;45757:243::-;45897:34;45893:1;45885:6;45881:14;45874:58;45966:26;45961:2;45953:6;45949:15;45942:51;45757:243;:::o;46006:229::-;46146:34;46142:1;46134:6;46130:14;46123:58;46215:12;46210:2;46202:6;46198:15;46191:37;46006:229;:::o;46241:228::-;46381:34;46377:1;46369:6;46365:14;46358:58;46450:11;46445:2;46437:6;46433:15;46426:36;46241:228;:::o;46475:179::-;46615:31;46611:1;46603:6;46599:14;46592:55;46475:179;:::o;46660:173::-;46800:25;46796:1;46788:6;46784:14;46777:49;46660:173;:::o;46839:220::-;46979:34;46975:1;46967:6;46963:14;46956:58;47048:3;47043:2;47035:6;47031:15;47024:28;46839:220;:::o;47065:182::-;47205:34;47201:1;47193:6;47189:14;47182:58;47065:182;:::o;47253:223::-;47393:34;47389:1;47381:6;47377:14;47370:58;47462:6;47457:2;47449:6;47445:15;47438:31;47253:223;:::o;47482:231::-;47622:34;47618:1;47610:6;47606:14;47599:58;47691:14;47686:2;47678:6;47674:15;47667:39;47482:231;:::o;47719:182::-;47859:34;47855:1;47847:6;47843:14;47836:58;47719:182;:::o;47907:228::-;48047:34;48043:1;48035:6;48031:14;48024:58;48116:11;48111:2;48103:6;48099:15;48092:36;47907:228;:::o;48141:234::-;48281:34;48277:1;48269:6;48265:14;48258:58;48350:17;48345:2;48337:6;48333:15;48326:42;48141:234;:::o;48381:220::-;48521:34;48517:1;48509:6;48505:14;48498:58;48590:3;48585:2;48577:6;48573:15;48566:28;48381:220;:::o;48607:172::-;48747:24;48743:1;48735:6;48731:14;48724:48;48607:172;:::o;48785:175::-;48925:27;48921:1;48913:6;48909:14;48902:51;48785:175;:::o;48966:240::-;49106:34;49102:1;49094:6;49090:14;49083:58;49175:23;49170:2;49162:6;49158:15;49151:48;48966:240;:::o;49212:236::-;49352:34;49348:1;49340:6;49336:14;49329:58;49421:19;49416:2;49408:6;49404:15;49397:44;49212:236;:::o;49454:167::-;49594:19;49590:1;49582:6;49578:14;49571:43;49454:167;:::o;49627:231::-;49767:34;49763:1;49755:6;49751:14;49744:58;49836:14;49831:2;49823:6;49819:15;49812:39;49627:231;:::o;49864:122::-;49937:24;49955:5;49937:24;:::i;:::-;49930:5;49927:35;49917:63;;49976:1;49973;49966:12;49917:63;49864:122;:::o;49992:116::-;50062:21;50077:5;50062:21;:::i;:::-;50055:5;50052:32;50042:60;;50098:1;50095;50088:12;50042:60;49992:116;:::o;50114:120::-;50186:23;50203:5;50186:23;:::i;:::-;50179:5;50176:34;50166:62;;50224:1;50221;50214:12;50166:62;50114:120;:::o;50240:122::-;50313:24;50331:5;50313:24;:::i;:::-;50306:5;50303:35;50293:63;;50352:1;50349;50342:12;50293:63;50240:122;:::o

Swarm Source

ipfs://44aab84d5ab0107edd31adb16648c048229ce53d96814b8f592582070da547f0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.