ETH Price: $2,613.82 (+0.65%)

Token

Kama Chameleons: Chapter One (KAMA)
 

Overview

Max Total Supply

3,750 KAMA

Holders

201

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ndixon.eth
Balance
5 KAMA
0x129551cf72217561d02679c0ad7a9810d525b605
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

After years of being experimented on, genetically modified, and grown in test tubes a power surge took place in the Project Kama Amazon Jungle black site. All 3,750 test subjects escaped, forming their own society shrouded in mystery deep in the world’s largest jungle.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
KamaClanNFTContract

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-12
*/

// Sources flattened with hardhat v2.9.0 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

// OpenZeppelin Contracts v4.4.1 (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/[email protected]

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

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]

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

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]

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

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;







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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}


// File @openzeppelin/contracts/access/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/cryptography/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}


// File contracts/extensions/custom/KamaClan.sol


pragma solidity ^0.8.4;




//
// Built by https://nft-generator.art
//
contract KamaClanNFTContract is ERC721Burnable, Ownable {
  string internal baseUri;

  uint256 public cost = 0.06 ether;
  uint32 public maxPerMint = 10;
  uint32 public maxPerWallet = 10;
  uint32 public supply = 0;
  uint32 public totalSupply = 0;
  bool public open = false;
  bool public presaleOpen = false;
  bytes32 private merkleRoot;
  mapping(address => uint256) internal addressMintedMap;
  bool public revealed = false;
  string internal uriNotRevealed;

  address[] private payouts = [
    0x460Fd5059E7301680fA53E63bbBF7272E643e89C,
    0xdDedd728562d9dda2e0E93C604D0f57457DFBA3E,
    0x2e22Bc2153F01965D45e17eB3D48CDFbDB03868f,
    0x09A0B72A38D71E5eC1B2d2957EC839a2c25CBA91,
    0xB4123E0d6C09f47b678F17eB34Fab9522f5b19e2
  ];
  uint256[] private payoutSplit = [25, 50, 60, 150, 715];

  constructor(
    string memory _uri,
    string memory _name,
    string memory _symbol,
    uint32 _totalSupply,
    uint256 _cost,
    bool _open
  ) ERC721(_name, _symbol) {
    baseUri = _uri;
    totalSupply = _totalSupply;
    cost = _cost;
    open = _open;
  }

  // ------ Owner Only ------

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setOpen(bool _open) public onlyOwner {
    open = _open;
  }

  function setMaxPerWallet(uint32 _max) public onlyOwner {
    maxPerWallet = _max;
  }

  function setMaxPerMint(uint32 _max) public onlyOwner {
    maxPerMint = _max;
  }

  function setPresaleOpen(bool _open) public onlyOwner {
    presaleOpen = _open;
  }

  function setPreSaleAddresses(bytes32 root) public onlyOwner {
    merkleRoot = root;
  }

  function setUnrevealedURI(string memory _uri) public onlyOwner {
    uriNotRevealed = _uri;
  }

  function reveal() public onlyOwner {
    revealed = true;
  }

  function airdrop(address[] calldata to) public onlyOwner {
    for (uint32 i = 0; i < to.length; i++) {
      require(1 + supply <= totalSupply, "Limit reached");
      _safeMint(to[i], ++supply, "");
    }
  }

  function withdraw() public payable onlyOwner {
    uint256 balance = address(this).balance;
    uint256 size = payouts.length;

    for (uint256 i = 0; i < size; i++) {
      (bool success, ) = payable(payouts[i]).call{
        value: (balance * payoutSplit[i]) / 1000
      }("");
      require(success);
    }
  }

  function batchBurn(uint256[] memory token_ids) public {
    for (uint256 i = 0; i < token_ids.length; i++) {
      burn(token_ids[i]);
    }
  }

  // ------ Mint! ------

  function mint(uint32 count) external payable preMintChecks(count) {
    require(open == true, "Mint not open");
    performMint(count);
  }

  function presaleMint(uint32 count, bytes32[] calldata proof)
    external
    payable
    preMintChecks(count)
  {
    require(presaleOpen, "Presale not open");
    require(merkleRoot != "", "Presale not ready");
    require(
      MerkleProof.verify(
        proof,
        merkleRoot,
        keccak256(abi.encodePacked(msg.sender))
      ),
      "Not a presale member"
    );

    performMint(count);
  }

  function performMint(uint32 count) internal {
    for (uint32 i = 0; i < count; i++) {
      _safeMint(msg.sender, ++supply, "");
    }
    addressMintedMap[msg.sender] += count;
  }

  // ------ Read ------

  function tokenURI(uint256 _tokenId)
    public
    view
    override
    returns (string memory)
  {
    require(_tokenId <= supply, "Not minted yet");
    if (revealed == false) {
      return
        string(
          abi.encodePacked(uriNotRevealed, Strings.toString(_tokenId), ".json")
        );
    }

    return
      string(abi.encodePacked(baseUri, Strings.toString(_tokenId), ".json"));
  }

  // ------ Modifiers ------

  modifier preMintChecks(uint32 count) {
    require(count > 0, "Mint at least one.");
    require(count < maxPerMint + 1, "Max mint reached.");
    require(msg.value >= cost * count, "Not enough fund.");
    require(supply + count < totalSupply + 1, "Mint sold out");
    require(
      addressMintedMap[msg.sender] + count <= maxPerWallet,
      "Max total mint reached"
    );
    _;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint32","name":"_totalSupply","type":"uint32"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"token_ids","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","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":"maxPerMint","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_max","type":"uint32"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setPreSaleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setPresaleOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

66d529ae9e860000600855600980546001600160901b031916640a0000000a179055600c805460ff1916905561012060405273460fd5059e7301680fa53e63bbbf7272e643e89c608090815273ddedd728562d9dda2e0e93c604d0f57457dfba3e60a052732e22bc2153f01965d45e17eb3d48cdfbdb03868f60c0527309a0b72a38d71e5ec1b2d2957ec839a2c25cba9160e05273b4123e0d6c09f47b678f17eb34fab9522f5b19e261010052620000bc90600e90600562000238565b506040805160a0810182526019815260326020820152603c91810191909152609660608201526102cb6080820152620000fa90600f906005620002a2565b503480156200010857600080fd5b5060405162002fba38038062002fba8339810160408190526200012b9162000443565b84518590859062000144906000906020850190620002e6565b5080516200015a906001906020840190620002e6565b5050506200017762000171620001e260201b60201c565b620001e6565b85516200018c906007906020890190620002e6565b5060098054600893909355901515600160801b0260ff60801b1963ffffffff9094166c01000000000000000000000000029390931664ffffffffff60601b1990921691909117919091179055506200055b915050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000290579160200282015b828111156200029057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000259565b506200029e92915062000363565b5090565b82805482825590600052602060002090810192821562000290579160200282015b8281111562000290578251829061ffff16905591602001919060010190620002c3565b828054620002f49062000508565b90600052602060002090601f01602090048101928262000318576000855562000290565b82601f106200033357805160ff191683800117855562000290565b8280016001018555821562000290579182015b828111156200029057825182559160200191906001019062000346565b5b808211156200029e576000815560010162000364565b805180151581146200038b57600080fd5b919050565b600082601f830112620003a1578081fd5b81516001600160401b0380821115620003be57620003be62000545565b604051601f8301601f19908116603f01168101908282118183101715620003e957620003e962000545565b8160405283815260209250868385880101111562000405578485fd5b8491505b8382101562000428578582018301518183018401529082019062000409565b838211156200043957848385830101525b9695505050505050565b60008060008060008060c087890312156200045c578182fd5b86516001600160401b038082111562000473578384fd5b620004818a838b0162000390565b9750602089015191508082111562000497578384fd5b620004a58a838b0162000390565b96506040890151915080821115620004bb578384fd5b50620004ca89828a0162000390565b945050606087015163ffffffff81168114620004e4578283fd5b60808801519093509150620004fc60a088016200037a565b90509295509295509295565b600181811c908216806200051d57607f821691505b602082108114156200053f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612a4f806200056b6000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063b88d4fde116100ab578063f2fde38b1161006f578063f2fde38b1461066d578063f5b966211461068d578063f8048d8f146106ad578063fcfff16f146106cd578063fe2c7fee146106ee57600080fd5b8063b88d4fde146105a3578063bee6348a146105c3578063c87b56dd146105e4578063dc8e92ea14610604578063e985e9c51461062457600080fd5b806395d89b41116100f257806395d89b41146105265780639e5666cd1461053b578063a22cb4651461055b578063a475b5dd1461057b578063a71bbebe1461059057600080fd5b806370a08231146104b3578063715018a6146104d3578063729ad39e146104e85780638da5cb5b1461050857600080fd5b80633006b543116101b1578063453c231011610175578063453c231014610417578063507e094f1461043c57806351830227146104595780636352211e146104735780636fdca5e01461049357600080fd5b80633006b5431461038f5780633ccfd60b146103af57806342842e0e146103b757806342966c68146103d757806344a0d68a146103f757600080fd5b8063081812fc116101f8578063081812fc146102cf578063095ea7b31461030757806313faede61461032757806318160ddd1461034b57806323b872dd1461036f57600080fd5b806301ffc9a71461022a5780630364d22a1461025f578063047fc9aa1461027457806306fdde03146102ad575b600080fd5b34801561023657600080fd5b5061024a610245366004612539565b61070e565b60405190151581526020015b60405180910390f35b61027261026d3660046125d1565b610760565b005b34801561028057600080fd5b5060095461029890600160401b900463ffffffff1681565b60405163ffffffff9091168152602001610256565b3480156102b957600080fd5b506102c2610ab5565b6040516102569190612761565b3480156102db57600080fd5b506102ef6102ea366004612521565b610b47565b6040516001600160a01b039091168152602001610256565b34801561031357600080fd5b506102726103223660046123f6565b610bdc565b34801561033357600080fd5b5061033d60085481565b604051908152602001610256565b34801561035757600080fd5b5060095461029890600160601b900463ffffffff1681565b34801561037b57600080fd5b5061027261038a366004612319565b610cf2565b34801561039b57600080fd5b506102726103aa3660046125b7565b610d24565b610272610d76565b3480156103c357600080fd5b506102726103d2366004612319565b610e94565b3480156103e357600080fd5b506102726103f2366004612521565b610eaf565b34801561040357600080fd5b50610272610412366004612521565b610f29565b34801561042357600080fd5b5060095461029890640100000000900463ffffffff1681565b34801561044857600080fd5b506009546102989063ffffffff1681565b34801561046557600080fd5b50600c5461024a9060ff1681565b34801561047f57600080fd5b506102ef61048e366004612521565b610f58565b34801561049f57600080fd5b506102726104ae366004612507565b610fcf565b3480156104bf57600080fd5b5061033d6104ce3660046122c6565b611017565b3480156104df57600080fd5b5061027261109e565b3480156104f457600080fd5b5061027261050336600461241f565b6110d4565b34801561051457600080fd5b506006546001600160a01b03166102ef565b34801561053257600080fd5b506102c261121e565b34801561054757600080fd5b50610272610556366004612521565b61122d565b34801561056757600080fd5b506102726105763660046123cd565b61125c565b34801561058757600080fd5b5061027261126b565b61027261059e3660046125b7565b6112a4565b3480156105af57600080fd5b506102726105be366004612354565b6114f5565b3480156105cf57600080fd5b5060095461024a90600160881b900460ff1681565b3480156105f057600080fd5b506102c26105ff366004612521565b611527565b34801561061057600080fd5b5061027261061f36600461245f565b6115c1565b34801561063057600080fd5b5061024a61063f3660046122e7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067957600080fd5b506102726106883660046122c6565b61160f565b34801561069957600080fd5b506102726106a8366004612507565b6116a7565b3480156106b957600080fd5b506102726106c83660046125b7565b6116ef565b3480156106d957600080fd5b5060095461024a90600160801b900460ff1681565b3480156106fa57600080fd5b50610272610709366004612571565b611735565b60006001600160e01b031982166380ac58cd60e01b148061073f57506001600160e01b03198216635b5e139f60e01b145b8061075a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b8260008163ffffffff16116107b15760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064015b60405180910390fd5b6009546107c59063ffffffff166001612895565b63ffffffff168163ffffffff16106108135760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b60448201526064016107a8565b8063ffffffff1660085461082791906128d1565b3410156108695760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b60448201526064016107a8565b60095461088490600160601b900463ffffffff166001612895565b60095463ffffffff918216916108a4918491600160401b90910416612895565b63ffffffff16106108e75760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b60448201526064016107a8565b600954336000908152600b602052604090205463ffffffff640100000000909204821691610918919084169061287d565b111561095f5760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b60448201526064016107a8565b600954600160881b900460ff166109ab5760405162461bcd60e51b815260206004820152601060248201526f283932b9b0b632903737ba1037b832b760811b60448201526064016107a8565b600a546109ee5760405162461bcd60e51b815260206004820152601160248201527050726573616c65206e6f7420726561647960781b60448201526064016107a8565b610a6383838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120611772565b610aa65760405162461bcd60e51b81526020600482015260146024820152732737ba103090383932b9b0b6329036b2b6b132b960611b60448201526064016107a8565b610aaf84611788565b50505050565b606060008054610ac490612933565b80601f0160208091040260200160405190810160405280929190818152602001828054610af090612933565b8015610b3d5780601f10610b1257610100808354040283529160200191610b3d565b820191906000526020600020905b815481529060010190602001808311610b2057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bc05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a8565b506000908152600460205260409020546001600160a01b031690565b6000610be782610f58565b9050806001600160a01b0316836001600160a01b03161415610c555760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107a8565b336001600160a01b0382161480610c715750610c71813361063f565b610ce35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107a8565b610ced8383611801565b505050565b610cfd335b8261186f565b610d195760405162461bcd60e51b81526004016107a8906127fb565b610ced838383611966565b6006546001600160a01b03163314610d4e5760405162461bcd60e51b81526004016107a8906127c6565b6009805463ffffffff9092166401000000000267ffffffff0000000019909216919091179055565b6006546001600160a01b03163314610da05760405162461bcd60e51b81526004016107a8906127c6565b600e54479060005b81811015610ced576000600e8281548110610dd357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216916103e8919085908110610e1257634e487b7160e01b600052603260045260246000fd5b906000526020600020015486610e2891906128d1565b610e3291906128bd565b604051600081818185875af1925050503d8060008114610e6e576040519150601f19603f3d011682016040523d82523d6000602084013e610e73565b606091505b5050905080610e8157600080fd5b5080610e8c8161296e565b915050610da8565b610ced838383604051806020016040528060008152506114f5565b610eb833610cf7565b610f1d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016107a8565b610f2681611b06565b50565b6006546001600160a01b03163314610f535760405162461bcd60e51b81526004016107a8906127c6565b600855565b6000818152600260205260408120546001600160a01b03168061075a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107a8565b6006546001600160a01b03163314610ff95760405162461bcd60e51b81526004016107a8906127c6565b60098054911515600160801b0260ff60801b19909216919091179055565b60006001600160a01b0382166110825760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107a8565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146110c85760405162461bcd60e51b81526004016107a8906127c6565b6110d26000611ba1565b565b6006546001600160a01b031633146110fe5760405162461bcd60e51b81526004016107a8906127c6565b60005b63ffffffff8116821115610ced5760095463ffffffff600160601b820481169161113591600160401b909104166001612895565b63ffffffff1611156111795760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b60448201526064016107a8565b61120c83838363ffffffff168181106111a257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111b791906122c6565b600980546008906111d490600160401b900463ffffffff16612989565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250611bf3565b8061121681612989565b915050611101565b606060018054610ac490612933565b6006546001600160a01b031633146112575760405162461bcd60e51b81526004016107a8906127c6565b600a55565b611267338383611c26565b5050565b6006546001600160a01b031633146112955760405162461bcd60e51b81526004016107a8906127c6565b600c805460ff19166001179055565b8060008163ffffffff16116112f05760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064016107a8565b6009546113049063ffffffff166001612895565b63ffffffff168163ffffffff16106113525760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b60448201526064016107a8565b8063ffffffff1660085461136691906128d1565b3410156113a85760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b60448201526064016107a8565b6009546113c390600160601b900463ffffffff166001612895565b60095463ffffffff918216916113e3918491600160401b90910416612895565b63ffffffff16106114265760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b60448201526064016107a8565b600954336000908152600b602052604090205463ffffffff640100000000909204821691611457919084169061287d565b111561149e5760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b60448201526064016107a8565b600954600160801b900460ff1615156001146114ec5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b60448201526064016107a8565b61126782611788565b6114ff338361186f565b61151b5760405162461bcd60e51b81526004016107a8906127fb565b610aaf84848484611cf5565b600954606090600160401b900463ffffffff1682111561157a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd081b5a5b9d1959081e595d60921b60448201526064016107a8565b600c5460ff166115b657600d61158f83611d28565b6040516020016115a092919061266a565b6040516020818303038152906040529050919050565b600761158f83611d28565b60005b8151811015611267576115fd8282815181106115f057634e487b7160e01b600052603260045260246000fd5b6020026020010151610eaf565b806116078161296e565b9150506115c4565b6006546001600160a01b031633146116395760405162461bcd60e51b81526004016107a8906127c6565b6001600160a01b03811661169e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a8565b610f2681611ba1565b6006546001600160a01b031633146116d15760405162461bcd60e51b81526004016107a8906127c6565b60098054911515600160881b0260ff60881b19909216919091179055565b6006546001600160a01b031633146117195760405162461bcd60e51b81526004016107a8906127c6565b6009805463ffffffff191663ffffffff92909216919091179055565b6006546001600160a01b0316331461175f5760405162461bcd60e51b81526004016107a8906127c6565b805161126790600d90602084019061214b565b60008261177f8584611e42565b14949350505050565b60005b8163ffffffff168163ffffffff1610156117d3576117c1336009600881819054906101000a900463ffffffff166111d490612989565b806117cb81612989565b91505061178b565b50336000908152600b60205260408120805463ffffffff841692906117f990849061287d565b909155505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183682610f58565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a8565b60006118f383610f58565b9050806001600160a01b0316846001600160a01b0316148061192e5750836001600160a01b031661192384610b47565b6001600160a01b0316145b8061195e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661197982610f58565b6001600160a01b0316146119e15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107a8565b6001600160a01b038216611a435760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107a8565b611a4e600082611801565b6001600160a01b0383166000908152600360205260408120805460019290611a779084906128f0565b90915550506001600160a01b0382166000908152600360205260408120805460019290611aa590849061287d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611b1182610f58565b9050611b1e600083611801565b6001600160a01b0381166000908152600360205260408120805460019290611b479084906128f0565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611bfd8383611efc565b611c0a600084848461203e565b610ced5760405162461bcd60e51b81526004016107a890612774565b816001600160a01b0316836001600160a01b03161415611c885760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d00848484611966565b611d0c8484848461203e565b610aaf5760405162461bcd60e51b81526004016107a890612774565b606081611d4c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d765780611d608161296e565b9150611d6f9050600a836128bd565b9150611d50565b60008167ffffffffffffffff811115611d9f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611dc9576020820181803683370190505b5090505b841561195e57611dde6001836128f0565b9150611deb600a866129ad565b611df690603061287d565b60f81b818381518110611e1957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e3b600a866128bd565b9450611dcd565b600081815b8451811015611ef4576000858281518110611e7257634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611eb4576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611ee1565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611eec8161296e565b915050611e47565b509392505050565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107a8565b6000818152600260205260409020546001600160a01b031615611fb75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107a8565b6001600160a01b0382166000908152600360205260408120805460019290611fe090849061287d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561214057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612082903390899088908890600401612724565b602060405180830381600087803b15801561209c57600080fd5b505af19250505080156120cc575060408051601f3d908101601f191682019092526120c991810190612555565b60015b612126573d8080156120fa576040519150601f19603f3d011682016040523d82523d6000602084013e6120ff565b606091505b50805161211e5760405162461bcd60e51b81526004016107a890612774565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061195e565b506001949350505050565b82805461215790612933565b90600052602060002090601f01602090048101928261217957600085556121bf565b82601f1061219257805160ff19168380011785556121bf565b828001600101855582156121bf579182015b828111156121bf5782518255916020019190600101906121a4565b506121cb9291506121cf565b5090565b5b808211156121cb57600081556001016121d0565b600067ffffffffffffffff8311156121fe576121fe6129ed565b612211601f8401601f191660200161284c565b905082815283838301111561222557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461225357600080fd5b919050565b60008083601f840112612269578182fd5b50813567ffffffffffffffff811115612280578182fd5b6020830191508360208260051b850101111561229b57600080fd5b9250929050565b8035801515811461225357600080fd5b803563ffffffff8116811461225357600080fd5b6000602082840312156122d7578081fd5b6122e08261223c565b9392505050565b600080604083850312156122f9578081fd5b6123028361223c565b91506123106020840161223c565b90509250929050565b60008060006060848603121561232d578081fd5b6123368461223c565b92506123446020850161223c565b9150604084013590509250925092565b60008060008060808587031215612369578081fd5b6123728561223c565b93506123806020860161223c565b925060408501359150606085013567ffffffffffffffff8111156123a2578182fd5b8501601f810187136123b2578182fd5b6123c1878235602084016121e4565b91505092959194509250565b600080604083850312156123df578182fd5b6123e88361223c565b9150612310602084016122a2565b60008060408385031215612408578182fd5b6124118361223c565b946020939093013593505050565b60008060208385031215612431578182fd5b823567ffffffffffffffff811115612447578283fd5b61245385828601612258565b90969095509350505050565b60006020808385031215612471578182fd5b823567ffffffffffffffff80821115612488578384fd5b818501915085601f83011261249b578384fd5b8135818111156124ad576124ad6129ed565b8060051b91506124be84830161284c565b8181528481019084860184860187018a10156124d8578788fd5b8795505b838610156124fa5780358352600195909501949186019186016124dc565b5098975050505050505050565b600060208284031215612518578081fd5b6122e0826122a2565b600060208284031215612532578081fd5b5035919050565b60006020828403121561254a578081fd5b81356122e081612a03565b600060208284031215612566578081fd5b81516122e081612a03565b600060208284031215612582578081fd5b813567ffffffffffffffff811115612598578182fd5b8201601f810184136125a8578182fd5b61195e848235602084016121e4565b6000602082840312156125c8578081fd5b6122e0826122b2565b6000806000604084860312156125e5578081fd5b6125ee846122b2565b9250602084013567ffffffffffffffff811115612609578182fd5b61261586828701612258565b9497909650939450505050565b6000815180845261263a816020860160208601612907565b601f01601f19169290920160200192915050565b60008151612660818560208601612907565b9290920192915050565b600080845482600182811c91508083168061268657607f831692505b60208084108214156126a657634e487b7160e01b87526022600452602487fd5b8180156126ba57600181146126cb576126f7565b60ff198616895284890196506126f7565b60008b815260209020885b868110156126ef5781548b8201529085019083016126d6565b505084890196505b50505050505061271b61270a828661264e565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061275790830184612622565b9695505050505050565b6020815260006122e06020830184612622565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612875576128756129ed565b604052919050565b60008219821115612890576128906129c1565b500190565b600063ffffffff8083168185168083038211156128b4576128b46129c1565b01949350505050565b6000826128cc576128cc6129d7565b500490565b60008160001904831182151516156128eb576128eb6129c1565b500290565b600082821015612902576129026129c1565b500390565b60005b8381101561292257818101518382015260200161290a565b83811115610aaf5750506000910152565b600181811c9082168061294757607f821691505b6020821081141561296857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612982576129826129c1565b5060010190565b600063ffffffff808316818114156129a3576129a36129c1565b6001019392505050565b6000826129bc576129bc6129d7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f2657600080fdfea26469706673582212209bea25ab9063d81265077971d286ce07b6cb997c06796ecf7e493337256b125b64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000ea600000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656962787569657668336b78367068636c346164657a7063326f7832667765736861626d79326836677137647776327633367878746d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4b616d61204368616d656c656f6e733a2043686170746572204f6e650000000000000000000000000000000000000000000000000000000000000000000000044b414d4100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c806370a0823111610123578063b88d4fde116100ab578063f2fde38b1161006f578063f2fde38b1461066d578063f5b966211461068d578063f8048d8f146106ad578063fcfff16f146106cd578063fe2c7fee146106ee57600080fd5b8063b88d4fde146105a3578063bee6348a146105c3578063c87b56dd146105e4578063dc8e92ea14610604578063e985e9c51461062457600080fd5b806395d89b41116100f257806395d89b41146105265780639e5666cd1461053b578063a22cb4651461055b578063a475b5dd1461057b578063a71bbebe1461059057600080fd5b806370a08231146104b3578063715018a6146104d3578063729ad39e146104e85780638da5cb5b1461050857600080fd5b80633006b543116101b1578063453c231011610175578063453c231014610417578063507e094f1461043c57806351830227146104595780636352211e146104735780636fdca5e01461049357600080fd5b80633006b5431461038f5780633ccfd60b146103af57806342842e0e146103b757806342966c68146103d757806344a0d68a146103f757600080fd5b8063081812fc116101f8578063081812fc146102cf578063095ea7b31461030757806313faede61461032757806318160ddd1461034b57806323b872dd1461036f57600080fd5b806301ffc9a71461022a5780630364d22a1461025f578063047fc9aa1461027457806306fdde03146102ad575b600080fd5b34801561023657600080fd5b5061024a610245366004612539565b61070e565b60405190151581526020015b60405180910390f35b61027261026d3660046125d1565b610760565b005b34801561028057600080fd5b5060095461029890600160401b900463ffffffff1681565b60405163ffffffff9091168152602001610256565b3480156102b957600080fd5b506102c2610ab5565b6040516102569190612761565b3480156102db57600080fd5b506102ef6102ea366004612521565b610b47565b6040516001600160a01b039091168152602001610256565b34801561031357600080fd5b506102726103223660046123f6565b610bdc565b34801561033357600080fd5b5061033d60085481565b604051908152602001610256565b34801561035757600080fd5b5060095461029890600160601b900463ffffffff1681565b34801561037b57600080fd5b5061027261038a366004612319565b610cf2565b34801561039b57600080fd5b506102726103aa3660046125b7565b610d24565b610272610d76565b3480156103c357600080fd5b506102726103d2366004612319565b610e94565b3480156103e357600080fd5b506102726103f2366004612521565b610eaf565b34801561040357600080fd5b50610272610412366004612521565b610f29565b34801561042357600080fd5b5060095461029890640100000000900463ffffffff1681565b34801561044857600080fd5b506009546102989063ffffffff1681565b34801561046557600080fd5b50600c5461024a9060ff1681565b34801561047f57600080fd5b506102ef61048e366004612521565b610f58565b34801561049f57600080fd5b506102726104ae366004612507565b610fcf565b3480156104bf57600080fd5b5061033d6104ce3660046122c6565b611017565b3480156104df57600080fd5b5061027261109e565b3480156104f457600080fd5b5061027261050336600461241f565b6110d4565b34801561051457600080fd5b506006546001600160a01b03166102ef565b34801561053257600080fd5b506102c261121e565b34801561054757600080fd5b50610272610556366004612521565b61122d565b34801561056757600080fd5b506102726105763660046123cd565b61125c565b34801561058757600080fd5b5061027261126b565b61027261059e3660046125b7565b6112a4565b3480156105af57600080fd5b506102726105be366004612354565b6114f5565b3480156105cf57600080fd5b5060095461024a90600160881b900460ff1681565b3480156105f057600080fd5b506102c26105ff366004612521565b611527565b34801561061057600080fd5b5061027261061f36600461245f565b6115c1565b34801561063057600080fd5b5061024a61063f3660046122e7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561067957600080fd5b506102726106883660046122c6565b61160f565b34801561069957600080fd5b506102726106a8366004612507565b6116a7565b3480156106b957600080fd5b506102726106c83660046125b7565b6116ef565b3480156106d957600080fd5b5060095461024a90600160801b900460ff1681565b3480156106fa57600080fd5b50610272610709366004612571565b611735565b60006001600160e01b031982166380ac58cd60e01b148061073f57506001600160e01b03198216635b5e139f60e01b145b8061075a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b8260008163ffffffff16116107b15760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064015b60405180910390fd5b6009546107c59063ffffffff166001612895565b63ffffffff168163ffffffff16106108135760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b60448201526064016107a8565b8063ffffffff1660085461082791906128d1565b3410156108695760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b60448201526064016107a8565b60095461088490600160601b900463ffffffff166001612895565b60095463ffffffff918216916108a4918491600160401b90910416612895565b63ffffffff16106108e75760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b60448201526064016107a8565b600954336000908152600b602052604090205463ffffffff640100000000909204821691610918919084169061287d565b111561095f5760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b60448201526064016107a8565b600954600160881b900460ff166109ab5760405162461bcd60e51b815260206004820152601060248201526f283932b9b0b632903737ba1037b832b760811b60448201526064016107a8565b600a546109ee5760405162461bcd60e51b815260206004820152601160248201527050726573616c65206e6f7420726561647960781b60448201526064016107a8565b610a6383838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120611772565b610aa65760405162461bcd60e51b81526020600482015260146024820152732737ba103090383932b9b0b6329036b2b6b132b960611b60448201526064016107a8565b610aaf84611788565b50505050565b606060008054610ac490612933565b80601f0160208091040260200160405190810160405280929190818152602001828054610af090612933565b8015610b3d5780601f10610b1257610100808354040283529160200191610b3d565b820191906000526020600020905b815481529060010190602001808311610b2057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bc05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a8565b506000908152600460205260409020546001600160a01b031690565b6000610be782610f58565b9050806001600160a01b0316836001600160a01b03161415610c555760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107a8565b336001600160a01b0382161480610c715750610c71813361063f565b610ce35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107a8565b610ced8383611801565b505050565b610cfd335b8261186f565b610d195760405162461bcd60e51b81526004016107a8906127fb565b610ced838383611966565b6006546001600160a01b03163314610d4e5760405162461bcd60e51b81526004016107a8906127c6565b6009805463ffffffff9092166401000000000267ffffffff0000000019909216919091179055565b6006546001600160a01b03163314610da05760405162461bcd60e51b81526004016107a8906127c6565b600e54479060005b81811015610ced576000600e8281548110610dd357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600f80546001600160a01b03909216916103e8919085908110610e1257634e487b7160e01b600052603260045260246000fd5b906000526020600020015486610e2891906128d1565b610e3291906128bd565b604051600081818185875af1925050503d8060008114610e6e576040519150601f19603f3d011682016040523d82523d6000602084013e610e73565b606091505b5050905080610e8157600080fd5b5080610e8c8161296e565b915050610da8565b610ced838383604051806020016040528060008152506114f5565b610eb833610cf7565b610f1d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016107a8565b610f2681611b06565b50565b6006546001600160a01b03163314610f535760405162461bcd60e51b81526004016107a8906127c6565b600855565b6000818152600260205260408120546001600160a01b03168061075a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107a8565b6006546001600160a01b03163314610ff95760405162461bcd60e51b81526004016107a8906127c6565b60098054911515600160801b0260ff60801b19909216919091179055565b60006001600160a01b0382166110825760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107a8565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146110c85760405162461bcd60e51b81526004016107a8906127c6565b6110d26000611ba1565b565b6006546001600160a01b031633146110fe5760405162461bcd60e51b81526004016107a8906127c6565b60005b63ffffffff8116821115610ced5760095463ffffffff600160601b820481169161113591600160401b909104166001612895565b63ffffffff1611156111795760405162461bcd60e51b815260206004820152600d60248201526c131a5b5a5d081c995858da1959609a1b60448201526064016107a8565b61120c83838363ffffffff168181106111a257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111b791906122c6565b600980546008906111d490600160401b900463ffffffff16612989565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff1660405180602001604052806000815250611bf3565b8061121681612989565b915050611101565b606060018054610ac490612933565b6006546001600160a01b031633146112575760405162461bcd60e51b81526004016107a8906127c6565b600a55565b611267338383611c26565b5050565b6006546001600160a01b031633146112955760405162461bcd60e51b81526004016107a8906127c6565b600c805460ff19166001179055565b8060008163ffffffff16116112f05760405162461bcd60e51b815260206004820152601260248201527126b4b73a1030ba103632b0b9ba1037b7329760711b60448201526064016107a8565b6009546113049063ffffffff166001612895565b63ffffffff168163ffffffff16106113525760405162461bcd60e51b815260206004820152601160248201527026b0bc1036b4b73a103932b0b1b432b21760791b60448201526064016107a8565b8063ffffffff1660085461136691906128d1565b3410156113a85760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b410333ab7321760811b60448201526064016107a8565b6009546113c390600160601b900463ffffffff166001612895565b60095463ffffffff918216916113e3918491600160401b90910416612895565b63ffffffff16106114265760405162461bcd60e51b815260206004820152600d60248201526c135a5b9d081cdbdb19081bdd5d609a1b60448201526064016107a8565b600954336000908152600b602052604090205463ffffffff640100000000909204821691611457919084169061287d565b111561149e5760405162461bcd60e51b815260206004820152601660248201527513585e081d1bdd185b081b5a5b9d081c995858da195960521b60448201526064016107a8565b600954600160801b900460ff1615156001146114ec5760405162461bcd60e51b815260206004820152600d60248201526c26b4b73a103737ba1037b832b760991b60448201526064016107a8565b61126782611788565b6114ff338361186f565b61151b5760405162461bcd60e51b81526004016107a8906127fb565b610aaf84848484611cf5565b600954606090600160401b900463ffffffff1682111561157a5760405162461bcd60e51b815260206004820152600e60248201526d139bdd081b5a5b9d1959081e595d60921b60448201526064016107a8565b600c5460ff166115b657600d61158f83611d28565b6040516020016115a092919061266a565b6040516020818303038152906040529050919050565b600761158f83611d28565b60005b8151811015611267576115fd8282815181106115f057634e487b7160e01b600052603260045260246000fd5b6020026020010151610eaf565b806116078161296e565b9150506115c4565b6006546001600160a01b031633146116395760405162461bcd60e51b81526004016107a8906127c6565b6001600160a01b03811661169e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a8565b610f2681611ba1565b6006546001600160a01b031633146116d15760405162461bcd60e51b81526004016107a8906127c6565b60098054911515600160881b0260ff60881b19909216919091179055565b6006546001600160a01b031633146117195760405162461bcd60e51b81526004016107a8906127c6565b6009805463ffffffff191663ffffffff92909216919091179055565b6006546001600160a01b0316331461175f5760405162461bcd60e51b81526004016107a8906127c6565b805161126790600d90602084019061214b565b60008261177f8584611e42565b14949350505050565b60005b8163ffffffff168163ffffffff1610156117d3576117c1336009600881819054906101000a900463ffffffff166111d490612989565b806117cb81612989565b91505061178b565b50336000908152600b60205260408120805463ffffffff841692906117f990849061287d565b909155505050565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061183682610f58565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107a8565b60006118f383610f58565b9050806001600160a01b0316846001600160a01b0316148061192e5750836001600160a01b031661192384610b47565b6001600160a01b0316145b8061195e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661197982610f58565b6001600160a01b0316146119e15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107a8565b6001600160a01b038216611a435760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107a8565b611a4e600082611801565b6001600160a01b0383166000908152600360205260408120805460019290611a779084906128f0565b90915550506001600160a01b0382166000908152600360205260408120805460019290611aa590849061287d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611b1182610f58565b9050611b1e600083611801565b6001600160a01b0381166000908152600360205260408120805460019290611b479084906128f0565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611bfd8383611efc565b611c0a600084848461203e565b610ced5760405162461bcd60e51b81526004016107a890612774565b816001600160a01b0316836001600160a01b03161415611c885760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107a8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d00848484611966565b611d0c8484848461203e565b610aaf5760405162461bcd60e51b81526004016107a890612774565b606081611d4c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d765780611d608161296e565b9150611d6f9050600a836128bd565b9150611d50565b60008167ffffffffffffffff811115611d9f57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611dc9576020820181803683370190505b5090505b841561195e57611dde6001836128f0565b9150611deb600a866129ad565b611df690603061287d565b60f81b818381518110611e1957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e3b600a866128bd565b9450611dcd565b600081815b8451811015611ef4576000858281518110611e7257634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611eb4576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611ee1565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611eec8161296e565b915050611e47565b509392505050565b6001600160a01b038216611f525760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107a8565b6000818152600260205260409020546001600160a01b031615611fb75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107a8565b6001600160a01b0382166000908152600360205260408120805460019290611fe090849061287d565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561214057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612082903390899088908890600401612724565b602060405180830381600087803b15801561209c57600080fd5b505af19250505080156120cc575060408051601f3d908101601f191682019092526120c991810190612555565b60015b612126573d8080156120fa576040519150601f19603f3d011682016040523d82523d6000602084013e6120ff565b606091505b50805161211e5760405162461bcd60e51b81526004016107a890612774565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061195e565b506001949350505050565b82805461215790612933565b90600052602060002090601f01602090048101928261217957600085556121bf565b82601f1061219257805160ff19168380011785556121bf565b828001600101855582156121bf579182015b828111156121bf5782518255916020019190600101906121a4565b506121cb9291506121cf565b5090565b5b808211156121cb57600081556001016121d0565b600067ffffffffffffffff8311156121fe576121fe6129ed565b612211601f8401601f191660200161284c565b905082815283838301111561222557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461225357600080fd5b919050565b60008083601f840112612269578182fd5b50813567ffffffffffffffff811115612280578182fd5b6020830191508360208260051b850101111561229b57600080fd5b9250929050565b8035801515811461225357600080fd5b803563ffffffff8116811461225357600080fd5b6000602082840312156122d7578081fd5b6122e08261223c565b9392505050565b600080604083850312156122f9578081fd5b6123028361223c565b91506123106020840161223c565b90509250929050565b60008060006060848603121561232d578081fd5b6123368461223c565b92506123446020850161223c565b9150604084013590509250925092565b60008060008060808587031215612369578081fd5b6123728561223c565b93506123806020860161223c565b925060408501359150606085013567ffffffffffffffff8111156123a2578182fd5b8501601f810187136123b2578182fd5b6123c1878235602084016121e4565b91505092959194509250565b600080604083850312156123df578182fd5b6123e88361223c565b9150612310602084016122a2565b60008060408385031215612408578182fd5b6124118361223c565b946020939093013593505050565b60008060208385031215612431578182fd5b823567ffffffffffffffff811115612447578283fd5b61245385828601612258565b90969095509350505050565b60006020808385031215612471578182fd5b823567ffffffffffffffff80821115612488578384fd5b818501915085601f83011261249b578384fd5b8135818111156124ad576124ad6129ed565b8060051b91506124be84830161284c565b8181528481019084860184860187018a10156124d8578788fd5b8795505b838610156124fa5780358352600195909501949186019186016124dc565b5098975050505050505050565b600060208284031215612518578081fd5b6122e0826122a2565b600060208284031215612532578081fd5b5035919050565b60006020828403121561254a578081fd5b81356122e081612a03565b600060208284031215612566578081fd5b81516122e081612a03565b600060208284031215612582578081fd5b813567ffffffffffffffff811115612598578182fd5b8201601f810184136125a8578182fd5b61195e848235602084016121e4565b6000602082840312156125c8578081fd5b6122e0826122b2565b6000806000604084860312156125e5578081fd5b6125ee846122b2565b9250602084013567ffffffffffffffff811115612609578182fd5b61261586828701612258565b9497909650939450505050565b6000815180845261263a816020860160208601612907565b601f01601f19169290920160200192915050565b60008151612660818560208601612907565b9290920192915050565b600080845482600182811c91508083168061268657607f831692505b60208084108214156126a657634e487b7160e01b87526022600452602487fd5b8180156126ba57600181146126cb576126f7565b60ff198616895284890196506126f7565b60008b815260209020885b868110156126ef5781548b8201529085019083016126d6565b505084890196505b50505050505061271b61270a828661264e565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061275790830184612622565b9695505050505050565b6020815260006122e06020830184612622565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612875576128756129ed565b604052919050565b60008219821115612890576128906129c1565b500190565b600063ffffffff8083168185168083038211156128b4576128b46129c1565b01949350505050565b6000826128cc576128cc6129d7565b500490565b60008160001904831182151516156128eb576128eb6129c1565b500290565b600082821015612902576129026129c1565b500390565b60005b8381101561292257818101518382015260200161290a565b83811115610aaf5750506000910152565b600181811c9082168061294757607f821691505b6020821081141561296857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612982576129826129c1565b5060010190565b600063ffffffff808316818114156129a3576129a36129c1565b6001019392505050565b6000826129bc576129bc6129d7565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610f2657600080fdfea26469706673582212209bea25ab9063d81265077971d286ce07b6cb997c06796ecf7e493337256b125b64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000ea600000000000000000000000000000000000000000000000000d529ae9e86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656962787569657668336b78367068636c346164657a7063326f7832667765736861626d79326836677137647776327633367878746d2f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c4b616d61204368616d656c656f6e733a2043686170746572204f6e650000000000000000000000000000000000000000000000000000000000000000000000044b414d4100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://bafybeibxuievh3kx6phcl4adezpc2ox2fweshabmy2h6gq7dwv2v36xxtm/
Arg [1] : _name (string): Kama Chameleons: Chapter One
Arg [2] : _symbol (string): KAMA
Arg [3] : _totalSupply (uint32): 3750
Arg [4] : _cost (uint256): 60000000000000000
Arg [5] : _open (bool): False

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000ea6
Arg [4] : 00000000000000000000000000000000000000000000000000d529ae9e860000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [7] : 697066733a2f2f6261667962656962787569657668336b78367068636c346164
Arg [8] : 657a7063326f7832667765736861626d79326836677137647776327633367878
Arg [9] : 746d2f0000000000000000000000000000000000000000000000000000000000
Arg [10] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [11] : 4b616d61204368616d656c656f6e733a2043686170746572204f6e6500000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [13] : 4b414d4100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39396:4234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:305;;;;;;;;;;-1:-1:-1;21320:305:0;;;;;:::i;:::-;;:::i;:::-;;;10632:14:1;;10625:22;10607:41;;10595:2;10580:18;21320:305:0;;;;;;;;42124:425;;;;;;:::i;:::-;;:::i;:::-;;39594:24;;;;;;;;;;-1:-1:-1;39594:24:0;;;;-1:-1:-1;;;39594:24:0;;;;;;;;;21420:10:1;21408:23;;;21390:42;;21378:2;21363:18;39594:24:0;21345:93:1;22265:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23824:221::-;;;;;;;;;;-1:-1:-1;23824:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9930:32:1;;;9912:51;;9900:2;9885:18;23824:221:0;9867:102:1;23347:411:0;;;;;;;;;;-1:-1:-1;23347:411:0;;;;;:::i;:::-;;:::i;39487:32::-;;;;;;;;;;;;;;;;;;;21210:25:1;;;21198:2;21183:18;39487:32:0;21165:76:1;39623:29:0;;;;;;;;;;-1:-1:-1;39623:29:0;;;;-1:-1:-1;;;39623:29:0;;;;;;24574:339;;;;;;;;;;-1:-1:-1;24574:339:0;;;;;:::i;:::-;;:::i;40701:87::-;;;;;;;;;;-1:-1:-1;40701:87:0;;;;;:::i;:::-;;:::i;41463:325::-;;;:::i;24984:185::-;;;;;;;;;;-1:-1:-1;24984:185:0;;;;;:::i;:::-;;:::i;34300:245::-;;;;;;;;;;-1:-1:-1;34300:245:0;;;;;:::i;:::-;;:::i;40544:74::-;;;;;;;;;;-1:-1:-1;40544:74:0;;;;;:::i;:::-;;:::i;39558:31::-;;;;;;;;;;-1:-1:-1;39558:31:0;;;;;;;;;;;39524:29;;;;;;;;;;-1:-1:-1;39524:29:0;;;;;;;;39811:28;;;;;;;;;;-1:-1:-1;39811:28:0;;;;;;;;21959:239;;;;;;;;;;-1:-1:-1;21959:239:0;;;;;:::i;:::-;;:::i;40624:71::-;;;;;;;;;;-1:-1:-1;40624:71:0;;;;;:::i;:::-;;:::i;21689:208::-;;;;;;;;;;-1:-1:-1;21689:208:0;;;;;:::i;:::-;;:::i;36269:103::-;;;;;;;;;;;;;:::i;41242:215::-;;;;;;;;;;-1:-1:-1;41242:215:0;;;;;:::i;:::-;;:::i;35618:87::-;;;;;;;;;;-1:-1:-1;35691:6:0;;-1:-1:-1;;;;;35691:6:0;35618:87;;22434:104;;;;;;;;;;;;;:::i;40974:90::-;;;;;;;;;;-1:-1:-1;40974:90:0;;;;;:::i;:::-;;:::i;24117:155::-;;;;;;;;;;-1:-1:-1;24117:155:0;;;;;:::i;:::-;;:::i;41173:63::-;;;;;;;;;;;;;:::i;41976:142::-;;;;;;:::i;:::-;;:::i;25240:328::-;;;;;;;;;;-1:-1:-1;25240:328:0;;;;;:::i;:::-;;:::i;39686:31::-;;;;;;;;;;-1:-1:-1;39686:31:0;;;;-1:-1:-1;;;39686:31:0;;;;;;42775:416;;;;;;;;;;-1:-1:-1;42775:416:0;;;;;:::i;:::-;;:::i;41794:148::-;;;;;;;;;;-1:-1:-1;41794:148:0;;;;;:::i;:::-;;:::i;24343:164::-;;;;;;;;;;-1:-1:-1;24343:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24464:25:0;;;24440:4;24464:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24343:164;36527:201;;;;;;;;;;-1:-1:-1;36527:201:0;;;;;:::i;:::-;;:::i;40883:85::-;;;;;;;;;;-1:-1:-1;40883:85:0;;;;;:::i;:::-;;:::i;40794:83::-;;;;;;;;;;-1:-1:-1;40794:83:0;;;;;:::i;:::-;;:::i;39657:24::-;;;;;;;;;;-1:-1:-1;39657:24:0;;;;-1:-1:-1;;;39657:24:0;;;;;;41070:97;;;;;;;;;;-1:-1:-1;41070:97:0;;;;;:::i;:::-;;:::i;21320:305::-;21422:4;-1:-1:-1;;;;;;21459:40:0;;-1:-1:-1;;;21459:40:0;;:105;;-1:-1:-1;;;;;;;21516:48:0;;-1:-1:-1;;;21516:48:0;21459:105;:158;;;-1:-1:-1;;;;;;;;;;19869:40:0;;;21581:36;21439:178;21320:305;-1:-1:-1;;21320:305:0:o;42124:425::-;42231:5;43289:1;43281:5;:9;;;43273:40;;;;-1:-1:-1;;;43273:40:0;;20919:2:1;43273:40:0;;;20901:21:1;20958:2;20938:18;;;20931:30;-1:-1:-1;;;20977:18:1;;;20970:48;21035:18;;43273:40:0;;;;;;;;;43336:10;;:14;;:10;;;:14;:::i;:::-;43328:22;;:5;:22;;;43320:52;;;;-1:-1:-1;;;43320:52:0;;20156:2:1;43320:52:0;;;20138:21:1;20195:2;20175:18;;;20168:30;-1:-1:-1;;;20214:18:1;;;20207:47;20271:18;;43320:52:0;20128:167:1;43320:52:0;43407:5;43400:12;;:4;;:12;;;;:::i;:::-;43387:9;:25;;43379:54;;;;-1:-1:-1;;;43379:54:0;;19811:2:1;43379:54:0;;;19793:21:1;19850:2;19830:18;;;19823:30;-1:-1:-1;;;19869:18:1;;;19862:46;19925:18;;43379:54:0;19783:166:1;43379:54:0;43465:11;;:15;;-1:-1:-1;;;43465:11:0;;;;43479:1;43465:15;:::i;:::-;43448:6;;:32;;;;;:14;;43457:5;;-1:-1:-1;;;43448:6:0;;;;:14;:::i;:::-;:32;;;43440:58;;;;-1:-1:-1;;;43440:58:0;;17962:2:1;43440:58:0;;;17944:21:1;18001:2;17981:18;;;17974:30;-1:-1:-1;;;18020:18:1;;;18013:43;18073:18;;43440:58:0;17934:163:1;43440:58:0;43561:12;;43538:10;43521:28;;;;:16;:28;;;;;;43561:12;;;;;;;;43521:36;;;;;;;:::i;:::-;:52;;43505:108;;;;-1:-1:-1;;;43505:108:0;;13306:2:1;43505:108:0;;;13288:21:1;13345:2;13325:18;;;13318:30;-1:-1:-1;;;13364:18:1;;;13357:52;13426:18;;43505:108:0;13278:172:1;43505:108:0;42256:11:::1;::::0;-1:-1:-1;;;42256:11:0;::::1;;;42248:40;;;::::0;-1:-1:-1;;;42248:40:0;;19048:2:1;42248:40:0::1;::::0;::::1;19030:21:1::0;19087:2;19067:18;;;19060:30;-1:-1:-1;;;19106:18:1;;;19099:46;19162:18;;42248:40:0::1;19020:166:1::0;42248:40:0::1;42303:10;::::0;42295:46:::1;;;::::0;-1:-1:-1;;;42295:46:0;;11085:2:1;42295:46:0::1;::::0;::::1;11067:21:1::0;11124:2;11104:18;;;11097:30;-1:-1:-1;;;11143:18:1;;;11136:47;11200:18;;42295:46:0::1;11057:167:1::0;42295:46:0::1;42364:114;42393:5;;42364:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;42409:10:0::1;::::0;42440:28:::1;::::0;-1:-1:-1;;42457:10:0::1;7909:2:1::0;7905:15;7901:53;42440:28:0::1;::::0;::::1;7889:66:1::0;42409:10:0;;-1:-1:-1;7971:12:1;;;-1:-1:-1;42440:28:0::1;;;;;;;;;;;;42430:39;;;;;;42364:18;:114::i;:::-;42348:168;;;::::0;-1:-1:-1;;;42348:168:0;;12957:2:1;42348:168:0::1;::::0;::::1;12939:21:1::0;12996:2;12976:18;;;12969:30;-1:-1:-1;;;13015:18:1;;;13008:50;13075:18;;42348:168:0::1;12929:170:1::0;42348:168:0::1;42525:18;42537:5;42525:11;:18::i;:::-;42124:425:::0;;;;:::o;22265:100::-;22319:13;22352:5;22345:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22265:100;:::o;23824:221::-;23900:7;27167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27167:16:0;23920:73;;;;-1:-1:-1;;;23920:73:0;;16778:2:1;23920:73:0;;;16760:21:1;16817:2;16797:18;;;16790:30;16856:34;16836:18;;;16829:62;-1:-1:-1;;;16907:18:1;;;16900:42;16959:19;;23920:73:0;16750:234:1;23920:73:0;-1:-1:-1;24013:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24013:24:0;;23824:221::o;23347:411::-;23428:13;23444:23;23459:7;23444:14;:23::i;:::-;23428:39;;23492:5;-1:-1:-1;;;;;23486:11:0;:2;-1:-1:-1;;;;;23486:11:0;;;23478:57;;;;-1:-1:-1;;;23478:57:0;;18304:2:1;23478:57:0;;;18286:21:1;18343:2;18323:18;;;18316:30;18382:34;18362:18;;;18355:62;-1:-1:-1;;;18433:18:1;;;18426:31;18474:19;;23478:57:0;18276:223:1;23478:57:0;16627:10;-1:-1:-1;;;;;23570:21:0;;;;:62;;-1:-1:-1;23595:37:0;23612:5;16627:10;24343:164;:::i;23595:37::-;23548:168;;;;-1:-1:-1;;;23548:168:0;;15171:2:1;23548:168:0;;;15153:21:1;15210:2;15190:18;;;15183:30;15249:34;15229:18;;;15222:62;15320:26;15300:18;;;15293:54;15364:19;;23548:168:0;15143:246:1;23548:168:0;23729:21;23738:2;23742:7;23729:8;:21::i;:::-;23347:411;;;:::o;24574:339::-;24769:41;16627:10;24788:12;24802:7;24769:18;:41::i;:::-;24761:103;;;;-1:-1:-1;;;24761:103:0;;;;;;;:::i;:::-;24877:28;24887:4;24893:2;24897:7;24877:9;:28::i;40701:87::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;40763:12:::1;:19:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;40763:19:0;;::::1;::::0;;;::::1;::::0;;40701:87::o;41463:325::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;41576:7:::1;:14:::0;41533:21:::1;::::0;41515:15:::1;41599:184;41623:4;41619:1;:8;41599:184;;;41644:12;41670:7;41678:1;41670:10;;;;;;-1:-1:-1::0;;;41670:10:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;41715:11:::1;:14:::0;;-1:-1:-1;;;;;41670:10:0;;::::1;::::0;41733:4:::1;::::0;41715:11;41727:1;;41715:14;::::1;;;-1:-1:-1::0;;;41715:14:0::1;;;;;;;;;;;;;;;;;41705:7;:24;;;;:::i;:::-;41704:33;;;;:::i;:::-;41662:88;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41643:107;;;41767:7;41759:16;;;::::0;::::1;;-1:-1:-1::0;41629:3:0;::::1;::::0;::::1;:::i;:::-;;;;41599:184;;24984:185:::0;25122:39;25139:4;25145:2;25149:7;25122:39;;;;;;;;;;;;:16;:39::i;34300:245::-;34418:41;16627:10;34437:12;16547:98;34418:41;34410:102;;;;-1:-1:-1;;;34410:102:0;;20502:2:1;34410:102:0;;;20484:21:1;20541:2;20521:18;;;20514:30;20580:34;20560:18;;;20553:62;-1:-1:-1;;;20631:18:1;;;20624:46;20687:19;;34410:102:0;20474:238:1;34410:102:0;34523:14;34529:7;34523:5;:14::i;:::-;34300:245;:::o;40544:74::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;40600:4:::1;:12:::0;40544:74::o;21959:239::-;22031:7;22067:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22067:16:0;22102:19;22094:73;;;;-1:-1:-1;;;22094:73:0;;16007:2:1;22094:73:0;;;15989:21:1;16046:2;16026:18;;;16019:30;16085:34;16065:18;;;16058:62;-1:-1:-1;;;16136:18:1;;;16129:39;16185:19;;22094:73:0;15979:231:1;40624:71:0;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;40677:4:::1;:12:::0;;;::::1;;-1:-1:-1::0;;;40677:12:0::1;-1:-1:-1::0;;;;40677:12:0;;::::1;::::0;;;::::1;::::0;;40624:71::o;21689:208::-;21761:7;-1:-1:-1;;;;;21789:19:0;;21781:74;;;;-1:-1:-1;;;21781:74:0;;15596:2:1;21781:74:0;;;15578:21:1;15635:2;15615:18;;;15608:30;15674:34;15654:18;;;15647:62;-1:-1:-1;;;15725:18:1;;;15718:40;15775:19;;21781:74:0;15568:232:1;21781:74:0;-1:-1:-1;;;;;;21873:16:0;;;;;:9;:16;;;;;;;21689:208::o;36269:103::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;36334:30:::1;36361:1;36334:18;:30::i;:::-;36269:103::o:0;41242:215::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;41311:8:::1;41306:146;41325:13;::::0;::::1;::::0;-1:-1:-1;41306:146:0::1;;;41376:11;::::0;::::1;-1:-1:-1::0;;;41376:11:0;::::1;::::0;::::1;::::0;41362:10:::1;::::0;-1:-1:-1;;;41366:6:0;;::::1;;41362:1;:10;:::i;:::-;:25;;;;41354:51;;;::::0;-1:-1:-1;;;41354:51:0;;14416:2:1;41354:51:0::1;::::0;::::1;14398:21:1::0;14455:2;14435:18;;;14428:30;-1:-1:-1;;;14474:18:1;;;14467:43;14527:18;;41354:51:0::1;14388:163:1::0;41354:51:0::1;41414:30;41424:2;;41427:1;41424:5;;;;;;;-1:-1:-1::0;;;41424:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41433:6;41431:8:::0;;41433:6:::1;::::0;41431:8:::1;::::0;-1:-1:-1;;;41431:8:0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;41414:30;;;;;;;;;;;;;::::0;:9:::1;:30::i;:::-;41340:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41306:146;;22434:104:::0;22490:13;22523:7;22516:14;;;;;:::i;40974:90::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;41041:10:::1;:17:::0;40974:90::o;24117:155::-;24212:52;16627:10;24245:8;24255;24212:18;:52::i;:::-;24117:155;;:::o;41173:63::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;41215:8:::1;:15:::0;;-1:-1:-1;;41215:15:0::1;41226:4;41215:15;::::0;;41173:63::o;41976:142::-;42035:5;43289:1;43281:5;:9;;;43273:40;;;;-1:-1:-1;;;43273:40:0;;20919:2:1;43273:40:0;;;20901:21:1;20958:2;20938:18;;;20931:30;-1:-1:-1;;;20977:18:1;;;20970:48;21035:18;;43273:40:0;20891:168:1;43273:40:0;43336:10;;:14;;:10;;;:14;:::i;:::-;43328:22;;:5;:22;;;43320:52;;;;-1:-1:-1;;;43320:52:0;;20156:2:1;43320:52:0;;;20138:21:1;20195:2;20175:18;;;20168:30;-1:-1:-1;;;20214:18:1;;;20207:47;20271:18;;43320:52:0;20128:167:1;43320:52:0;43407:5;43400:12;;:4;;:12;;;;:::i;:::-;43387:9;:25;;43379:54;;;;-1:-1:-1;;;43379:54:0;;19811:2:1;43379:54:0;;;19793:21:1;19850:2;19830:18;;;19823:30;-1:-1:-1;;;19869:18:1;;;19862:46;19925:18;;43379:54:0;19783:166:1;43379:54:0;43465:11;;:15;;-1:-1:-1;;;43465:11:0;;;;43479:1;43465:15;:::i;:::-;43448:6;;:32;;;;;:14;;43457:5;;-1:-1:-1;;;43448:6:0;;;;:14;:::i;:::-;:32;;;43440:58;;;;-1:-1:-1;;;43440:58:0;;17962:2:1;43440:58:0;;;17944:21:1;18001:2;17981:18;;;17974:30;-1:-1:-1;;;18020:18:1;;;18013:43;18073:18;;43440:58:0;17934:163:1;43440:58:0;43561:12;;43538:10;43521:28;;;;:16;:28;;;;;;43561:12;;;;;;;;43521:36;;;;;;;:::i;:::-;:52;;43505:108;;;;-1:-1:-1;;;43505:108:0;;13306:2:1;43505:108:0;;;13288:21:1;13345:2;13325:18;;;13318:30;-1:-1:-1;;;13364:18:1;;;13357:52;13426:18;;43505:108:0;13278:172:1;43505:108:0;42057:4:::1;::::0;-1:-1:-1;;;42057:4:0;::::1;;;:12;;42065:4;42057:12;42049:38;;;::::0;-1:-1:-1;;;42049:38:0;;18706:2:1;42049:38:0::1;::::0;::::1;18688:21:1::0;18745:2;18725:18;;;18718:30;-1:-1:-1;;;18764:18:1;;;18757:43;18817:18;;42049:38:0::1;18678:163:1::0;42049:38:0::1;42094:18;42106:5;42094:11;:18::i;25240:328::-:0;25415:41;16627:10;25448:7;25415:18;:41::i;:::-;25407:103;;;;-1:-1:-1;;;25407:103:0;;;;;;;:::i;:::-;25521:39;25535:4;25541:2;25545:7;25554:5;25521:13;:39::i;42775:416::-;42906:6;;42861:13;;-1:-1:-1;;;42906:6:0;;;;42894:18;;;42886:45;;;;-1:-1:-1;;;42886:45:0;;11850:2:1;42886:45:0;;;11832:21:1;11889:2;11869:18;;;11862:30;-1:-1:-1;;;11908:18:1;;;11901:44;11962:18;;42886:45:0;11822:164:1;42886:45:0;42942:8;;;;42938:155;;43022:14;43038:26;43055:8;43038:16;:26::i;:::-;43005:69;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42970:115;;42775:416;;;:::o;42938:155::-;43139:7;43148:26;43165:8;43148:16;:26::i;41794:148::-;41860:9;41855:82;41879:9;:16;41875:1;:20;41855:82;;;41911:18;41916:9;41926:1;41916:12;;;;;;-1:-1:-1;;;41916:12:0;;;;;;;;;;;;;;;41911:4;:18::i;:::-;41897:3;;;;:::i;:::-;;;;41855:82;;36527:201;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36616:22:0;::::1;36608:73;;;::::0;-1:-1:-1;;;36608:73:0;;12193:2:1;36608:73:0::1;::::0;::::1;12175:21:1::0;12232:2;12212:18;;;12205:30;12271:34;12251:18;;;12244:62;-1:-1:-1;;;12322:18:1;;;12315:36;12368:19;;36608:73:0::1;12165:228:1::0;36608:73:0::1;36692:28;36711:8;36692:18;:28::i;40883:85::-:0;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;40943:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;40943:19:0::1;-1:-1:-1::0;;;;40943:19:0;;::::1;::::0;;;::::1;::::0;;40883:85::o;40794:83::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;40854:10:::1;:17:::0;;-1:-1:-1;;40854:17:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;40794:83::o;41070:97::-;35691:6;;-1:-1:-1;;;;;35691:6:0;16627:10;35838:23;35830:68;;;;-1:-1:-1;;;35830:68:0;;;;;;;:::i;:::-;41140:21;;::::1;::::0;:14:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;38000:190::-:0;38125:4;38178;38149:25;38162:5;38169:4;38149:12;:25::i;:::-;:33;;38000:190;-1:-1:-1;;;;38000:190:0:o;42555:187::-;42611:8;42606:87;42629:5;42625:9;;:1;:9;;;42606:87;;;42650:35;42660:10;42674:6;;42672:8;;;;;;;;;;;;;;:::i;42650:35::-;42636:3;;;;:::i;:::-;;;;42606:87;;;-1:-1:-1;42716:10:0;42699:28;;;;:16;:28;;;;;:37;;;;;;:28;:37;;;;;:::i;:::-;;;;-1:-1:-1;;;42555:187:0:o;31060:174::-;31135:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31135:29:0;-1:-1:-1;;;;;31135:29:0;;;;;;;;:24;;31189:23;31135:24;31189:14;:23::i;:::-;-1:-1:-1;;;;;31180:46:0;;;;;;;;;;;31060:174;;:::o;27372:348::-;27465:4;27167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27167:16:0;27482:73;;;;-1:-1:-1;;;27482:73:0;;14758:2:1;27482:73:0;;;14740:21:1;14797:2;14777:18;;;14770:30;14836:34;14816:18;;;14809:62;-1:-1:-1;;;14887:18:1;;;14880:42;14939:19;;27482:73:0;14730:234:1;27482:73:0;27566:13;27582:23;27597:7;27582:14;:23::i;:::-;27566:39;;27635:5;-1:-1:-1;;;;;27624:16:0;:7;-1:-1:-1;;;;;27624:16:0;;:51;;;;27668:7;-1:-1:-1;;;;;27644:31:0;:20;27656:7;27644:11;:20::i;:::-;-1:-1:-1;;;;;27644:31:0;;27624:51;:87;;;-1:-1:-1;;;;;;24464:25:0;;;24440:4;24464:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27679:32;27616:96;27372:348;-1:-1:-1;;;;27372:348:0:o;30364:578::-;30523:4;-1:-1:-1;;;;;30496:31:0;:23;30511:7;30496:14;:23::i;:::-;-1:-1:-1;;;;;30496:31:0;;30488:85;;;;-1:-1:-1;;;30488:85:0;;17552:2:1;30488:85:0;;;17534:21:1;17591:2;17571:18;;;17564:30;17630:34;17610:18;;;17603:62;-1:-1:-1;;;17681:18:1;;;17674:39;17730:19;;30488:85:0;17524:231:1;30488:85:0;-1:-1:-1;;;;;30592:16:0;;30584:65;;;;-1:-1:-1;;;30584:65:0;;13657:2:1;30584:65:0;;;13639:21:1;13696:2;13676:18;;;13669:30;13735:34;13715:18;;;13708:62;-1:-1:-1;;;13786:18:1;;;13779:34;13830:19;;30584:65:0;13629:226:1;30584:65:0;30766:29;30783:1;30787:7;30766:8;:29::i;:::-;-1:-1:-1;;;;;30808:15:0;;;;;;:9;:15;;;;;:20;;30827:1;;30808:15;:20;;30827:1;;30808:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30839:13:0;;;;;;:9;:13;;;;;:18;;30856:1;;30839:13;:18;;30856:1;;30839:18;:::i;:::-;;;;-1:-1:-1;;30868:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30868:21:0;-1:-1:-1;;;;;30868:21:0;;;;;;;;;30907:27;;30868:16;;30907:27;;;;;;;30364:578;;;:::o;29667:360::-;29727:13;29743:23;29758:7;29743:14;:23::i;:::-;29727:39;;29868:29;29885:1;29889:7;29868:8;:29::i;:::-;-1:-1:-1;;;;;29910:16:0;;;;;;:9;:16;;;;;:21;;29930:1;;29910:16;:21;;29930:1;;29910:21;:::i;:::-;;;;-1:-1:-1;;29949:16:0;;;;:7;:16;;;;;;29942:23;;-1:-1:-1;;;;;;29942:23:0;;;29983:36;29957:7;;29949:16;-1:-1:-1;;;;;29983:36:0;;;;;29949:16;;29983:36;29667:360;;:::o;36888:191::-;36981:6;;;-1:-1:-1;;;;;36998:17:0;;;-1:-1:-1;;;;;;36998:17:0;;;;;;;37031:40;;36981:6;;;36998:17;36981:6;;37031:40;;36962:16;;37031:40;36888:191;;:::o;28399:321::-;28529:18;28535:2;28539:7;28529:5;:18::i;:::-;28580:54;28611:1;28615:2;28619:7;28628:5;28580:22;:54::i;:::-;28558:154;;;;-1:-1:-1;;;28558:154:0;;;;;;;:::i;31376:315::-;31531:8;-1:-1:-1;;;;;31522:17:0;:5;-1:-1:-1;;;;;31522:17:0;;;31514:55;;;;-1:-1:-1;;;31514:55:0;;14062:2:1;31514:55:0;;;14044:21:1;14101:2;14081:18;;;14074:30;14140:27;14120:18;;;14113:55;14185:18;;31514:55:0;14034:175:1;31514:55:0;-1:-1:-1;;;;;31580:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31580:46:0;;;;;;;;;;31642:41;;10607::1;;;31642::0;;10580:18:1;31642:41:0;;;;;;;31376:315;;;:::o;26450:::-;26607:28;26617:4;26623:2;26627:7;26607:9;:28::i;:::-;26654:48;26677:4;26683:2;26687:7;26696:5;26654:22;:48::i;:::-;26646:111;;;;-1:-1:-1;;;26646:111:0;;;;;;;:::i;17132:723::-;17188:13;17409:10;17405:53;;-1:-1:-1;;17436:10:0;;;;;;;;;;;;-1:-1:-1;;;17436:10:0;;;;;17132:723::o;17405:53::-;17483:5;17468:12;17524:78;17531:9;;17524:78;;17557:8;;;;:::i;:::-;;-1:-1:-1;17580:10:0;;-1:-1:-1;17588:2:0;17580:10;;:::i;:::-;;;17524:78;;;17612:19;17644:6;17634:17;;;;;;-1:-1:-1;;;17634:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17634:17:0;;17612:39;;17662:154;17669:10;;17662:154;;17696:11;17706:1;17696:11;;:::i;:::-;;-1:-1:-1;17765:10:0;17773:2;17765:5;:10;:::i;:::-;17752:24;;:2;:24;:::i;:::-;17739:39;;17722:6;17729;17722:14;;;;;;-1:-1:-1;;;17722:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17722:56:0;;;;;;;;-1:-1:-1;17793:11:0;17802:2;17793:11;;:::i;:::-;;;17662:154;;38552:701;38635:7;38678:4;38635:7;38693:523;38717:5;:12;38713:1;:16;38693:523;;;38751:20;38774:5;38780:1;38774:8;;;;;;-1:-1:-1;;;38774:8:0;;;;;;;;;;;;;;;38751:31;;38817:12;38801;:28;38797:408;;38954:44;;;;;;8151:19:1;;;8186:12;;;8179:28;;;8223:12;;38954:44:0;;;;;;;;;;;;38944:55;;;;;;38929:70;;38797:408;;;39144:44;;;;;;8151:19:1;;;8186:12;;;8179:28;;;8223:12;;39144:44:0;;;;;;;;;;;;39134:55;;;;;;39119:70;;38797:408;-1:-1:-1;38731:3:0;;;;:::i;:::-;;;;38693:523;;;-1:-1:-1;39233:12:0;38552:701;-1:-1:-1;;;38552:701:0:o;29056:382::-;-1:-1:-1;;;;;29136:16:0;;29128:61;;;;-1:-1:-1;;;29128:61:0;;16417:2:1;29128:61:0;;;16399:21:1;;;16436:18;;;16429:30;16495:34;16475:18;;;16468:62;16547:18;;29128:61:0;16389:182:1;29128:61:0;27143:4;27167:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27167:16:0;:30;29200:58;;;;-1:-1:-1;;;29200:58:0;;12600:2:1;29200:58:0;;;12582:21:1;12639:2;12619:18;;;12612:30;12678;12658:18;;;12651:58;12726:18;;29200:58:0;12572:178:1;29200:58:0;-1:-1:-1;;;;;29329:13:0;;;;;;:9;:13;;;;;:18;;29346:1;;29329:13;:18;;29346:1;;29329:18;:::i;:::-;;;;-1:-1:-1;;29358:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29358:21:0;-1:-1:-1;;;;;29358:21:0;;;;;;;;29397:33;;29358:16;;;29397:33;;29358:16;;29397:33;29056:382;;:::o;32256:799::-;32411:4;-1:-1:-1;;;;;32432:13:0;;8854:20;8902:8;32428:620;;32468:72;;-1:-1:-1;;;32468:72:0;;-1:-1:-1;;;;;32468:36:0;;;;;:72;;16627:10;;32519:4;;32525:7;;32534:5;;32468:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32468:72:0;;;;;;;;-1:-1:-1;;32468:72:0;;;;;;;;;;;;:::i;:::-;;;32464:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32710:13:0;;32706:272;;32753:60;;-1:-1:-1;;;32753:60:0;;;;;;;:::i;32706:272::-;32928:6;32922:13;32913:6;32909:2;32905:15;32898:38;32464:529;-1:-1:-1;;;;;;32591:51:0;-1:-1:-1;;;32591:51:0;;-1:-1:-1;32584:58:0;;32428:620;-1:-1:-1;33032:4:0;32256:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:2;;588:1;585;578:12;522:2;474:124;;;:::o;603:395::-;666:8;676:6;730:3;723:4;715:6;711:17;707:27;697:2;;755:8;745;738:26;697:2;-1:-1:-1;785:20:1;;828:18;817:30;;814:2;;;867:8;857;850:26;814:2;911:4;903:6;899:17;887:29;;971:3;964:4;954:6;951:1;947:14;939:6;935:27;931:38;928:47;925:2;;;988:1;985;978:12;925:2;687:311;;;;;:::o;1003:160::-;1068:20;;1124:13;;1117:21;1107:32;;1097:2;;1153:1;1150;1143:12;1168:163;1235:20;;1295:10;1284:22;;1274:33;;1264:2;;1321:1;1318;1311:12;1336:196;1395:6;1448:2;1436:9;1427:7;1423:23;1419:32;1416:2;;;1469:6;1461;1454:22;1416:2;1497:29;1516:9;1497:29;:::i;:::-;1487:39;1406:126;-1:-1:-1;;;1406:126:1:o;1537:270::-;1605:6;1613;1666:2;1654:9;1645:7;1641:23;1637:32;1634:2;;;1687:6;1679;1672:22;1634:2;1715:29;1734:9;1715:29;:::i;:::-;1705:39;;1763:38;1797:2;1786:9;1782:18;1763:38;:::i;:::-;1753:48;;1624:183;;;;;:::o;1812:338::-;1889:6;1897;1905;1958:2;1946:9;1937:7;1933:23;1929:32;1926:2;;;1979:6;1971;1964:22;1926:2;2007:29;2026:9;2007:29;:::i;:::-;1997:39;;2055:38;2089:2;2078:9;2074:18;2055:38;:::i;:::-;2045:48;;2140:2;2129:9;2125:18;2112:32;2102:42;;1916:234;;;;;:::o;2155:696::-;2250:6;2258;2266;2274;2327:3;2315:9;2306:7;2302:23;2298:33;2295:2;;;2349:6;2341;2334:22;2295:2;2377:29;2396:9;2377:29;:::i;:::-;2367:39;;2425:38;2459:2;2448:9;2444:18;2425:38;:::i;:::-;2415:48;;2510:2;2499:9;2495:18;2482:32;2472:42;;2565:2;2554:9;2550:18;2537:32;2592:18;2584:6;2581:30;2578:2;;;2629:6;2621;2614:22;2578:2;2657:22;;2710:4;2702:13;;2698:27;-1:-1:-1;2688:2:1;;2744:6;2736;2729:22;2688:2;2772:73;2837:7;2832:2;2819:16;2814:2;2810;2806:11;2772:73;:::i;:::-;2762:83;;;2285:566;;;;;;;:::o;2856:264::-;2921:6;2929;2982:2;2970:9;2961:7;2957:23;2953:32;2950:2;;;3003:6;2995;2988:22;2950:2;3031:29;3050:9;3031:29;:::i;:::-;3021:39;;3079:35;3110:2;3099:9;3095:18;3079:35;:::i;3125:264::-;3193:6;3201;3254:2;3242:9;3233:7;3229:23;3225:32;3222:2;;;3275:6;3267;3260:22;3222:2;3303:29;3322:9;3303:29;:::i;:::-;3293:39;3379:2;3364:18;;;;3351:32;;-1:-1:-1;;;3212:177:1:o;3394:457::-;3480:6;3488;3541:2;3529:9;3520:7;3516:23;3512:32;3509:2;;;3562:6;3554;3547:22;3509:2;3607:9;3594:23;3640:18;3632:6;3629:30;3626:2;;;3677:6;3669;3662:22;3626:2;3721:70;3783:7;3774:6;3763:9;3759:22;3721:70;:::i;:::-;3810:8;;3695:96;;-1:-1:-1;3499:352:1;-1:-1:-1;;;;3499:352:1:o;3856:1002::-;3940:6;3971:2;4014;4002:9;3993:7;3989:23;3985:32;3982:2;;;4035:6;4027;4020:22;3982:2;4080:9;4067:23;4109:18;4150:2;4142:6;4139:14;4136:2;;;4171:6;4163;4156:22;4136:2;4214:6;4203:9;4199:22;4189:32;;4259:7;4252:4;4248:2;4244:13;4240:27;4230:2;;4286:6;4278;4271:22;4230:2;4327;4314:16;4349:2;4345;4342:10;4339:2;;;4355:18;;:::i;:::-;4401:2;4398:1;4394:10;4384:20;;4424:28;4448:2;4444;4440:11;4424:28;:::i;:::-;4486:15;;;4517:12;;;;4549:11;;;4579;;;4575:20;;4572:33;-1:-1:-1;4569:2:1;;;4623:6;4615;4608:22;4569:2;4650:6;4641:15;;4665:163;4679:2;4676:1;4673:9;4665:163;;;4736:17;;4724:30;;4697:1;4690:9;;;;;4774:12;;;;4806;;4665:163;;;-1:-1:-1;4847:5:1;3951:907;-1:-1:-1;;;;;;;;3951:907:1:o;4863:190::-;4919:6;4972:2;4960:9;4951:7;4947:23;4943:32;4940:2;;;4993:6;4985;4978:22;4940:2;5021:26;5037:9;5021:26;:::i;5058:190::-;5117:6;5170:2;5158:9;5149:7;5145:23;5141:32;5138:2;;;5191:6;5183;5176:22;5138:2;-1:-1:-1;5219:23:1;;5128:120;-1:-1:-1;5128:120:1:o;5253:255::-;5311:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:2;;;5385:6;5377;5370:22;5332:2;5429:9;5416:23;5448:30;5472:5;5448:30;:::i;5513:259::-;5582:6;5635:2;5623:9;5614:7;5610:23;5606:32;5603:2;;;5656:6;5648;5641:22;5603:2;5693:9;5687:16;5712:30;5736:5;5712:30;:::i;5777:480::-;5846:6;5899:2;5887:9;5878:7;5874:23;5870:32;5867:2;;;5920:6;5912;5905:22;5867:2;5965:9;5952:23;5998:18;5990:6;5987:30;5984:2;;;6035:6;6027;6020:22;5984:2;6063:22;;6116:4;6108:13;;6104:27;-1:-1:-1;6094:2:1;;6150:6;6142;6135:22;6094:2;6178:73;6243:7;6238:2;6225:16;6220:2;6216;6212:11;6178:73;:::i;6457:194::-;6515:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:2;;;6589:6;6581;6574:22;6536:2;6617:28;6635:9;6617:28;:::i;6656:529::-;6750:6;6758;6766;6819:2;6807:9;6798:7;6794:23;6790:32;6787:2;;;6840:6;6832;6825:22;6787:2;6868:28;6886:9;6868:28;:::i;:::-;6858:38;;6947:2;6936:9;6932:18;6919:32;6974:18;6966:6;6963:30;6960:2;;;7011:6;7003;6996:22;6960:2;7055:70;7117:7;7108:6;7097:9;7093:22;7055:70;:::i;:::-;6777:408;;7144:8;;-1:-1:-1;7029:96:1;;-1:-1:-1;;;;6777:408:1:o;7190:257::-;7231:3;7269:5;7263:12;7296:6;7291:3;7284:19;7312:63;7368:6;7361:4;7356:3;7352:14;7345:4;7338:5;7334:16;7312:63;:::i;:::-;7429:2;7408:15;-1:-1:-1;;7404:29:1;7395:39;;;;7436:4;7391:50;;7239:208;-1:-1:-1;;7239:208:1:o;7452:185::-;7494:3;7532:5;7526:12;7547:52;7592:6;7587:3;7580:4;7573:5;7569:16;7547:52;:::i;:::-;7615:16;;;;;7502:135;-1:-1:-1;;7502:135:1:o;8246:1305::-;8523:3;8552;8587:6;8581:13;8617:3;8639:1;8667:9;8663:2;8659:18;8649:28;;8727:2;8716:9;8712:18;8749;8739:2;;8793:4;8785:6;8781:17;8771:27;;8739:2;8819;8867;8859:6;8856:14;8836:18;8833:38;8830:2;;;-1:-1:-1;;;8894:33:1;;8950:4;8947:1;8940:15;8980:4;8901:3;8968:17;8830:2;9011:18;9038:104;;;;9156:1;9151:322;;;;9004:469;;9038:104;-1:-1:-1;;9071:24:1;;9059:37;;9116:16;;;;-1:-1:-1;9038:104:1;;9151:322;21770:4;21789:17;;;21839:4;21823:21;;9246:3;9262:165;9276:6;9273:1;9270:13;9262:165;;;9354:14;;9341:11;;;9334:35;9397:16;;;;9291:10;;9262:165;;;9266:3;;9456:6;9451:3;9447:16;9440:23;;9004:469;;;;;;;9489:56;9514:30;9540:3;9532:6;9514:30;:::i;:::-;-1:-1:-1;;;7702:20:1;;7747:1;7738:11;;7692:63;9489:56;9482:63;8531:1020;-1:-1:-1;;;;;8531:1020:1:o;9974:488::-;-1:-1:-1;;;;;10243:15:1;;;10225:34;;10295:15;;10290:2;10275:18;;10268:43;10342:2;10327:18;;10320:34;;;10390:3;10385:2;10370:18;;10363:31;;;10168:4;;10411:45;;10436:19;;10428:6;10411:45;:::i;:::-;10403:53;10177:285;-1:-1:-1;;;;;;10177:285:1:o;10659:219::-;10808:2;10797:9;10790:21;10771:4;10828:44;10868:2;10857:9;10853:18;10845:6;10828:44;:::i;11229:414::-;11431:2;11413:21;;;11470:2;11450:18;;;11443:30;11509:34;11504:2;11489:18;;11482:62;-1:-1:-1;;;11575:2:1;11560:18;;11553:48;11633:3;11618:19;;11403:240::o;16989:356::-;17191:2;17173:21;;;17210:18;;;17203:30;17269:34;17264:2;17249:18;;17242:62;17336:2;17321:18;;17163:182::o;19191:413::-;19393:2;19375:21;;;19432:2;19412:18;;;19405:30;19471:34;19466:2;19451:18;;19444:62;-1:-1:-1;;;19537:2:1;19522:18;;19515:47;19594:3;19579:19;;19365:239::o;21443:275::-;21514:2;21508:9;21579:2;21560:13;;-1:-1:-1;;21556:27:1;21544:40;;21614:18;21599:34;;21635:22;;;21596:62;21593:2;;;21661:18;;:::i;:::-;21697:2;21690:22;21488:230;;-1:-1:-1;21488:230:1:o;21855:128::-;21895:3;21926:1;21922:6;21919:1;21916:13;21913:2;;;21932:18;;:::i;:::-;-1:-1:-1;21968:9:1;;21903:80::o;21988:228::-;22027:3;22055:10;22092:2;22089:1;22085:10;22122:2;22119:1;22115:10;22153:3;22149:2;22145:12;22140:3;22137:21;22134:2;;;22161:18;;:::i;:::-;22197:13;;22035:181;-1:-1:-1;;;;22035:181:1:o;22221:120::-;22261:1;22287;22277:2;;22292:18;;:::i;:::-;-1:-1:-1;22326:9:1;;22267:74::o;22346:168::-;22386:7;22452:1;22448;22444:6;22440:14;22437:1;22434:21;22429:1;22422:9;22415:17;22411:45;22408:2;;;22459:18;;:::i;:::-;-1:-1:-1;22499:9:1;;22398:116::o;22519:125::-;22559:4;22587:1;22584;22581:8;22578:2;;;22592:18;;:::i;:::-;-1:-1:-1;22629:9:1;;22568:76::o;22649:258::-;22721:1;22731:113;22745:6;22742:1;22739:13;22731:113;;;22821:11;;;22815:18;22802:11;;;22795:39;22767:2;22760:10;22731:113;;;22862:6;22859:1;22856:13;22853:2;;;-1:-1:-1;;22897:1:1;22879:16;;22872:27;22702:205::o;22912:380::-;22991:1;22987:12;;;;23034;;;23055:2;;23109:4;23101:6;23097:17;23087:27;;23055:2;23162;23154:6;23151:14;23131:18;23128:38;23125:2;;;23208:10;23203:3;23199:20;23196:1;23189:31;23243:4;23240:1;23233:15;23271:4;23268:1;23261:15;23125:2;;22967:325;;;:::o;23297:135::-;23336:3;-1:-1:-1;;23357:17:1;;23354:2;;;23377:18;;:::i;:::-;-1:-1:-1;23424:1:1;23413:13;;23344:88::o;23437:201::-;23475:3;23503:10;23548:2;23541:5;23537:14;23575:2;23566:7;23563:15;23560:2;;;23581:18;;:::i;:::-;23630:1;23617:15;;23483:155;-1:-1:-1;;;23483:155:1:o;23643:112::-;23675:1;23701;23691:2;;23706:18;;:::i;:::-;-1:-1:-1;23740:9:1;;23681:74::o;23760:127::-;23821:10;23816:3;23812:20;23809:1;23802:31;23852:4;23849:1;23842:15;23876:4;23873:1;23866:15;23892:127;23953:10;23948:3;23944:20;23941:1;23934:31;23984:4;23981:1;23974:15;24008:4;24005:1;23998:15;24024:127;24085:10;24080:3;24076:20;24073:1;24066:31;24116:4;24113:1;24106:15;24140:4;24137:1;24130:15;24156:131;-1:-1:-1;;;;;;24230:32:1;;24220:43;;24210:2;;24277:1;24274;24267:12

Swarm Source

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