ETH Price: $3,385.90 (-1.43%)
Gas: 3 Gwei

Token

ChatterShield NFT Collection (Shield)
 

Overview

Max Total Supply

255 Shield

Holders

95

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Shield
0x9ecad9d9d3ed0938cc3b84732d3ffa8ece3a87c8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChatterShield

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-03
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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




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

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


pragma solidity ^0.8.0;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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


// 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/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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





pragma solidity >=0.7.0 <0.9.0;



contract ChatterShield is ERC721Enumerable, Ownable {
  using Strings for uint256;
  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 0.2 ether;
  uint256 public maxSupply = 255;
  uint256 public maxMintAmount = 5;
  uint256 public nftPerAddressLimit = 5;
  address public Admin1;
  address public Admin2;
  address public Reciever;
  bool public paused = true;
  bool public revealed = false;
  mapping(address => uint256) public addressMintedBalance;

  constructor(
      
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri,
    address _feeReciever,
    address _Admin1,
    address _Admin2
  
    
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    Reciever = _feeReciever;
    Admin1 = _Admin1;
    Admin2 = _Admin2;

    
   
  }

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

  // public
  function mint(uint256 _mintAmount) external payable {
    uint256 supply = totalSupply();
     uint256 newCost = cost * _mintAmount;
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");


    if (msg.sender == owner() || msg.sender == Admin1 || msg.sender == Admin2) {
           require(_mintAmount > 0, "need to mint at least 1 NFT");
           require(_mintAmount <= maxSupply, "Max Supply Minted");  
        }

    else if (msg.sender != owner() || msg.sender != Admin1 || msg.sender != Admin2) {
        require (msg.value >= newCost,"Not Enough Eth");
            require(!paused, "the contract is paused");
            require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
            uint256 ownerMintedCount = addressMintedBalance[msg.sender];
            require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");
            payable(Reciever).transfer(newCost);  
            
    }


       
    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }

   
  }
  

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }



  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }
  
  function setMintCostWei(uint256 _newCost) public onlyOwner {// Set cost in WEI 
    cost = _newCost;
  }

  function setReciver(address _newAddress) public onlyOwner {
    Reciever = _newAddress;
  }

  function setAdmin1(address _newAddress) public {
      require(msg.sender == Admin1, "Not Admin");
    Admin1 = _newAddress;
  }

   function setAdmin2(address _newAddress) public {
    require(msg.sender == Admin2, "Not Admin");
    Admin2 = _newAddress;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }


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

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  
 
  function withdraw() public payable onlyOwner {
    payable(owner()).transfer(address(this).balance);
  }

    function claimOtherTokens(IERC20 _tokenAddress, address _walletaddress)
        external
        onlyOwner
    {
        _tokenAddress.transfer(
            _walletaddress,
            _tokenAddress.balanceOf(address(this))
        );
    }



}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"address","name":"_feeReciever","type":"address"},{"internalType":"address","name":"_Admin1","type":"address"},{"internalType":"address","name":"_Admin2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Admin1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Admin2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Reciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_walletaddress","type":"address"}],"name":"claimOtherTokens","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","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":"_newAddress","type":"address"}],"name":"setAdmin1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setAdmin2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setMintCostWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setReciver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003fe565b506702c68af0bb140000600e5560ff600f556005601055600560115560016014806101000a81548160ff0219169083151502179055506000601460156101000a81548160ff021916908315150217905550348015620000af57600080fd5b50604051620056c9380380620056c98339818101604052810190620000d5919062000543565b86868160009080519060200190620000ef929190620003fe565b50806001908051906020019062000108929190620003fe565b5050506200012b6200011f6200021d60201b60201c565b6200022560201b60201c565b6200013c85620002eb60201b60201c565b6200014d846200031760201b60201c565b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620008c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002fb6200034360201b60201c565b80600b908051906020019062000313929190620003fe565b5050565b620003276200034360201b60201c565b80600d90805190602001906200033f929190620003fe565b5050565b620003536200021d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000379620003d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c99062000699565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200040c9062000795565b90600052602060002090601f0160209004810192826200043057600085556200047c565b82601f106200044b57805160ff19168380011785556200047c565b828001600101855582156200047c579182015b828111156200047b5782518255916020019190600101906200045e565b5b5090506200048b91906200048f565b5090565b5b80821115620004aa57600081600090555060010162000490565b5090565b6000620004c5620004bf84620006e4565b620006bb565b905082815260208101848484011115620004e457620004e362000864565b5b620004f18482856200075f565b509392505050565b6000815190506200050a81620008ad565b92915050565b600082601f8301126200052857620005276200085f565b5b81516200053a848260208601620004ae565b91505092915050565b600080600080600080600060e0888a0312156200056557620005646200086e565b5b600088015167ffffffffffffffff81111562000586576200058562000869565b5b620005948a828b0162000510565b975050602088015167ffffffffffffffff811115620005b857620005b762000869565b5b620005c68a828b0162000510565b965050604088015167ffffffffffffffff811115620005ea57620005e962000869565b5b620005f88a828b0162000510565b955050606088015167ffffffffffffffff8111156200061c576200061b62000869565b5b6200062a8a828b0162000510565b94505060806200063d8a828b01620004f9565b93505060a0620006508a828b01620004f9565b92505060c0620006638a828b01620004f9565b91505092959891949750929550565b6000620006816020836200071a565b91506200068e8262000884565b602082019050919050565b60006020820190508181036000830152620006b48162000672565b9050919050565b6000620006c7620006da565b9050620006d58282620007cb565b919050565b6000604051905090565b600067ffffffffffffffff82111562000702576200070162000830565b5b6200070d8262000873565b9050602081019050919050565b600082825260208201905092915050565b600062000738826200073f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200077f57808201518184015260208101905062000762565b838111156200078f576000848401525b50505050565b60006002820490506001821680620007ae57607f821691505b60208210811415620007c557620007c462000801565b5b50919050565b620007d68262000873565b810181811067ffffffffffffffff82111715620007f857620007f762000830565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008b8816200072b565b8114620008c457600080fd5b50565b614df280620008d76000396000f3fe6080604052600436106102885760003560e01c80636352211e1161015a578063b6b11562116100c1578063d5abeb011161007a578063d5abeb01146109a0578063da3ef23f146109cb578063e985e9c5146109f4578063f2c4ce1e14610a31578063f2fde38b14610a5a578063fa604fe814610a8357610288565b8063b6b1156214610890578063b88d4fde146108bb578063ba7d2c76146108e4578063c66828621461090f578063c87b56dd1461093a578063d0eb26b01461097757610288565b80637f767818116101135780637f767818146107b55780638da5cb5b146107de57806395d89b4114610809578063a0712d6814610834578063a22cb46514610850578063a475b5dd1461087957610288565b80636352211e146106a557806366dd5b08146106e25780636c0360eb1461070d57806370a0823114610738578063715018a6146107755780637f00c7a61461078c57610288565b8063239c70ae116101fe57806342842e0e116101b757806342842e0e14610583578063438b6300146105ac5780634f6ccce7146105e9578063518302271461062657806355f804b3146106515780635c975abb1461067a57610288565b8063239c70ae1461049657806323b872dd146104c157806323cb3fef146104ea5780632f745c59146105135780633ae7dc20146105505780633ccfd60b1461057957610288565b8063095ea7b311610250578063095ea7b3146103865780630af7bb1b146103af57806313faede6146103da57806318160ddd1461040557806318cae269146104305780631bf602ff1461046d57610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613804565b610aac565b6040516102c19190613f40565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137aa565b610b26565b005b3480156102ff57600080fd5b50610308610b4a565b6040516103159190613f5b565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906138e7565b610bdc565b6040516103529190613e8e565b60405180910390f35b34801561036757600080fd5b50610370610c22565b60405161037d9190613f5b565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a8919061376a565b610cb0565b005b3480156103bb57600080fd5b506103c4610dc8565b6040516103d19190613e8e565b60405180910390f35b3480156103e657600080fd5b506103ef610dee565b6040516103fc919061427d565b60405180910390f35b34801561041157600080fd5b5061041a610df4565b604051610427919061427d565b60405180910390f35b34801561043c57600080fd5b50610457600480360381019061045291906135e7565b610e01565b604051610464919061427d565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f91906135e7565b610e19565b005b3480156104a257600080fd5b506104ab610eed565b6040516104b8919061427d565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613654565b610ef3565b005b3480156104f657600080fd5b50610511600480360381019061050c91906135e7565b610f53565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061376a565b610f9f565b604051610547919061427d565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061385e565b611044565b005b610581611166565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613654565b6111be565b005b3480156105b857600080fd5b506105d360048036038101906105ce91906135e7565b6111de565b6040516105e09190613f1e565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906138e7565b61128c565b60405161061d919061427d565b60405180910390f35b34801561063257600080fd5b5061063b6112fd565b6040516106489190613f40565b60405180910390f35b34801561065d57600080fd5b506106786004803603810190610673919061389e565b611310565b005b34801561068657600080fd5b5061068f611332565b60405161069c9190613f40565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906138e7565b611343565b6040516106d99190613e8e565b60405180910390f35b3480156106ee57600080fd5b506106f76113f5565b6040516107049190613e8e565b60405180910390f35b34801561071957600080fd5b5061072261141b565b60405161072f9190613f5b565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906135e7565b6114a9565b60405161076c919061427d565b60405180910390f35b34801561078157600080fd5b5061078a611561565b005b34801561079857600080fd5b506107b360048036038101906107ae91906138e7565b611575565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906138e7565b611587565b005b3480156107ea57600080fd5b506107f3611599565b6040516108009190613e8e565b60405180910390f35b34801561081557600080fd5b5061081e6115c3565b60405161082b9190613f5b565b60405180910390f35b61084e600480360381019061084991906138e7565b611655565b005b34801561085c57600080fd5b506108776004803603810190610872919061372a565b611bd3565b005b34801561088557600080fd5b5061088e611be9565b005b34801561089c57600080fd5b506108a5611c0e565b6040516108b29190613e8e565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd91906136a7565b611c34565b005b3480156108f057600080fd5b506108f9611c96565b604051610906919061427d565b60405180910390f35b34801561091b57600080fd5b50610924611c9c565b6040516109319190613f5b565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c91906138e7565b611d2a565b60405161096e9190613f5b565b60405180910390f35b34801561098357600080fd5b5061099e600480360381019061099991906138e7565b611e83565b005b3480156109ac57600080fd5b506109b5611e95565b6040516109c2919061427d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed919061389e565b611e9b565b005b348015610a0057600080fd5b50610a1b6004803603810190610a169190613614565b611ebd565b604051610a289190613f40565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061389e565b611f51565b005b348015610a6657600080fd5b50610a816004803603810190610a7c91906135e7565b611f73565b005b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906135e7565b611ff7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1f5750610b1e826120cb565b5b9050919050565b610b2e6121ad565b806014806101000a81548160ff02191690831515021790555050565b606060008054610b599061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b859061458d565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b5050505050905090565b6000610be78261222b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c2f9061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061458d565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505081565b6000610cbb82611343565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d23906141dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4b612276565b73ffffffffffffffffffffffffffffffffffffffff161480610d7a5750610d7981610d74612276565b611ebd565b5b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db09061411d565b60405180910390fd5b610dc3838361227e565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600880549050905090565b60156020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061409d565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b610f04610efe612276565b82612337565b610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a9061423d565b60405180910390fd5b610f4e8383836123cc565b505050565b610f5b6121ad565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610faa836114a9565b8210610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613f7d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61104c6121ad565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110a29190613e8e565b60206040518083038186803b1580156110ba57600080fd5b505afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f29190613914565b6040518363ffffffff1660e01b815260040161110f929190613ef5565b602060405180830381600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116191906137d7565b505050565b61116e6121ad565b611176611599565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111bb573d6000803e3d6000fd5b50565b6111d983838360405180602001604052806000815250611c34565b505050565b606060006111eb836114a9565b905060008167ffffffffffffffff81111561120957611208614755565b5b6040519080825280602002602001820160405280156112375781602001602082028036833780820191505090505b50905060005b828110156112815761124f8582610f9f565b82828151811061126257611261614726565b5b6020026020010181815250508080611279906145f0565b91505061123d565b508092505050919050565b6000611296610df4565b82106112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906141fd565b60405180910390fd5b600882815481106112eb576112ea614726565b5b90600052602060002001549050919050565b601460159054906101000a900460ff1681565b6113186121ad565b80600b908051906020019061132e9291906133bc565b5050565b60148054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906141bd565b60405180910390fd5b80915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b80546114289061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546114549061458d565b80156114a15780601f10611476576101008083540402835291602001916114a1565b820191906000526020600020905b81548152906001019060200180831161148457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906140bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115696121ad565b6115736000612633565b565b61157d6121ad565b8060108190555050565b61158f6121ad565b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115d29061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546115fe9061458d565b801561164b5780601f106116205761010080835404028352916020019161164b565b820191906000526020600020905b81548152906001019060200180831161162e57829003601f168201915b5050505050905090565b600061165f610df4565b9050600082600e546116719190614437565b9050600083116116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061425d565b60405180910390fd5b600f5483836116c591906143b0565b1115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd906140dd565b60405180910390fd5b61170e611599565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117945750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806117ec5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561187e5760008311611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061425d565b60405180910390fd5b600f54831115611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061403d565b60405180910390fd5b611b42565b611886611599565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061190e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b806119675750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611b4157803410156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061421d565b60405180910390fd5b60148054906101000a900460ff16156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061417d565b60405180910390fd5b601054831115611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a39906140fd565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548482611a9591906143b0565b1115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd9061401d565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611b3e573d6000803e3d6000fd5b50505b5b6000600190505b838111611bcd57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ba0906145f0565b9190505550611bba338285611bb591906143b0565b6126f9565b8080611bc5906145f0565b915050611b49565b50505050565b611be5611bde612276565b8383612717565b5050565b611bf16121ad565b6001601460156101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c45611c3f612276565b83612337565b611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061423d565b60405180910390fd5b611c9084848484612884565b50505050565b60115481565b600c8054611ca99061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd59061458d565b8015611d225780601f10611cf757610100808354040283529160200191611d22565b820191906000526020600020905b815481529060010190602001808311611d0557829003601f168201915b505050505081565b6060611d35826128e0565b611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b9061419d565b60405180910390fd5b60001515601460159054906101000a900460ff1615151415611e2257600d8054611d9d9061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc99061458d565b8015611e165780601f10611deb57610100808354040283529160200191611e16565b820191906000526020600020905b815481529060010190602001808311611df957829003601f168201915b50505050509050611e7e565b6000611e2c61294c565b90506000815111611e4c5760405180602001604052806000815250611e7a565b80611e56846129de565b600c604051602001611e6a93929190613e5d565b6040516020818303038152906040525b9150505b919050565b611e8b6121ad565b8060118190555050565b600f5481565b611ea36121ad565b80600c9080519060200190611eb99291906133bc565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f596121ad565b80600d9080519060200190611f6f9291906133bc565b5050565b611f7b6121ad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613fbd565b60405180910390fd5b611ff481612633565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e9061409d565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a657506121a582612b3f565b5b9050919050565b6121b5612276565b73ffffffffffffffffffffffffffffffffffffffff166121d3611599565b73ffffffffffffffffffffffffffffffffffffffff1614612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122209061415d565b60405180910390fd5b565b612234816128e0565b612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a906141bd565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122f183611343565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061234383611343565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238557506123848185611ebd565b5b806123c357508373ffffffffffffffffffffffffffffffffffffffff166123ab84610bdc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123ec82611343565b73ffffffffffffffffffffffffffffffffffffffff1614612442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243990613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99061405d565b60405180910390fd5b6124bd838383612ba9565b6124c860008261227e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125189190614491565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256f91906143b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461262e838383612cbd565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612713828260405180602001604052806000815250612cc2565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061407d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128779190613f40565b60405180910390a3505050565b61288f8484846123cc565b61289b84848484612d1d565b6128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190613f9d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461295b9061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546129879061458d565b80156129d45780601f106129a9576101008083540402835291602001916129d4565b820191906000526020600020905b8154815290600101906020018083116129b757829003601f168201915b5050505050905090565b60606000821415612a26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b3a565b600082905060005b60008214612a58578080612a41906145f0565b915050600a82612a519190614406565b9150612a2e565b60008167ffffffffffffffff811115612a7457612a73614755565b5b6040519080825280601f01601f191660200182016040528015612aa65781602001600182028036833780820191505090505b5090505b60008514612b3357600182612abf9190614491565b9150600a85612ace9190614639565b6030612ada91906143b0565b60f81b818381518110612af057612aef614726565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b2c9190614406565b9450612aaa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bb4838383612eb4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf757612bf281612eb9565b612c36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c3557612c348382612f02565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c7957612c748161306f565b612cb8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cb757612cb68282613140565b5b5b505050565b505050565b612ccc83836131bf565b612cd96000848484612d1d565b612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90613f9d565b60405180910390fd5b505050565b6000612d3e8473ffffffffffffffffffffffffffffffffffffffff16613399565b15612ea7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d67612276565b8786866040518563ffffffff1660e01b8152600401612d899493929190613ea9565b602060405180830381600087803b158015612da357600080fd5b505af1925050508015612dd457506040513d601f19601f82011682018060405250810190612dd19190613831565b60015b612e57573d8060008114612e04576040519150601f19603f3d011682016040523d82523d6000602084013e612e09565b606091505b50600081511415612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4690613f9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eac565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f0f846114a9565b612f199190614491565b9050600060076000848152602001908152602001600020549050818114612ffe576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130839190614491565b90506000600960008481526020019081526020016000205490506000600883815481106130b3576130b2614726565b5b9060005260206000200154905080600883815481106130d5576130d4614726565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613124576131236146f7565b5b6001900381819060005260206000200160009055905550505050565b600061314b836114a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132269061413d565b60405180910390fd5b613238816128e0565b15613278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326f90613ffd565b60405180910390fd5b61328460008383612ba9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d491906143b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339560008383612cbd565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546133c89061458d565b90600052602060002090601f0160209004810192826133ea5760008555613431565b82601f1061340357805160ff1916838001178555613431565b82800160010185558215613431579182015b82811115613430578251825591602001919060010190613415565b5b50905061343e9190613442565b5090565b5b8082111561345b576000816000905550600101613443565b5090565b600061347261346d846142bd565b614298565b90508281526020810184848401111561348e5761348d614789565b5b61349984828561454b565b509392505050565b60006134b46134af846142ee565b614298565b9050828152602081018484840111156134d0576134cf614789565b5b6134db84828561454b565b509392505050565b6000813590506134f281614d49565b92915050565b60008135905061350781614d60565b92915050565b60008151905061351c81614d60565b92915050565b60008135905061353181614d77565b92915050565b60008151905061354681614d77565b92915050565b600082601f83011261356157613560614784565b5b813561357184826020860161345f565b91505092915050565b60008135905061358981614d8e565b92915050565b600082601f8301126135a4576135a3614784565b5b81356135b48482602086016134a1565b91505092915050565b6000813590506135cc81614da5565b92915050565b6000815190506135e181614da5565b92915050565b6000602082840312156135fd576135fc614793565b5b600061360b848285016134e3565b91505092915050565b6000806040838503121561362b5761362a614793565b5b6000613639858286016134e3565b925050602061364a858286016134e3565b9150509250929050565b60008060006060848603121561366d5761366c614793565b5b600061367b868287016134e3565b935050602061368c868287016134e3565b925050604061369d868287016135bd565b9150509250925092565b600080600080608085870312156136c1576136c0614793565b5b60006136cf878288016134e3565b94505060206136e0878288016134e3565b93505060406136f1878288016135bd565b925050606085013567ffffffffffffffff8111156137125761371161478e565b5b61371e8782880161354c565b91505092959194509250565b6000806040838503121561374157613740614793565b5b600061374f858286016134e3565b9250506020613760858286016134f8565b9150509250929050565b6000806040838503121561378157613780614793565b5b600061378f858286016134e3565b92505060206137a0858286016135bd565b9150509250929050565b6000602082840312156137c0576137bf614793565b5b60006137ce848285016134f8565b91505092915050565b6000602082840312156137ed576137ec614793565b5b60006137fb8482850161350d565b91505092915050565b60006020828403121561381a57613819614793565b5b600061382884828501613522565b91505092915050565b60006020828403121561384757613846614793565b5b600061385584828501613537565b91505092915050565b6000806040838503121561387557613874614793565b5b60006138838582860161357a565b9250506020613894858286016134e3565b9150509250929050565b6000602082840312156138b4576138b3614793565b5b600082013567ffffffffffffffff8111156138d2576138d161478e565b5b6138de8482850161358f565b91505092915050565b6000602082840312156138fd576138fc614793565b5b600061390b848285016135bd565b91505092915050565b60006020828403121561392a57613929614793565b5b6000613938848285016135d2565b91505092915050565b600061394d8383613e3f565b60208301905092915050565b613962816144c5565b82525050565b600061397382614344565b61397d8185614372565b93506139888361431f565b8060005b838110156139b95781516139a08882613941565b97506139ab83614365565b92505060018101905061398c565b5085935050505092915050565b6139cf816144d7565b82525050565b60006139e08261434f565b6139ea8185614383565b93506139fa81856020860161455a565b613a0381614798565b840191505092915050565b6000613a198261435a565b613a238185614394565b9350613a3381856020860161455a565b613a3c81614798565b840191505092915050565b6000613a528261435a565b613a5c81856143a5565b9350613a6c81856020860161455a565b80840191505092915050565b60008154613a858161458d565b613a8f81866143a5565b94506001821660008114613aaa5760018114613abb57613aee565b60ff19831686528186019350613aee565b613ac48561432f565b60005b83811015613ae657815481890152600182019150602081019050613ac7565b838801955050505b50505092915050565b6000613b04602b83614394565b9150613b0f826147a9565b604082019050919050565b6000613b27603283614394565b9150613b32826147f8565b604082019050919050565b6000613b4a602683614394565b9150613b5582614847565b604082019050919050565b6000613b6d602583614394565b9150613b7882614896565b604082019050919050565b6000613b90601c83614394565b9150613b9b826148e5565b602082019050919050565b6000613bb3601c83614394565b9150613bbe8261490e565b602082019050919050565b6000613bd6601183614394565b9150613be182614937565b602082019050919050565b6000613bf9602483614394565b9150613c0482614960565b604082019050919050565b6000613c1c601983614394565b9150613c27826149af565b602082019050919050565b6000613c3f600983614394565b9150613c4a826149d8565b602082019050919050565b6000613c62602983614394565b9150613c6d82614a01565b604082019050919050565b6000613c85601683614394565b9150613c9082614a50565b602082019050919050565b6000613ca8602483614394565b9150613cb382614a79565b604082019050919050565b6000613ccb603e83614394565b9150613cd682614ac8565b604082019050919050565b6000613cee602083614394565b9150613cf982614b17565b602082019050919050565b6000613d11602083614394565b9150613d1c82614b40565b602082019050919050565b6000613d34601683614394565b9150613d3f82614b69565b602082019050919050565b6000613d57602f83614394565b9150613d6282614b92565b604082019050919050565b6000613d7a601883614394565b9150613d8582614be1565b602082019050919050565b6000613d9d602183614394565b9150613da882614c0a565b604082019050919050565b6000613dc0602c83614394565b9150613dcb82614c59565b604082019050919050565b6000613de3600e83614394565b9150613dee82614ca8565b602082019050919050565b6000613e06602e83614394565b9150613e1182614cd1565b604082019050919050565b6000613e29601b83614394565b9150613e3482614d20565b602082019050919050565b613e4881614541565b82525050565b613e5781614541565b82525050565b6000613e698286613a47565b9150613e758285613a47565b9150613e818284613a78565b9150819050949350505050565b6000602082019050613ea36000830184613959565b92915050565b6000608082019050613ebe6000830187613959565b613ecb6020830186613959565b613ed86040830185613e4e565b8181036060830152613eea81846139d5565b905095945050505050565b6000604082019050613f0a6000830185613959565b613f176020830184613e4e565b9392505050565b60006020820190508181036000830152613f388184613968565b905092915050565b6000602082019050613f5560008301846139c6565b92915050565b60006020820190508181036000830152613f758184613a0e565b905092915050565b60006020820190508181036000830152613f9681613af7565b9050919050565b60006020820190508181036000830152613fb681613b1a565b9050919050565b60006020820190508181036000830152613fd681613b3d565b9050919050565b60006020820190508181036000830152613ff681613b60565b9050919050565b6000602082019050818103600083015261401681613b83565b9050919050565b6000602082019050818103600083015261403681613ba6565b9050919050565b6000602082019050818103600083015261405681613bc9565b9050919050565b6000602082019050818103600083015261407681613bec565b9050919050565b6000602082019050818103600083015261409681613c0f565b9050919050565b600060208201905081810360008301526140b681613c32565b9050919050565b600060208201905081810360008301526140d681613c55565b9050919050565b600060208201905081810360008301526140f681613c78565b9050919050565b6000602082019050818103600083015261411681613c9b565b9050919050565b6000602082019050818103600083015261413681613cbe565b9050919050565b6000602082019050818103600083015261415681613ce1565b9050919050565b6000602082019050818103600083015261417681613d04565b9050919050565b6000602082019050818103600083015261419681613d27565b9050919050565b600060208201905081810360008301526141b681613d4a565b9050919050565b600060208201905081810360008301526141d681613d6d565b9050919050565b600060208201905081810360008301526141f681613d90565b9050919050565b6000602082019050818103600083015261421681613db3565b9050919050565b6000602082019050818103600083015261423681613dd6565b9050919050565b6000602082019050818103600083015261425681613df9565b9050919050565b6000602082019050818103600083015261427681613e1c565b9050919050565b60006020820190506142926000830184613e4e565b92915050565b60006142a26142b3565b90506142ae82826145bf565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d8576142d7614755565b5b6142e182614798565b9050602081019050919050565b600067ffffffffffffffff82111561430957614308614755565b5b61431282614798565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143bb82614541565b91506143c683614541565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143fb576143fa61466a565b5b828201905092915050565b600061441182614541565b915061441c83614541565b92508261442c5761442b614699565b5b828204905092915050565b600061444282614541565b915061444d83614541565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144865761448561466a565b5b828202905092915050565b600061449c82614541565b91506144a783614541565b9250828210156144ba576144b961466a565b5b828203905092915050565b60006144d082614521565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061451a826144c5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561457857808201518184015260208101905061455d565b83811115614587576000848401525b50505050565b600060028204905060018216806145a557607f821691505b602082108114156145b9576145b86146c8565b5b50919050565b6145c882614798565b810181811067ffffffffffffffff821117156145e7576145e6614755565b5b80604052505050565b60006145fb82614541565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462e5761462d61466a565b5b600182019050919050565b600061464482614541565b915061464f83614541565b92508261465f5761465e614699565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4d617820537570706c79204d696e746564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f742041646d696e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820457468000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614d52816144c5565b8114614d5d57600080fd5b50565b614d69816144d7565b8114614d7457600080fd5b50565b614d80816144e3565b8114614d8b57600080fd5b50565b614d978161450f565b8114614da257600080fd5b50565b614dae81614541565b8114614db957600080fd5b5056fea2646970667358221220e9faa44e8aa0a96ca41964830990531d432d3ad2053f2dc7cba0eae120fb090164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000ef5eab85edcb1cad33491c1f576dd356db7d63b900000000000000000000000096453ff48af2195e8dce2f7da42ef97164024cdd000000000000000000000000fb673215b7bd434c930a56b8f1c898ec4063837b000000000000000000000000000000000000000000000000000000000000001c43686174746572536869656c64204e465420436f6c6c656374696f6e000000000000000000000000000000000000000000000000000000000000000000000006536869656c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696369697461786c353369363662716a6132766176363271623474686e6a6973787233696c7965746d7975636e3374626a656536712f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696369697461786c353369363662716a6132766176363271623474686e6a6973787233696c7965746d7975636e3374626a656536712f00000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636352211e1161015a578063b6b11562116100c1578063d5abeb011161007a578063d5abeb01146109a0578063da3ef23f146109cb578063e985e9c5146109f4578063f2c4ce1e14610a31578063f2fde38b14610a5a578063fa604fe814610a8357610288565b8063b6b1156214610890578063b88d4fde146108bb578063ba7d2c76146108e4578063c66828621461090f578063c87b56dd1461093a578063d0eb26b01461097757610288565b80637f767818116101135780637f767818146107b55780638da5cb5b146107de57806395d89b4114610809578063a0712d6814610834578063a22cb46514610850578063a475b5dd1461087957610288565b80636352211e146106a557806366dd5b08146106e25780636c0360eb1461070d57806370a0823114610738578063715018a6146107755780637f00c7a61461078c57610288565b8063239c70ae116101fe57806342842e0e116101b757806342842e0e14610583578063438b6300146105ac5780634f6ccce7146105e9578063518302271461062657806355f804b3146106515780635c975abb1461067a57610288565b8063239c70ae1461049657806323b872dd146104c157806323cb3fef146104ea5780632f745c59146105135780633ae7dc20146105505780633ccfd60b1461057957610288565b8063095ea7b311610250578063095ea7b3146103865780630af7bb1b146103af57806313faede6146103da57806318160ddd1461040557806318cae269146104305780631bf602ff1461046d57610288565b806301ffc9a71461028d57806302329a29146102ca57806306fdde03146102f3578063081812fc1461031e578063081c8c441461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613804565b610aac565b6040516102c19190613f40565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137aa565b610b26565b005b3480156102ff57600080fd5b50610308610b4a565b6040516103159190613f5b565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906138e7565b610bdc565b6040516103529190613e8e565b60405180910390f35b34801561036757600080fd5b50610370610c22565b60405161037d9190613f5b565b60405180910390f35b34801561039257600080fd5b506103ad60048036038101906103a8919061376a565b610cb0565b005b3480156103bb57600080fd5b506103c4610dc8565b6040516103d19190613e8e565b60405180910390f35b3480156103e657600080fd5b506103ef610dee565b6040516103fc919061427d565b60405180910390f35b34801561041157600080fd5b5061041a610df4565b604051610427919061427d565b60405180910390f35b34801561043c57600080fd5b50610457600480360381019061045291906135e7565b610e01565b604051610464919061427d565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f91906135e7565b610e19565b005b3480156104a257600080fd5b506104ab610eed565b6040516104b8919061427d565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613654565b610ef3565b005b3480156104f657600080fd5b50610511600480360381019061050c91906135e7565b610f53565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061376a565b610f9f565b604051610547919061427d565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061385e565b611044565b005b610581611166565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613654565b6111be565b005b3480156105b857600080fd5b506105d360048036038101906105ce91906135e7565b6111de565b6040516105e09190613f1e565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906138e7565b61128c565b60405161061d919061427d565b60405180910390f35b34801561063257600080fd5b5061063b6112fd565b6040516106489190613f40565b60405180910390f35b34801561065d57600080fd5b506106786004803603810190610673919061389e565b611310565b005b34801561068657600080fd5b5061068f611332565b60405161069c9190613f40565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906138e7565b611343565b6040516106d99190613e8e565b60405180910390f35b3480156106ee57600080fd5b506106f76113f5565b6040516107049190613e8e565b60405180910390f35b34801561071957600080fd5b5061072261141b565b60405161072f9190613f5b565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a91906135e7565b6114a9565b60405161076c919061427d565b60405180910390f35b34801561078157600080fd5b5061078a611561565b005b34801561079857600080fd5b506107b360048036038101906107ae91906138e7565b611575565b005b3480156107c157600080fd5b506107dc60048036038101906107d791906138e7565b611587565b005b3480156107ea57600080fd5b506107f3611599565b6040516108009190613e8e565b60405180910390f35b34801561081557600080fd5b5061081e6115c3565b60405161082b9190613f5b565b60405180910390f35b61084e600480360381019061084991906138e7565b611655565b005b34801561085c57600080fd5b506108776004803603810190610872919061372a565b611bd3565b005b34801561088557600080fd5b5061088e611be9565b005b34801561089c57600080fd5b506108a5611c0e565b6040516108b29190613e8e565b60405180910390f35b3480156108c757600080fd5b506108e260048036038101906108dd91906136a7565b611c34565b005b3480156108f057600080fd5b506108f9611c96565b604051610906919061427d565b60405180910390f35b34801561091b57600080fd5b50610924611c9c565b6040516109319190613f5b565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c91906138e7565b611d2a565b60405161096e9190613f5b565b60405180910390f35b34801561098357600080fd5b5061099e600480360381019061099991906138e7565b611e83565b005b3480156109ac57600080fd5b506109b5611e95565b6040516109c2919061427d565b60405180910390f35b3480156109d757600080fd5b506109f260048036038101906109ed919061389e565b611e9b565b005b348015610a0057600080fd5b50610a1b6004803603810190610a169190613614565b611ebd565b604051610a289190613f40565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a53919061389e565b611f51565b005b348015610a6657600080fd5b50610a816004803603810190610a7c91906135e7565b611f73565b005b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906135e7565b611ff7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b1f5750610b1e826120cb565b5b9050919050565b610b2e6121ad565b806014806101000a81548160ff02191690831515021790555050565b606060008054610b599061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b859061458d565b8015610bd25780601f10610ba757610100808354040283529160200191610bd2565b820191906000526020600020905b815481529060010190602001808311610bb557829003601f168201915b5050505050905090565b6000610be78261222b565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c2f9061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b9061458d565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b505050505081565b6000610cbb82611343565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d23906141dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d4b612276565b73ffffffffffffffffffffffffffffffffffffffff161480610d7a5750610d7981610d74612276565b611ebd565b5b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db09061411d565b60405180910390fd5b610dc3838361227e565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600880549050905090565b60156020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061409d565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b610f04610efe612276565b82612337565b610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a9061423d565b60405180910390fd5b610f4e8383836123cc565b505050565b610f5b6121ad565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610faa836114a9565b8210610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613f7d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61104c6121ad565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110a29190613e8e565b60206040518083038186803b1580156110ba57600080fd5b505afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f29190613914565b6040518363ffffffff1660e01b815260040161110f929190613ef5565b602060405180830381600087803b15801561112957600080fd5b505af115801561113d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116191906137d7565b505050565b61116e6121ad565b611176611599565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111bb573d6000803e3d6000fd5b50565b6111d983838360405180602001604052806000815250611c34565b505050565b606060006111eb836114a9565b905060008167ffffffffffffffff81111561120957611208614755565b5b6040519080825280602002602001820160405280156112375781602001602082028036833780820191505090505b50905060005b828110156112815761124f8582610f9f565b82828151811061126257611261614726565b5b6020026020010181815250508080611279906145f0565b91505061123d565b508092505050919050565b6000611296610df4565b82106112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce906141fd565b60405180910390fd5b600882815481106112eb576112ea614726565b5b90600052602060002001549050919050565b601460159054906101000a900460ff1681565b6113186121ad565b80600b908051906020019061132e9291906133bc565b5050565b60148054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906141bd565b60405180910390fd5b80915050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b80546114289061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546114549061458d565b80156114a15780601f10611476576101008083540402835291602001916114a1565b820191906000526020600020905b81548152906001019060200180831161148457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561151a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611511906140bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115696121ad565b6115736000612633565b565b61157d6121ad565b8060108190555050565b61158f6121ad565b80600e8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115d29061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546115fe9061458d565b801561164b5780601f106116205761010080835404028352916020019161164b565b820191906000526020600020905b81548152906001019060200180831161162e57829003601f168201915b5050505050905090565b600061165f610df4565b9050600082600e546116719190614437565b9050600083116116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad9061425d565b60405180910390fd5b600f5483836116c591906143b0565b1115611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd906140dd565b60405180910390fd5b61170e611599565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117945750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806117ec5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561187e5760008311611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061425d565b60405180910390fd5b600f54831115611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061403d565b60405180910390fd5b611b42565b611886611599565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061190e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b806119675750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611b4157803410156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061421d565b60405180910390fd5b60148054906101000a900460ff16156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061417d565b60405180910390fd5b601054831115611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a39906140fd565b60405180910390fd5b6000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548482611a9591906143b0565b1115611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd9061401d565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611b3e573d6000803e3d6000fd5b50505b5b6000600190505b838111611bcd57601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611ba0906145f0565b9190505550611bba338285611bb591906143b0565b6126f9565b8080611bc5906145f0565b915050611b49565b50505050565b611be5611bde612276565b8383612717565b5050565b611bf16121ad565b6001601460156101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c45611c3f612276565b83612337565b611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061423d565b60405180910390fd5b611c9084848484612884565b50505050565b60115481565b600c8054611ca99061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd59061458d565b8015611d225780601f10611cf757610100808354040283529160200191611d22565b820191906000526020600020905b815481529060010190602001808311611d0557829003601f168201915b505050505081565b6060611d35826128e0565b611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b9061419d565b60405180910390fd5b60001515601460159054906101000a900460ff1615151415611e2257600d8054611d9d9061458d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc99061458d565b8015611e165780601f10611deb57610100808354040283529160200191611e16565b820191906000526020600020905b815481529060010190602001808311611df957829003601f168201915b50505050509050611e7e565b6000611e2c61294c565b90506000815111611e4c5760405180602001604052806000815250611e7a565b80611e56846129de565b600c604051602001611e6a93929190613e5d565b6040516020818303038152906040525b9150505b919050565b611e8b6121ad565b8060118190555050565b600f5481565b611ea36121ad565b80600c9080519060200190611eb99291906133bc565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f596121ad565b80600d9080519060200190611f6f9291906133bc565b5050565b611f7b6121ad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613fbd565b60405180910390fd5b611ff481612633565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e9061409d565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a657506121a582612b3f565b5b9050919050565b6121b5612276565b73ffffffffffffffffffffffffffffffffffffffff166121d3611599565b73ffffffffffffffffffffffffffffffffffffffff1614612229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122209061415d565b60405180910390fd5b565b612234816128e0565b612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a906141bd565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122f183611343565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061234383611343565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061238557506123848185611ebd565b5b806123c357508373ffffffffffffffffffffffffffffffffffffffff166123ab84610bdc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123ec82611343565b73ffffffffffffffffffffffffffffffffffffffff1614612442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243990613fdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a99061405d565b60405180910390fd5b6124bd838383612ba9565b6124c860008261227e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125189190614491565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256f91906143b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461262e838383612cbd565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612713828260405180602001604052806000815250612cc2565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061407d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128779190613f40565b60405180910390a3505050565b61288f8484846123cc565b61289b84848484612d1d565b6128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190613f9d565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461295b9061458d565b80601f01602080910402602001604051908101604052809291908181526020018280546129879061458d565b80156129d45780601f106129a9576101008083540402835291602001916129d4565b820191906000526020600020905b8154815290600101906020018083116129b757829003601f168201915b5050505050905090565b60606000821415612a26576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b3a565b600082905060005b60008214612a58578080612a41906145f0565b915050600a82612a519190614406565b9150612a2e565b60008167ffffffffffffffff811115612a7457612a73614755565b5b6040519080825280601f01601f191660200182016040528015612aa65781602001600182028036833780820191505090505b5090505b60008514612b3357600182612abf9190614491565b9150600a85612ace9190614639565b6030612ada91906143b0565b60f81b818381518110612af057612aef614726565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b2c9190614406565b9450612aaa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bb4838383612eb4565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bf757612bf281612eb9565b612c36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c3557612c348382612f02565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c7957612c748161306f565b612cb8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cb757612cb68282613140565b5b5b505050565b505050565b612ccc83836131bf565b612cd96000848484612d1d565b612d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0f90613f9d565b60405180910390fd5b505050565b6000612d3e8473ffffffffffffffffffffffffffffffffffffffff16613399565b15612ea7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d67612276565b8786866040518563ffffffff1660e01b8152600401612d899493929190613ea9565b602060405180830381600087803b158015612da357600080fd5b505af1925050508015612dd457506040513d601f19601f82011682018060405250810190612dd19190613831565b60015b612e57573d8060008114612e04576040519150601f19603f3d011682016040523d82523d6000602084013e612e09565b606091505b50600081511415612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4690613f9d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eac565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f0f846114a9565b612f199190614491565b9050600060076000848152602001908152602001600020549050818114612ffe576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130839190614491565b90506000600960008481526020019081526020016000205490506000600883815481106130b3576130b2614726565b5b9060005260206000200154905080600883815481106130d5576130d4614726565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613124576131236146f7565b5b6001900381819060005260206000200160009055905550505050565b600061314b836114a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132269061413d565b60405180910390fd5b613238816128e0565b15613278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326f90613ffd565b60405180910390fd5b61328460008383612ba9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d491906143b0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461339560008383612cbd565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546133c89061458d565b90600052602060002090601f0160209004810192826133ea5760008555613431565b82601f1061340357805160ff1916838001178555613431565b82800160010185558215613431579182015b82811115613430578251825591602001919060010190613415565b5b50905061343e9190613442565b5090565b5b8082111561345b576000816000905550600101613443565b5090565b600061347261346d846142bd565b614298565b90508281526020810184848401111561348e5761348d614789565b5b61349984828561454b565b509392505050565b60006134b46134af846142ee565b614298565b9050828152602081018484840111156134d0576134cf614789565b5b6134db84828561454b565b509392505050565b6000813590506134f281614d49565b92915050565b60008135905061350781614d60565b92915050565b60008151905061351c81614d60565b92915050565b60008135905061353181614d77565b92915050565b60008151905061354681614d77565b92915050565b600082601f83011261356157613560614784565b5b813561357184826020860161345f565b91505092915050565b60008135905061358981614d8e565b92915050565b600082601f8301126135a4576135a3614784565b5b81356135b48482602086016134a1565b91505092915050565b6000813590506135cc81614da5565b92915050565b6000815190506135e181614da5565b92915050565b6000602082840312156135fd576135fc614793565b5b600061360b848285016134e3565b91505092915050565b6000806040838503121561362b5761362a614793565b5b6000613639858286016134e3565b925050602061364a858286016134e3565b9150509250929050565b60008060006060848603121561366d5761366c614793565b5b600061367b868287016134e3565b935050602061368c868287016134e3565b925050604061369d868287016135bd565b9150509250925092565b600080600080608085870312156136c1576136c0614793565b5b60006136cf878288016134e3565b94505060206136e0878288016134e3565b93505060406136f1878288016135bd565b925050606085013567ffffffffffffffff8111156137125761371161478e565b5b61371e8782880161354c565b91505092959194509250565b6000806040838503121561374157613740614793565b5b600061374f858286016134e3565b9250506020613760858286016134f8565b9150509250929050565b6000806040838503121561378157613780614793565b5b600061378f858286016134e3565b92505060206137a0858286016135bd565b9150509250929050565b6000602082840312156137c0576137bf614793565b5b60006137ce848285016134f8565b91505092915050565b6000602082840312156137ed576137ec614793565b5b60006137fb8482850161350d565b91505092915050565b60006020828403121561381a57613819614793565b5b600061382884828501613522565b91505092915050565b60006020828403121561384757613846614793565b5b600061385584828501613537565b91505092915050565b6000806040838503121561387557613874614793565b5b60006138838582860161357a565b9250506020613894858286016134e3565b9150509250929050565b6000602082840312156138b4576138b3614793565b5b600082013567ffffffffffffffff8111156138d2576138d161478e565b5b6138de8482850161358f565b91505092915050565b6000602082840312156138fd576138fc614793565b5b600061390b848285016135bd565b91505092915050565b60006020828403121561392a57613929614793565b5b6000613938848285016135d2565b91505092915050565b600061394d8383613e3f565b60208301905092915050565b613962816144c5565b82525050565b600061397382614344565b61397d8185614372565b93506139888361431f565b8060005b838110156139b95781516139a08882613941565b97506139ab83614365565b92505060018101905061398c565b5085935050505092915050565b6139cf816144d7565b82525050565b60006139e08261434f565b6139ea8185614383565b93506139fa81856020860161455a565b613a0381614798565b840191505092915050565b6000613a198261435a565b613a238185614394565b9350613a3381856020860161455a565b613a3c81614798565b840191505092915050565b6000613a528261435a565b613a5c81856143a5565b9350613a6c81856020860161455a565b80840191505092915050565b60008154613a858161458d565b613a8f81866143a5565b94506001821660008114613aaa5760018114613abb57613aee565b60ff19831686528186019350613aee565b613ac48561432f565b60005b83811015613ae657815481890152600182019150602081019050613ac7565b838801955050505b50505092915050565b6000613b04602b83614394565b9150613b0f826147a9565b604082019050919050565b6000613b27603283614394565b9150613b32826147f8565b604082019050919050565b6000613b4a602683614394565b9150613b5582614847565b604082019050919050565b6000613b6d602583614394565b9150613b7882614896565b604082019050919050565b6000613b90601c83614394565b9150613b9b826148e5565b602082019050919050565b6000613bb3601c83614394565b9150613bbe8261490e565b602082019050919050565b6000613bd6601183614394565b9150613be182614937565b602082019050919050565b6000613bf9602483614394565b9150613c0482614960565b604082019050919050565b6000613c1c601983614394565b9150613c27826149af565b602082019050919050565b6000613c3f600983614394565b9150613c4a826149d8565b602082019050919050565b6000613c62602983614394565b9150613c6d82614a01565b604082019050919050565b6000613c85601683614394565b9150613c9082614a50565b602082019050919050565b6000613ca8602483614394565b9150613cb382614a79565b604082019050919050565b6000613ccb603e83614394565b9150613cd682614ac8565b604082019050919050565b6000613cee602083614394565b9150613cf982614b17565b602082019050919050565b6000613d11602083614394565b9150613d1c82614b40565b602082019050919050565b6000613d34601683614394565b9150613d3f82614b69565b602082019050919050565b6000613d57602f83614394565b9150613d6282614b92565b604082019050919050565b6000613d7a601883614394565b9150613d8582614be1565b602082019050919050565b6000613d9d602183614394565b9150613da882614c0a565b604082019050919050565b6000613dc0602c83614394565b9150613dcb82614c59565b604082019050919050565b6000613de3600e83614394565b9150613dee82614ca8565b602082019050919050565b6000613e06602e83614394565b9150613e1182614cd1565b604082019050919050565b6000613e29601b83614394565b9150613e3482614d20565b602082019050919050565b613e4881614541565b82525050565b613e5781614541565b82525050565b6000613e698286613a47565b9150613e758285613a47565b9150613e818284613a78565b9150819050949350505050565b6000602082019050613ea36000830184613959565b92915050565b6000608082019050613ebe6000830187613959565b613ecb6020830186613959565b613ed86040830185613e4e565b8181036060830152613eea81846139d5565b905095945050505050565b6000604082019050613f0a6000830185613959565b613f176020830184613e4e565b9392505050565b60006020820190508181036000830152613f388184613968565b905092915050565b6000602082019050613f5560008301846139c6565b92915050565b60006020820190508181036000830152613f758184613a0e565b905092915050565b60006020820190508181036000830152613f9681613af7565b9050919050565b60006020820190508181036000830152613fb681613b1a565b9050919050565b60006020820190508181036000830152613fd681613b3d565b9050919050565b60006020820190508181036000830152613ff681613b60565b9050919050565b6000602082019050818103600083015261401681613b83565b9050919050565b6000602082019050818103600083015261403681613ba6565b9050919050565b6000602082019050818103600083015261405681613bc9565b9050919050565b6000602082019050818103600083015261407681613bec565b9050919050565b6000602082019050818103600083015261409681613c0f565b9050919050565b600060208201905081810360008301526140b681613c32565b9050919050565b600060208201905081810360008301526140d681613c55565b9050919050565b600060208201905081810360008301526140f681613c78565b9050919050565b6000602082019050818103600083015261411681613c9b565b9050919050565b6000602082019050818103600083015261413681613cbe565b9050919050565b6000602082019050818103600083015261415681613ce1565b9050919050565b6000602082019050818103600083015261417681613d04565b9050919050565b6000602082019050818103600083015261419681613d27565b9050919050565b600060208201905081810360008301526141b681613d4a565b9050919050565b600060208201905081810360008301526141d681613d6d565b9050919050565b600060208201905081810360008301526141f681613d90565b9050919050565b6000602082019050818103600083015261421681613db3565b9050919050565b6000602082019050818103600083015261423681613dd6565b9050919050565b6000602082019050818103600083015261425681613df9565b9050919050565b6000602082019050818103600083015261427681613e1c565b9050919050565b60006020820190506142926000830184613e4e565b92915050565b60006142a26142b3565b90506142ae82826145bf565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d8576142d7614755565b5b6142e182614798565b9050602081019050919050565b600067ffffffffffffffff82111561430957614308614755565b5b61431282614798565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143bb82614541565b91506143c683614541565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143fb576143fa61466a565b5b828201905092915050565b600061441182614541565b915061441c83614541565b92508261442c5761442b614699565b5b828204905092915050565b600061444282614541565b915061444d83614541565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144865761448561466a565b5b828202905092915050565b600061449c82614541565b91506144a783614541565b9250828210156144ba576144b961466a565b5b828203905092915050565b60006144d082614521565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061451a826144c5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561457857808201518184015260208101905061455d565b83811115614587576000848401525b50505050565b600060028204905060018216806145a557607f821691505b602082108114156145b9576145b86146c8565b5b50919050565b6145c882614798565b810181811067ffffffffffffffff821117156145e7576145e6614755565b5b80604052505050565b60006145fb82614541565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561462e5761462d61466a565b5b600182019050919050565b600061464482614541565b915061464f83614541565b92508261465f5761465e614699565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4d617820537570706c79204d696e746564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f742041646d696e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820457468000000000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614d52816144c5565b8114614d5d57600080fd5b50565b614d69816144d7565b8114614d7457600080fd5b50565b614d80816144e3565b8114614d8b57600080fd5b50565b614d978161450f565b8114614da257600080fd5b50565b614dae81614541565b8114614db957600080fd5b5056fea2646970667358221220e9faa44e8aa0a96ca41964830990531d432d3ad2053f2dc7cba0eae120fb090164736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000ef5eab85edcb1cad33491c1f576dd356db7d63b900000000000000000000000096453ff48af2195e8dce2f7da42ef97164024cdd000000000000000000000000fb673215b7bd434c930a56b8f1c898ec4063837b000000000000000000000000000000000000000000000000000000000000001c43686174746572536869656c64204e465420436f6c6c656374696f6e000000000000000000000000000000000000000000000000000000000000000000000006536869656c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696369697461786c353369363662716a6132766176363271623474686e6a6973787233696c7965746d7975636e3374626a656536712f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696369697461786c353369363662716a6132766176363271623474686e6a6973787233696c7965746d7975636e3374626a656536712f00000000000000

-----Decoded View---------------
Arg [0] : _name (string): ChatterShield NFT Collection
Arg [1] : _symbol (string): Shield
Arg [2] : _initBaseURI (string): https://nftstorage.link/ipfs/bafybeiciitaxl53i66bqja2vav62qb4thnjisxr3ilyetmyucn3tbjee6q/
Arg [3] : _initNotRevealedUri (string): https://nftstorage.link/ipfs/bafybeiciitaxl53i66bqja2vav62qb4thnjisxr3ilyetmyucn3tbjee6q/
Arg [4] : _feeReciever (address): 0xEF5EAB85EDCb1Cad33491C1f576Dd356dB7d63b9
Arg [5] : _Admin1 (address): 0x96453FF48Af2195E8dce2F7Da42eF97164024Cdd
Arg [6] : _Admin2 (address): 0xfb673215B7Bd434C930A56b8f1c898EC4063837B

-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 000000000000000000000000ef5eab85edcb1cad33491c1f576dd356db7d63b9
Arg [5] : 00000000000000000000000096453ff48af2195e8dce2f7da42ef97164024cdd
Arg [6] : 000000000000000000000000fb673215b7bd434c930a56b8f1c898ec4063837b
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [8] : 43686174746572536869656c64204e465420436f6c6c656374696f6e00000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [10] : 536869656c640000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [12] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [13] : 796265696369697461786c353369363662716a6132766176363271623474686e
Arg [14] : 6a6973787233696c7965746d7975636e3374626a656536712f00000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [16] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [17] : 796265696369697461786c353369363662716a6132766176363271623474686e
Arg [18] : 6a6973787233696c7965746d7975636e3374626a656536712f00000000000000


Deployed Bytecode Sourcemap

49090:4832:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42895:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53467:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29629:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31142:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49245:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30659:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49428:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49278:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43535:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49571:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52848:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49349:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31842:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52611:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43203:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53665:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53551:106;;;:::i;:::-;;32249:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51437:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43725:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49538:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53107:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49508:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29340:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49480:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49177:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29071:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8158:103;;;;;;;;;;;;;:::i;:::-;;52983:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52499:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7510:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29798:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50202:1225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31385:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52314:65;;;;;;;;;;;;;:::i;:::-;;49454:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32505:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49386:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49203;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51795:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52387:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49314:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53211:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31611:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53341:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8416:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52710:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42895:224;42997:4;43036:35;43021:50;;;:11;:50;;;;:90;;;;43075:36;43099:11;43075:23;:36::i;:::-;43021:90;43014:97;;42895:224;;;:::o;53467:73::-;7396:13;:11;:13::i;:::-;53528:6:::1;53519;::::0;:15:::1;;;;;;;;;;;;;;;;;;53467:73:::0;:::o;29629:100::-;29683:13;29716:5;29709:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29629:100;:::o;31142:171::-;31218:7;31238:23;31253:7;31238:14;:23::i;:::-;31281:15;:24;31297:7;31281:24;;;;;;;;;;;;;;;;;;;;;31274:31;;31142:171;;;:::o;49245:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30659:417::-;30740:13;30756:23;30771:7;30756:14;:23::i;:::-;30740:39;;30804:5;30798:11;;:2;:11;;;;30790:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30898:5;30882:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30907:37;30924:5;30931:12;:10;:12::i;:::-;30907:16;:37::i;:::-;30882:62;30860:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;31047:21;31056:2;31060:7;31047:8;:21::i;:::-;30729:347;30659:417;;:::o;49428:21::-;;;;;;;;;;;;;:::o;49278:31::-;;;;:::o;43535:113::-;43596:7;43623:10;:17;;;;43616:24;;43535:113;:::o;49571:55::-;;;;;;;;;;;;;;;;;:::o;52848:129::-;52924:6;;;;;;;;;;;52910:20;;:10;:20;;;52902:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;52960:11;52951:6;;:20;;;;;;;;;;;;;;;;;;52848:129;:::o;49349:32::-;;;;:::o;31842:336::-;32037:41;32056:12;:10;:12::i;:::-;32070:7;32037:18;:41::i;:::-;32029:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:28;32152:4;32158:2;32162:7;32142:9;:28::i;:::-;31842:336;;;:::o;52611:93::-;7396:13;:11;:13::i;:::-;52687:11:::1;52676:8;;:22;;;;;;;;;;;;;;;;;;52611:93:::0;:::o;43203:256::-;43300:7;43336:23;43353:5;43336:16;:23::i;:::-;43328:5;:31;43320:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43425:12;:19;43438:5;43425:19;;;;;;;;;;;;;;;:26;43445:5;43425:26;;;;;;;;;;;;43418:33;;43203:256;;;;:::o;53665:248::-;7396:13;:11;:13::i;:::-;53790::::1;:22;;;53827:14;53856:13;:23;;;53888:4;53856:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53790:115;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53665:248:::0;;:::o;53551:106::-;7396:13;:11;:13::i;:::-;53611:7:::1;:5;:7::i;:::-;53603:25;;:48;53629:21;53603:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53551:106::o:0;32249:185::-;32387:39;32404:4;32410:2;32414:7;32387:39;;;;;;;;;;;;:16;:39::i;:::-;32249:185;;;:::o;51437:348::-;51512:16;51540:23;51566:17;51576:6;51566:9;:17::i;:::-;51540:43;;51590:25;51632:15;51618:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51590:58;;51660:9;51655:103;51675:15;51671:1;:19;51655:103;;;51720:30;51740:6;51748:1;51720:19;:30::i;:::-;51706:8;51715:1;51706:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;51692:3;;;;;:::i;:::-;;;;51655:103;;;;51771:8;51764:15;;;;51437:348;;;:::o;43725:233::-;43800:7;43836:30;:28;:30::i;:::-;43828:5;:38;43820:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43933:10;43944:5;43933:17;;;;;;;;:::i;:::-;;;;;;;;;;43926:24;;43725:233;;;:::o;49538:28::-;;;;;;;;;;;;;:::o;53107:98::-;7396:13;:11;:13::i;:::-;53188:11:::1;53178:7;:21;;;;;;;;;;;;:::i;:::-;;53107:98:::0;:::o;49508:25::-;;;;;;;;;;;;:::o;29340:222::-;29412:7;29432:13;29448:7;:16;29456:7;29448:16;;;;;;;;;;;;;;;;;;;;;29432:32;;29500:1;29483:19;;:5;:19;;;;29475:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29549:5;29542:12;;;29340:222;;;:::o;49480:23::-;;;;;;;;;;;;;:::o;49177:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29071:207::-;29143:7;29188:1;29171:19;;:5;:19;;;;29163:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29254:9;:16;29264:5;29254:16;;;;;;;;;;;;;;;;29247:23;;29071:207;;;:::o;8158:103::-;7396:13;:11;:13::i;:::-;8223:30:::1;8250:1;8223:18;:30::i;:::-;8158:103::o:0;52983:116::-;7396:13;:11;:13::i;:::-;53076:17:::1;53060:13;:33;;;;52983:116:::0;:::o;52499:106::-;7396:13;:11;:13::i;:::-;52591:8:::1;52584:4;:15;;;;52499:106:::0;:::o;7510:87::-;7556:7;7583:6;;;;;;;;;;;7576:13;;7510:87;:::o;29798:104::-;29854:13;29887:7;29880:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29798:104;:::o;50202:1225::-;50261:14;50278:13;:11;:13::i;:::-;50261:30;;50299:15;50324:11;50317:4;;:18;;;;:::i;:::-;50299:36;;50364:1;50350:11;:15;50342:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50436:9;;50421:11;50412:6;:20;;;;:::i;:::-;:33;;50404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50501:7;:5;:7::i;:::-;50487:21;;:10;:21;;;:45;;;;50526:6;;;;;;;;;;;50512:20;;:10;:20;;;50487:45;:69;;;;50550:6;;;;;;;;;;;50536:20;;:10;:20;;;50487:69;50483:777;;;50594:1;50580:11;:15;50572:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50664:9;;50649:11;:24;;50641:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50483:777;;;50740:7;:5;:7::i;:::-;50726:21;;:10;:21;;;;:45;;;;50765:6;;;;;;;;;;;50751:20;;:10;:20;;;;50726:45;:69;;;;50789:6;;;;;;;;;;;50775:20;;:10;:20;;;;50726:69;50722:538;;;50830:7;50817:9;:20;;50808:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;50879:6;;;;;;;;;;50878:7;50870:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;50950:13;;50935:11;:28;;50927:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51019:24;51046:20;:32;51067:10;51046:32;;;;;;;;;;;;;;;;51019:59;;51135:18;;51120:11;51101:16;:30;;;;:::i;:::-;:52;;51093:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;51209:8;;;;;;;;;;;51201:26;;:35;51228:7;51201:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50797:463;50722:538;50483:777;51284:9;51296:1;51284:13;;51279:136;51304:11;51299:1;:16;51279:136;;51331:20;:32;51352:10;51331:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;51374:33;51384:10;51405:1;51396:6;:10;;;;:::i;:::-;51374:9;:33::i;:::-;51317:3;;;;;:::i;:::-;;;;51279:136;;;;50254:1173;;50202:1225;:::o;31385:155::-;31480:52;31499:12;:10;:12::i;:::-;31513:8;31523;31480:18;:52::i;:::-;31385:155;;:::o;52314:65::-;7396:13;:11;:13::i;:::-;52369:4:::1;52358:8;;:15;;;;;;;;;;;;;;;;;;52314:65::o:0;49454:21::-;;;;;;;;;;;;;:::o;32505:323::-;32679:41;32698:12;:10;:12::i;:::-;32712:7;32679:18;:41::i;:::-;32671:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32782:38;32796:4;32802:2;32806:7;32815:4;32782:13;:38::i;:::-;32505:323;;;;:::o;49386:37::-;;;;:::o;49203:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51795:497::-;51893:13;51934:16;51942:7;51934;:16::i;:::-;51918:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;52043:5;52031:17;;:8;;;;;;;;;;;:17;;;52028:62;;;52068:14;52061:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52028:62;52098:28;52129:10;:8;:10::i;:::-;52098:41;;52184:1;52159:14;52153:28;:32;:133;;;;;;;;;;;;;;;;;52221:14;52237:18;:7;:16;:18::i;:::-;52257:13;52204:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52153:133;52146:140;;;51795:497;;;;:::o;52387:104::-;7396:13;:11;:13::i;:::-;52479:6:::1;52458:18;:27;;;;52387:104:::0;:::o;49314:30::-;;;;:::o;53211:122::-;7396:13;:11;:13::i;:::-;53310:17:::1;53294:13;:33;;;;;;;;;;;;:::i;:::-;;53211:122:::0;:::o;31611:164::-;31708:4;31732:18;:25;31751:5;31732:25;;;;;;;;;;;;;;;:35;31758:8;31732:35;;;;;;;;;;;;;;;;;;;;;;;;;31725:42;;31611:164;;;;:::o;53341:120::-;7396:13;:11;:13::i;:::-;53440:15:::1;53423:14;:32;;;;;;;;;;;;:::i;:::-;;53341:120:::0;:::o;8416:201::-;7396:13;:11;:13::i;:::-;8525:1:::1;8505:22;;:8;:22;;;;8497:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8581:28;8600:8;8581:18;:28::i;:::-;8416:201:::0;:::o;52710:131::-;52788:6;;;;;;;;;;;52774:20;;:10;:20;;;52766:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;52824:11;52815:6;;:20;;;;;;;;;;;;;;;;;;52710:131;:::o;28702:305::-;28804:4;28856:25;28841:40;;;:11;:40;;;;:105;;;;28913:33;28898:48;;;:11;:48;;;;28841:105;:158;;;;28963:36;28987:11;28963:23;:36::i;:::-;28841:158;28821:178;;28702:305;;;:::o;7675:132::-;7750:12;:10;:12::i;:::-;7739:23;;:7;:5;:7::i;:::-;:23;;;7731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7675:132::o;39117:135::-;39199:16;39207:7;39199;:16::i;:::-;39191:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39117:135;:::o;6061:98::-;6114:7;6141:10;6134:17;;6061:98;:::o;38396:174::-;38498:2;38471:15;:24;38487:7;38471:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38554:7;38550:2;38516:46;;38525:23;38540:7;38525:14;:23::i;:::-;38516:46;;;;;;;;;;;;38396:174;;:::o;34629:264::-;34722:4;34739:13;34755:23;34770:7;34755:14;:23::i;:::-;34739:39;;34808:5;34797:16;;:7;:16;;;:52;;;;34817:32;34834:5;34841:7;34817:16;:32::i;:::-;34797:52;:87;;;;34877:7;34853:31;;:20;34865:7;34853:11;:20::i;:::-;:31;;;34797:87;34789:96;;;34629:264;;;;:::o;37652:625::-;37811:4;37784:31;;:23;37799:7;37784:14;:23::i;:::-;:31;;;37776:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37890:1;37876:16;;:2;:16;;;;37868:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37946:39;37967:4;37973:2;37977:7;37946:20;:39::i;:::-;38050:29;38067:1;38071:7;38050:8;:29::i;:::-;38111:1;38092:9;:15;38102:4;38092:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38140:1;38123:9;:13;38133:2;38123:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38171:2;38152:7;:16;38160:7;38152:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38210:7;38206:2;38191:27;;38200:4;38191:27;;;;;;;;;;;;38231:38;38251:4;38257:2;38261:7;38231:19;:38::i;:::-;37652:625;;;:::o;8777:191::-;8851:16;8870:6;;;;;;;;;;;8851:25;;8896:8;8887:6;;:17;;;;;;;;;;;;;;;;;;8951:8;8920:40;;8941:8;8920:40;;;;;;;;;;;;8840:128;8777:191;:::o;35235:110::-;35311:26;35321:2;35325:7;35311:26;;;;;;;;;;;;:9;:26::i;:::-;35235:110;;:::o;38713:315::-;38868:8;38859:17;;:5;:17;;;;38851:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38955:8;38917:18;:25;38936:5;38917:25;;;;;;;;;;;;;;;:35;38943:8;38917:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39001:8;38979:41;;38994:5;38979:41;;;39011:8;38979:41;;;;;;:::i;:::-;;;;;;;;38713:315;;;:::o;33709:313::-;33865:28;33875:4;33881:2;33885:7;33865:9;:28::i;:::-;33912:47;33935:4;33941:2;33945:7;33954:4;33912:22;:47::i;:::-;33904:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33709:313;;;;:::o;34335:127::-;34400:4;34452:1;34424:30;;:7;:16;34432:7;34424:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34417:37;;34335:127;;;:::o;50081:102::-;50141:13;50170:7;50163:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50081:102;:::o;3315:723::-;3371:13;3601:1;3592:5;:10;3588:53;;;3619:10;;;;;;;;;;;;;;;;;;;;;3588:53;3651:12;3666:5;3651:20;;3682:14;3707:78;3722:1;3714:4;:9;3707:78;;3740:8;;;;;:::i;:::-;;;;3771:2;3763:10;;;;;:::i;:::-;;;3707:78;;;3795:19;3827:6;3817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3795:39;;3845:154;3861:1;3852:5;:10;3845:154;;3889:1;3879:11;;;;;:::i;:::-;;;3956:2;3948:5;:10;;;;:::i;:::-;3935:2;:24;;;;:::i;:::-;3922:39;;3905:6;3912;3905:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3985:2;3976:11;;;;;:::i;:::-;;;3845:154;;;4023:6;4009:21;;;;;3315:723;;;;:::o;20364:157::-;20449:4;20488:25;20473:40;;;:11;:40;;;;20466:47;;20364:157;;;:::o;44571:589::-;44715:45;44742:4;44748:2;44752:7;44715:26;:45::i;:::-;44793:1;44777:18;;:4;:18;;;44773:187;;;44812:40;44844:7;44812:31;:40::i;:::-;44773:187;;;44882:2;44874:10;;:4;:10;;;44870:90;;44901:47;44934:4;44940:7;44901:32;:47::i;:::-;44870:90;44773:187;44988:1;44974:16;;:2;:16;;;44970:183;;;45007:45;45044:7;45007:36;:45::i;:::-;44970:183;;;45080:4;45074:10;;:2;:10;;;45070:83;;45101:40;45129:2;45133:7;45101:27;:40::i;:::-;45070:83;44970:183;44571:589;;;:::o;41752:125::-;;;;:::o;35572:319::-;35701:18;35707:2;35711:7;35701:5;:18::i;:::-;35752:53;35783:1;35787:2;35791:7;35800:4;35752:22;:53::i;:::-;35730:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;35572:319;;;:::o;39816:853::-;39970:4;39991:15;:2;:13;;;:15::i;:::-;39987:675;;;40043:2;40027:36;;;40064:12;:10;:12::i;:::-;40078:4;40084:7;40093:4;40027:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40023:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40285:1;40268:6;:13;:18;40264:328;;;40311:60;;;;;;;;;;:::i;:::-;;;;;;;;40264:328;40542:6;40536:13;40527:6;40523:2;40519:15;40512:38;40023:584;40159:41;;;40149:51;;;:6;:51;;;;40142:58;;;;;39987:675;40646:4;40639:11;;39816:853;;;;;;;:::o;41241:126::-;;;;:::o;45883:164::-;45987:10;:17;;;;45960:15;:24;45976:7;45960:24;;;;;;;;;;;:44;;;;46015:10;46031:7;46015:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45883:164;:::o;46674:988::-;46940:22;46990:1;46965:22;46982:4;46965:16;:22::i;:::-;:26;;;;:::i;:::-;46940:51;;47002:18;47023:17;:26;47041:7;47023:26;;;;;;;;;;;;47002:47;;47170:14;47156:10;:28;47152:328;;47201:19;47223:12;:18;47236:4;47223:18;;;;;;;;;;;;;;;:34;47242:14;47223:34;;;;;;;;;;;;47201:56;;47307:11;47274:12;:18;47287:4;47274:18;;;;;;;;;;;;;;;:30;47293:10;47274:30;;;;;;;;;;;:44;;;;47424:10;47391:17;:30;47409:11;47391:30;;;;;;;;;;;:43;;;;47186:294;47152:328;47576:17;:26;47594:7;47576:26;;;;;;;;;;;47569:33;;;47620:12;:18;47633:4;47620:18;;;;;;;;;;;;;;;:34;47639:14;47620:34;;;;;;;;;;;47613:41;;;46755:907;;46674:988;;:::o;47957:1079::-;48210:22;48255:1;48235:10;:17;;;;:21;;;;:::i;:::-;48210:46;;48267:18;48288:15;:24;48304:7;48288:24;;;;;;;;;;;;48267:45;;48639:19;48661:10;48672:14;48661:26;;;;;;;;:::i;:::-;;;;;;;;;;48639:48;;48725:11;48700:10;48711;48700:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48836:10;48805:15;:28;48821:11;48805:28;;;;;;;;;;;:41;;;;48977:15;:24;48993:7;48977:24;;;;;;;;;;;48970:31;;;49012:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48028:1008;;;47957:1079;:::o;45461:221::-;45546:14;45563:20;45580:2;45563:16;:20::i;:::-;45546:37;;45621:7;45594:12;:16;45607:2;45594:16;;;;;;;;;;;;;;;:24;45611:6;45594:24;;;;;;;;;;;:34;;;;45668:6;45639:17;:26;45657:7;45639:26;;;;;;;;;;;:35;;;;45535:147;45461:221;;:::o;36227:439::-;36321:1;36307:16;;:2;:16;;;;36299:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36380:16;36388:7;36380;:16::i;:::-;36379:17;36371:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36442:45;36471:1;36475:2;36479:7;36442:20;:45::i;:::-;36517:1;36500:9;:13;36510:2;36500:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36548:2;36529:7;:16;36537:7;36529:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36593:7;36589:2;36568:33;;36585:1;36568:33;;;;;;;;;;;;36614:44;36642:1;36646:2;36650:7;36614:19;:44::i;:::-;36227:439;;:::o;10208:326::-;10268:4;10525:1;10503:7;:19;;;:23;10496:30;;10208:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1915:165::-;1974:5;2012:6;1999:20;1990:29;;2028:46;2068:5;2028:46;:::i;:::-;1915:165;;;;:::o;2100:340::-;2156:5;2205:3;2198:4;2190:6;2186:17;2182:27;2172:122;;2213:79;;:::i;:::-;2172:122;2330:6;2317:20;2355:79;2430:3;2422:6;2415:4;2407:6;2403:17;2355:79;:::i;:::-;2346:88;;2162:278;2100:340;;;;:::o;2446:139::-;2492:5;2530:6;2517:20;2508:29;;2546:33;2573:5;2546:33;:::i;:::-;2446:139;;;;:::o;2591:143::-;2648:5;2679:6;2673:13;2664:22;;2695:33;2722:5;2695:33;:::i;:::-;2591:143;;;;:::o;2740:329::-;2799:6;2848:2;2836:9;2827:7;2823:23;2819:32;2816:119;;;2854:79;;:::i;:::-;2816:119;2974:1;2999:53;3044:7;3035:6;3024:9;3020:22;2999:53;:::i;:::-;2989:63;;2945:117;2740:329;;;;:::o;3075:474::-;3143:6;3151;3200:2;3188:9;3179:7;3175:23;3171:32;3168:119;;;3206:79;;:::i;:::-;3168:119;3326:1;3351:53;3396:7;3387:6;3376:9;3372:22;3351:53;:::i;:::-;3341:63;;3297:117;3453:2;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3424:118;3075:474;;;;;:::o;3555:619::-;3632:6;3640;3648;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3950:2;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3921:118;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;3555:619;;;;;:::o;4180:943::-;4275:6;4283;4291;4299;4348:3;4336:9;4327:7;4323:23;4319:33;4316:120;;;4355:79;;:::i;:::-;4316:120;4475:1;4500:53;4545:7;4536:6;4525:9;4521:22;4500:53;:::i;:::-;4490:63;;4446:117;4602:2;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4573:118;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4886:2;4875:9;4871:18;4858:32;4917:18;4909:6;4906:30;4903:117;;;4939:79;;:::i;:::-;4903:117;5044:62;5098:7;5089:6;5078:9;5074:22;5044:62;:::i;:::-;5034:72;;4829:287;4180:943;;;;;;;:::o;5129:468::-;5194:6;5202;5251:2;5239:9;5230:7;5226:23;5222:32;5219:119;;;5257:79;;:::i;:::-;5219:119;5377:1;5402:53;5447:7;5438:6;5427:9;5423:22;5402:53;:::i;:::-;5392:63;;5348:117;5504:2;5530:50;5572:7;5563:6;5552:9;5548:22;5530:50;:::i;:::-;5520:60;;5475:115;5129:468;;;;;:::o;5603:474::-;5671:6;5679;5728:2;5716:9;5707:7;5703:23;5699:32;5696:119;;;5734:79;;:::i;:::-;5696:119;5854:1;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5825:117;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5603:474;;;;;:::o;6083:323::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:119;;;6194:79;;:::i;:::-;6156:119;6314:1;6339:50;6381:7;6372:6;6361:9;6357:22;6339:50;:::i;:::-;6329:60;;6285:114;6083:323;;;;:::o;6412:345::-;6479:6;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:61;6732:7;6723:6;6712:9;6708:22;6679:61;:::i;:::-;6669:71;;6625:125;6412:345;;;;:::o;6763:327::-;6821:6;6870:2;6858:9;6849:7;6845:23;6841:32;6838:119;;;6876:79;;:::i;:::-;6838:119;6996:1;7021:52;7065:7;7056:6;7045:9;7041:22;7021:52;:::i;:::-;7011:62;;6967:116;6763:327;;;;:::o;7096:349::-;7165:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:63;7420:7;7411:6;7400:9;7396:22;7365:63;:::i;:::-;7355:73;;7311:127;7096:349;;;;:::o;7451:500::-;7532:6;7540;7589:2;7577:9;7568:7;7564:23;7560:32;7557:119;;;7595:79;;:::i;:::-;7557:119;7715:1;7740:66;7798:7;7789:6;7778:9;7774:22;7740:66;:::i;:::-;7730:76;;7686:130;7855:2;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7826:118;7451:500;;;;;:::o;7957:509::-;8026:6;8075:2;8063:9;8054:7;8050:23;8046:32;8043:119;;;8081:79;;:::i;:::-;8043:119;8229:1;8218:9;8214:17;8201:31;8259:18;8251:6;8248:30;8245:117;;;8281:79;;:::i;:::-;8245:117;8386:63;8441:7;8432:6;8421:9;8417:22;8386:63;:::i;:::-;8376:73;;8172:287;7957:509;;;;:::o;8472:329::-;8531:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:119;;;8586:79;;:::i;:::-;8548:119;8706:1;8731:53;8776:7;8767:6;8756:9;8752:22;8731:53;:::i;:::-;8721:63;;8677:117;8472:329;;;;:::o;8807:351::-;8877:6;8926:2;8914:9;8905:7;8901:23;8897:32;8894:119;;;8932:79;;:::i;:::-;8894:119;9052:1;9077:64;9133:7;9124:6;9113:9;9109:22;9077:64;:::i;:::-;9067:74;;9023:128;8807:351;;;;:::o;9164:179::-;9233:10;9254:46;9296:3;9288:6;9254:46;:::i;:::-;9332:4;9327:3;9323:14;9309:28;;9164:179;;;;:::o;9349:118::-;9436:24;9454:5;9436:24;:::i;:::-;9431:3;9424:37;9349:118;;:::o;9503:732::-;9622:3;9651:54;9699:5;9651:54;:::i;:::-;9721:86;9800:6;9795:3;9721:86;:::i;:::-;9714:93;;9831:56;9881:5;9831:56;:::i;:::-;9910:7;9941:1;9926:284;9951:6;9948:1;9945:13;9926:284;;;10027:6;10021:13;10054:63;10113:3;10098:13;10054:63;:::i;:::-;10047:70;;10140:60;10193:6;10140:60;:::i;:::-;10130:70;;9986:224;9973:1;9970;9966:9;9961:14;;9926:284;;;9930:14;10226:3;10219:10;;9627:608;;;9503:732;;;;:::o;10241:109::-;10322:21;10337:5;10322:21;:::i;:::-;10317:3;10310:34;10241:109;;:::o;10356:360::-;10442:3;10470:38;10502:5;10470:38;:::i;:::-;10524:70;10587:6;10582:3;10524:70;:::i;:::-;10517:77;;10603:52;10648:6;10643:3;10636:4;10629:5;10625:16;10603:52;:::i;:::-;10680:29;10702:6;10680:29;:::i;:::-;10675:3;10671:39;10664:46;;10446:270;10356:360;;;;:::o;10722:364::-;10810:3;10838:39;10871:5;10838:39;:::i;:::-;10893:71;10957:6;10952:3;10893:71;:::i;:::-;10886:78;;10973:52;11018:6;11013:3;11006:4;10999:5;10995:16;10973:52;:::i;:::-;11050:29;11072:6;11050:29;:::i;:::-;11045:3;11041:39;11034:46;;10814:272;10722:364;;;;:::o;11092:377::-;11198:3;11226:39;11259:5;11226:39;:::i;:::-;11281:89;11363:6;11358:3;11281:89;:::i;:::-;11274:96;;11379:52;11424:6;11419:3;11412:4;11405:5;11401:16;11379:52;:::i;:::-;11456:6;11451:3;11447:16;11440:23;;11202:267;11092:377;;;;:::o;11499:845::-;11602:3;11639:5;11633:12;11668:36;11694:9;11668:36;:::i;:::-;11720:89;11802:6;11797:3;11720:89;:::i;:::-;11713:96;;11840:1;11829:9;11825:17;11856:1;11851:137;;;;12002:1;11997:341;;;;11818:520;;11851:137;11935:4;11931:9;11920;11916:25;11911:3;11904:38;11971:6;11966:3;11962:16;11955:23;;11851:137;;11997:341;12064:38;12096:5;12064:38;:::i;:::-;12124:1;12138:154;12152:6;12149:1;12146:13;12138:154;;;12226:7;12220:14;12216:1;12211:3;12207:11;12200:35;12276:1;12267:7;12263:15;12252:26;;12174:4;12171:1;12167:12;12162:17;;12138:154;;;12321:6;12316:3;12312:16;12305:23;;12004:334;;11818:520;;11606:738;;11499:845;;;;:::o;12350:366::-;12492:3;12513:67;12577:2;12572:3;12513:67;:::i;:::-;12506:74;;12589:93;12678:3;12589:93;:::i;:::-;12707:2;12702:3;12698:12;12691:19;;12350:366;;;:::o;12722:::-;12864:3;12885:67;12949:2;12944:3;12885:67;:::i;:::-;12878:74;;12961:93;13050:3;12961:93;:::i;:::-;13079:2;13074:3;13070:12;13063:19;;12722:366;;;:::o;13094:::-;13236:3;13257:67;13321:2;13316:3;13257:67;:::i;:::-;13250:74;;13333:93;13422:3;13333:93;:::i;:::-;13451:2;13446:3;13442:12;13435:19;;13094:366;;;:::o;13466:::-;13608:3;13629:67;13693:2;13688:3;13629:67;:::i;:::-;13622:74;;13705:93;13794:3;13705:93;:::i;:::-;13823:2;13818:3;13814:12;13807:19;;13466:366;;;:::o;13838:::-;13980:3;14001:67;14065:2;14060:3;14001:67;:::i;:::-;13994:74;;14077:93;14166:3;14077:93;:::i;:::-;14195:2;14190:3;14186:12;14179:19;;13838:366;;;:::o;14210:::-;14352:3;14373:67;14437:2;14432:3;14373:67;:::i;:::-;14366:74;;14449:93;14538:3;14449:93;:::i;:::-;14567:2;14562:3;14558:12;14551:19;;14210:366;;;:::o;14582:::-;14724:3;14745:67;14809:2;14804:3;14745:67;:::i;:::-;14738:74;;14821:93;14910:3;14821:93;:::i;:::-;14939:2;14934:3;14930:12;14923:19;;14582:366;;;:::o;14954:::-;15096:3;15117:67;15181:2;15176:3;15117:67;:::i;:::-;15110:74;;15193:93;15282:3;15193:93;:::i;:::-;15311:2;15306:3;15302:12;15295:19;;14954:366;;;:::o;15326:::-;15468:3;15489:67;15553:2;15548:3;15489:67;:::i;:::-;15482:74;;15565:93;15654:3;15565:93;:::i;:::-;15683:2;15678:3;15674:12;15667:19;;15326:366;;;:::o;15698:365::-;15840:3;15861:66;15925:1;15920:3;15861:66;:::i;:::-;15854:73;;15936:93;16025:3;15936:93;:::i;:::-;16054:2;16049:3;16045:12;16038:19;;15698:365;;;:::o;16069:366::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:::-;16583:3;16604:67;16668:2;16663:3;16604:67;:::i;:::-;16597:74;;16680:93;16769:3;16680:93;:::i;:::-;16798:2;16793:3;16789:12;16782:19;;16441:366;;;:::o;16813:::-;16955:3;16976:67;17040:2;17035:3;16976:67;:::i;:::-;16969:74;;17052:93;17141:3;17052:93;:::i;:::-;17170:2;17165:3;17161:12;17154:19;;16813:366;;;:::o;17185:::-;17327:3;17348:67;17412:2;17407:3;17348:67;:::i;:::-;17341:74;;17424:93;17513:3;17424:93;:::i;:::-;17542:2;17537:3;17533:12;17526:19;;17185:366;;;:::o;17557:::-;17699:3;17720:67;17784:2;17779:3;17720:67;:::i;:::-;17713:74;;17796:93;17885:3;17796:93;:::i;:::-;17914:2;17909:3;17905:12;17898:19;;17557:366;;;:::o;17929:::-;18071:3;18092:67;18156:2;18151:3;18092:67;:::i;:::-;18085:74;;18168:93;18257:3;18168:93;:::i;:::-;18286:2;18281:3;18277:12;18270:19;;17929:366;;;:::o;18301:::-;18443:3;18464:67;18528:2;18523:3;18464:67;:::i;:::-;18457:74;;18540:93;18629:3;18540:93;:::i;:::-;18658:2;18653:3;18649:12;18642:19;;18301:366;;;:::o;18673:::-;18815:3;18836:67;18900:2;18895:3;18836:67;:::i;:::-;18829:74;;18912:93;19001:3;18912:93;:::i;:::-;19030:2;19025:3;19021:12;19014:19;;18673:366;;;:::o;19045:::-;19187:3;19208:67;19272:2;19267:3;19208:67;:::i;:::-;19201:74;;19284:93;19373:3;19284:93;:::i;:::-;19402:2;19397:3;19393:12;19386:19;;19045:366;;;:::o;19417:::-;19559:3;19580:67;19644:2;19639:3;19580:67;:::i;:::-;19573:74;;19656:93;19745:3;19656:93;:::i;:::-;19774:2;19769:3;19765:12;19758:19;;19417:366;;;:::o;19789:::-;19931:3;19952:67;20016:2;20011:3;19952:67;:::i;:::-;19945:74;;20028:93;20117:3;20028:93;:::i;:::-;20146:2;20141:3;20137:12;20130:19;;19789:366;;;:::o;20161:::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20161:366;;;:::o;20533:::-;20675:3;20696:67;20760:2;20755:3;20696:67;:::i;:::-;20689:74;;20772:93;20861:3;20772:93;:::i;:::-;20890:2;20885:3;20881:12;20874:19;;20533:366;;;:::o;20905:::-;21047:3;21068:67;21132:2;21127:3;21068:67;:::i;:::-;21061:74;;21144:93;21233:3;21144:93;:::i;:::-;21262:2;21257:3;21253:12;21246:19;;20905:366;;;:::o;21277:108::-;21354:24;21372:5;21354:24;:::i;:::-;21349:3;21342:37;21277:108;;:::o;21391:118::-;21478:24;21496:5;21478:24;:::i;:::-;21473:3;21466:37;21391:118;;:::o;21515:589::-;21740:3;21762:95;21853:3;21844:6;21762:95;:::i;:::-;21755:102;;21874:95;21965:3;21956:6;21874:95;:::i;:::-;21867:102;;21986:92;22074:3;22065:6;21986:92;:::i;:::-;21979:99;;22095:3;22088:10;;21515:589;;;;;;:::o;22110:222::-;22203:4;22241:2;22230:9;22226:18;22218:26;;22254:71;22322:1;22311:9;22307:17;22298:6;22254:71;:::i;:::-;22110:222;;;;:::o;22338:640::-;22533:4;22571:3;22560:9;22556:19;22548:27;;22585:71;22653:1;22642:9;22638:17;22629:6;22585:71;:::i;:::-;22666:72;22734:2;22723:9;22719:18;22710:6;22666:72;:::i;:::-;22748;22816:2;22805:9;22801:18;22792:6;22748:72;:::i;:::-;22867:9;22861:4;22857:20;22852:2;22841:9;22837:18;22830:48;22895:76;22966:4;22957:6;22895:76;:::i;:::-;22887:84;;22338:640;;;;;;;:::o;22984:332::-;23105:4;23143:2;23132:9;23128:18;23120:26;;23156:71;23224:1;23213:9;23209:17;23200:6;23156:71;:::i;:::-;23237:72;23305:2;23294:9;23290:18;23281:6;23237:72;:::i;:::-;22984:332;;;;;:::o;23322:373::-;23465:4;23503:2;23492:9;23488:18;23480:26;;23552:9;23546:4;23542:20;23538:1;23527:9;23523:17;23516:47;23580:108;23683:4;23674:6;23580:108;:::i;:::-;23572:116;;23322:373;;;;:::o;23701:210::-;23788:4;23826:2;23815:9;23811:18;23803:26;;23839:65;23901:1;23890:9;23886:17;23877:6;23839:65;:::i;:::-;23701:210;;;;:::o;23917:313::-;24030:4;24068:2;24057:9;24053:18;24045:26;;24117:9;24111:4;24107:20;24103:1;24092:9;24088:17;24081:47;24145:78;24218:4;24209:6;24145:78;:::i;:::-;24137:86;;23917:313;;;;:::o;24236:419::-;24402:4;24440:2;24429:9;24425:18;24417:26;;24489:9;24483:4;24479:20;24475:1;24464:9;24460:17;24453:47;24517:131;24643:4;24517:131;:::i;:::-;24509:139;;24236:419;;;:::o;24661:::-;24827:4;24865:2;24854:9;24850:18;24842:26;;24914:9;24908:4;24904:20;24900:1;24889:9;24885:17;24878:47;24942:131;25068:4;24942:131;:::i;:::-;24934:139;;24661:419;;;:::o;25086:::-;25252:4;25290:2;25279:9;25275:18;25267:26;;25339:9;25333:4;25329:20;25325:1;25314:9;25310:17;25303:47;25367:131;25493:4;25367:131;:::i;:::-;25359:139;;25086:419;;;:::o;25511:::-;25677:4;25715:2;25704:9;25700:18;25692:26;;25764:9;25758:4;25754:20;25750:1;25739:9;25735:17;25728:47;25792:131;25918:4;25792:131;:::i;:::-;25784:139;;25511:419;;;:::o;25936:::-;26102:4;26140:2;26129:9;26125:18;26117:26;;26189:9;26183:4;26179:20;26175:1;26164:9;26160:17;26153:47;26217:131;26343:4;26217:131;:::i;:::-;26209:139;;25936:419;;;:::o;26361:::-;26527:4;26565:2;26554:9;26550:18;26542:26;;26614:9;26608:4;26604:20;26600:1;26589:9;26585:17;26578:47;26642:131;26768:4;26642:131;:::i;:::-;26634:139;;26361:419;;;:::o;26786:::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27039:9;27033:4;27029:20;27025:1;27014:9;27010:17;27003:47;27067:131;27193:4;27067:131;:::i;:::-;27059:139;;26786:419;;;:::o;27211:::-;27377:4;27415:2;27404:9;27400:18;27392:26;;27464:9;27458:4;27454:20;27450:1;27439:9;27435:17;27428:47;27492:131;27618:4;27492:131;:::i;:::-;27484:139;;27211:419;;;:::o;27636:::-;27802:4;27840:2;27829:9;27825:18;27817:26;;27889:9;27883:4;27879:20;27875:1;27864:9;27860:17;27853:47;27917:131;28043:4;27917:131;:::i;:::-;27909:139;;27636:419;;;:::o;28061:::-;28227:4;28265:2;28254:9;28250:18;28242:26;;28314:9;28308:4;28304:20;28300:1;28289:9;28285:17;28278:47;28342:131;28468:4;28342:131;:::i;:::-;28334:139;;28061:419;;;:::o;28486:::-;28652:4;28690:2;28679:9;28675:18;28667:26;;28739:9;28733:4;28729:20;28725:1;28714:9;28710:17;28703:47;28767:131;28893:4;28767:131;:::i;:::-;28759:139;;28486:419;;;:::o;28911:::-;29077:4;29115:2;29104:9;29100:18;29092:26;;29164:9;29158:4;29154:20;29150:1;29139:9;29135:17;29128:47;29192:131;29318:4;29192:131;:::i;:::-;29184:139;;28911:419;;;:::o;29336:::-;29502:4;29540:2;29529:9;29525:18;29517:26;;29589:9;29583:4;29579:20;29575:1;29564:9;29560:17;29553:47;29617:131;29743:4;29617:131;:::i;:::-;29609:139;;29336:419;;;:::o;29761:::-;29927:4;29965:2;29954:9;29950:18;29942:26;;30014:9;30008:4;30004:20;30000:1;29989:9;29985:17;29978:47;30042:131;30168:4;30042:131;:::i;:::-;30034:139;;29761:419;;;:::o;30186:::-;30352:4;30390:2;30379:9;30375:18;30367:26;;30439:9;30433:4;30429:20;30425:1;30414:9;30410:17;30403:47;30467:131;30593:4;30467:131;:::i;:::-;30459:139;;30186:419;;;:::o;30611:::-;30777:4;30815:2;30804:9;30800:18;30792:26;;30864:9;30858:4;30854:20;30850:1;30839:9;30835:17;30828:47;30892:131;31018:4;30892:131;:::i;:::-;30884:139;;30611:419;;;:::o;31036:::-;31202:4;31240:2;31229:9;31225:18;31217:26;;31289:9;31283:4;31279:20;31275:1;31264:9;31260:17;31253:47;31317:131;31443:4;31317:131;:::i;:::-;31309:139;;31036:419;;;:::o;31461:::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31714:9;31708:4;31704:20;31700:1;31689:9;31685:17;31678:47;31742:131;31868:4;31742:131;:::i;:::-;31734:139;;31461:419;;;:::o;31886:::-;32052:4;32090:2;32079:9;32075:18;32067:26;;32139:9;32133:4;32129:20;32125:1;32114:9;32110:17;32103:47;32167:131;32293:4;32167:131;:::i;:::-;32159:139;;31886:419;;;:::o;32311:::-;32477:4;32515:2;32504:9;32500:18;32492:26;;32564:9;32558:4;32554:20;32550:1;32539:9;32535:17;32528:47;32592:131;32718:4;32592:131;:::i;:::-;32584:139;;32311:419;;;:::o;32736:::-;32902:4;32940:2;32929:9;32925:18;32917:26;;32989:9;32983:4;32979:20;32975:1;32964:9;32960:17;32953:47;33017:131;33143:4;33017:131;:::i;:::-;33009:139;;32736:419;;;:::o;33161:::-;33327:4;33365:2;33354:9;33350:18;33342:26;;33414:9;33408:4;33404:20;33400:1;33389:9;33385:17;33378:47;33442:131;33568:4;33442:131;:::i;:::-;33434:139;;33161:419;;;:::o;33586:::-;33752:4;33790:2;33779:9;33775:18;33767:26;;33839:9;33833:4;33829:20;33825:1;33814:9;33810:17;33803:47;33867:131;33993:4;33867:131;:::i;:::-;33859:139;;33586:419;;;:::o;34011:::-;34177:4;34215:2;34204:9;34200:18;34192:26;;34264:9;34258:4;34254:20;34250:1;34239:9;34235:17;34228:47;34292:131;34418:4;34292:131;:::i;:::-;34284:139;;34011:419;;;:::o;34436:222::-;34529:4;34567:2;34556:9;34552:18;34544:26;;34580:71;34648:1;34637:9;34633:17;34624:6;34580:71;:::i;:::-;34436:222;;;;:::o;34664:129::-;34698:6;34725:20;;:::i;:::-;34715:30;;34754:33;34782:4;34774:6;34754:33;:::i;:::-;34664:129;;;:::o;34799:75::-;34832:6;34865:2;34859:9;34849:19;;34799:75;:::o;34880:307::-;34941:4;35031:18;35023:6;35020:30;35017:56;;;35053:18;;:::i;:::-;35017:56;35091:29;35113:6;35091:29;:::i;:::-;35083:37;;35175:4;35169;35165:15;35157:23;;34880:307;;;:::o;35193:308::-;35255:4;35345:18;35337:6;35334:30;35331:56;;;35367:18;;:::i;:::-;35331:56;35405:29;35427:6;35405:29;:::i;:::-;35397:37;;35489:4;35483;35479:15;35471:23;;35193:308;;;:::o;35507:132::-;35574:4;35597:3;35589:11;;35627:4;35622:3;35618:14;35610:22;;35507:132;;;:::o;35645:141::-;35694:4;35717:3;35709:11;;35740:3;35737:1;35730:14;35774:4;35771:1;35761:18;35753:26;;35645:141;;;:::o;35792:114::-;35859:6;35893:5;35887:12;35877:22;;35792:114;;;:::o;35912:98::-;35963:6;35997:5;35991:12;35981:22;;35912:98;;;:::o;36016:99::-;36068:6;36102:5;36096:12;36086:22;;36016:99;;;:::o;36121:113::-;36191:4;36223;36218:3;36214:14;36206:22;;36121:113;;;:::o;36240:184::-;36339:11;36373:6;36368:3;36361:19;36413:4;36408:3;36404:14;36389:29;;36240:184;;;;:::o;36430:168::-;36513:11;36547:6;36542:3;36535:19;36587:4;36582:3;36578:14;36563:29;;36430:168;;;;:::o;36604:169::-;36688:11;36722:6;36717:3;36710:19;36762:4;36757:3;36753:14;36738:29;;36604:169;;;;:::o;36779:148::-;36881:11;36918:3;36903:18;;36779:148;;;;:::o;36933:305::-;36973:3;36992:20;37010:1;36992:20;:::i;:::-;36987:25;;37026:20;37044:1;37026:20;:::i;:::-;37021:25;;37180:1;37112:66;37108:74;37105:1;37102:81;37099:107;;;37186:18;;:::i;:::-;37099:107;37230:1;37227;37223:9;37216:16;;36933:305;;;;:::o;37244:185::-;37284:1;37301:20;37319:1;37301:20;:::i;:::-;37296:25;;37335:20;37353:1;37335:20;:::i;:::-;37330:25;;37374:1;37364:35;;37379:18;;:::i;:::-;37364:35;37421:1;37418;37414:9;37409:14;;37244:185;;;;:::o;37435:348::-;37475:7;37498:20;37516:1;37498:20;:::i;:::-;37493:25;;37532:20;37550:1;37532:20;:::i;:::-;37527:25;;37720:1;37652:66;37648:74;37645:1;37642:81;37637:1;37630:9;37623:17;37619:105;37616:131;;;37727:18;;:::i;:::-;37616:131;37775:1;37772;37768:9;37757:20;;37435:348;;;;:::o;37789:191::-;37829:4;37849:20;37867:1;37849:20;:::i;:::-;37844:25;;37883:20;37901:1;37883:20;:::i;:::-;37878:25;;37922:1;37919;37916:8;37913:34;;;37927:18;;:::i;:::-;37913:34;37972:1;37969;37965:9;37957:17;;37789:191;;;;:::o;37986:96::-;38023:7;38052:24;38070:5;38052:24;:::i;:::-;38041:35;;37986:96;;;:::o;38088:90::-;38122:7;38165:5;38158:13;38151:21;38140:32;;38088:90;;;:::o;38184:149::-;38220:7;38260:66;38253:5;38249:78;38238:89;;38184:149;;;:::o;38339:109::-;38389:7;38418:24;38436:5;38418:24;:::i;:::-;38407:35;;38339:109;;;:::o;38454:126::-;38491:7;38531:42;38524:5;38520:54;38509:65;;38454:126;;;:::o;38586:77::-;38623:7;38652:5;38641:16;;38586:77;;;:::o;38669:154::-;38753:6;38748:3;38743;38730:30;38815:1;38806:6;38801:3;38797:16;38790:27;38669:154;;;:::o;38829:307::-;38897:1;38907:113;38921:6;38918:1;38915:13;38907:113;;;39006:1;39001:3;38997:11;38991:18;38987:1;38982:3;38978:11;38971:39;38943:2;38940:1;38936:10;38931:15;;38907:113;;;39038:6;39035:1;39032:13;39029:101;;;39118:1;39109:6;39104:3;39100:16;39093:27;39029:101;38878:258;38829:307;;;:::o;39142:320::-;39186:6;39223:1;39217:4;39213:12;39203:22;;39270:1;39264:4;39260:12;39291:18;39281:81;;39347:4;39339:6;39335:17;39325:27;;39281:81;39409:2;39401:6;39398:14;39378:18;39375:38;39372:84;;;39428:18;;:::i;:::-;39372:84;39193:269;39142:320;;;:::o;39468:281::-;39551:27;39573:4;39551:27;:::i;:::-;39543:6;39539:40;39681:6;39669:10;39666:22;39645:18;39633:10;39630:34;39627:62;39624:88;;;39692:18;;:::i;:::-;39624:88;39732:10;39728:2;39721:22;39511:238;39468:281;;:::o;39755:233::-;39794:3;39817:24;39835:5;39817:24;:::i;:::-;39808:33;;39863:66;39856:5;39853:77;39850:103;;;39933:18;;:::i;:::-;39850:103;39980:1;39973:5;39969:13;39962:20;;39755:233;;;:::o;39994:176::-;40026:1;40043:20;40061:1;40043:20;:::i;:::-;40038:25;;40077:20;40095:1;40077:20;:::i;:::-;40072:25;;40116:1;40106:35;;40121:18;;:::i;:::-;40106:35;40162:1;40159;40155:9;40150:14;;39994:176;;;;:::o;40176:180::-;40224:77;40221:1;40214:88;40321:4;40318:1;40311:15;40345:4;40342:1;40335:15;40362:180;40410:77;40407:1;40400:88;40507:4;40504:1;40497:15;40531:4;40528:1;40521:15;40548:180;40596:77;40593:1;40586:88;40693:4;40690:1;40683:15;40717:4;40714:1;40707:15;40734:180;40782:77;40779:1;40772:88;40879:4;40876:1;40869:15;40903:4;40900:1;40893:15;40920:180;40968:77;40965:1;40958:88;41065:4;41062:1;41055:15;41089:4;41086:1;41079:15;41106:180;41154:77;41151:1;41144:88;41251:4;41248:1;41241:15;41275:4;41272:1;41265:15;41292:117;41401:1;41398;41391:12;41415:117;41524:1;41521;41514:12;41538:117;41647:1;41644;41637:12;41661:117;41770:1;41767;41760:12;41784:102;41825:6;41876:2;41872:7;41867:2;41860:5;41856:14;41852:28;41842:38;;41784:102;;;:::o;41892:230::-;42032:34;42028:1;42020:6;42016:14;42009:58;42101:13;42096:2;42088:6;42084:15;42077:38;41892:230;:::o;42128:237::-;42268:34;42264:1;42256:6;42252:14;42245:58;42337:20;42332:2;42324:6;42320:15;42313:45;42128:237;:::o;42371:225::-;42511:34;42507:1;42499:6;42495:14;42488:58;42580:8;42575:2;42567:6;42563:15;42556:33;42371:225;:::o;42602:224::-;42742:34;42738:1;42730:6;42726:14;42719:58;42811:7;42806:2;42798:6;42794:15;42787:32;42602:224;:::o;42832:178::-;42972:30;42968:1;42960:6;42956:14;42949:54;42832:178;:::o;43016:::-;43156:30;43152:1;43144:6;43140:14;43133:54;43016:178;:::o;43200:167::-;43340:19;43336:1;43328:6;43324:14;43317:43;43200:167;:::o;43373:223::-;43513:34;43509:1;43501:6;43497:14;43490:58;43582:6;43577:2;43569:6;43565:15;43558:31;43373:223;:::o;43602:175::-;43742:27;43738:1;43730:6;43726:14;43719:51;43602:175;:::o;43783:159::-;43923:11;43919:1;43911:6;43907:14;43900:35;43783:159;:::o;43948:228::-;44088:34;44084:1;44076:6;44072:14;44065:58;44157:11;44152:2;44144:6;44140:15;44133:36;43948:228;:::o;44182:172::-;44322:24;44318:1;44310:6;44306:14;44299:48;44182:172;:::o;44360:223::-;44500:34;44496:1;44488:6;44484:14;44477:58;44569:6;44564:2;44556:6;44552:15;44545:31;44360:223;:::o;44589:249::-;44729:34;44725:1;44717:6;44713:14;44706:58;44798:32;44793:2;44785:6;44781:15;44774:57;44589:249;:::o;44844:182::-;44984:34;44980:1;44972:6;44968:14;44961:58;44844:182;:::o;45032:::-;45172:34;45168:1;45160:6;45156:14;45149:58;45032:182;:::o;45220:172::-;45360:24;45356:1;45348:6;45344:14;45337:48;45220:172;:::o;45398:234::-;45538:34;45534:1;45526:6;45522:14;45515:58;45607:17;45602:2;45594:6;45590:15;45583:42;45398:234;:::o;45638:174::-;45778:26;45774:1;45766:6;45762:14;45755:50;45638:174;:::o;45818:220::-;45958:34;45954:1;45946:6;45942:14;45935:58;46027:3;46022:2;46014:6;46010:15;46003:28;45818:220;:::o;46044:231::-;46184:34;46180:1;46172:6;46168:14;46161:58;46253:14;46248:2;46240:6;46236:15;46229:39;46044:231;:::o;46281:164::-;46421:16;46417:1;46409:6;46405:14;46398:40;46281:164;:::o;46451:233::-;46591:34;46587:1;46579:6;46575:14;46568:58;46660:16;46655:2;46647:6;46643:15;46636:41;46451:233;:::o;46690:177::-;46830:29;46826:1;46818:6;46814:14;46807:53;46690:177;:::o;46873:122::-;46946:24;46964:5;46946:24;:::i;:::-;46939:5;46936:35;46926:63;;46985:1;46982;46975:12;46926:63;46873:122;:::o;47001:116::-;47071:21;47086:5;47071:21;:::i;:::-;47064:5;47061:32;47051:60;;47107:1;47104;47097:12;47051:60;47001:116;:::o;47123:120::-;47195:23;47212:5;47195:23;:::i;:::-;47188:5;47185:34;47175:62;;47233:1;47230;47223:12;47175:62;47123:120;:::o;47249:148::-;47335:37;47366:5;47335:37;:::i;:::-;47328:5;47325:48;47315:76;;47387:1;47384;47377:12;47315:76;47249:148;:::o;47403:122::-;47476:24;47494:5;47476:24;:::i;:::-;47469:5;47466:35;47456:63;;47515:1;47512;47505:12;47456:63;47403:122;:::o

Swarm Source

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