ETH Price: $2,354.44 (+0.49%)

Token

HonorarySyklops (HSYK)
 

Overview

Max Total Supply

20 HSYK

Holders

13

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
cotali.eth
Balance
1 HSYK
0x61888f5e4a8fbfb5bb7187654f638e211c6967fe
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:
HonorarySyklops

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

// 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/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/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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


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

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @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;
    }
}


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: HonorarySyklops.sol
pragma solidity ^0.8.0;

contract HonorarySyklops is ERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using Strings for uint256;

    uint256 public constant MAX_SUPPLY = 20;
    string private _baseURIextended;

    constructor() ERC721("HonorarySyklops", "HSYK") {
    }

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

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURIextended = baseURI_;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    function mintAll() public onlyOwner {
        require(totalSupply() < MAX_SUPPLY, "All NFTs have been minted.");
        for (uint256 i = 0; i < MAX_SUPPLY; i++) {
            uint256 mintIndex = totalSupply();
            _safeMint(msg.sender, mintIndex);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"mintAll","outputs":[],"stateMutability":"nonpayable","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":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600f81526020017f486f6e6f7261727953796b6c6f707300000000000000000000000000000000008152506040518060400160405280600481526020017f4853594b0000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062000171565b508060019080519060200190620000af92919062000171565b5050506000620000c46200016960201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000286565b600033905090565b8280546200017f9062000221565b90600052602060002090601f016020900481019282620001a35760008555620001ef565b82601f10620001be57805160ff1916838001178555620001ef565b82800160010185558215620001ef579182015b82811115620001ee578251825591602001919060010190620001d1565b5b509050620001fe919062000202565b5090565b5b808211156200021d57600081600090555060010162000203565b5090565b600060028204905060018216806200023a57607f821691505b6020821081141562000251576200025062000257565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61363180620002966000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063595882b3116100b857806395d89b411161007c57806395d89b4114610363578063a22cb46514610381578063b88d4fde1461039d578063c87b56dd146103b9578063e985e9c5146103e9578063f2fde38b1461041957610142565b8063595882b3146102d15780636352211e146102db57806370a082311461030b578063715018a61461033b5780638da5cb5b1461034557610142565b806323b872dd1161010a57806323b872dd146101ff5780632f745c591461021b57806332cb6b0c1461024b57806342842e0e146102695780634f6ccce71461028557806355f804b3146102b557610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806318160ddd146101e1575b600080fd5b610161600480360381019061015c9190612679565b610435565b60405161016e9190612f49565b60405180910390f35b61017f6104af565b60405161018c9190612f64565b60405180910390f35b6101af60048036038101906101aa919061270c565b610541565b6040516101bc9190612ee2565b60405180910390f35b6101df60048036038101906101da919061263d565b6105c6565b005b6101e96106de565b6040516101f691906131c6565b60405180910390f35b61021960048036038101906102149190612537565b6106eb565b005b6102356004803603810190610230919061263d565b61074b565b60405161024291906131c6565b60405180910390f35b6102536107f0565b60405161026091906131c6565b60405180910390f35b610283600480360381019061027e9190612537565b6107f5565b005b61029f600480360381019061029a919061270c565b610815565b6040516102ac91906131c6565b60405180910390f35b6102cf60048036038101906102ca91906126cb565b6108ac565b005b6102d9610942565b005b6102f560048036038101906102f0919061270c565b610a41565b6040516103029190612ee2565b60405180910390f35b610325600480360381019061032091906124d2565b610af3565b60405161033291906131c6565b60405180910390f35b610343610bab565b005b61034d610ce8565b60405161035a9190612ee2565b60405180910390f35b61036b610d12565b6040516103789190612f64565b60405180910390f35b61039b60048036038101906103969190612601565b610da4565b005b6103b760048036038101906103b29190612586565b610f25565b005b6103d360048036038101906103ce919061270c565b610f87565b6040516103e09190612f64565b60405180910390f35b61040360048036038101906103fe91906124fb565b610fe6565b6040516104109190612f49565b60405180910390f35b610433600480360381019061042e91906124d2565b61107a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782611226565b5b9050919050565b6060600080546104be90613426565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea90613426565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b600061054c82611308565b61058b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058290613106565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105d182610a41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063990613166565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610661611374565b73ffffffffffffffffffffffffffffffffffffffff161480610690575061068f8161068a611374565b610fe6565b5b6106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690613086565b60405180910390fd5b6106d9838361137c565b505050565b6000600880549050905090565b6106fc6106f6611374565b82611435565b61073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290613186565b60405180910390fd5b610746838383611513565b505050565b600061075683610af3565b8210610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90612f86565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601481565b61081083838360405180602001604052806000815250610f25565b505050565b600061081f6106de565b8210610860576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610857906131a6565b60405180910390fd5b6008828154811061089a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6108b4611374565b73ffffffffffffffffffffffffffffffffffffffff166108d2610ce8565b73ffffffffffffffffffffffffffffffffffffffff1614610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90613126565b60405180910390fd5b80600b908051906020019061093e9291906122f6565b5050565b61094a611374565b73ffffffffffffffffffffffffffffffffffffffff16610968610ce8565b73ffffffffffffffffffffffffffffffffffffffff16146109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590613126565b60405180910390fd5b60146109c86106de565b10610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613046565b60405180910390fd5b60005b6014811015610a3e576000610a1e6106de565b9050610a2a338261176f565b508080610a3690613458565b915050610a0b565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae1906130c6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b906130a6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bb3611374565b73ffffffffffffffffffffffffffffffffffffffff16610bd1610ce8565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613126565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d2190613426565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4d90613426565b8015610d9a5780601f10610d6f57610100808354040283529160200191610d9a565b820191906000526020600020905b815481529060010190602001808311610d7d57829003601f168201915b5050505050905090565b610dac611374565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613026565b60405180910390fd5b8060056000610e27611374565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ed4611374565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f199190612f49565b60405180910390a35050565b610f36610f30611374565b83611435565b610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613186565b60405180910390fd5b610f818484848461178d565b50505050565b60606000610f936117e9565b90506000815111610fb35760405180602001604052806000815250610fde565b80610fbd8461187b565b604051602001610fce929190612eb3565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611082611374565b73ffffffffffffffffffffffffffffffffffffffff166110a0610ce8565b73ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613126565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90612fc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112f157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611301575061130082611a28565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113ef83610a41565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061144082611308565b61147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613066565b60405180910390fd5b600061148a83610a41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114f957508373ffffffffffffffffffffffffffffffffffffffff166114e184610541565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150a57506115098185610fe6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661153382610a41565b73ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613146565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613006565b60405180910390fd5b611604838383611a92565b61160f60008261137c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461165f919061333c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b691906132b5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611789828260405180602001604052806000815250611ba6565b5050565b611798848484611513565b6117a484848484611c01565b6117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90612fa6565b60405180910390fd5b50505050565b6060600b80546117f890613426565b80601f016020809104026020016040519081016040528092919081815260200182805461182490613426565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b606060008214156118c3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a23565b600082905060005b600082146118f55780806118de90613458565b915050600a826118ee919061330b565b91506118cb565b60008167ffffffffffffffff811115611937577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119695781602001600182028036833780820191505090505b5090505b60008514611a1c57600182611982919061333c565b9150600a8561199191906134a1565b603061199d91906132b5565b60f81b8183815181106119d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a15919061330b565b945061196d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a9d838383611d98565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ae057611adb81611d9d565b611b1f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b1e57611b1d8382611de6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6257611b5d81611f53565b611ba1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ba057611b9f8282612096565b5b5b505050565b611bb08383612115565b611bbd6000848484611c01565b611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf390612fa6565b60405180910390fd5b505050565b6000611c228473ffffffffffffffffffffffffffffffffffffffff166122e3565b15611d8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c4b611374565b8786866040518563ffffffff1660e01b8152600401611c6d9493929190612efd565b602060405180830381600087803b158015611c8757600080fd5b505af1925050508015611cb857506040513d601f19601f82011682018060405250810190611cb591906126a2565b60015b611d3b573d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b50600081511415611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90612fa6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611d90565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611df384610af3565b611dfd919061333c565b9050600060076000848152602001908152602001600020549050818114611ee2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611f67919061333c565b9050600060096000848152602001908152602001600020549050600060088381548110611fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612005577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061207a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006120a183610af3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c906130e6565b60405180910390fd5b61218e81611308565b156121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c590612fe6565b60405180910390fd5b6121da60008383611a92565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222a91906132b5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461230290613426565b90600052602060002090601f016020900481019282612324576000855561236b565b82601f1061233d57805160ff191683800117855561236b565b8280016001018555821561236b579182015b8281111561236a57825182559160200191906001019061234f565b5b509050612378919061237c565b5090565b5b8082111561239557600081600090555060010161237d565b5090565b60006123ac6123a784613212565b6131e1565b9050828152602081018484840111156123c457600080fd5b6123cf8482856133e4565b509392505050565b60006123ea6123e584613242565b6131e1565b90508281526020810184848401111561240257600080fd5b61240d8482856133e4565b509392505050565b6000813590506124248161359f565b92915050565b600081359050612439816135b6565b92915050565b60008135905061244e816135cd565b92915050565b600081519050612463816135cd565b92915050565b600082601f83011261247a57600080fd5b813561248a848260208601612399565b91505092915050565b600082601f8301126124a457600080fd5b81356124b48482602086016123d7565b91505092915050565b6000813590506124cc816135e4565b92915050565b6000602082840312156124e457600080fd5b60006124f284828501612415565b91505092915050565b6000806040838503121561250e57600080fd5b600061251c85828601612415565b925050602061252d85828601612415565b9150509250929050565b60008060006060848603121561254c57600080fd5b600061255a86828701612415565b935050602061256b86828701612415565b925050604061257c868287016124bd565b9150509250925092565b6000806000806080858703121561259c57600080fd5b60006125aa87828801612415565b94505060206125bb87828801612415565b93505060406125cc878288016124bd565b925050606085013567ffffffffffffffff8111156125e957600080fd5b6125f587828801612469565b91505092959194509250565b6000806040838503121561261457600080fd5b600061262285828601612415565b92505060206126338582860161242a565b9150509250929050565b6000806040838503121561265057600080fd5b600061265e85828601612415565b925050602061266f858286016124bd565b9150509250929050565b60006020828403121561268b57600080fd5b60006126998482850161243f565b91505092915050565b6000602082840312156126b457600080fd5b60006126c284828501612454565b91505092915050565b6000602082840312156126dd57600080fd5b600082013567ffffffffffffffff8111156126f757600080fd5b61270384828501612493565b91505092915050565b60006020828403121561271e57600080fd5b600061272c848285016124bd565b91505092915050565b61273e81613370565b82525050565b61274d81613382565b82525050565b600061275e82613272565b6127688185613288565b93506127788185602086016133f3565b6127818161358e565b840191505092915050565b60006127978261327d565b6127a18185613299565b93506127b18185602086016133f3565b6127ba8161358e565b840191505092915050565b60006127d08261327d565b6127da81856132aa565b93506127ea8185602086016133f3565b80840191505092915050565b6000612803602b83613299565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612869603283613299565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006128cf602683613299565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612935601c83613299565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612975602483613299565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129db601983613299565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612a1b601a83613299565b91507f416c6c204e4654732068617665206265656e206d696e7465642e0000000000006000830152602082019050919050565b6000612a5b602c83613299565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612ac1603883613299565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612b27602a83613299565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b8d602983613299565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bf3602083613299565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612c33602c83613299565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c996005836132aa565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612cd9602083613299565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d19602983613299565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d7f602183613299565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612de5603183613299565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000612e4b602c83613299565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b612ead816133da565b82525050565b6000612ebf82856127c5565b9150612ecb82846127c5565b9150612ed682612c8c565b91508190509392505050565b6000602082019050612ef76000830184612735565b92915050565b6000608082019050612f126000830187612735565b612f1f6020830186612735565b612f2c6040830185612ea4565b8181036060830152612f3e8184612753565b905095945050505050565b6000602082019050612f5e6000830184612744565b92915050565b60006020820190508181036000830152612f7e818461278c565b905092915050565b60006020820190508181036000830152612f9f816127f6565b9050919050565b60006020820190508181036000830152612fbf8161285c565b9050919050565b60006020820190508181036000830152612fdf816128c2565b9050919050565b60006020820190508181036000830152612fff81612928565b9050919050565b6000602082019050818103600083015261301f81612968565b9050919050565b6000602082019050818103600083015261303f816129ce565b9050919050565b6000602082019050818103600083015261305f81612a0e565b9050919050565b6000602082019050818103600083015261307f81612a4e565b9050919050565b6000602082019050818103600083015261309f81612ab4565b9050919050565b600060208201905081810360008301526130bf81612b1a565b9050919050565b600060208201905081810360008301526130df81612b80565b9050919050565b600060208201905081810360008301526130ff81612be6565b9050919050565b6000602082019050818103600083015261311f81612c26565b9050919050565b6000602082019050818103600083015261313f81612ccc565b9050919050565b6000602082019050818103600083015261315f81612d0c565b9050919050565b6000602082019050818103600083015261317f81612d72565b9050919050565b6000602082019050818103600083015261319f81612dd8565b9050919050565b600060208201905081810360008301526131bf81612e3e565b9050919050565b60006020820190506131db6000830184612ea4565b92915050565b6000604051905081810181811067ffffffffffffffff821117156132085761320761355f565b5b8060405250919050565b600067ffffffffffffffff82111561322d5761322c61355f565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561325d5761325c61355f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132c0826133da565b91506132cb836133da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613300576132ff6134d2565b5b828201905092915050565b6000613316826133da565b9150613321836133da565b92508261333157613330613501565b5b828204905092915050565b6000613347826133da565b9150613352836133da565b925082821015613365576133646134d2565b5b828203905092915050565b600061337b826133ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134115780820151818401526020810190506133f6565b83811115613420576000848401525b50505050565b6000600282049050600182168061343e57607f821691505b6020821081141561345257613451613530565b5b50919050565b6000613463826133da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613496576134956134d2565b5b600182019050919050565b60006134ac826133da565b91506134b7836133da565b9250826134c7576134c6613501565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6135a881613370565b81146135b357600080fd5b50565b6135bf81613382565b81146135ca57600080fd5b50565b6135d68161338e565b81146135e157600080fd5b50565b6135ed816133da565b81146135f857600080fd5b5056fea264697066735822122033ad9d8249618c7c565ce9993a24cbdde57b79d6f060f019ab961f4c971098b464736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063595882b3116100b857806395d89b411161007c57806395d89b4114610363578063a22cb46514610381578063b88d4fde1461039d578063c87b56dd146103b9578063e985e9c5146103e9578063f2fde38b1461041957610142565b8063595882b3146102d15780636352211e146102db57806370a082311461030b578063715018a61461033b5780638da5cb5b1461034557610142565b806323b872dd1161010a57806323b872dd146101ff5780632f745c591461021b57806332cb6b0c1461024b57806342842e0e146102695780634f6ccce71461028557806355f804b3146102b557610142565b806301ffc9a71461014757806306fdde0314610177578063081812fc14610195578063095ea7b3146101c557806318160ddd146101e1575b600080fd5b610161600480360381019061015c9190612679565b610435565b60405161016e9190612f49565b60405180910390f35b61017f6104af565b60405161018c9190612f64565b60405180910390f35b6101af60048036038101906101aa919061270c565b610541565b6040516101bc9190612ee2565b60405180910390f35b6101df60048036038101906101da919061263d565b6105c6565b005b6101e96106de565b6040516101f691906131c6565b60405180910390f35b61021960048036038101906102149190612537565b6106eb565b005b6102356004803603810190610230919061263d565b61074b565b60405161024291906131c6565b60405180910390f35b6102536107f0565b60405161026091906131c6565b60405180910390f35b610283600480360381019061027e9190612537565b6107f5565b005b61029f600480360381019061029a919061270c565b610815565b6040516102ac91906131c6565b60405180910390f35b6102cf60048036038101906102ca91906126cb565b6108ac565b005b6102d9610942565b005b6102f560048036038101906102f0919061270c565b610a41565b6040516103029190612ee2565b60405180910390f35b610325600480360381019061032091906124d2565b610af3565b60405161033291906131c6565b60405180910390f35b610343610bab565b005b61034d610ce8565b60405161035a9190612ee2565b60405180910390f35b61036b610d12565b6040516103789190612f64565b60405180910390f35b61039b60048036038101906103969190612601565b610da4565b005b6103b760048036038101906103b29190612586565b610f25565b005b6103d360048036038101906103ce919061270c565b610f87565b6040516103e09190612f64565b60405180910390f35b61040360048036038101906103fe91906124fb565b610fe6565b6040516104109190612f49565b60405180910390f35b610433600480360381019061042e91906124d2565b61107a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782611226565b5b9050919050565b6060600080546104be90613426565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea90613426565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b600061054c82611308565b61058b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058290613106565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105d182610a41565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063990613166565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610661611374565b73ffffffffffffffffffffffffffffffffffffffff161480610690575061068f8161068a611374565b610fe6565b5b6106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690613086565b60405180910390fd5b6106d9838361137c565b505050565b6000600880549050905090565b6106fc6106f6611374565b82611435565b61073b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073290613186565b60405180910390fd5b610746838383611513565b505050565b600061075683610af3565b8210610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90612f86565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601481565b61081083838360405180602001604052806000815250610f25565b505050565b600061081f6106de565b8210610860576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610857906131a6565b60405180910390fd5b6008828154811061089a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6108b4611374565b73ffffffffffffffffffffffffffffffffffffffff166108d2610ce8565b73ffffffffffffffffffffffffffffffffffffffff1614610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091f90613126565b60405180910390fd5b80600b908051906020019061093e9291906122f6565b5050565b61094a611374565b73ffffffffffffffffffffffffffffffffffffffff16610968610ce8565b73ffffffffffffffffffffffffffffffffffffffff16146109be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b590613126565b60405180910390fd5b60146109c86106de565b10610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613046565b60405180910390fd5b60005b6014811015610a3e576000610a1e6106de565b9050610a2a338261176f565b508080610a3690613458565b915050610a0b565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae1906130c6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b906130a6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bb3611374565b73ffffffffffffffffffffffffffffffffffffffff16610bd1610ce8565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613126565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d2190613426565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4d90613426565b8015610d9a5780601f10610d6f57610100808354040283529160200191610d9a565b820191906000526020600020905b815481529060010190602001808311610d7d57829003601f168201915b5050505050905090565b610dac611374565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190613026565b60405180910390fd5b8060056000610e27611374565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ed4611374565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f199190612f49565b60405180910390a35050565b610f36610f30611374565b83611435565b610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613186565b60405180910390fd5b610f818484848461178d565b50505050565b60606000610f936117e9565b90506000815111610fb35760405180602001604052806000815250610fde565b80610fbd8461187b565b604051602001610fce929190612eb3565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611082611374565b73ffffffffffffffffffffffffffffffffffffffff166110a0610ce8565b73ffffffffffffffffffffffffffffffffffffffff16146110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613126565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90612fc6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112f157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611301575061130082611a28565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113ef83610a41565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061144082611308565b61147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613066565b60405180910390fd5b600061148a83610a41565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114f957508373ffffffffffffffffffffffffffffffffffffffff166114e184610541565b73ffffffffffffffffffffffffffffffffffffffff16145b8061150a57506115098185610fe6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661153382610a41565b73ffffffffffffffffffffffffffffffffffffffff1614611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613146565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090613006565b60405180910390fd5b611604838383611a92565b61160f60008261137c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461165f919061333c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b691906132b5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611789828260405180602001604052806000815250611ba6565b5050565b611798848484611513565b6117a484848484611c01565b6117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90612fa6565b60405180910390fd5b50505050565b6060600b80546117f890613426565b80601f016020809104026020016040519081016040528092919081815260200182805461182490613426565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b5050505050905090565b606060008214156118c3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a23565b600082905060005b600082146118f55780806118de90613458565b915050600a826118ee919061330b565b91506118cb565b60008167ffffffffffffffff811115611937577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156119695781602001600182028036833780820191505090505b5090505b60008514611a1c57600182611982919061333c565b9150600a8561199191906134a1565b603061199d91906132b5565b60f81b8183815181106119d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a15919061330b565b945061196d565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a9d838383611d98565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ae057611adb81611d9d565b611b1f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b1e57611b1d8382611de6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6257611b5d81611f53565b611ba1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ba057611b9f8282612096565b5b5b505050565b611bb08383612115565b611bbd6000848484611c01565b611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf390612fa6565b60405180910390fd5b505050565b6000611c228473ffffffffffffffffffffffffffffffffffffffff166122e3565b15611d8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c4b611374565b8786866040518563ffffffff1660e01b8152600401611c6d9493929190612efd565b602060405180830381600087803b158015611c8757600080fd5b505af1925050508015611cb857506040513d601f19601f82011682018060405250810190611cb591906126a2565b60015b611d3b573d8060008114611ce8576040519150601f19603f3d011682016040523d82523d6000602084013e611ced565b606091505b50600081511415611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90612fa6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611d90565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611df384610af3565b611dfd919061333c565b9050600060076000848152602001908152602001600020549050818114611ee2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611f67919061333c565b9050600060096000848152602001908152602001600020549050600060088381548110611fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612005577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061207a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006120a183610af3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c906130e6565b60405180910390fd5b61218e81611308565b156121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c590612fe6565b60405180910390fd5b6121da60008383611a92565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222a91906132b5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461230290613426565b90600052602060002090601f016020900481019282612324576000855561236b565b82601f1061233d57805160ff191683800117855561236b565b8280016001018555821561236b579182015b8281111561236a57825182559160200191906001019061234f565b5b509050612378919061237c565b5090565b5b8082111561239557600081600090555060010161237d565b5090565b60006123ac6123a784613212565b6131e1565b9050828152602081018484840111156123c457600080fd5b6123cf8482856133e4565b509392505050565b60006123ea6123e584613242565b6131e1565b90508281526020810184848401111561240257600080fd5b61240d8482856133e4565b509392505050565b6000813590506124248161359f565b92915050565b600081359050612439816135b6565b92915050565b60008135905061244e816135cd565b92915050565b600081519050612463816135cd565b92915050565b600082601f83011261247a57600080fd5b813561248a848260208601612399565b91505092915050565b600082601f8301126124a457600080fd5b81356124b48482602086016123d7565b91505092915050565b6000813590506124cc816135e4565b92915050565b6000602082840312156124e457600080fd5b60006124f284828501612415565b91505092915050565b6000806040838503121561250e57600080fd5b600061251c85828601612415565b925050602061252d85828601612415565b9150509250929050565b60008060006060848603121561254c57600080fd5b600061255a86828701612415565b935050602061256b86828701612415565b925050604061257c868287016124bd565b9150509250925092565b6000806000806080858703121561259c57600080fd5b60006125aa87828801612415565b94505060206125bb87828801612415565b93505060406125cc878288016124bd565b925050606085013567ffffffffffffffff8111156125e957600080fd5b6125f587828801612469565b91505092959194509250565b6000806040838503121561261457600080fd5b600061262285828601612415565b92505060206126338582860161242a565b9150509250929050565b6000806040838503121561265057600080fd5b600061265e85828601612415565b925050602061266f858286016124bd565b9150509250929050565b60006020828403121561268b57600080fd5b60006126998482850161243f565b91505092915050565b6000602082840312156126b457600080fd5b60006126c284828501612454565b91505092915050565b6000602082840312156126dd57600080fd5b600082013567ffffffffffffffff8111156126f757600080fd5b61270384828501612493565b91505092915050565b60006020828403121561271e57600080fd5b600061272c848285016124bd565b91505092915050565b61273e81613370565b82525050565b61274d81613382565b82525050565b600061275e82613272565b6127688185613288565b93506127788185602086016133f3565b6127818161358e565b840191505092915050565b60006127978261327d565b6127a18185613299565b93506127b18185602086016133f3565b6127ba8161358e565b840191505092915050565b60006127d08261327d565b6127da81856132aa565b93506127ea8185602086016133f3565b80840191505092915050565b6000612803602b83613299565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612869603283613299565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006128cf602683613299565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612935601c83613299565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612975602483613299565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006129db601983613299565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612a1b601a83613299565b91507f416c6c204e4654732068617665206265656e206d696e7465642e0000000000006000830152602082019050919050565b6000612a5b602c83613299565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612ac1603883613299565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612b27602a83613299565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b8d602983613299565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bf3602083613299565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612c33602c83613299565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c996005836132aa565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612cd9602083613299565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d19602983613299565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d7f602183613299565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612de5603183613299565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000612e4b602c83613299565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b612ead816133da565b82525050565b6000612ebf82856127c5565b9150612ecb82846127c5565b9150612ed682612c8c565b91508190509392505050565b6000602082019050612ef76000830184612735565b92915050565b6000608082019050612f126000830187612735565b612f1f6020830186612735565b612f2c6040830185612ea4565b8181036060830152612f3e8184612753565b905095945050505050565b6000602082019050612f5e6000830184612744565b92915050565b60006020820190508181036000830152612f7e818461278c565b905092915050565b60006020820190508181036000830152612f9f816127f6565b9050919050565b60006020820190508181036000830152612fbf8161285c565b9050919050565b60006020820190508181036000830152612fdf816128c2565b9050919050565b60006020820190508181036000830152612fff81612928565b9050919050565b6000602082019050818103600083015261301f81612968565b9050919050565b6000602082019050818103600083015261303f816129ce565b9050919050565b6000602082019050818103600083015261305f81612a0e565b9050919050565b6000602082019050818103600083015261307f81612a4e565b9050919050565b6000602082019050818103600083015261309f81612ab4565b9050919050565b600060208201905081810360008301526130bf81612b1a565b9050919050565b600060208201905081810360008301526130df81612b80565b9050919050565b600060208201905081810360008301526130ff81612be6565b9050919050565b6000602082019050818103600083015261311f81612c26565b9050919050565b6000602082019050818103600083015261313f81612ccc565b9050919050565b6000602082019050818103600083015261315f81612d0c565b9050919050565b6000602082019050818103600083015261317f81612d72565b9050919050565b6000602082019050818103600083015261319f81612dd8565b9050919050565b600060208201905081810360008301526131bf81612e3e565b9050919050565b60006020820190506131db6000830184612ea4565b92915050565b6000604051905081810181811067ffffffffffffffff821117156132085761320761355f565b5b8060405250919050565b600067ffffffffffffffff82111561322d5761322c61355f565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561325d5761325c61355f565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132c0826133da565b91506132cb836133da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613300576132ff6134d2565b5b828201905092915050565b6000613316826133da565b9150613321836133da565b92508261333157613330613501565b5b828204905092915050565b6000613347826133da565b9150613352836133da565b925082821015613365576133646134d2565b5b828203905092915050565b600061337b826133ba565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134115780820151818401526020810190506133f6565b83811115613420576000848401525b50505050565b6000600282049050600182168061343e57607f821691505b6020821081141561345257613451613530565b5b50919050565b6000613463826133da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613496576134956134d2565b5b600182019050919050565b60006134ac826133da565b91506134b7836133da565b9250826134c7576134c6613501565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6135a881613370565b81146135b357600080fd5b50565b6135bf81613382565b81146135ca57600080fd5b50565b6135d68161338e565b81146135e157600080fd5b50565b6135ed816133da565b81146135f857600080fd5b5056fea264697066735822122033ad9d8249618c7c565ce9993a24cbdde57b79d6f060f019ab961f4c971098b464736f6c63430008000033

Deployed Bytecode Sourcemap

49759:1063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34256:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21461:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22921:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22458:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34909:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34577:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49887:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35099:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50162:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50541:278;;;:::i;:::-;;21155:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20885:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42128:148;;;:::i;:::-;;41477:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21630:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23214:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24409:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50279:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23580:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42431:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34256:237;34358:4;34397:35;34382:50;;;:11;:50;;;;:103;;;;34449:36;34473:11;34449:23;:36::i;:::-;34382:103;34375:110;;34256:237;;;:::o;21461:100::-;21515:13;21548:5;21541:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21461:100;:::o;22921:221::-;22997:7;23025:16;23033:7;23025;:16::i;:::-;23017:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23110:15;:24;23126:7;23110:24;;;;;;;;;;;;;;;;;;;;;23103:31;;22921:221;;;:::o;22458:397::-;22539:13;22555:23;22570:7;22555:14;:23::i;:::-;22539:39;;22603:5;22597:11;;:2;:11;;;;22589:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22683:5;22667:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22692:37;22709:5;22716:12;:10;:12::i;:::-;22692:16;:37::i;:::-;22667:62;22659:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22826:21;22835:2;22839:7;22826:8;:21::i;:::-;22458:397;;;:::o;34909:113::-;34970:7;34997:10;:17;;;;34990:24;;34909:113;:::o;23811:305::-;23972:41;23991:12;:10;:12::i;:::-;24005:7;23972:18;:41::i;:::-;23964:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24080:28;24090:4;24096:2;24100:7;24080:9;:28::i;:::-;23811:305;;;:::o;34577:256::-;34674:7;34710:23;34727:5;34710:16;:23::i;:::-;34702:5;:31;34694:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34799:12;:19;34812:5;34799:19;;;;;;;;;;;;;;;:26;34819:5;34799:26;;;;;;;;;;;;34792:33;;34577:256;;;;:::o;49887:39::-;49924:2;49887:39;:::o;24187:151::-;24291:39;24308:4;24314:2;24318:7;24291:39;;;;;;;;;;;;:16;:39::i;:::-;24187:151;;;:::o;35099:233::-;35174:7;35210:30;:28;:30::i;:::-;35202:5;:38;35194:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35307:10;35318:5;35307:17;;;;;;;;;;;;;;;;;;;;;;;;35300:24;;35099:233;;;:::o;50162:109::-;41708:12;:10;:12::i;:::-;41697:23;;:7;:5;:7::i;:::-;:23;;;41689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50255:8:::1;50236:16;:27;;;;;;;;;;;;:::i;:::-;;50162:109:::0;:::o;50541:278::-;41708:12;:10;:12::i;:::-;41697:23;;:7;:5;:7::i;:::-;:23;;;41689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49924:2:::1;50596:13;:11;:13::i;:::-;:26;50588:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50669:9;50664:148;49924:2;50684:1;:14;50664:148;;;50720:17;50740:13;:11;:13::i;:::-;50720:33;;50768:32;50778:10;50790:9;50768;:32::i;:::-;50664:148;50700:3;;;;;:::i;:::-;;;;50664:148;;;;50541:278::o:0;21155:239::-;21227:7;21247:13;21263:7;:16;21271:7;21263:16;;;;;;;;;;;;;;;;;;;;;21247:32;;21315:1;21298:19;;:5;:19;;;;21290:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21381:5;21374:12;;;21155:239;;;:::o;20885:208::-;20957:7;21002:1;20985:19;;:5;:19;;;;20977:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21069:9;:16;21079:5;21069:16;;;;;;;;;;;;;;;;21062:23;;20885:208;;;:::o;42128:148::-;41708:12;:10;:12::i;:::-;41697:23;;:7;:5;:7::i;:::-;:23;;;41689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42235:1:::1;42198:40;;42219:6;;;;;;;;;;;42198:40;;;;;;;;;;;;42266:1;42249:6;;:19;;;;;;;;;;;;;;;;;;42128:148::o:0;41477:87::-;41523:7;41550:6;;;;;;;;;;;41543:13;;41477:87;:::o;21630:104::-;21686:13;21719:7;21712:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21630:104;:::o;23214:295::-;23329:12;:10;:12::i;:::-;23317:24;;:8;:24;;;;23309:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23429:8;23384:18;:32;23403:12;:10;:12::i;:::-;23384:32;;;;;;;;;;;;;;;:42;23417:8;23384:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23482:8;23453:48;;23468:12;:10;:12::i;:::-;23453:48;;;23492:8;23453:48;;;;;;:::i;:::-;;;;;;;;23214:295;;:::o;24409:285::-;24541:41;24560:12;:10;:12::i;:::-;24574:7;24541:18;:41::i;:::-;24533:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24647:39;24661:4;24667:2;24671:7;24680:5;24647:13;:39::i;:::-;24409:285;;;;:::o;50279:254::-;50352:13;50378:21;50402:10;:8;:10::i;:::-;50378:34;;50454:1;50436:7;50430:21;:25;:95;;;;;;;;;;;;;;;;;50482:7;50491:18;:7;:16;:18::i;:::-;50465:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50430:95;50423:102;;;50279:254;;;:::o;23580:164::-;23677:4;23701:18;:25;23720:5;23701:25;;;;;;;;;;;;;;;:35;23727:8;23701:35;;;;;;;;;;;;;;;;;;;;;;;;;23694:42;;23580:164;;;;:::o;42431:244::-;41708:12;:10;:12::i;:::-;41697:23;;:7;:5;:7::i;:::-;:23;;;41689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42540:1:::1;42520:22;;:8;:22;;;;42512:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42630:8;42601:38;;42622:6;;;;;;;;;;;42601:38;;;;;;;;;;;;42659:8;42650:6;;:17;;;;;;;;;;;;;;;;;;42431:244:::0;:::o;20529:292::-;20631:4;20670:25;20655:40;;;:11;:40;;;;:105;;;;20727:33;20712:48;;;:11;:48;;;;20655:105;:158;;;;20777:36;20801:11;20777:23;:36::i;:::-;20655:158;20648:165;;20529:292;;;:::o;26161:127::-;26226:4;26278:1;26250:30;;:7;:16;26258:7;26250:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26243:37;;26161:127;;;:::o;15849:98::-;15902:7;15929:10;15922:17;;15849:98;:::o;30038:174::-;30140:2;30113:15;:24;30129:7;30113:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30196:7;30192:2;30158:46;;30167:23;30182:7;30167:14;:23::i;:::-;30158:46;;;;;;;;;;;;30038:174;;:::o;26455:348::-;26548:4;26573:16;26581:7;26573;:16::i;:::-;26565:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26649:13;26665:23;26680:7;26665:14;:23::i;:::-;26649:39;;26718:5;26707:16;;:7;:16;;;:51;;;;26751:7;26727:31;;:20;26739:7;26727:11;:20::i;:::-;:31;;;26707:51;:87;;;;26762:32;26779:5;26786:7;26762:16;:32::i;:::-;26707:87;26699:96;;;26455:348;;;;:::o;29376:544::-;29501:4;29474:31;;:23;29489:7;29474:14;:23::i;:::-;:31;;;29466:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29584:1;29570:16;;:2;:16;;;;29562:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:39;29661:4;29667:2;29671:7;29640:20;:39::i;:::-;29744:29;29761:1;29765:7;29744:8;:29::i;:::-;29805:1;29786:9;:15;29796:4;29786:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29834:1;29817:9;:13;29827:2;29817:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29865:2;29846:7;:16;29854:7;29846:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29904:7;29900:2;29885:27;;29894:4;29885:27;;;;;;;;;;;;29376:544;;;:::o;27145:110::-;27221:26;27231:2;27235:7;27221:26;;;;;;;;;;;;:9;:26::i;:::-;27145:110;;:::o;25576:272::-;25690:28;25700:4;25706:2;25710:7;25690:9;:28::i;:::-;25737:48;25760:4;25766:2;25770:7;25779:5;25737:22;:48::i;:::-;25729:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25576:272;;;;:::o;50037:117::-;50097:13;50130:16;50123:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50037:117;:::o;16498:723::-;16554:13;16784:1;16775:5;:10;16771:53;;;16802:10;;;;;;;;;;;;;;;;;;;;;16771:53;16834:12;16849:5;16834:20;;16865:14;16890:78;16905:1;16897:4;:9;16890:78;;16923:8;;;;;:::i;:::-;;;;16954:2;16946:10;;;;;:::i;:::-;;;16890:78;;;16978:19;17010:6;17000:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16978:39;;17028:154;17044:1;17035:5;:10;17028:154;;17072:1;17062:11;;;;;:::i;:::-;;;17139:2;17131:5;:10;;;;:::i;:::-;17118:2;:24;;;;:::i;:::-;17105:39;;17088:6;17095;17088:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17168:2;17159:11;;;;;:::i;:::-;;;17028:154;;;17206:6;17192:21;;;;;16498:723;;;;:::o;19047:157::-;19132:4;19171:25;19156:40;;;:11;:40;;;;19149:47;;19047:157;;;:::o;35945:555::-;36055:45;36082:4;36088:2;36092:7;36055:26;:45::i;:::-;36133:1;36117:18;;:4;:18;;;36113:187;;;36152:40;36184:7;36152:31;:40::i;:::-;36113:187;;;36222:2;36214:10;;:4;:10;;;36210:90;;36241:47;36274:4;36280:7;36241:32;:47::i;:::-;36210:90;36113:187;36328:1;36314:16;;:2;:16;;;36310:183;;;36347:45;36384:7;36347:36;:45::i;:::-;36310:183;;;36420:4;36414:10;;:2;:10;;;36410:83;;36441:40;36469:2;36473:7;36441:27;:40::i;:::-;36410:83;36310:183;35945:555;;;:::o;27482:250::-;27578:18;27584:2;27588:7;27578:5;:18::i;:::-;27615:54;27646:1;27650:2;27654:7;27663:5;27615:22;:54::i;:::-;27607:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27482:250;;;:::o;30777:843::-;30898:4;30924:15;:2;:13;;;:15::i;:::-;30920:693;;;30976:2;30960:36;;;30997:12;:10;:12::i;:::-;31011:4;31017:7;31026:5;30960:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30956:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31223:1;31206:6;:13;:18;31202:341;;;31249:60;;;;;;;;;;:::i;:::-;;;;;;;;31202:341;31493:6;31487:13;31478:6;31474:2;31470:15;31463:38;30956:602;31093:45;;;31083:55;;;:6;:55;;;;31076:62;;;;;30920:693;31597:4;31590:11;;30777:843;;;;;;;:::o;32233:93::-;;;;:::o;37223:164::-;37327:10;:17;;;;37300:15;:24;37316:7;37300:24;;;;;;;;;;;:44;;;;37355:10;37371:7;37355:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37223:164;:::o;38014:988::-;38280:22;38330:1;38305:22;38322:4;38305:16;:22::i;:::-;:26;;;;:::i;:::-;38280:51;;38342:18;38363:17;:26;38381:7;38363:26;;;;;;;;;;;;38342:47;;38510:14;38496:10;:28;38492:328;;38541:19;38563:12;:18;38576:4;38563:18;;;;;;;;;;;;;;;:34;38582:14;38563:34;;;;;;;;;;;;38541:56;;38647:11;38614:12;:18;38627:4;38614:18;;;;;;;;;;;;;;;:30;38633:10;38614:30;;;;;;;;;;;:44;;;;38764:10;38731:17;:30;38749:11;38731:30;;;;;;;;;;;:43;;;;38492:328;;38916:17;:26;38934:7;38916:26;;;;;;;;;;;38909:33;;;38960:12;:18;38973:4;38960:18;;;;;;;;;;;;;;;:34;38979:14;38960:34;;;;;;;;;;;38953:41;;;38014:988;;;;:::o;39297:1079::-;39550:22;39595:1;39575:10;:17;;;;:21;;;;:::i;:::-;39550:46;;39607:18;39628:15;:24;39644:7;39628:24;;;;;;;;;;;;39607:45;;39979:19;40001:10;40012:14;40001:26;;;;;;;;;;;;;;;;;;;;;;;;39979:48;;40065:11;40040:10;40051;40040:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40176:10;40145:15;:28;40161:11;40145:28;;;;;;;;;;;:41;;;;40317:15;:24;40333:7;40317:24;;;;;;;;;;;40310:31;;;40352:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39297:1079;;;;:::o;36801:221::-;36886:14;36903:20;36920:2;36903:16;:20::i;:::-;36886:37;;36961:7;36934:12;:16;36947:2;36934:16;;;;;;;;;;;;;;;:24;36951:6;36934:24;;;;;;;;;;;:34;;;;37008:6;36979:17;:26;36997:7;36979:26;;;;;;;;;;;:35;;;;36801:221;;;:::o;28068:382::-;28162:1;28148:16;;:2;:16;;;;28140:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28221:16;28229:7;28221;:16::i;:::-;28220:17;28212:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28283:45;28312:1;28316:2;28320:7;28283:20;:45::i;:::-;28358:1;28341:9;:13;28351:2;28341:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28389:2;28370:7;:16;28378:7;28370:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28434:7;28430:2;28409:33;;28426:1;28409:33;;;;;;;;;;;;28068:382;;:::o;7972:422::-;8032:4;8240:12;8351:7;8339:20;8331:28;;8385:1;8378:4;:8;8371:15;;;7972:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:118::-;6171:24;6189:5;6171:24;:::i;:::-;6166:3;6159:37;6149:53;;:::o;6208:109::-;6289:21;6304:5;6289:21;:::i;:::-;6284:3;6277:34;6267:50;;:::o;6323:360::-;;6437:38;6469:5;6437:38;:::i;:::-;6491:70;6554:6;6549:3;6491:70;:::i;:::-;6484:77;;6570:52;6615:6;6610:3;6603:4;6596:5;6592:16;6570:52;:::i;:::-;6647:29;6669:6;6647:29;:::i;:::-;6642:3;6638:39;6631:46;;6413:270;;;;;:::o;6689:364::-;;6805:39;6838:5;6805:39;:::i;:::-;6860:71;6924:6;6919:3;6860:71;:::i;:::-;6853:78;;6940:52;6985:6;6980:3;6973:4;6966:5;6962:16;6940:52;:::i;:::-;7017:29;7039:6;7017:29;:::i;:::-;7012:3;7008:39;7001:46;;6781:272;;;;;:::o;7059:377::-;;7193:39;7226:5;7193:39;:::i;:::-;7248:89;7330:6;7325:3;7248:89;:::i;:::-;7241:96;;7346:52;7391:6;7386:3;7379:4;7372:5;7368:16;7346:52;:::i;:::-;7423:6;7418:3;7414:16;7407:23;;7169:267;;;;;:::o;7442:375::-;;7605:67;7669:2;7664:3;7605:67;:::i;:::-;7598:74;;7702:34;7698:1;7693:3;7689:11;7682:55;7768:13;7763:2;7758:3;7754:12;7747:35;7808:2;7803:3;7799:12;7792:19;;7588:229;;;:::o;7823:382::-;;7986:67;8050:2;8045:3;7986:67;:::i;:::-;7979:74;;8083:34;8079:1;8074:3;8070:11;8063:55;8149:20;8144:2;8139:3;8135:12;8128:42;8196:2;8191:3;8187:12;8180:19;;7969:236;;;:::o;8211:370::-;;8374:67;8438:2;8433:3;8374:67;:::i;:::-;8367:74;;8471:34;8467:1;8462:3;8458:11;8451:55;8537:8;8532:2;8527:3;8523:12;8516:30;8572:2;8567:3;8563:12;8556:19;;8357:224;;;:::o;8587:326::-;;8750:67;8814:2;8809:3;8750:67;:::i;:::-;8743:74;;8847:30;8843:1;8838:3;8834:11;8827:51;8904:2;8899:3;8895:12;8888:19;;8733:180;;;:::o;8919:368::-;;9082:67;9146:2;9141:3;9082:67;:::i;:::-;9075:74;;9179:34;9175:1;9170:3;9166:11;9159:55;9245:6;9240:2;9235:3;9231:12;9224:28;9278:2;9273:3;9269:12;9262:19;;9065:222;;;:::o;9293:323::-;;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9553:27;9549:1;9544:3;9540:11;9533:48;9607:2;9602:3;9598:12;9591:19;;9439:177;;;:::o;9622:324::-;;9785:67;9849:2;9844:3;9785:67;:::i;:::-;9778:74;;9882:28;9878:1;9873:3;9869:11;9862:49;9937:2;9932:3;9928:12;9921:19;;9768:178;;;:::o;9952:376::-;;10115:67;10179:2;10174:3;10115:67;:::i;:::-;10108:74;;10212:34;10208:1;10203:3;10199:11;10192:55;10278:14;10273:2;10268:3;10264:12;10257:36;10319:2;10314:3;10310:12;10303:19;;10098:230;;;:::o;10334:388::-;;10497:67;10561:2;10556:3;10497:67;:::i;:::-;10490:74;;10594:34;10590:1;10585:3;10581:11;10574:55;10660:26;10655:2;10650:3;10646:12;10639:48;10713:2;10708:3;10704:12;10697:19;;10480:242;;;:::o;10728:374::-;;10891:67;10955:2;10950:3;10891:67;:::i;:::-;10884:74;;10988:34;10984:1;10979:3;10975:11;10968:55;11054:12;11049:2;11044:3;11040:12;11033:34;11093:2;11088:3;11084:12;11077:19;;10874:228;;;:::o;11108:373::-;;11271:67;11335:2;11330:3;11271:67;:::i;:::-;11264:74;;11368:34;11364:1;11359:3;11355:11;11348:55;11434:11;11429:2;11424:3;11420:12;11413:33;11472:2;11467:3;11463:12;11456:19;;11254:227;;;:::o;11487:330::-;;11650:67;11714:2;11709:3;11650:67;:::i;:::-;11643:74;;11747:34;11743:1;11738:3;11734:11;11727:55;11808:2;11803:3;11799:12;11792:19;;11633:184;;;:::o;11823:376::-;;11986:67;12050:2;12045:3;11986:67;:::i;:::-;11979:74;;12083:34;12079:1;12074:3;12070:11;12063:55;12149:14;12144:2;12139:3;12135:12;12128:36;12190:2;12185:3;12181:12;12174:19;;11969:230;;;:::o;12205:337::-;;12386:84;12468:1;12463:3;12386:84;:::i;:::-;12379:91;;12500:7;12496:1;12491:3;12487:11;12480:28;12534:1;12529:3;12525:11;12518:18;;12369:173;;;:::o;12548:330::-;;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12808:34;12804:1;12799:3;12795:11;12788:55;12869:2;12864:3;12860:12;12853:19;;12694:184;;;:::o;12884:373::-;;13047:67;13111:2;13106:3;13047:67;:::i;:::-;13040:74;;13144:34;13140:1;13135:3;13131:11;13124:55;13210:11;13205:2;13200:3;13196:12;13189:33;13248:2;13243:3;13239:12;13232:19;;13030:227;;;:::o;13263:365::-;;13426:67;13490:2;13485:3;13426:67;:::i;:::-;13419:74;;13523:34;13519:1;13514:3;13510:11;13503:55;13589:3;13584:2;13579:3;13575:12;13568:25;13619:2;13614:3;13610:12;13603:19;;13409:219;;;:::o;13634:381::-;;13797:67;13861:2;13856:3;13797:67;:::i;:::-;13790:74;;13894:34;13890:1;13885:3;13881:11;13874:55;13960:19;13955:2;13950:3;13946:12;13939:41;14006:2;14001:3;13997:12;13990:19;;13780:235;;;:::o;14021:376::-;;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14281:34;14277:1;14272:3;14268:11;14261:55;14347:14;14342:2;14337:3;14333:12;14326:36;14388:2;14383:3;14379:12;14372:19;;14167:230;;;:::o;14403:118::-;14490:24;14508:5;14490:24;:::i;:::-;14485:3;14478:37;14468:53;;:::o;14527:701::-;;14830:95;14921:3;14912:6;14830:95;:::i;:::-;14823:102;;14942:95;15033:3;15024:6;14942:95;:::i;:::-;14935:102;;15054:148;15198:3;15054:148;:::i;:::-;15047:155;;15219:3;15212:10;;14812:416;;;;;:::o;15234:222::-;;15365:2;15354:9;15350:18;15342:26;;15378:71;15446:1;15435:9;15431:17;15422:6;15378:71;:::i;:::-;15332:124;;;;:::o;15462:640::-;;15695:3;15684:9;15680:19;15672:27;;15709:71;15777:1;15766:9;15762:17;15753:6;15709:71;:::i;:::-;15790:72;15858:2;15847:9;15843:18;15834:6;15790:72;:::i;:::-;15872;15940:2;15929:9;15925:18;15916:6;15872:72;:::i;:::-;15991:9;15985:4;15981:20;15976:2;15965:9;15961:18;15954:48;16019:76;16090:4;16081:6;16019:76;:::i;:::-;16011:84;;15662:440;;;;;;;:::o;16108:210::-;;16233:2;16222:9;16218:18;16210:26;;16246:65;16308:1;16297:9;16293:17;16284:6;16246:65;:::i;:::-;16200:118;;;;:::o;16324:313::-;;16475:2;16464:9;16460:18;16452:26;;16524:9;16518:4;16514:20;16510:1;16499:9;16495:17;16488:47;16552:78;16625:4;16616:6;16552:78;:::i;:::-;16544:86;;16442:195;;;;:::o;16643:419::-;;16847:2;16836:9;16832:18;16824:26;;16896:9;16890:4;16886:20;16882:1;16871:9;16867:17;16860:47;16924:131;17050:4;16924:131;:::i;:::-;16916:139;;16814:248;;;:::o;17068:419::-;;17272:2;17261:9;17257:18;17249:26;;17321:9;17315:4;17311:20;17307:1;17296:9;17292:17;17285:47;17349:131;17475:4;17349:131;:::i;:::-;17341:139;;17239:248;;;:::o;17493:419::-;;17697:2;17686:9;17682:18;17674:26;;17746:9;17740:4;17736:20;17732:1;17721:9;17717:17;17710:47;17774:131;17900:4;17774:131;:::i;:::-;17766:139;;17664:248;;;:::o;17918:419::-;;18122:2;18111:9;18107:18;18099:26;;18171:9;18165:4;18161:20;18157:1;18146:9;18142:17;18135:47;18199:131;18325:4;18199:131;:::i;:::-;18191:139;;18089:248;;;:::o;18343:419::-;;18547:2;18536:9;18532:18;18524:26;;18596:9;18590:4;18586:20;18582:1;18571:9;18567:17;18560:47;18624:131;18750:4;18624:131;:::i;:::-;18616:139;;18514:248;;;:::o;18768:419::-;;18972:2;18961:9;18957:18;18949:26;;19021:9;19015:4;19011:20;19007:1;18996:9;18992:17;18985:47;19049:131;19175:4;19049:131;:::i;:::-;19041:139;;18939:248;;;:::o;19193:419::-;;19397:2;19386:9;19382:18;19374:26;;19446:9;19440:4;19436:20;19432:1;19421:9;19417:17;19410:47;19474:131;19600:4;19474:131;:::i;:::-;19466:139;;19364:248;;;:::o;19618:419::-;;19822:2;19811:9;19807:18;19799:26;;19871:9;19865:4;19861:20;19857:1;19846:9;19842:17;19835:47;19899:131;20025:4;19899:131;:::i;:::-;19891:139;;19789:248;;;:::o;20043:419::-;;20247:2;20236:9;20232:18;20224:26;;20296:9;20290:4;20286:20;20282:1;20271:9;20267:17;20260:47;20324:131;20450:4;20324:131;:::i;:::-;20316:139;;20214:248;;;:::o;20468:419::-;;20672:2;20661:9;20657:18;20649:26;;20721:9;20715:4;20711:20;20707:1;20696:9;20692:17;20685:47;20749:131;20875:4;20749:131;:::i;:::-;20741:139;;20639:248;;;:::o;20893:419::-;;21097:2;21086:9;21082:18;21074:26;;21146:9;21140:4;21136:20;21132:1;21121:9;21117:17;21110:47;21174:131;21300:4;21174:131;:::i;:::-;21166:139;;21064:248;;;:::o;21318:419::-;;21522:2;21511:9;21507:18;21499:26;;21571:9;21565:4;21561:20;21557:1;21546:9;21542:17;21535:47;21599:131;21725:4;21599:131;:::i;:::-;21591:139;;21489:248;;;:::o;21743:419::-;;21947:2;21936:9;21932:18;21924:26;;21996:9;21990:4;21986:20;21982:1;21971:9;21967:17;21960:47;22024:131;22150:4;22024:131;:::i;:::-;22016:139;;21914:248;;;:::o;22168:419::-;;22372:2;22361:9;22357:18;22349:26;;22421:9;22415:4;22411:20;22407:1;22396:9;22392:17;22385:47;22449:131;22575:4;22449:131;:::i;:::-;22441:139;;22339:248;;;:::o;22593:419::-;;22797:2;22786:9;22782:18;22774:26;;22846:9;22840:4;22836:20;22832:1;22821:9;22817:17;22810:47;22874:131;23000:4;22874:131;:::i;:::-;22866:139;;22764:248;;;:::o;23018:419::-;;23222:2;23211:9;23207:18;23199:26;;23271:9;23265:4;23261:20;23257:1;23246:9;23242:17;23235:47;23299:131;23425:4;23299:131;:::i;:::-;23291:139;;23189:248;;;:::o;23443:419::-;;23647:2;23636:9;23632:18;23624:26;;23696:9;23690:4;23686:20;23682:1;23671:9;23667:17;23660:47;23724:131;23850:4;23724:131;:::i;:::-;23716:139;;23614:248;;;:::o;23868:419::-;;24072:2;24061:9;24057:18;24049:26;;24121:9;24115:4;24111:20;24107:1;24096:9;24092:17;24085:47;24149:131;24275:4;24149:131;:::i;:::-;24141:139;;24039:248;;;:::o;24293:222::-;;24424:2;24413:9;24409:18;24401:26;;24437:71;24505:1;24494:9;24490:17;24481:6;24437:71;:::i;:::-;24391:124;;;;:::o;24521:283::-;;24587:2;24581:9;24571:19;;24629:4;24621:6;24617:17;24736:6;24724:10;24721:22;24700:18;24688:10;24685:34;24682:62;24679:2;;;24747:18;;:::i;:::-;24679:2;24787:10;24783:2;24776:22;24561:243;;;;:::o;24810:331::-;;24961:18;24953:6;24950:30;24947:2;;;24983:18;;:::i;:::-;24947:2;25068:4;25064:9;25057:4;25049:6;25045:17;25041:33;25033:41;;25129:4;25123;25119:15;25111:23;;24876:265;;;:::o;25147:332::-;;25299:18;25291:6;25288:30;25285:2;;;25321:18;;:::i;:::-;25285:2;25406:4;25402:9;25395:4;25387:6;25383:17;25379:33;25371:41;;25467:4;25461;25457:15;25449:23;;25214:265;;;:::o;25485:98::-;;25570:5;25564:12;25554:22;;25543:40;;;:::o;25589:99::-;;25675:5;25669:12;25659:22;;25648:40;;;:::o;25694:168::-;;25811:6;25806:3;25799:19;25851:4;25846:3;25842:14;25827:29;;25789:73;;;;:::o;25868:169::-;;25986:6;25981:3;25974:19;26026:4;26021:3;26017:14;26002:29;;25964:73;;;;:::o;26043:148::-;;26182:3;26167:18;;26157:34;;;;:::o;26197:305::-;;26256:20;26274:1;26256:20;:::i;:::-;26251:25;;26290:20;26308:1;26290:20;:::i;:::-;26285:25;;26444:1;26376:66;26372:74;26369:1;26366:81;26363:2;;;26450:18;;:::i;:::-;26363:2;26494:1;26491;26487:9;26480:16;;26241:261;;;;:::o;26508:185::-;;26565:20;26583:1;26565:20;:::i;:::-;26560:25;;26599:20;26617:1;26599:20;:::i;:::-;26594:25;;26638:1;26628:2;;26643:18;;:::i;:::-;26628:2;26685:1;26682;26678:9;26673:14;;26550:143;;;;:::o;26699:191::-;;26759:20;26777:1;26759:20;:::i;:::-;26754:25;;26793:20;26811:1;26793:20;:::i;:::-;26788:25;;26832:1;26829;26826:8;26823:2;;;26837:18;;:::i;:::-;26823:2;26882:1;26879;26875:9;26867:17;;26744:146;;;;:::o;26896:96::-;;26962:24;26980:5;26962:24;:::i;:::-;26951:35;;26941:51;;;:::o;26998:90::-;;27075:5;27068:13;27061:21;27050:32;;27040:48;;;:::o;27094:149::-;;27170:66;27163:5;27159:78;27148:89;;27138:105;;;:::o;27249:126::-;;27326:42;27319:5;27315:54;27304:65;;27294:81;;;:::o;27381:77::-;;27447:5;27436:16;;27426:32;;;:::o;27464:154::-;27548:6;27543:3;27538;27525:30;27610:1;27601:6;27596:3;27592:16;27585:27;27515:103;;;:::o;27624:307::-;27692:1;27702:113;27716:6;27713:1;27710:13;27702:113;;;27801:1;27796:3;27792:11;27786:18;27782:1;27777:3;27773:11;27766:39;27738:2;27735:1;27731:10;27726:15;;27702:113;;;27833:6;27830:1;27827:13;27824:2;;;27913:1;27904:6;27899:3;27895:16;27888:27;27824:2;27673:258;;;;:::o;27937:320::-;;28018:1;28012:4;28008:12;27998:22;;28065:1;28059:4;28055:12;28086:18;28076:2;;28142:4;28134:6;28130:17;28120:27;;28076:2;28204;28196:6;28193:14;28173:18;28170:38;28167:2;;;28223:18;;:::i;:::-;28167:2;27988:269;;;;:::o;28263:233::-;;28325:24;28343:5;28325:24;:::i;:::-;28316:33;;28371:66;28364:5;28361:77;28358:2;;;28441:18;;:::i;:::-;28358:2;28488:1;28481:5;28477:13;28470:20;;28306:190;;;:::o;28502:176::-;;28551:20;28569:1;28551:20;:::i;:::-;28546:25;;28585:20;28603:1;28585:20;:::i;:::-;28580:25;;28624:1;28614:2;;28629:18;;:::i;:::-;28614:2;28670:1;28667;28663:9;28658:14;;28536:142;;;;:::o;28684:180::-;28732:77;28729:1;28722:88;28829:4;28826:1;28819:15;28853:4;28850:1;28843:15;28870:180;28918:77;28915:1;28908:88;29015:4;29012:1;29005:15;29039:4;29036:1;29029:15;29056:180;29104:77;29101:1;29094:88;29201:4;29198:1;29191:15;29225:4;29222:1;29215:15;29242:180;29290:77;29287:1;29280:88;29387:4;29384:1;29377:15;29411:4;29408:1;29401:15;29428:102;;29520:2;29516:7;29511:2;29504:5;29500:14;29496:28;29486:38;;29476:54;;;:::o;29536:122::-;29609:24;29627:5;29609:24;:::i;:::-;29602:5;29599:35;29589:2;;29648:1;29645;29638:12;29589:2;29579:79;:::o;29664:116::-;29734:21;29749:5;29734:21;:::i;:::-;29727:5;29724:32;29714:2;;29770:1;29767;29760:12;29714:2;29704:76;:::o;29786:120::-;29858:23;29875:5;29858:23;:::i;:::-;29851:5;29848:34;29838:2;;29896:1;29893;29886:12;29838:2;29828:78;:::o;29912:122::-;29985:24;30003:5;29985:24;:::i;:::-;29978:5;29975:35;29965:2;;30024:1;30021;30014:12;29965:2;29955:79;:::o

Swarm Source

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