ETH Price: $3,178.78 (+3.00%)

Token

FuckCashGrabs (FUCK)
 

Overview

Max Total Supply

5,000 FUCK

Holders

1,884

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 FUCK
0xc3701E1d2CEF902691431bA9dF06371c07aB082D
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:
FuckCashGrabs

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-12
*/

/**
Contract by 0xfoobar in collab with Josh Hart and Tally Labs

#######                          #####                           #####
#       #    #  ####  #    #    #     #   ##    ####  #    #    #     # #####    ##   #####   ####
#       #    # #    # #   #     #        #  #  #      #    #    #       #    #  #  #  #    # #
#####   #    # #      ####      #       #    #  ####  ######    #  #### #    # #    # #####   ####
#       #    # #      #  #      #       ######      # #    #    #     # #####  ###### #    #      #
#       #    # #    # #   #     #     # #    # #    # #    #    #     # #   #  #    # #    # #    #
#        ####   ####  #    #     #####  #    #  ####  #    #     #####  #    # #    # #####   ####

https://fuckcashgrabs.com
*/



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

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        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;
    }
}

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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

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



pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/utils/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);
    }

}

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



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/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 { }
}

// File: contracts/FuckCashGrabs.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.4;



contract FuckCashGrabs is Ownable, ERC721 {

    event Mint(uint indexed _tokenId);

    uint public maxSupply = 5000; // Maximum tokens that can be minted
    uint public totalSupply = 0; // This is our mint counter as well
    uint public limitPerAccount = 10;
    mapping(uint => string) public tokenURIs; // Metadata location, updatable by owner
    mapping(address => uint) public mintCounts; // Amount minted per user
    string public _tokenURI; // Same for all tokens

    constructor() payable ERC721("FuckCashGrabs", "FUCK") {
    }

    function mint(address to, uint quantity) external {
        require(totalSupply + quantity <= maxSupply, "maxSupply of mints already reached");
        require(mintCounts[to] + quantity <= limitPerAccount, "max 10 mints per account");
        mintCounts[to] += quantity;
        for (uint i = 0; i < quantity; i++) {
            totalSupply += 1; // 1-indexed instead of 0
            _mint(to, totalSupply);
            emit Mint(totalSupply);
        }
    }

    /**
     * @dev Returns the metadata URI
     */
    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        return _tokenURI;
    }

    /**
     * @dev Updates the metadata URI
     */
    function changeTokenURI(string memory __tokenURI) public onlyOwner {
        _tokenURI = __tokenURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"Mint","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":"_tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"string","name":"__tokenURI","type":"string"}],"name":"changeTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURIs","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"}]

60806040526113886007556000600855600a6009556040518060400160405280600d81526020017f4675636b436173684772616273000000000000000000000000000000000000008152506040518060400160405280600481526020017f4655434b000000000000000000000000000000000000000000000000000000008152506000620000926200016a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600190805190602001906200014892919062000172565b5080600290805190602001906200016192919062000172565b50505062000287565b600033905090565b828054620001809062000222565b90600052602060002090601f016020900481019282620001a45760008555620001f0565b82601f10620001bf57805160ff1916838001178555620001f0565b82800160010185558215620001f0579182015b82811115620001ef578251825591602001919060010190620001d2565b5b509050620001ff919062000203565b5090565b5b808211156200021e57600081600090555060010162000204565b5090565b600060028204905060018216806200023b57607f821691505b6020821081141562000252576200025162000258565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612ef080620002976000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b4ce37d21161007c578063b4ce37d2146103c5578063b88d4fde146103e3578063c87b56dd146103ff578063d5abeb011461042f578063e985e9c51461044d578063f2fde38b1461047d57610158565b806370a0823114610317578063715018a6146103475780637d7b17a1146103515780638da5cb5b1461036d57806395d89b411461038b578063a22cb465146103a957610158565b806323b872dd1161011557806323b872dd1461023357806340c10f191461024f57806342842e0e1461026b57806353277879146102875780636352211e146102b75780636c8b703f146102e757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db5780631167e427146101f757806318160ddd14610215575b600080fd5b61017760048036038101906101729190612007565b610499565b604051610184919061241c565b60405180910390f35b61019561057b565b6040516101a29190612437565b60405180910390f35b6101c560048036038101906101c0919061209a565b61060d565b6040516101d291906123b5565b60405180910390f35b6101f560048036038101906101f09190611fcb565b610692565b005b6101ff6107aa565b60405161020c9190612679565b60405180910390f35b61021d6107b0565b60405161022a9190612679565b60405180910390f35b61024d60048036038101906102489190611ec5565b6107b6565b005b61026960048036038101906102649190611fcb565b610816565b005b61028560048036038101906102809190611ec5565b6109c5565b005b6102a1600480360381019061029c9190611e60565b6109e5565b6040516102ae9190612679565b60405180910390f35b6102d160048036038101906102cc919061209a565b6109fd565b6040516102de91906123b5565b60405180910390f35b61030160048036038101906102fc919061209a565b610aaf565b60405161030e9190612437565b60405180910390f35b610331600480360381019061032c9190611e60565b610b4f565b60405161033e9190612679565b60405180910390f35b61034f610c07565b005b61036b60048036038101906103669190612059565b610d41565b005b610375610dd7565b60405161038291906123b5565b60405180910390f35b610393610e00565b6040516103a09190612437565b60405180910390f35b6103c360048036038101906103be9190611f8f565b610e92565b005b6103cd611013565b6040516103da9190612437565b60405180910390f35b6103fd60048036038101906103f89190611f14565b6110a1565b005b6104196004803603810190610414919061209a565b611103565b6040516104269190612437565b60405180910390f35b610437611197565b6040516104449190612679565b60405180910390f35b61046760048036038101906104629190611e89565b61119d565b604051610474919061241c565b60405180910390f35b61049760048036038101906104929190611e60565b611231565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105745750610573826113da565b5b9050919050565b60606001805461058a90612893565b80601f01602080910402602001604051908101604052809291908181526020018280546105b690612893565b80156106035780601f106105d857610100808354040283529160200191610603565b820191906000526020600020905b8154815290600101906020018083116105e657829003601f168201915b5050505050905090565b600061061882611444565b610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e906125b9565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069d826109fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590612619565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072d6114b0565b73ffffffffffffffffffffffffffffffffffffffff16148061075c575061075b816107566114b0565b61119d565b5b61079b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079290612539565b60405180910390fd5b6107a583836114b8565b505050565b60095481565b60085481565b6107c76107c16114b0565b82611571565b610806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fd90612639565b60405180910390fd5b61081183838361164f565b505050565b600754816008546108279190612753565b1115610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085f90612659565b60405180910390fd5b60095481600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108b69190612753565b11156108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906124f9565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109469190612753565b9250508190555060005b818110156109c05760016008600082825461096b9190612753565b9250508190555061097e836008546118ab565b6008547f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a280806109b8906128f6565b915050610950565b505050565b6109e0838383604051806020016040528060008152506110a1565b505050565b600b6020528060005260406000206000915090505481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90612579565b60405180910390fd5b80915050919050565b600a6020528060005260406000206000915090508054610ace90612893565b80601f0160208091040260200160405190810160405280929190818152602001828054610afa90612893565b8015610b475780601f10610b1c57610100808354040283529160200191610b47565b820191906000526020600020905b815481529060010190602001808311610b2a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790612559565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c0f6114b0565b73ffffffffffffffffffffffffffffffffffffffff16610c2d610dd7565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d496114b0565b73ffffffffffffffffffffffffffffffffffffffff16610d67610dd7565b73ffffffffffffffffffffffffffffffffffffffff1614610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906125d9565b60405180910390fd5b80600c9080519060200190610dd3929190611c84565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610e0f90612893565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b90612893565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a6114b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff906124d9565b60405180910390fd5b8060066000610f156114b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fc26114b0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611007919061241c565b60405180910390a35050565b600c805461102090612893565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612893565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505081565b6110b26110ac6114b0565b83611571565b6110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612639565b60405180910390fd5b6110fd84848484611a79565b50505050565b6060600c805461111290612893565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90612893565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b50505050509050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112396114b0565b73ffffffffffffffffffffffffffffffffffffffff16611257610dd7565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a4906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490612479565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661152b836109fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061157c82611444565b6115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290612519565b60405180910390fd5b60006115c6836109fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061163557508373ffffffffffffffffffffffffffffffffffffffff1661161d8461060d565b73ffffffffffffffffffffffffffffffffffffffff16145b806116465750611645818561119d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661166f826109fd565b73ffffffffffffffffffffffffffffffffffffffff16146116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906124b9565b60405180910390fd5b611740838383611ad5565b61174b6000826114b8565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461179b91906127a9565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f29190612753565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290612599565b60405180910390fd5b61192481611444565b15611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90612499565b60405180910390fd5b61197060008383611ad5565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c09190612753565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611a8484848461164f565b611a9084848484611ada565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690612459565b60405180910390fd5b50505050565b505050565b6000611afb8473ffffffffffffffffffffffffffffffffffffffff16611c71565b15611c64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b246114b0565b8786866040518563ffffffff1660e01b8152600401611b4694939291906123d0565b602060405180830381600087803b158015611b6057600080fd5b505af1925050508015611b9157506040513d601f19601f82011682018060405250810190611b8e9190612030565b60015b611c14573d8060008114611bc1576040519150601f19603f3d011682016040523d82523d6000602084013e611bc6565b606091505b50600081511415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390612459565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c69565b600190505b949350505050565b600080823b905060008111915050919050565b828054611c9090612893565b90600052602060002090601f016020900481019282611cb25760008555611cf9565b82601f10611ccb57805160ff1916838001178555611cf9565b82800160010185558215611cf9579182015b82811115611cf8578251825591602001919060010190611cdd565b5b509050611d069190611d0a565b5090565b5b80821115611d23576000816000905550600101611d0b565b5090565b6000611d3a611d35846126b9565b612694565b905082815260208101848484011115611d5257600080fd5b611d5d848285612851565b509392505050565b6000611d78611d73846126ea565b612694565b905082815260208101848484011115611d9057600080fd5b611d9b848285612851565b509392505050565b600081359050611db281612e5e565b92915050565b600081359050611dc781612e75565b92915050565b600081359050611ddc81612e8c565b92915050565b600081519050611df181612e8c565b92915050565b600082601f830112611e0857600080fd5b8135611e18848260208601611d27565b91505092915050565b600082601f830112611e3257600080fd5b8135611e42848260208601611d65565b91505092915050565b600081359050611e5a81612ea3565b92915050565b600060208284031215611e7257600080fd5b6000611e8084828501611da3565b91505092915050565b60008060408385031215611e9c57600080fd5b6000611eaa85828601611da3565b9250506020611ebb85828601611da3565b9150509250929050565b600080600060608486031215611eda57600080fd5b6000611ee886828701611da3565b9350506020611ef986828701611da3565b9250506040611f0a86828701611e4b565b9150509250925092565b60008060008060808587031215611f2a57600080fd5b6000611f3887828801611da3565b9450506020611f4987828801611da3565b9350506040611f5a87828801611e4b565b925050606085013567ffffffffffffffff811115611f7757600080fd5b611f8387828801611df7565b91505092959194509250565b60008060408385031215611fa257600080fd5b6000611fb085828601611da3565b9250506020611fc185828601611db8565b9150509250929050565b60008060408385031215611fde57600080fd5b6000611fec85828601611da3565b9250506020611ffd85828601611e4b565b9150509250929050565b60006020828403121561201957600080fd5b600061202784828501611dcd565b91505092915050565b60006020828403121561204257600080fd5b600061205084828501611de2565b91505092915050565b60006020828403121561206b57600080fd5b600082013567ffffffffffffffff81111561208557600080fd5b61209184828501611e21565b91505092915050565b6000602082840312156120ac57600080fd5b60006120ba84828501611e4b565b91505092915050565b6120cc816127dd565b82525050565b6120db816127ef565b82525050565b60006120ec8261271b565b6120f68185612731565b9350612106818560208601612860565b61210f816129cc565b840191505092915050565b600061212582612726565b61212f8185612742565b935061213f818560208601612860565b612148816129cc565b840191505092915050565b6000612160603283612742565b915061216b826129dd565b604082019050919050565b6000612183602683612742565b915061218e82612a2c565b604082019050919050565b60006121a6601c83612742565b91506121b182612a7b565b602082019050919050565b60006121c9602483612742565b91506121d482612aa4565b604082019050919050565b60006121ec601983612742565b91506121f782612af3565b602082019050919050565b600061220f601883612742565b915061221a82612b1c565b602082019050919050565b6000612232602c83612742565b915061223d82612b45565b604082019050919050565b6000612255603883612742565b915061226082612b94565b604082019050919050565b6000612278602a83612742565b915061228382612be3565b604082019050919050565b600061229b602983612742565b91506122a682612c32565b604082019050919050565b60006122be602083612742565b91506122c982612c81565b602082019050919050565b60006122e1602c83612742565b91506122ec82612caa565b604082019050919050565b6000612304602083612742565b915061230f82612cf9565b602082019050919050565b6000612327602983612742565b915061233282612d22565b604082019050919050565b600061234a602183612742565b915061235582612d71565b604082019050919050565b600061236d603183612742565b915061237882612dc0565b604082019050919050565b6000612390602283612742565b915061239b82612e0f565b604082019050919050565b6123af81612847565b82525050565b60006020820190506123ca60008301846120c3565b92915050565b60006080820190506123e560008301876120c3565b6123f260208301866120c3565b6123ff60408301856123a6565b818103606083015261241181846120e1565b905095945050505050565b600060208201905061243160008301846120d2565b92915050565b60006020820190508181036000830152612451818461211a565b905092915050565b6000602082019050818103600083015261247281612153565b9050919050565b6000602082019050818103600083015261249281612176565b9050919050565b600060208201905081810360008301526124b281612199565b9050919050565b600060208201905081810360008301526124d2816121bc565b9050919050565b600060208201905081810360008301526124f2816121df565b9050919050565b6000602082019050818103600083015261251281612202565b9050919050565b6000602082019050818103600083015261253281612225565b9050919050565b6000602082019050818103600083015261255281612248565b9050919050565b600060208201905081810360008301526125728161226b565b9050919050565b600060208201905081810360008301526125928161228e565b9050919050565b600060208201905081810360008301526125b2816122b1565b9050919050565b600060208201905081810360008301526125d2816122d4565b9050919050565b600060208201905081810360008301526125f2816122f7565b9050919050565b600060208201905081810360008301526126128161231a565b9050919050565b600060208201905081810360008301526126328161233d565b9050919050565b6000602082019050818103600083015261265281612360565b9050919050565b6000602082019050818103600083015261267281612383565b9050919050565b600060208201905061268e60008301846123a6565b92915050565b600061269e6126af565b90506126aa82826128c5565b919050565b6000604051905090565b600067ffffffffffffffff8211156126d4576126d361299d565b5b6126dd826129cc565b9050602081019050919050565b600067ffffffffffffffff8211156127055761270461299d565b5b61270e826129cc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061275e82612847565b915061276983612847565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561279e5761279d61293f565b5b828201905092915050565b60006127b482612847565b91506127bf83612847565b9250828210156127d2576127d161293f565b5b828203905092915050565b60006127e882612827565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561287e578082015181840152602081019050612863565b8381111561288d576000848401525b50505050565b600060028204905060018216806128ab57607f821691505b602082108114156128bf576128be61296e565b5b50919050565b6128ce826129cc565b810181811067ffffffffffffffff821117156128ed576128ec61299d565b5b80604052505050565b600061290182612847565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129345761293361293f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178203130206d696e747320706572206163636f756e740000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d6178537570706c79206f66206d696e747320616c726561647920726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b612e67816127dd565b8114612e7257600080fd5b50565b612e7e816127ef565b8114612e8957600080fd5b50565b612e95816127fb565b8114612ea057600080fd5b50565b612eac81612847565b8114612eb757600080fd5b5056fea26469706673582212202836ea66c9ddad96642a2ed5f44e38ba6bc3569bda0e0e974ba94b31d1971bf064736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b4ce37d21161007c578063b4ce37d2146103c5578063b88d4fde146103e3578063c87b56dd146103ff578063d5abeb011461042f578063e985e9c51461044d578063f2fde38b1461047d57610158565b806370a0823114610317578063715018a6146103475780637d7b17a1146103515780638da5cb5b1461036d57806395d89b411461038b578063a22cb465146103a957610158565b806323b872dd1161011557806323b872dd1461023357806340c10f191461024f57806342842e0e1461026b57806353277879146102875780636352211e146102b75780636c8b703f146102e757610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db5780631167e427146101f757806318160ddd14610215575b600080fd5b61017760048036038101906101729190612007565b610499565b604051610184919061241c565b60405180910390f35b61019561057b565b6040516101a29190612437565b60405180910390f35b6101c560048036038101906101c0919061209a565b61060d565b6040516101d291906123b5565b60405180910390f35b6101f560048036038101906101f09190611fcb565b610692565b005b6101ff6107aa565b60405161020c9190612679565b60405180910390f35b61021d6107b0565b60405161022a9190612679565b60405180910390f35b61024d60048036038101906102489190611ec5565b6107b6565b005b61026960048036038101906102649190611fcb565b610816565b005b61028560048036038101906102809190611ec5565b6109c5565b005b6102a1600480360381019061029c9190611e60565b6109e5565b6040516102ae9190612679565b60405180910390f35b6102d160048036038101906102cc919061209a565b6109fd565b6040516102de91906123b5565b60405180910390f35b61030160048036038101906102fc919061209a565b610aaf565b60405161030e9190612437565b60405180910390f35b610331600480360381019061032c9190611e60565b610b4f565b60405161033e9190612679565b60405180910390f35b61034f610c07565b005b61036b60048036038101906103669190612059565b610d41565b005b610375610dd7565b60405161038291906123b5565b60405180910390f35b610393610e00565b6040516103a09190612437565b60405180910390f35b6103c360048036038101906103be9190611f8f565b610e92565b005b6103cd611013565b6040516103da9190612437565b60405180910390f35b6103fd60048036038101906103f89190611f14565b6110a1565b005b6104196004803603810190610414919061209a565b611103565b6040516104269190612437565b60405180910390f35b610437611197565b6040516104449190612679565b60405180910390f35b61046760048036038101906104629190611e89565b61119d565b604051610474919061241c565b60405180910390f35b61049760048036038101906104929190611e60565b611231565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105745750610573826113da565b5b9050919050565b60606001805461058a90612893565b80601f01602080910402602001604051908101604052809291908181526020018280546105b690612893565b80156106035780601f106105d857610100808354040283529160200191610603565b820191906000526020600020905b8154815290600101906020018083116105e657829003601f168201915b5050505050905090565b600061061882611444565b610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e906125b9565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061069d826109fd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590612619565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661072d6114b0565b73ffffffffffffffffffffffffffffffffffffffff16148061075c575061075b816107566114b0565b61119d565b5b61079b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079290612539565b60405180910390fd5b6107a583836114b8565b505050565b60095481565b60085481565b6107c76107c16114b0565b82611571565b610806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fd90612639565b60405180910390fd5b61081183838361164f565b505050565b600754816008546108279190612753565b1115610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085f90612659565b60405180910390fd5b60095481600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108b69190612753565b11156108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906124f9565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109469190612753565b9250508190555060005b818110156109c05760016008600082825461096b9190612753565b9250508190555061097e836008546118ab565b6008547f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a280806109b8906128f6565b915050610950565b505050565b6109e0838383604051806020016040528060008152506110a1565b505050565b600b6020528060005260406000206000915090505481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90612579565b60405180910390fd5b80915050919050565b600a6020528060005260406000206000915090508054610ace90612893565b80601f0160208091040260200160405190810160405280929190818152602001828054610afa90612893565b8015610b475780601f10610b1c57610100808354040283529160200191610b47565b820191906000526020600020905b815481529060010190602001808311610b2a57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790612559565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c0f6114b0565b73ffffffffffffffffffffffffffffffffffffffff16610c2d610dd7565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d496114b0565b73ffffffffffffffffffffffffffffffffffffffff16610d67610dd7565b73ffffffffffffffffffffffffffffffffffffffff1614610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906125d9565b60405180910390fd5b80600c9080519060200190610dd3929190611c84565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610e0f90612893565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b90612893565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a6114b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff906124d9565b60405180910390fd5b8060066000610f156114b0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610fc26114b0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611007919061241c565b60405180910390a35050565b600c805461102090612893565b80601f016020809104026020016040519081016040528092919081815260200182805461104c90612893565b80156110995780601f1061106e57610100808354040283529160200191611099565b820191906000526020600020905b81548152906001019060200180831161107c57829003601f168201915b505050505081565b6110b26110ac6114b0565b83611571565b6110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612639565b60405180910390fd5b6110fd84848484611a79565b50505050565b6060600c805461111290612893565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90612893565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b50505050509050919050565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112396114b0565b73ffffffffffffffffffffffffffffffffffffffff16611257610dd7565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a4906125d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490612479565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661152b836109fd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061157c82611444565b6115bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b290612519565b60405180910390fd5b60006115c6836109fd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061163557508373ffffffffffffffffffffffffffffffffffffffff1661161d8461060d565b73ffffffffffffffffffffffffffffffffffffffff16145b806116465750611645818561119d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661166f826109fd565b73ffffffffffffffffffffffffffffffffffffffff16146116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c906124b9565b60405180910390fd5b611740838383611ad5565b61174b6000826114b8565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461179b91906127a9565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117f29190612753565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290612599565b60405180910390fd5b61192481611444565b15611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b90612499565b60405180910390fd5b61197060008383611ad5565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c09190612753565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611a8484848461164f565b611a9084848484611ada565b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690612459565b60405180910390fd5b50505050565b505050565b6000611afb8473ffffffffffffffffffffffffffffffffffffffff16611c71565b15611c64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b246114b0565b8786866040518563ffffffff1660e01b8152600401611b4694939291906123d0565b602060405180830381600087803b158015611b6057600080fd5b505af1925050508015611b9157506040513d601f19601f82011682018060405250810190611b8e9190612030565b60015b611c14573d8060008114611bc1576040519150601f19603f3d011682016040523d82523d6000602084013e611bc6565b606091505b50600081511415611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390612459565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c69565b600190505b949350505050565b600080823b905060008111915050919050565b828054611c9090612893565b90600052602060002090601f016020900481019282611cb25760008555611cf9565b82601f10611ccb57805160ff1916838001178555611cf9565b82800160010185558215611cf9579182015b82811115611cf8578251825591602001919060010190611cdd565b5b509050611d069190611d0a565b5090565b5b80821115611d23576000816000905550600101611d0b565b5090565b6000611d3a611d35846126b9565b612694565b905082815260208101848484011115611d5257600080fd5b611d5d848285612851565b509392505050565b6000611d78611d73846126ea565b612694565b905082815260208101848484011115611d9057600080fd5b611d9b848285612851565b509392505050565b600081359050611db281612e5e565b92915050565b600081359050611dc781612e75565b92915050565b600081359050611ddc81612e8c565b92915050565b600081519050611df181612e8c565b92915050565b600082601f830112611e0857600080fd5b8135611e18848260208601611d27565b91505092915050565b600082601f830112611e3257600080fd5b8135611e42848260208601611d65565b91505092915050565b600081359050611e5a81612ea3565b92915050565b600060208284031215611e7257600080fd5b6000611e8084828501611da3565b91505092915050565b60008060408385031215611e9c57600080fd5b6000611eaa85828601611da3565b9250506020611ebb85828601611da3565b9150509250929050565b600080600060608486031215611eda57600080fd5b6000611ee886828701611da3565b9350506020611ef986828701611da3565b9250506040611f0a86828701611e4b565b9150509250925092565b60008060008060808587031215611f2a57600080fd5b6000611f3887828801611da3565b9450506020611f4987828801611da3565b9350506040611f5a87828801611e4b565b925050606085013567ffffffffffffffff811115611f7757600080fd5b611f8387828801611df7565b91505092959194509250565b60008060408385031215611fa257600080fd5b6000611fb085828601611da3565b9250506020611fc185828601611db8565b9150509250929050565b60008060408385031215611fde57600080fd5b6000611fec85828601611da3565b9250506020611ffd85828601611e4b565b9150509250929050565b60006020828403121561201957600080fd5b600061202784828501611dcd565b91505092915050565b60006020828403121561204257600080fd5b600061205084828501611de2565b91505092915050565b60006020828403121561206b57600080fd5b600082013567ffffffffffffffff81111561208557600080fd5b61209184828501611e21565b91505092915050565b6000602082840312156120ac57600080fd5b60006120ba84828501611e4b565b91505092915050565b6120cc816127dd565b82525050565b6120db816127ef565b82525050565b60006120ec8261271b565b6120f68185612731565b9350612106818560208601612860565b61210f816129cc565b840191505092915050565b600061212582612726565b61212f8185612742565b935061213f818560208601612860565b612148816129cc565b840191505092915050565b6000612160603283612742565b915061216b826129dd565b604082019050919050565b6000612183602683612742565b915061218e82612a2c565b604082019050919050565b60006121a6601c83612742565b91506121b182612a7b565b602082019050919050565b60006121c9602483612742565b91506121d482612aa4565b604082019050919050565b60006121ec601983612742565b91506121f782612af3565b602082019050919050565b600061220f601883612742565b915061221a82612b1c565b602082019050919050565b6000612232602c83612742565b915061223d82612b45565b604082019050919050565b6000612255603883612742565b915061226082612b94565b604082019050919050565b6000612278602a83612742565b915061228382612be3565b604082019050919050565b600061229b602983612742565b91506122a682612c32565b604082019050919050565b60006122be602083612742565b91506122c982612c81565b602082019050919050565b60006122e1602c83612742565b91506122ec82612caa565b604082019050919050565b6000612304602083612742565b915061230f82612cf9565b602082019050919050565b6000612327602983612742565b915061233282612d22565b604082019050919050565b600061234a602183612742565b915061235582612d71565b604082019050919050565b600061236d603183612742565b915061237882612dc0565b604082019050919050565b6000612390602283612742565b915061239b82612e0f565b604082019050919050565b6123af81612847565b82525050565b60006020820190506123ca60008301846120c3565b92915050565b60006080820190506123e560008301876120c3565b6123f260208301866120c3565b6123ff60408301856123a6565b818103606083015261241181846120e1565b905095945050505050565b600060208201905061243160008301846120d2565b92915050565b60006020820190508181036000830152612451818461211a565b905092915050565b6000602082019050818103600083015261247281612153565b9050919050565b6000602082019050818103600083015261249281612176565b9050919050565b600060208201905081810360008301526124b281612199565b9050919050565b600060208201905081810360008301526124d2816121bc565b9050919050565b600060208201905081810360008301526124f2816121df565b9050919050565b6000602082019050818103600083015261251281612202565b9050919050565b6000602082019050818103600083015261253281612225565b9050919050565b6000602082019050818103600083015261255281612248565b9050919050565b600060208201905081810360008301526125728161226b565b9050919050565b600060208201905081810360008301526125928161228e565b9050919050565b600060208201905081810360008301526125b2816122b1565b9050919050565b600060208201905081810360008301526125d2816122d4565b9050919050565b600060208201905081810360008301526125f2816122f7565b9050919050565b600060208201905081810360008301526126128161231a565b9050919050565b600060208201905081810360008301526126328161233d565b9050919050565b6000602082019050818103600083015261265281612360565b9050919050565b6000602082019050818103600083015261267281612383565b9050919050565b600060208201905061268e60008301846123a6565b92915050565b600061269e6126af565b90506126aa82826128c5565b919050565b6000604051905090565b600067ffffffffffffffff8211156126d4576126d361299d565b5b6126dd826129cc565b9050602081019050919050565b600067ffffffffffffffff8211156127055761270461299d565b5b61270e826129cc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061275e82612847565b915061276983612847565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561279e5761279d61293f565b5b828201905092915050565b60006127b482612847565b91506127bf83612847565b9250828210156127d2576127d161293f565b5b828203905092915050565b60006127e882612827565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561287e578082015181840152602081019050612863565b8381111561288d576000848401525b50505050565b600060028204905060018216806128ab57607f821691505b602082108114156128bf576128be61296e565b5b50919050565b6128ce826129cc565b810181811067ffffffffffffffff821117156128ed576128ec61299d565b5b80604052505050565b600061290182612847565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129345761293361293f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178203130206d696e747320706572206163636f756e740000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d6178537570706c79206f66206d696e747320616c726561647920726561636860008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b612e67816127dd565b8114612e7257600080fd5b50565b612e7e816127ef565b8114612e8957600080fd5b50565b612e95816127fb565b8114612ea057600080fd5b50565b612eac81612847565b8114612eb757600080fd5b5056fea26469706673582212202836ea66c9ddad96642a2ed5f44e38ba6bc3569bda0e0e974ba94b31d1971bf064736f6c63430008040033

Deployed Bytecode Sourcemap

35553:1386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23639:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24571:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26031:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25568:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35788:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35718:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26921:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36115:469;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27297:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35915:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24265:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35827:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23995:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3491:148;;;:::i;:::-;;36828:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2840:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24740:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26324:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35990:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27519:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36648:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35646:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26690:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3794:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23639:292;23741:4;23780:25;23765:40;;;:11;:40;;;;:105;;;;23837:33;23822:48;;;:11;:48;;;;23765:105;:158;;;;23887:36;23911:11;23887:23;:36::i;:::-;23765:158;23758:165;;23639:292;;;:::o;24571:100::-;24625:13;24658:5;24651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24571:100;:::o;26031:221::-;26107:7;26135:16;26143:7;26135;:16::i;:::-;26127:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26220:15;:24;26236:7;26220:24;;;;;;;;;;;;;;;;;;;;;26213:31;;26031:221;;;:::o;25568:397::-;25649:13;25665:23;25680:7;25665:14;:23::i;:::-;25649:39;;25713:5;25707:11;;:2;:11;;;;25699:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25793:5;25777:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25802:37;25819:5;25826:12;:10;:12::i;:::-;25802:16;:37::i;:::-;25777:62;25769:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25936:21;25945:2;25949:7;25936:8;:21::i;:::-;25568:397;;;:::o;35788:32::-;;;;:::o;35718:27::-;;;;:::o;26921:305::-;27082:41;27101:12;:10;:12::i;:::-;27115:7;27082:18;:41::i;:::-;27074:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27190:28;27200:4;27206:2;27210:7;27190:9;:28::i;:::-;26921:305;;;:::o;36115:469::-;36210:9;;36198:8;36184:11;;:22;;;;:::i;:::-;:35;;36176:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;36306:15;;36294:8;36277:10;:14;36288:2;36277:14;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;:44;;36269:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36379:8;36361:10;:14;36372:2;36361:14;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;36403:6;36398:179;36419:8;36415:1;:12;36398:179;;;36464:1;36449:11;;:16;;;;;;;:::i;:::-;;;;;;;;36506:22;36512:2;36516:11;;36506:5;:22::i;:::-;36553:11;;36548:17;;;;;;;;;;36429:3;;;;;:::i;:::-;;;;36398:179;;;;36115:469;;:::o;27297:151::-;27401:39;27418:4;27424:2;27428:7;27401:39;;;;;;;;;;;;:16;:39::i;:::-;27297:151;;;:::o;35915:42::-;;;;;;;;;;;;;;;;;:::o;24265:239::-;24337:7;24357:13;24373:7;:16;24381:7;24373:16;;;;;;;;;;;;;;;;;;;;;24357:32;;24425:1;24408:19;;:5;:19;;;;24400:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24491:5;24484:12;;;24265:239;;;:::o;35827:40::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23995:208::-;24067:7;24112:1;24095:19;;:5;:19;;;;24087:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24179:9;:16;24189:5;24179:16;;;;;;;;;;;;;;;;24172:23;;23995:208;;;:::o;3491:148::-;3071:12;:10;:12::i;:::-;3060:23;;:7;:5;:7::i;:::-;:23;;;3052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3598:1:::1;3561:40;;3582:6;::::0;::::1;;;;;;;;3561:40;;;;;;;;;;;;3629:1;3612:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3491:148::o:0;36828:108::-;3071:12;:10;:12::i;:::-;3060:23;;:7;:5;:7::i;:::-;:23;;;3052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36918:10:::1;36906:9;:22;;;;;;;;;;;;:::i;:::-;;36828:108:::0;:::o;2840:87::-;2886:7;2913:6;;;;;;;;;;;2906:13;;2840:87;:::o;24740:104::-;24796:13;24829:7;24822:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24740:104;:::o;26324:295::-;26439:12;:10;:12::i;:::-;26427:24;;:8;:24;;;;26419:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26539:8;26494:18;:32;26513:12;:10;:12::i;:::-;26494:32;;;;;;;;;;;;;;;:42;26527:8;26494:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26592:8;26563:48;;26578:12;:10;:12::i;:::-;26563:48;;;26602:8;26563:48;;;;;;:::i;:::-;;;;;;;;26324:295;;:::o;35990:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27519:285::-;27651:41;27670:12;:10;:12::i;:::-;27684:7;27651:18;:41::i;:::-;27643:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27757:39;27771:4;27777:2;27781:7;27790:5;27757:13;:39::i;:::-;27519:285;;;;:::o;36648:116::-;36714:13;36747:9;36740:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36648:116;;;:::o;35646:28::-;;;;:::o;26690:164::-;26787:4;26811:18;:25;26830:5;26811:25;;;;;;;;;;;;;;;:35;26837:8;26811:35;;;;;;;;;;;;;;;;;;;;;;;;;26804:42;;26690:164;;;;:::o;3794:244::-;3071:12;:10;:12::i;:::-;3060:23;;:7;:5;:7::i;:::-;:23;;;3052:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3903:1:::1;3883:22;;:8;:22;;;;3875:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3993:8;3964:38;;3985:6;::::0;::::1;;;;;;;;3964:38;;;;;;;;;;;;4022:8;4013:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3794:244:::0;:::o;22137:157::-;22222:4;22261:25;22246:40;;;:11;:40;;;;22239:47;;22137:157;;;:::o;29271:127::-;29336:4;29388:1;29360:30;;:7;:16;29368:7;29360:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29353:37;;29271:127;;;:::o;1398:98::-;1451:7;1478:10;1471:17;;1398:98;:::o;33148:174::-;33250:2;33223:15;:24;33239:7;33223:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33306:7;33302:2;33268:46;;33277:23;33292:7;33277:14;:23::i;:::-;33268:46;;;;;;;;;;;;33148:174;;:::o;29565:348::-;29658:4;29683:16;29691:7;29683;:16::i;:::-;29675:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29759:13;29775:23;29790:7;29775:14;:23::i;:::-;29759:39;;29828:5;29817:16;;:7;:16;;;:51;;;;29861:7;29837:31;;:20;29849:7;29837:11;:20::i;:::-;:31;;;29817:51;:87;;;;29872:32;29889:5;29896:7;29872:16;:32::i;:::-;29817:87;29809:96;;;29565:348;;;;:::o;32486:544::-;32611:4;32584:31;;:23;32599:7;32584:14;:23::i;:::-;:31;;;32576:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:1;32680:16;;:2;:16;;;;32672:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32750:39;32771:4;32777:2;32781:7;32750:20;:39::i;:::-;32854:29;32871:1;32875:7;32854:8;:29::i;:::-;32915:1;32896:9;:15;32906:4;32896:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32944:1;32927:9;:13;32937:2;32927:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32975:2;32956:7;:16;32964:7;32956:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33014:7;33010:2;32995:27;;33004:4;32995:27;;;;;;;;;;;;32486:544;;;:::o;31178:382::-;31272:1;31258:16;;:2;:16;;;;31250:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31331:16;31339:7;31331;:16::i;:::-;31330:17;31322:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31393:45;31422:1;31426:2;31430:7;31393:20;:45::i;:::-;31468:1;31451:9;:13;31461:2;31451:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31499:2;31480:7;:16;31488:7;31480:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31544:7;31540:2;31519:33;;31536:1;31519:33;;;;;;;;;;;;31178:382;;:::o;28686:272::-;28800:28;28810:4;28816:2;28820:7;28800:9;:28::i;:::-;28847:48;28870:4;28876:2;28880:7;28889:5;28847:22;:48::i;:::-;28839:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28686:272;;;;:::o;35343:93::-;;;;:::o;33887:843::-;34008:4;34034:15;:2;:13;;;:15::i;:::-;34030:693;;;34086:2;34070:36;;;34107:12;:10;:12::i;:::-;34121:4;34127:7;34136:5;34070:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34066:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34333:1;34316:6;:13;:18;34312:341;;;34359:60;;;;;;;;;;:::i;:::-;;;;;;;;34312:341;34603:6;34597:13;34588:6;34584:2;34580:15;34573:38;34066:602;34203:45;;;34193:55;;;:6;:55;;;;34186:62;;;;;34030:693;34707:4;34700:11;;33887:843;;;;;;;:::o;12016:422::-;12076:4;12284:12;12395:7;12383:20;12375:28;;12429:1;12422:4;:8;12415:15;;;12016:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:360::-;6411:3;6439:38;6471:5;6439:38;:::i;:::-;6493:70;6556:6;6551:3;6493:70;:::i;:::-;6486:77;;6572:52;6617:6;6612:3;6605:4;6598:5;6594:16;6572:52;:::i;:::-;6649:29;6671:6;6649:29;:::i;:::-;6644:3;6640:39;6633:46;;6415:270;;;;;:::o;6691:364::-;6779:3;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:366::-;7203:3;7224:67;7288:2;7283:3;7224:67;:::i;:::-;7217:74;;7300:93;7389:3;7300:93;:::i;:::-;7418:2;7413:3;7409:12;7402:19;;7207:220;;;:::o;7433:366::-;7575:3;7596:67;7660:2;7655:3;7596:67;:::i;:::-;7589:74;;7672:93;7761:3;7672:93;:::i;:::-;7790:2;7785:3;7781:12;7774:19;;7579:220;;;:::o;7805:366::-;7947:3;7968:67;8032:2;8027:3;7968:67;:::i;:::-;7961:74;;8044:93;8133:3;8044:93;:::i;:::-;8162:2;8157:3;8153:12;8146:19;;7951:220;;;:::o;8177:366::-;8319:3;8340:67;8404:2;8399:3;8340:67;:::i;:::-;8333:74;;8416:93;8505:3;8416:93;:::i;:::-;8534:2;8529:3;8525:12;8518:19;;8323:220;;;:::o;8549:366::-;8691:3;8712:67;8776:2;8771:3;8712:67;:::i;:::-;8705:74;;8788:93;8877:3;8788:93;:::i;:::-;8906:2;8901:3;8897:12;8890:19;;8695:220;;;:::o;8921:366::-;9063:3;9084:67;9148:2;9143:3;9084:67;:::i;:::-;9077:74;;9160:93;9249:3;9160:93;:::i;:::-;9278:2;9273:3;9269:12;9262:19;;9067:220;;;:::o;9293:366::-;9435:3;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9532:93;9621:3;9532:93;:::i;:::-;9650:2;9645:3;9641:12;9634:19;;9439:220;;;:::o;9665:366::-;9807:3;9828:67;9892:2;9887:3;9828:67;:::i;:::-;9821:74;;9904:93;9993:3;9904:93;:::i;:::-;10022:2;10017:3;10013:12;10006:19;;9811:220;;;:::o;10037:366::-;10179:3;10200:67;10264:2;10259:3;10200:67;:::i;:::-;10193:74;;10276:93;10365:3;10276:93;:::i;:::-;10394:2;10389:3;10385:12;10378:19;;10183:220;;;:::o;10409:366::-;10551:3;10572:67;10636:2;10631:3;10572:67;:::i;:::-;10565:74;;10648:93;10737:3;10648:93;:::i;:::-;10766:2;10761:3;10757:12;10750:19;;10555:220;;;:::o;10781:366::-;10923:3;10944:67;11008:2;11003:3;10944:67;:::i;:::-;10937:74;;11020:93;11109:3;11020:93;:::i;:::-;11138:2;11133:3;11129:12;11122:19;;10927:220;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11299:220;;;:::o;11525:366::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11671:220;;;:::o;11897:366::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;12043:220;;;:::o;12269:366::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12415:220;;;:::o;12641:366::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12787:220;;;:::o;13013:366::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13159:220;;;:::o;13385:118::-;13472:24;13490:5;13472:24;:::i;:::-;13467:3;13460:37;13450:53;;:::o;13509:222::-;13602:4;13640:2;13629:9;13625:18;13617:26;;13653:71;13721:1;13710:9;13706:17;13697:6;13653:71;:::i;:::-;13607:124;;;;:::o;13737:640::-;13932:4;13970:3;13959:9;13955:19;13947:27;;13984:71;14052:1;14041:9;14037:17;14028:6;13984:71;:::i;:::-;14065:72;14133:2;14122:9;14118:18;14109:6;14065:72;:::i;:::-;14147;14215:2;14204:9;14200:18;14191:6;14147:72;:::i;:::-;14266:9;14260:4;14256:20;14251:2;14240:9;14236:18;14229:48;14294:76;14365:4;14356:6;14294:76;:::i;:::-;14286:84;;13937:440;;;;;;;:::o;14383:210::-;14470:4;14508:2;14497:9;14493:18;14485:26;;14521:65;14583:1;14572:9;14568:17;14559:6;14521:65;:::i;:::-;14475:118;;;;:::o;14599:313::-;14712:4;14750:2;14739:9;14735:18;14727:26;;14799:9;14793:4;14789:20;14785:1;14774:9;14770:17;14763:47;14827:78;14900:4;14891:6;14827:78;:::i;:::-;14819:86;;14717:195;;;;:::o;14918:419::-;15084:4;15122:2;15111:9;15107:18;15099:26;;15171:9;15165:4;15161:20;15157:1;15146:9;15142:17;15135:47;15199:131;15325:4;15199:131;:::i;:::-;15191:139;;15089:248;;;:::o;15343:419::-;15509:4;15547:2;15536:9;15532:18;15524:26;;15596:9;15590:4;15586:20;15582:1;15571:9;15567:17;15560:47;15624:131;15750:4;15624:131;:::i;:::-;15616:139;;15514:248;;;:::o;15768:419::-;15934:4;15972:2;15961:9;15957:18;15949:26;;16021:9;16015:4;16011:20;16007:1;15996:9;15992:17;15985:47;16049:131;16175:4;16049:131;:::i;:::-;16041:139;;15939:248;;;:::o;16193:419::-;16359:4;16397:2;16386:9;16382:18;16374:26;;16446:9;16440:4;16436:20;16432:1;16421:9;16417:17;16410:47;16474:131;16600:4;16474:131;:::i;:::-;16466:139;;16364:248;;;:::o;16618:419::-;16784:4;16822:2;16811:9;16807:18;16799:26;;16871:9;16865:4;16861:20;16857:1;16846:9;16842:17;16835:47;16899:131;17025:4;16899:131;:::i;:::-;16891:139;;16789:248;;;:::o;17043:419::-;17209:4;17247:2;17236:9;17232:18;17224:26;;17296:9;17290:4;17286:20;17282:1;17271:9;17267:17;17260:47;17324:131;17450:4;17324:131;:::i;:::-;17316:139;;17214:248;;;:::o;17468:419::-;17634:4;17672:2;17661:9;17657:18;17649:26;;17721:9;17715:4;17711:20;17707:1;17696:9;17692:17;17685:47;17749:131;17875:4;17749:131;:::i;:::-;17741:139;;17639:248;;;:::o;17893:419::-;18059:4;18097:2;18086:9;18082:18;18074:26;;18146:9;18140:4;18136:20;18132:1;18121:9;18117:17;18110:47;18174:131;18300:4;18174:131;:::i;:::-;18166:139;;18064:248;;;:::o;18318:419::-;18484:4;18522:2;18511:9;18507:18;18499:26;;18571:9;18565:4;18561:20;18557:1;18546:9;18542:17;18535:47;18599:131;18725:4;18599:131;:::i;:::-;18591:139;;18489:248;;;:::o;18743:419::-;18909:4;18947:2;18936:9;18932:18;18924:26;;18996:9;18990:4;18986:20;18982:1;18971:9;18967:17;18960:47;19024:131;19150:4;19024:131;:::i;:::-;19016:139;;18914:248;;;:::o;19168:419::-;19334:4;19372:2;19361:9;19357:18;19349:26;;19421:9;19415:4;19411:20;19407:1;19396:9;19392:17;19385:47;19449:131;19575:4;19449:131;:::i;:::-;19441:139;;19339:248;;;:::o;19593:419::-;19759:4;19797:2;19786:9;19782:18;19774:26;;19846:9;19840:4;19836:20;19832:1;19821:9;19817:17;19810:47;19874:131;20000:4;19874:131;:::i;:::-;19866:139;;19764:248;;;:::o;20018:419::-;20184:4;20222:2;20211:9;20207:18;20199:26;;20271:9;20265:4;20261:20;20257:1;20246:9;20242:17;20235:47;20299:131;20425:4;20299:131;:::i;:::-;20291:139;;20189:248;;;:::o;20443:419::-;20609:4;20647:2;20636:9;20632:18;20624:26;;20696:9;20690:4;20686:20;20682:1;20671:9;20667:17;20660:47;20724:131;20850:4;20724:131;:::i;:::-;20716:139;;20614:248;;;:::o;20868:419::-;21034:4;21072:2;21061:9;21057:18;21049:26;;21121:9;21115:4;21111:20;21107:1;21096:9;21092:17;21085:47;21149:131;21275:4;21149:131;:::i;:::-;21141:139;;21039:248;;;:::o;21293:419::-;21459:4;21497:2;21486:9;21482:18;21474:26;;21546:9;21540:4;21536:20;21532:1;21521:9;21517:17;21510:47;21574:131;21700:4;21574:131;:::i;:::-;21566:139;;21464:248;;;:::o;21718:419::-;21884:4;21922:2;21911:9;21907:18;21899:26;;21971:9;21965:4;21961:20;21957:1;21946:9;21942:17;21935:47;21999:131;22125:4;21999:131;:::i;:::-;21991:139;;21889:248;;;:::o;22143:222::-;22236:4;22274:2;22263:9;22259:18;22251:26;;22287:71;22355:1;22344:9;22340:17;22331:6;22287:71;:::i;:::-;22241:124;;;;:::o;22371:129::-;22405:6;22432:20;;:::i;:::-;22422:30;;22461:33;22489:4;22481:6;22461:33;:::i;:::-;22412:88;;;:::o;22506:75::-;22539:6;22572:2;22566:9;22556:19;;22546:35;:::o;22587:307::-;22648:4;22738:18;22730:6;22727:30;22724:2;;;22760:18;;:::i;:::-;22724:2;22798:29;22820:6;22798:29;:::i;:::-;22790:37;;22882:4;22876;22872:15;22864:23;;22653:241;;;:::o;22900:308::-;22962:4;23052:18;23044:6;23041:30;23038:2;;;23074:18;;:::i;:::-;23038:2;23112:29;23134:6;23112:29;:::i;:::-;23104:37;;23196:4;23190;23186:15;23178:23;;22967:241;;;:::o;23214:98::-;23265:6;23299:5;23293:12;23283:22;;23272:40;;;:::o;23318:99::-;23370:6;23404:5;23398:12;23388:22;;23377:40;;;:::o;23423:168::-;23506:11;23540:6;23535:3;23528:19;23580:4;23575:3;23571:14;23556:29;;23518:73;;;;:::o;23597:169::-;23681:11;23715:6;23710:3;23703:19;23755:4;23750:3;23746:14;23731:29;;23693:73;;;;:::o;23772:305::-;23812:3;23831:20;23849:1;23831:20;:::i;:::-;23826:25;;23865:20;23883:1;23865:20;:::i;:::-;23860:25;;24019:1;23951:66;23947:74;23944:1;23941:81;23938:2;;;24025:18;;:::i;:::-;23938:2;24069:1;24066;24062:9;24055:16;;23816:261;;;;:::o;24083:191::-;24123:4;24143:20;24161:1;24143:20;:::i;:::-;24138:25;;24177:20;24195:1;24177:20;:::i;:::-;24172:25;;24216:1;24213;24210:8;24207:2;;;24221:18;;:::i;:::-;24207:2;24266:1;24263;24259:9;24251:17;;24128:146;;;;:::o;24280:96::-;24317:7;24346:24;24364:5;24346:24;:::i;:::-;24335:35;;24325:51;;;:::o;24382:90::-;24416:7;24459:5;24452:13;24445:21;24434:32;;24424:48;;;:::o;24478:149::-;24514:7;24554:66;24547:5;24543:78;24532:89;;24522:105;;;:::o;24633:126::-;24670:7;24710:42;24703:5;24699:54;24688:65;;24678:81;;;:::o;24765:77::-;24802:7;24831:5;24820:16;;24810:32;;;:::o;24848:154::-;24932:6;24927:3;24922;24909:30;24994:1;24985:6;24980:3;24976:16;24969:27;24899:103;;;:::o;25008:307::-;25076:1;25086:113;25100:6;25097:1;25094:13;25086:113;;;25185:1;25180:3;25176:11;25170:18;25166:1;25161:3;25157:11;25150:39;25122:2;25119:1;25115:10;25110:15;;25086:113;;;25217:6;25214:1;25211:13;25208:2;;;25297:1;25288:6;25283:3;25279:16;25272:27;25208:2;25057:258;;;;:::o;25321:320::-;25365:6;25402:1;25396:4;25392:12;25382:22;;25449:1;25443:4;25439:12;25470:18;25460:2;;25526:4;25518:6;25514:17;25504:27;;25460:2;25588;25580:6;25577:14;25557:18;25554:38;25551:2;;;25607:18;;:::i;:::-;25551:2;25372:269;;;;:::o;25647:281::-;25730:27;25752:4;25730:27;:::i;:::-;25722:6;25718:40;25860:6;25848:10;25845:22;25824:18;25812:10;25809:34;25806:62;25803:2;;;25871:18;;:::i;:::-;25803:2;25911:10;25907:2;25900:22;25690:238;;;:::o;25934:233::-;25973:3;25996:24;26014:5;25996:24;:::i;:::-;25987:33;;26042:66;26035:5;26032:77;26029:2;;;26112:18;;:::i;:::-;26029:2;26159:1;26152:5;26148:13;26141:20;;25977:190;;;:::o;26173:180::-;26221:77;26218:1;26211:88;26318:4;26315:1;26308:15;26342:4;26339:1;26332:15;26359:180;26407:77;26404:1;26397:88;26504:4;26501:1;26494:15;26528:4;26525:1;26518:15;26545:180;26593:77;26590:1;26583:88;26690:4;26687:1;26680:15;26714:4;26711:1;26704:15;26731:102;26772:6;26823:2;26819:7;26814:2;26807:5;26803:14;26799:28;26789:38;;26779:54;;;:::o;26839:237::-;26979:34;26975:1;26967:6;26963:14;26956:58;27048:20;27043:2;27035:6;27031:15;27024:45;26945:131;:::o;27082:225::-;27222:34;27218:1;27210:6;27206:14;27199:58;27291:8;27286:2;27278:6;27274:15;27267:33;27188:119;:::o;27313:178::-;27453:30;27449:1;27441:6;27437:14;27430:54;27419:72;:::o;27497:223::-;27637:34;27633:1;27625:6;27621:14;27614:58;27706:6;27701:2;27693:6;27689:15;27682:31;27603:117;:::o;27726:175::-;27866:27;27862:1;27854:6;27850:14;27843:51;27832:69;:::o;27907:174::-;28047:26;28043:1;28035:6;28031:14;28024:50;28013:68;:::o;28087:231::-;28227:34;28223:1;28215:6;28211:14;28204:58;28296:14;28291:2;28283:6;28279:15;28272:39;28193:125;:::o;28324:243::-;28464:34;28460:1;28452:6;28448:14;28441:58;28533:26;28528:2;28520:6;28516:15;28509:51;28430:137;:::o;28573:229::-;28713:34;28709:1;28701:6;28697:14;28690:58;28782:12;28777:2;28769:6;28765:15;28758:37;28679:123;:::o;28808:228::-;28948:34;28944:1;28936:6;28932:14;28925:58;29017:11;29012:2;29004:6;29000:15;28993:36;28914:122;:::o;29042:182::-;29182:34;29178:1;29170:6;29166:14;29159:58;29148:76;:::o;29230:231::-;29370:34;29366:1;29358:6;29354:14;29347:58;29439:14;29434:2;29426:6;29422:15;29415:39;29336:125;:::o;29467:182::-;29607:34;29603:1;29595:6;29591:14;29584:58;29573:76;:::o;29655:228::-;29795:34;29791:1;29783:6;29779:14;29772:58;29864:11;29859:2;29851:6;29847:15;29840:36;29761:122;:::o;29889:220::-;30029:34;30025:1;30017:6;30013:14;30006:58;30098:3;30093:2;30085:6;30081:15;30074:28;29995:114;:::o;30115:236::-;30255:34;30251:1;30243:6;30239:14;30232:58;30324:19;30319:2;30311:6;30307:15;30300:44;30221:130;:::o;30357:221::-;30497:34;30493:1;30485:6;30481:14;30474:58;30566:4;30561:2;30553:6;30549:15;30542:29;30463:115;:::o;30584:122::-;30657:24;30675:5;30657:24;:::i;:::-;30650:5;30647:35;30637:2;;30696:1;30693;30686:12;30637:2;30627:79;:::o;30712:116::-;30782:21;30797:5;30782:21;:::i;:::-;30775:5;30772:32;30762:2;;30818:1;30815;30808:12;30762:2;30752:76;:::o;30834:120::-;30906:23;30923:5;30906:23;:::i;:::-;30899:5;30896:34;30886:2;;30944:1;30941;30934:12;30886:2;30876:78;:::o;30960:122::-;31033:24;31051:5;31033:24;:::i;:::-;31026:5;31023:35;31013:2;;31072:1;31069;31062:12;31013:2;31003:79;:::o

Swarm Source

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