ETH Price: $2,397.70 (-1.01%)

Token

WallstreetNFTs (CHAMP)
 

Overview

Max Total Supply

2,884 CHAMP

Holders

248

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 CHAMP
0x17ce34307a725f06a5cb31394a000830d44a5f2f
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:
WallstreetNFTS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/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



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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: contracts/Champs.sol

// WallstreetNFTs.io Champs

pragma solidity ^0.8.2;



contract WallstreetNFTS is ERC721, Ownable {
    
    uint public mintPrice = 0.05 ether;
    uint public maxItems = 10080;
    uint public totalSupply = 0;
    uint public maxItemsPerTx = 25;
    string public _baseTokenURI;
    bool public publicMintPaused = false;
    uint public startTimestamp = 1636056000;
    
    event Mint(address indexed owner, uint indexed tokenId);
    
    constructor() ERC721("WallstreetNFTs", "CHAMP") {}
    
    receive() external payable {}
    
    function givewayMint(address to, uint amount) external onlyOwner {
        _mintWithoutValidation(to, amount);
    }
    
    function publicMint() external payable {
        require(block.timestamp > startTimestamp, "publicMint: Not open yet");
        require(!publicMintPaused, "publicMint: Paused");
        uint remainder = msg.value % mintPrice;
        uint amount = msg.value / mintPrice;
        require(remainder == 0, "publicMint: Send a divisible amount of eth");
        require(amount <= maxItemsPerTx, "publicMint: Surpasses maxItemsPerTx");
        
        _mintWithoutValidation(msg.sender, amount);
    }
    
    function _mintWithoutValidation(address to, uint amount) internal {
        require(totalSupply + amount <= maxItems, "mintWithoutValidation: Sold out");
        for (uint i = 0; i < amount; i++) {
            _mint(to, totalSupply);
            emit Mint(to, totalSupply);
            totalSupply += 1;
        }
    }
    
    function isOpen() external view returns (bool) {
        return block.timestamp >= startTimestamp && !publicMintPaused && totalSupply < maxItems;
    }
    
    // ADMIN FUNCTIONS
    
    function setStartTimestamp(uint _startTimestamp) external onlyOwner {
        startTimestamp = _startTimestamp;
    }
    
    function setMintPrice(uint _mintPrice) external onlyOwner {
        mintPrice = _mintPrice;
    }
    
    function setPublicMintPaused(bool _publicMintPaused) external onlyOwner {
        publicMintPaused = _publicMintPaused;
    }
    
    function setMaxItemsPerTx(uint _maxItemsPerTx) external onlyOwner {
        maxItemsPerTx = _maxItemsPerTx;
    }
    
    function setBaseTokenURI(string memory __baseTokenURI) external onlyOwner {
        _baseTokenURI = __baseTokenURI;
    }
    
    /**
     * @dev Withdraw the contract balance to the dev address or splitter address
     */
    function withdraw() external onlyOwner {
        sendEth(owner(), address(this).balance);
    }

    function sendEth(address to, uint amount) internal {
        (bool success,) = to.call{value: amount}("");
        require(success, "Failed to send ether");
    }

    // METADATA FUNCTIONALITY

    /**
     * @dev Returns a URI for a given token ID's metadata
     */
    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"givewayMint","outputs":[],"stateMutability":"nonpayable","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":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxItemsPerTx","type":"uint256"}],"name":"setMaxItemsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicMintPaused","type":"bool"}],"name":"setPublicMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTimestamp","type":"uint256"}],"name":"setStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405266b1a2bc2ec5000060075561276060085560006009556019600a556000600c60006101000a81548160ff0219169083151502179055506361843bc0600d553480156200004f57600080fd5b506040518060400160405280600e81526020017f57616c6c7374726565744e4654730000000000000000000000000000000000008152506040518060400160405280600581526020017f4348414d500000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d4929190620001e4565b508060019080519060200190620000ed929190620001e4565b50505062000110620001046200011660201b60201c565b6200011e60201b60201c565b620002f9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f29062000294565b90600052602060002090601f01602090048101928262000216576000855562000262565b82601f106200023157805160ff191683800117855562000262565b8280016001018555821562000262579182015b828111156200026157825182559160200191906001019062000244565b5b50905062000271919062000275565b5090565b5b808211156200029057600081600090555060010162000276565b5090565b60006002820490506001821680620002ad57607f821691505b60208210811415620002c457620002c3620002ca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613a7c80620003096000396000f3fe6080604052600436106101e75760003560e01c80636817c76c11610102578063b88d4fde11610095578063e6fd48bc11610064578063e6fd48bc146106a4578063e985e9c5146106cf578063f2fde38b1461070c578063f4a0a52814610735576101ee565b8063b88d4fde146105ea578063c44bef7514610613578063c87b56dd1461063c578063cfc86f7b14610679576101ee565b80637faf9405116100d15780637faf9405146105425780638da5cb5b1461056b57806395d89b4114610596578063a22cb465146105c1576101ee565b80636817c76c1461049a57806370a08231146104c5578063715018a6146105025780637a4e571514610519576101ee565b806330666a4d1161017a5780633ccfd60b116101495780633ccfd60b146103f257806342842e0e1461040957806347535d7b146104325780636352211e1461045d576101ee565b806330666a4d14610348578063339493481461037357806333d9d5fd1461039c5780633c010a3e146103c7576101ee565b806318160ddd116101b657806318160ddd146102c157806323b872dd146102ec57806326092b831461031557806330176e131461031f576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a6004803603810190610215919061279b565b61075e565b6040516102279190612d5c565b60405180910390f35b34801561023c57600080fd5b50610245610840565b6040516102529190612d77565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061283e565b6108d2565b60405161028f9190612cf5565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061272e565b610957565b005b3480156102cd57600080fd5b506102d6610a6f565b6040516102e39190613039565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612618565b610a75565b005b61031d610ad5565b005b34801561032b57600080fd5b50610346600480360381019061034191906127f5565b610c23565b005b34801561035457600080fd5b5061035d610cb9565b60405161036a9190613039565b60405180910390f35b34801561037f57600080fd5b5061039a6004803603810190610395919061276e565b610cbf565b005b3480156103a857600080fd5b506103b1610d58565b6040516103be9190612d5c565b60405180910390f35b3480156103d357600080fd5b506103dc610d6b565b6040516103e99190613039565b60405180910390f35b3480156103fe57600080fd5b50610407610d71565b005b34801561041557600080fd5b50610430600480360381019061042b9190612618565b610e00565b005b34801561043e57600080fd5b50610447610e20565b6040516104549190612d5c565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f919061283e565b610e55565b6040516104919190612cf5565b60405180910390f35b3480156104a657600080fd5b506104af610f07565b6040516104bc9190613039565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e791906125ab565b610f0d565b6040516104f99190613039565b60405180910390f35b34801561050e57600080fd5b50610517610fc5565b005b34801561052557600080fd5b50610540600480360381019061053b919061283e565b61104d565b005b34801561054e57600080fd5b506105696004803603810190610564919061272e565b6110d3565b005b34801561057757600080fd5b5061058061115d565b60405161058d9190612cf5565b60405180910390f35b3480156105a257600080fd5b506105ab611187565b6040516105b89190612d77565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906126ee565b611219565b005b3480156105f657600080fd5b50610611600480360381019061060c919061266b565b61139a565b005b34801561061f57600080fd5b5061063a6004803603810190610635919061283e565b6113fc565b005b34801561064857600080fd5b50610663600480360381019061065e919061283e565b611482565b6040516106709190612d77565b60405180910390f35b34801561068557600080fd5b5061068e6114b6565b60405161069b9190612d77565b60405180910390f35b3480156106b057600080fd5b506106b9611544565b6040516106c69190613039565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906125d8565b61154a565b6040516107039190612d5c565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e91906125ab565b6115de565b005b34801561074157600080fd5b5061075c6004803603810190610757919061283e565b6116d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083957506108388261175c565b5b9050919050565b60606000805461084f906132af565b80601f016020809104026020016040519081016040528092919081815260200182805461087b906132af565b80156108c85780601f1061089d576101008083540402835291602001916108c8565b820191906000526020600020905b8154815290600101906020018083116108ab57829003601f168201915b5050505050905090565b60006108dd826117c6565b61091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390612f39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096282610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90612fd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f2611832565b73ffffffffffffffffffffffffffffffffffffffff161480610a215750610a2081610a1b611832565b61154a565b5b610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790612eb9565b60405180910390fd5b610a6a838361183a565b505050565b60095481565b610a86610a80611832565b826118f3565b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612ff9565b60405180910390fd5b610ad08383836119d1565b505050565b600d544211610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613019565b60405180910390fd5b600c60009054906101000a900460ff1615610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090612dd9565b60405180910390fd5b600060075434610b79919061335b565b9050600060075434610b8b9190613194565b905060008214610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612d99565b60405180910390fd5b600a54811115610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90612fb9565b60405180910390fd5b610c1f3382611c2d565b5050565b610c2b611832565b73ffffffffffffffffffffffffffffffffffffffff16610c4961115d565b73ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690612f59565b60405180910390fd5b80600b9080519060200190610cb59291906123bf565b5050565b600a5481565b610cc7611832565b73ffffffffffffffffffffffffffffffffffffffff16610ce561115d565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290612f59565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b60085481565b610d79611832565b73ffffffffffffffffffffffffffffffffffffffff16610d9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490612f59565b60405180910390fd5b610dfe610df861115d565b47611d0e565b565b610e1b8383836040518060200160405280600081525061139a565b505050565b6000600d544210158015610e415750600c60009054906101000a900460ff16155b8015610e505750600854600954105b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612ef9565b60405180910390fd5b80915050919050565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590612ed9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fcd611832565b73ffffffffffffffffffffffffffffffffffffffff16610feb61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612f59565b60405180910390fd5b61104b6000611dbf565b565b611055611832565b73ffffffffffffffffffffffffffffffffffffffff1661107361115d565b73ffffffffffffffffffffffffffffffffffffffff16146110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090612f59565b60405180910390fd5b80600a8190555050565b6110db611832565b73ffffffffffffffffffffffffffffffffffffffff166110f961115d565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690612f59565b60405180910390fd5b6111598282611c2d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611196906132af565b80601f01602080910402602001604051908101604052809291908181526020018280546111c2906132af565b801561120f5780601f106111e45761010080835404028352916020019161120f565b820191906000526020600020905b8154815290600101906020018083116111f257829003601f168201915b5050505050905090565b611221611832565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690612e79565b60405180910390fd5b806005600061129c611832565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611349611832565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161138e9190612d5c565b60405180910390a35050565b6113ab6113a5611832565b836118f3565b6113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612ff9565b60405180910390fd5b6113f684848484611e85565b50505050565b611404611832565b73ffffffffffffffffffffffffffffffffffffffff1661142261115d565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90612f59565b60405180910390fd5b80600d8190555050565b6060600b61148f83611ee1565b6040516020016114a0929190612cbc565b6040516020818303038152906040529050919050565b600b80546114c3906132af565b80601f01602080910402602001604051908101604052809291908181526020018280546114ef906132af565b801561153c5780601f106115115761010080835404028352916020019161153c565b820191906000526020600020905b81548152906001019060200180831161151f57829003601f168201915b505050505081565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115e6611832565b73ffffffffffffffffffffffffffffffffffffffff1661160461115d565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190612f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190612df9565b60405180910390fd5b6116d381611dbf565b50565b6116de611832565b73ffffffffffffffffffffffffffffffffffffffff166116fc61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990612f59565b60405180910390fd5b8060078190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118ad83610e55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118fe826117c6565b61193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490612e99565b60405180910390fd5b600061194883610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119b757508373ffffffffffffffffffffffffffffffffffffffff1661199f846108d2565b73ffffffffffffffffffffffffffffffffffffffff16145b806119c857506119c7818561154a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119f182610e55565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90612f99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90612e59565b60405180910390fd5b611ac2838383612042565b611acd60008261183a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b1d91906131c5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b74919061313e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60085481600954611c3e919061313e565b1115611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612e19565b60405180910390fd5b60005b81811015611d0957611c9683600954612047565b6009548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160096000828254611cef919061313e565b925050819055508080611d0190613312565b915050611c82565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d3490612ce0565b60006040518083038185875af1925050503d8060008114611d71576040519150601f19603f3d011682016040523d82523d6000602084013e611d76565b606091505b5050905080611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190612f79565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e908484846119d1565b611e9c84848484612215565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290612db9565b60405180910390fd5b50505050565b60606000821415611f29576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203d565b600082905060005b60008214611f5b578080611f4490613312565b915050600a82611f549190613194565b9150611f31565b60008167ffffffffffffffff811115611f7757611f76613448565b5b6040519080825280601f01601f191660200182016040528015611fa95781602001600182028036833780820191505090505b5090505b6000851461203657600182611fc291906131c5565b9150600a85611fd1919061335b565b6030611fdd919061313e565b60f81b818381518110611ff357611ff2613419565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202f9190613194565b9450611fad565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90612f19565b60405180910390fd5b6120c0816117c6565b15612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790612e39565b60405180910390fd5b61210c60008383612042565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215c919061313e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122368473ffffffffffffffffffffffffffffffffffffffff166123ac565b1561239f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261225f611832565b8786866040518563ffffffff1660e01b81526004016122819493929190612d10565b602060405180830381600087803b15801561229b57600080fd5b505af19250505080156122cc57506040513d601f19601f820116820180604052508101906122c991906127c8565b60015b61234f573d80600081146122fc576040519150601f19603f3d011682016040523d82523d6000602084013e612301565b606091505b50600081511415612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e90612db9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123a4565b600190505b949350505050565b600080823b905060008111915050919050565b8280546123cb906132af565b90600052602060002090601f0160209004810192826123ed5760008555612434565b82601f1061240657805160ff1916838001178555612434565b82800160010185558215612434579182015b82811115612433578251825591602001919060010190612418565b5b5090506124419190612445565b5090565b5b8082111561245e576000816000905550600101612446565b5090565b600061247561247084613079565b613054565b9050828152602081018484840111156124915761249061347c565b5b61249c84828561326d565b509392505050565b60006124b76124b2846130aa565b613054565b9050828152602081018484840111156124d3576124d261347c565b5b6124de84828561326d565b509392505050565b6000813590506124f5816139ea565b92915050565b60008135905061250a81613a01565b92915050565b60008135905061251f81613a18565b92915050565b60008151905061253481613a18565b92915050565b600082601f83011261254f5761254e613477565b5b813561255f848260208601612462565b91505092915050565b600082601f83011261257d5761257c613477565b5b813561258d8482602086016124a4565b91505092915050565b6000813590506125a581613a2f565b92915050565b6000602082840312156125c1576125c0613486565b5b60006125cf848285016124e6565b91505092915050565b600080604083850312156125ef576125ee613486565b5b60006125fd858286016124e6565b925050602061260e858286016124e6565b9150509250929050565b60008060006060848603121561263157612630613486565b5b600061263f868287016124e6565b9350506020612650868287016124e6565b925050604061266186828701612596565b9150509250925092565b6000806000806080858703121561268557612684613486565b5b6000612693878288016124e6565b94505060206126a4878288016124e6565b93505060406126b587828801612596565b925050606085013567ffffffffffffffff8111156126d6576126d5613481565b5b6126e28782880161253a565b91505092959194509250565b6000806040838503121561270557612704613486565b5b6000612713858286016124e6565b9250506020612724858286016124fb565b9150509250929050565b6000806040838503121561274557612744613486565b5b6000612753858286016124e6565b925050602061276485828601612596565b9150509250929050565b60006020828403121561278457612783613486565b5b6000612792848285016124fb565b91505092915050565b6000602082840312156127b1576127b0613486565b5b60006127bf84828501612510565b91505092915050565b6000602082840312156127de576127dd613486565b5b60006127ec84828501612525565b91505092915050565b60006020828403121561280b5761280a613486565b5b600082013567ffffffffffffffff81111561282957612828613481565b5b61283584828501612568565b91505092915050565b60006020828403121561285457612853613486565b5b600061286284828501612596565b91505092915050565b612874816131f9565b82525050565b6128838161320b565b82525050565b6000612894826130f0565b61289e8185613106565b93506128ae81856020860161327c565b6128b78161348b565b840191505092915050565b60006128cd826130fb565b6128d78185613122565b93506128e781856020860161327c565b6128f08161348b565b840191505092915050565b6000612906826130fb565b6129108185613133565b935061292081856020860161327c565b80840191505092915050565b60008154612939816132af565b6129438186613133565b9450600182166000811461295e576001811461296f576129a2565b60ff198316865281860193506129a2565b612978856130db565b60005b8381101561299a5781548189015260018201915060208101905061297b565b838801955050505b50505092915050565b60006129b8602a83613122565b91506129c38261349c565b604082019050919050565b60006129db603283613122565b91506129e6826134eb565b604082019050919050565b60006129fe601283613122565b9150612a098261353a565b602082019050919050565b6000612a21602683613122565b9150612a2c82613563565b604082019050919050565b6000612a44601f83613122565b9150612a4f826135b2565b602082019050919050565b6000612a67601c83613122565b9150612a72826135db565b602082019050919050565b6000612a8a602483613122565b9150612a9582613604565b604082019050919050565b6000612aad601983613122565b9150612ab882613653565b602082019050919050565b6000612ad0602c83613122565b9150612adb8261367c565b604082019050919050565b6000612af3603883613122565b9150612afe826136cb565b604082019050919050565b6000612b16602a83613122565b9150612b218261371a565b604082019050919050565b6000612b39602983613122565b9150612b4482613769565b604082019050919050565b6000612b5c602083613122565b9150612b67826137b8565b602082019050919050565b6000612b7f602c83613122565b9150612b8a826137e1565b604082019050919050565b6000612ba2602083613122565b9150612bad82613830565b602082019050919050565b6000612bc5601483613122565b9150612bd082613859565b602082019050919050565b6000612be8602983613122565b9150612bf382613882565b604082019050919050565b6000612c0b602383613122565b9150612c16826138d1565b604082019050919050565b6000612c2e602183613122565b9150612c3982613920565b604082019050919050565b6000612c51600083613117565b9150612c5c8261396f565b600082019050919050565b6000612c74603183613122565b9150612c7f82613972565b604082019050919050565b6000612c97601883613122565b9150612ca2826139c1565b602082019050919050565b612cb681613263565b82525050565b6000612cc8828561292c565b9150612cd482846128fb565b91508190509392505050565b6000612ceb82612c44565b9150819050919050565b6000602082019050612d0a600083018461286b565b92915050565b6000608082019050612d25600083018761286b565b612d32602083018661286b565b612d3f6040830185612cad565b8181036060830152612d518184612889565b905095945050505050565b6000602082019050612d71600083018461287a565b92915050565b60006020820190508181036000830152612d9181846128c2565b905092915050565b60006020820190508181036000830152612db2816129ab565b9050919050565b60006020820190508181036000830152612dd2816129ce565b9050919050565b60006020820190508181036000830152612df2816129f1565b9050919050565b60006020820190508181036000830152612e1281612a14565b9050919050565b60006020820190508181036000830152612e3281612a37565b9050919050565b60006020820190508181036000830152612e5281612a5a565b9050919050565b60006020820190508181036000830152612e7281612a7d565b9050919050565b60006020820190508181036000830152612e9281612aa0565b9050919050565b60006020820190508181036000830152612eb281612ac3565b9050919050565b60006020820190508181036000830152612ed281612ae6565b9050919050565b60006020820190508181036000830152612ef281612b09565b9050919050565b60006020820190508181036000830152612f1281612b2c565b9050919050565b60006020820190508181036000830152612f3281612b4f565b9050919050565b60006020820190508181036000830152612f5281612b72565b9050919050565b60006020820190508181036000830152612f7281612b95565b9050919050565b60006020820190508181036000830152612f9281612bb8565b9050919050565b60006020820190508181036000830152612fb281612bdb565b9050919050565b60006020820190508181036000830152612fd281612bfe565b9050919050565b60006020820190508181036000830152612ff281612c21565b9050919050565b6000602082019050818103600083015261301281612c67565b9050919050565b6000602082019050818103600083015261303281612c8a565b9050919050565b600060208201905061304e6000830184612cad565b92915050565b600061305e61306f565b905061306a82826132e1565b919050565b6000604051905090565b600067ffffffffffffffff82111561309457613093613448565b5b61309d8261348b565b9050602081019050919050565b600067ffffffffffffffff8211156130c5576130c4613448565b5b6130ce8261348b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061314982613263565b915061315483613263565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131895761318861338c565b5b828201905092915050565b600061319f82613263565b91506131aa83613263565b9250826131ba576131b96133bb565b5b828204905092915050565b60006131d082613263565b91506131db83613263565b9250828210156131ee576131ed61338c565b5b828203905092915050565b600061320482613243565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561329a57808201518184015260208101905061327f565b838111156132a9576000848401525b50505050565b600060028204905060018216806132c757607f821691505b602082108114156132db576132da6133ea565b5b50919050565b6132ea8261348b565b810181811067ffffffffffffffff8211171561330957613308613448565b5b80604052505050565b600061331d82613263565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133505761334f61338c565b5b600182019050919050565b600061336682613263565b915061337183613263565b925082613381576133806133bb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a20537572706173736573206d61784974656d73506560008201527f7254780000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b6139f3816131f9565b81146139fe57600080fd5b50565b613a0a8161320b565b8114613a1557600080fd5b50565b613a2181613217565b8114613a2c57600080fd5b50565b613a3881613263565b8114613a4357600080fd5b5056fea26469706673582212203280ed4245baf3f1b24b1e9d5eefbd5cbdaf6c50cc77dc61e6197dec535014a464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80636817c76c11610102578063b88d4fde11610095578063e6fd48bc11610064578063e6fd48bc146106a4578063e985e9c5146106cf578063f2fde38b1461070c578063f4a0a52814610735576101ee565b8063b88d4fde146105ea578063c44bef7514610613578063c87b56dd1461063c578063cfc86f7b14610679576101ee565b80637faf9405116100d15780637faf9405146105425780638da5cb5b1461056b57806395d89b4114610596578063a22cb465146105c1576101ee565b80636817c76c1461049a57806370a08231146104c5578063715018a6146105025780637a4e571514610519576101ee565b806330666a4d1161017a5780633ccfd60b116101495780633ccfd60b146103f257806342842e0e1461040957806347535d7b146104325780636352211e1461045d576101ee565b806330666a4d14610348578063339493481461037357806333d9d5fd1461039c5780633c010a3e146103c7576101ee565b806318160ddd116101b657806318160ddd146102c157806323b872dd146102ec57806326092b831461031557806330176e131461031f576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a6004803603810190610215919061279b565b61075e565b6040516102279190612d5c565b60405180910390f35b34801561023c57600080fd5b50610245610840565b6040516102529190612d77565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061283e565b6108d2565b60405161028f9190612cf5565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061272e565b610957565b005b3480156102cd57600080fd5b506102d6610a6f565b6040516102e39190613039565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190612618565b610a75565b005b61031d610ad5565b005b34801561032b57600080fd5b50610346600480360381019061034191906127f5565b610c23565b005b34801561035457600080fd5b5061035d610cb9565b60405161036a9190613039565b60405180910390f35b34801561037f57600080fd5b5061039a6004803603810190610395919061276e565b610cbf565b005b3480156103a857600080fd5b506103b1610d58565b6040516103be9190612d5c565b60405180910390f35b3480156103d357600080fd5b506103dc610d6b565b6040516103e99190613039565b60405180910390f35b3480156103fe57600080fd5b50610407610d71565b005b34801561041557600080fd5b50610430600480360381019061042b9190612618565b610e00565b005b34801561043e57600080fd5b50610447610e20565b6040516104549190612d5c565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f919061283e565b610e55565b6040516104919190612cf5565b60405180910390f35b3480156104a657600080fd5b506104af610f07565b6040516104bc9190613039565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e791906125ab565b610f0d565b6040516104f99190613039565b60405180910390f35b34801561050e57600080fd5b50610517610fc5565b005b34801561052557600080fd5b50610540600480360381019061053b919061283e565b61104d565b005b34801561054e57600080fd5b506105696004803603810190610564919061272e565b6110d3565b005b34801561057757600080fd5b5061058061115d565b60405161058d9190612cf5565b60405180910390f35b3480156105a257600080fd5b506105ab611187565b6040516105b89190612d77565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e391906126ee565b611219565b005b3480156105f657600080fd5b50610611600480360381019061060c919061266b565b61139a565b005b34801561061f57600080fd5b5061063a6004803603810190610635919061283e565b6113fc565b005b34801561064857600080fd5b50610663600480360381019061065e919061283e565b611482565b6040516106709190612d77565b60405180910390f35b34801561068557600080fd5b5061068e6114b6565b60405161069b9190612d77565b60405180910390f35b3480156106b057600080fd5b506106b9611544565b6040516106c69190613039565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906125d8565b61154a565b6040516107039190612d5c565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e91906125ab565b6115de565b005b34801561074157600080fd5b5061075c6004803603810190610757919061283e565b6116d6565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083957506108388261175c565b5b9050919050565b60606000805461084f906132af565b80601f016020809104026020016040519081016040528092919081815260200182805461087b906132af565b80156108c85780601f1061089d576101008083540402835291602001916108c8565b820191906000526020600020905b8154815290600101906020018083116108ab57829003601f168201915b5050505050905090565b60006108dd826117c6565b61091c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091390612f39565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096282610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ca90612fd9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f2611832565b73ffffffffffffffffffffffffffffffffffffffff161480610a215750610a2081610a1b611832565b61154a565b5b610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790612eb9565b60405180910390fd5b610a6a838361183a565b505050565b60095481565b610a86610a80611832565b826118f3565b610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90612ff9565b60405180910390fd5b610ad08383836119d1565b505050565b600d544211610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613019565b60405180910390fd5b600c60009054906101000a900460ff1615610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090612dd9565b60405180910390fd5b600060075434610b79919061335b565b9050600060075434610b8b9190613194565b905060008214610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790612d99565b60405180910390fd5b600a54811115610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90612fb9565b60405180910390fd5b610c1f3382611c2d565b5050565b610c2b611832565b73ffffffffffffffffffffffffffffffffffffffff16610c4961115d565b73ffffffffffffffffffffffffffffffffffffffff1614610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690612f59565b60405180910390fd5b80600b9080519060200190610cb59291906123bf565b5050565b600a5481565b610cc7611832565b73ffffffffffffffffffffffffffffffffffffffff16610ce561115d565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290612f59565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b60085481565b610d79611832565b73ffffffffffffffffffffffffffffffffffffffff16610d9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490612f59565b60405180910390fd5b610dfe610df861115d565b47611d0e565b565b610e1b8383836040518060200160405280600081525061139a565b505050565b6000600d544210158015610e415750600c60009054906101000a900460ff16155b8015610e505750600854600954105b905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590612ef9565b60405180910390fd5b80915050919050565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7590612ed9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fcd611832565b73ffffffffffffffffffffffffffffffffffffffff16610feb61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890612f59565b60405180910390fd5b61104b6000611dbf565b565b611055611832565b73ffffffffffffffffffffffffffffffffffffffff1661107361115d565b73ffffffffffffffffffffffffffffffffffffffff16146110c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c090612f59565b60405180910390fd5b80600a8190555050565b6110db611832565b73ffffffffffffffffffffffffffffffffffffffff166110f961115d565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690612f59565b60405180910390fd5b6111598282611c2d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611196906132af565b80601f01602080910402602001604051908101604052809291908181526020018280546111c2906132af565b801561120f5780601f106111e45761010080835404028352916020019161120f565b820191906000526020600020905b8154815290600101906020018083116111f257829003601f168201915b5050505050905090565b611221611832565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690612e79565b60405180910390fd5b806005600061129c611832565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611349611832565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161138e9190612d5c565b60405180910390a35050565b6113ab6113a5611832565b836118f3565b6113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e190612ff9565b60405180910390fd5b6113f684848484611e85565b50505050565b611404611832565b73ffffffffffffffffffffffffffffffffffffffff1661142261115d565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f90612f59565b60405180910390fd5b80600d8190555050565b6060600b61148f83611ee1565b6040516020016114a0929190612cbc565b6040516020818303038152906040529050919050565b600b80546114c3906132af565b80601f01602080910402602001604051908101604052809291908181526020018280546114ef906132af565b801561153c5780601f106115115761010080835404028352916020019161153c565b820191906000526020600020905b81548152906001019060200180831161151f57829003601f168201915b505050505081565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115e6611832565b73ffffffffffffffffffffffffffffffffffffffff1661160461115d565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190612f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190612df9565b60405180910390fd5b6116d381611dbf565b50565b6116de611832565b73ffffffffffffffffffffffffffffffffffffffff166116fc61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990612f59565b60405180910390fd5b8060078190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118ad83610e55565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006118fe826117c6565b61193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490612e99565b60405180910390fd5b600061194883610e55565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119b757508373ffffffffffffffffffffffffffffffffffffffff1661199f846108d2565b73ffffffffffffffffffffffffffffffffffffffff16145b806119c857506119c7818561154a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166119f182610e55565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90612f99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90612e59565b60405180910390fd5b611ac2838383612042565b611acd60008261183a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b1d91906131c5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b74919061313e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60085481600954611c3e919061313e565b1115611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690612e19565b60405180910390fd5b60005b81811015611d0957611c9683600954612047565b6009548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3600160096000828254611cef919061313e565b925050819055508080611d0190613312565b915050611c82565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611d3490612ce0565b60006040518083038185875af1925050503d8060008114611d71576040519150601f19603f3d011682016040523d82523d6000602084013e611d76565b606091505b5050905080611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190612f79565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e908484846119d1565b611e9c84848484612215565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290612db9565b60405180910390fd5b50505050565b60606000821415611f29576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203d565b600082905060005b60008214611f5b578080611f4490613312565b915050600a82611f549190613194565b9150611f31565b60008167ffffffffffffffff811115611f7757611f76613448565b5b6040519080825280601f01601f191660200182016040528015611fa95781602001600182028036833780820191505090505b5090505b6000851461203657600182611fc291906131c5565b9150600a85611fd1919061335b565b6030611fdd919061313e565b60f81b818381518110611ff357611ff2613419565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202f9190613194565b9450611fad565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90612f19565b60405180910390fd5b6120c0816117c6565b15612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790612e39565b60405180910390fd5b61210c60008383612042565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461215c919061313e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006122368473ffffffffffffffffffffffffffffffffffffffff166123ac565b1561239f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261225f611832565b8786866040518563ffffffff1660e01b81526004016122819493929190612d10565b602060405180830381600087803b15801561229b57600080fd5b505af19250505080156122cc57506040513d601f19601f820116820180604052508101906122c991906127c8565b60015b61234f573d80600081146122fc576040519150601f19603f3d011682016040523d82523d6000602084013e612301565b606091505b50600081511415612347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233e90612db9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123a4565b600190505b949350505050565b600080823b905060008111915050919050565b8280546123cb906132af565b90600052602060002090601f0160209004810192826123ed5760008555612434565b82601f1061240657805160ff1916838001178555612434565b82800160010185558215612434579182015b82811115612433578251825591602001919060010190612418565b5b5090506124419190612445565b5090565b5b8082111561245e576000816000905550600101612446565b5090565b600061247561247084613079565b613054565b9050828152602081018484840111156124915761249061347c565b5b61249c84828561326d565b509392505050565b60006124b76124b2846130aa565b613054565b9050828152602081018484840111156124d3576124d261347c565b5b6124de84828561326d565b509392505050565b6000813590506124f5816139ea565b92915050565b60008135905061250a81613a01565b92915050565b60008135905061251f81613a18565b92915050565b60008151905061253481613a18565b92915050565b600082601f83011261254f5761254e613477565b5b813561255f848260208601612462565b91505092915050565b600082601f83011261257d5761257c613477565b5b813561258d8482602086016124a4565b91505092915050565b6000813590506125a581613a2f565b92915050565b6000602082840312156125c1576125c0613486565b5b60006125cf848285016124e6565b91505092915050565b600080604083850312156125ef576125ee613486565b5b60006125fd858286016124e6565b925050602061260e858286016124e6565b9150509250929050565b60008060006060848603121561263157612630613486565b5b600061263f868287016124e6565b9350506020612650868287016124e6565b925050604061266186828701612596565b9150509250925092565b6000806000806080858703121561268557612684613486565b5b6000612693878288016124e6565b94505060206126a4878288016124e6565b93505060406126b587828801612596565b925050606085013567ffffffffffffffff8111156126d6576126d5613481565b5b6126e28782880161253a565b91505092959194509250565b6000806040838503121561270557612704613486565b5b6000612713858286016124e6565b9250506020612724858286016124fb565b9150509250929050565b6000806040838503121561274557612744613486565b5b6000612753858286016124e6565b925050602061276485828601612596565b9150509250929050565b60006020828403121561278457612783613486565b5b6000612792848285016124fb565b91505092915050565b6000602082840312156127b1576127b0613486565b5b60006127bf84828501612510565b91505092915050565b6000602082840312156127de576127dd613486565b5b60006127ec84828501612525565b91505092915050565b60006020828403121561280b5761280a613486565b5b600082013567ffffffffffffffff81111561282957612828613481565b5b61283584828501612568565b91505092915050565b60006020828403121561285457612853613486565b5b600061286284828501612596565b91505092915050565b612874816131f9565b82525050565b6128838161320b565b82525050565b6000612894826130f0565b61289e8185613106565b93506128ae81856020860161327c565b6128b78161348b565b840191505092915050565b60006128cd826130fb565b6128d78185613122565b93506128e781856020860161327c565b6128f08161348b565b840191505092915050565b6000612906826130fb565b6129108185613133565b935061292081856020860161327c565b80840191505092915050565b60008154612939816132af565b6129438186613133565b9450600182166000811461295e576001811461296f576129a2565b60ff198316865281860193506129a2565b612978856130db565b60005b8381101561299a5781548189015260018201915060208101905061297b565b838801955050505b50505092915050565b60006129b8602a83613122565b91506129c38261349c565b604082019050919050565b60006129db603283613122565b91506129e6826134eb565b604082019050919050565b60006129fe601283613122565b9150612a098261353a565b602082019050919050565b6000612a21602683613122565b9150612a2c82613563565b604082019050919050565b6000612a44601f83613122565b9150612a4f826135b2565b602082019050919050565b6000612a67601c83613122565b9150612a72826135db565b602082019050919050565b6000612a8a602483613122565b9150612a9582613604565b604082019050919050565b6000612aad601983613122565b9150612ab882613653565b602082019050919050565b6000612ad0602c83613122565b9150612adb8261367c565b604082019050919050565b6000612af3603883613122565b9150612afe826136cb565b604082019050919050565b6000612b16602a83613122565b9150612b218261371a565b604082019050919050565b6000612b39602983613122565b9150612b4482613769565b604082019050919050565b6000612b5c602083613122565b9150612b67826137b8565b602082019050919050565b6000612b7f602c83613122565b9150612b8a826137e1565b604082019050919050565b6000612ba2602083613122565b9150612bad82613830565b602082019050919050565b6000612bc5601483613122565b9150612bd082613859565b602082019050919050565b6000612be8602983613122565b9150612bf382613882565b604082019050919050565b6000612c0b602383613122565b9150612c16826138d1565b604082019050919050565b6000612c2e602183613122565b9150612c3982613920565b604082019050919050565b6000612c51600083613117565b9150612c5c8261396f565b600082019050919050565b6000612c74603183613122565b9150612c7f82613972565b604082019050919050565b6000612c97601883613122565b9150612ca2826139c1565b602082019050919050565b612cb681613263565b82525050565b6000612cc8828561292c565b9150612cd482846128fb565b91508190509392505050565b6000612ceb82612c44565b9150819050919050565b6000602082019050612d0a600083018461286b565b92915050565b6000608082019050612d25600083018761286b565b612d32602083018661286b565b612d3f6040830185612cad565b8181036060830152612d518184612889565b905095945050505050565b6000602082019050612d71600083018461287a565b92915050565b60006020820190508181036000830152612d9181846128c2565b905092915050565b60006020820190508181036000830152612db2816129ab565b9050919050565b60006020820190508181036000830152612dd2816129ce565b9050919050565b60006020820190508181036000830152612df2816129f1565b9050919050565b60006020820190508181036000830152612e1281612a14565b9050919050565b60006020820190508181036000830152612e3281612a37565b9050919050565b60006020820190508181036000830152612e5281612a5a565b9050919050565b60006020820190508181036000830152612e7281612a7d565b9050919050565b60006020820190508181036000830152612e9281612aa0565b9050919050565b60006020820190508181036000830152612eb281612ac3565b9050919050565b60006020820190508181036000830152612ed281612ae6565b9050919050565b60006020820190508181036000830152612ef281612b09565b9050919050565b60006020820190508181036000830152612f1281612b2c565b9050919050565b60006020820190508181036000830152612f3281612b4f565b9050919050565b60006020820190508181036000830152612f5281612b72565b9050919050565b60006020820190508181036000830152612f7281612b95565b9050919050565b60006020820190508181036000830152612f9281612bb8565b9050919050565b60006020820190508181036000830152612fb281612bdb565b9050919050565b60006020820190508181036000830152612fd281612bfe565b9050919050565b60006020820190508181036000830152612ff281612c21565b9050919050565b6000602082019050818103600083015261301281612c67565b9050919050565b6000602082019050818103600083015261303281612c8a565b9050919050565b600060208201905061304e6000830184612cad565b92915050565b600061305e61306f565b905061306a82826132e1565b919050565b6000604051905090565b600067ffffffffffffffff82111561309457613093613448565b5b61309d8261348b565b9050602081019050919050565b600067ffffffffffffffff8211156130c5576130c4613448565b5b6130ce8261348b565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061314982613263565b915061315483613263565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131895761318861338c565b5b828201905092915050565b600061319f82613263565b91506131aa83613263565b9250826131ba576131b96133bb565b5b828204905092915050565b60006131d082613263565b91506131db83613263565b9250828210156131ee576131ed61338c565b5b828203905092915050565b600061320482613243565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561329a57808201518184015260208101905061327f565b838111156132a9576000848401525b50505050565b600060028204905060018216806132c757607f821691505b602082108114156132db576132da6133ea565b5b50919050565b6132ea8261348b565b810181811067ffffffffffffffff8211171561330957613308613448565b5b80604052505050565b600061331d82613263565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133505761334f61338c565b5b600182019050919050565b600061336682613263565b915061337183613263565b925082613381576133806133bb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a20537572706173736573206d61784974656d73506560008201527f7254780000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204e6f74206f70656e207965740000000000000000600082015250565b6139f3816131f9565b81146139fe57600080fd5b50565b613a0a8161320b565b8114613a1557600080fd5b50565b613a2181613217565b8114613a2c57600080fd5b50565b613a3881613263565b8114613a4357600080fd5b5056fea26469706673582212203280ed4245baf3f1b24b1e9d5eefbd5cbdaf6c50cc77dc61e6197dec535014a464736f6c63430008070033

Deployed Bytecode Sourcemap

35141:2992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22923:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23868:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25427:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24950:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35273:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26317:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35774:506;;;:::i;:::-;;37333:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35307:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37067:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35378:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35238:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37568:97;;;;;;;;;;;;;:::i;:::-;;26727:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36630:153;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23562:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35197:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23292:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;37206:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35644:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24037:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25720:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26983:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36825:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37956:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35344:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35421:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26086:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36956:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22923:305;23025:4;23077:25;23062:40;;;:11;:40;;;;:105;;;;23134:33;23119:48;;;:11;:48;;;;23062:105;:158;;;;23184:36;23208:11;23184:23;:36::i;:::-;23062:158;23042:178;;22923:305;;;:::o;23868:100::-;23922:13;23955:5;23948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23868:100;:::o;25427:221::-;25503:7;25531:16;25539:7;25531;:16::i;:::-;25523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25616:15;:24;25632:7;25616:24;;;;;;;;;;;;;;;;;;;;;25609:31;;25427:221;;;:::o;24950:411::-;25031:13;25047:23;25062:7;25047:14;:23::i;:::-;25031:39;;25095:5;25089:11;;:2;:11;;;;25081:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25189:5;25173:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25198:37;25215:5;25222:12;:10;:12::i;:::-;25198:16;:37::i;:::-;25173:62;25151:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25332:21;25341:2;25345:7;25332:8;:21::i;:::-;25020:341;24950:411;;:::o;35273:27::-;;;;:::o;26317:339::-;26512:41;26531:12;:10;:12::i;:::-;26545:7;26512:18;:41::i;:::-;26504:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26620:28;26630:4;26636:2;26640:7;26620:9;:28::i;:::-;26317:339;;;:::o;35774:506::-;35850:14;;35832:15;:32;35824:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35913:16;;;;;;;;;;;35912:17;35904:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;35963:14;35992:9;;35980;:21;;;;:::i;:::-;35963:38;;36012:11;36038:9;;36026;:21;;;;:::i;:::-;36012:35;;36079:1;36066:9;:14;36058:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36156:13;;36146:6;:23;;36138:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36230:42;36253:10;36265:6;36230:22;:42::i;:::-;35813:467;;35774:506::o;37333:123::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37434:14:::1;37418:13;:30;;;;;;;;;;;;:::i;:::-;;37333:123:::0;:::o;35307:30::-;;;;:::o;37067:127::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37169:17:::1;37150:16;;:36;;;;;;;;;;;;;;;;;;37067:127:::0;:::o;35378:36::-;;;;;;;;;;;;;:::o;35238:28::-;;;;:::o;37568:97::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37618:39:::1;37626:7;:5;:7::i;:::-;37635:21;37618:7;:39::i;:::-;37568:97::o:0;26727:185::-;26865:39;26882:4;26888:2;26892:7;26865:39;;;;;;;;;;;;:16;:39::i;:::-;26727:185;;;:::o;36630:153::-;36671:4;36714:14;;36695:15;:33;;:54;;;;;36733:16;;;;;;;;;;;36732:17;36695:54;:80;;;;;36767:8;;36753:11;;:22;36695:80;36688:87;;36630:153;:::o;23562:239::-;23634:7;23654:13;23670:7;:16;23678:7;23670:16;;;;;;;;;;;;;;;;;;;;;23654:32;;23722:1;23705:19;;:5;:19;;;;23697:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23788:5;23781:12;;;23562:239;;;:::o;35197:34::-;;;;:::o;23292:208::-;23364:7;23409:1;23392:19;;:5;:19;;;;23384:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23476:9;:16;23486:5;23476:16;;;;;;;;;;;;;;;;23469:23;;23292:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;37206:115::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37299:14:::1;37283:13;:30;;;;37206:115:::0;:::o;35644:118::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35720:34:::1;35743:2;35747:6;35720:22;:34::i;:::-;35644:118:::0;;:::o;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;24037:104::-;24093:13;24126:7;24119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24037:104;:::o;25720:295::-;25835:12;:10;:12::i;:::-;25823:24;;:8;:24;;;;25815:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25935:8;25890:18;:32;25909:12;:10;:12::i;:::-;25890:32;;;;;;;;;;;;;;;:42;25923:8;25890:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25988:8;25959:48;;25974:12;:10;:12::i;:::-;25959:48;;;25998:8;25959:48;;;;;;:::i;:::-;;;;;;;;25720:295;;:::o;26983:328::-;27158:41;27177:12;:10;:12::i;:::-;27191:7;27158:18;:41::i;:::-;27150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27264:39;27278:4;27284:2;27288:7;27297:5;27264:13;:39::i;:::-;26983:328;;;;:::o;36825:119::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36921:15:::1;36904:14;:32;;;;36825:119:::0;:::o;37956:174::-;38022:13;38079;38094:26;38111:8;38094:16;:26::i;:::-;38062:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38048:74;;37956:174;;;:::o;35344:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35421:39::-;;;;:::o;26086:164::-;26183:4;26207:18;:25;26226:5;26207:25;;;;;;;;;;;;;;;:35;26233:8;26207:35;;;;;;;;;;;;;;;;;;;;;;;;;26200:42;;26086:164;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;36956:99::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37037:10:::1;37025:9;:22;;;;36956:99:::0;:::o;15893:157::-;15978:4;16017:25;16002:40;;;:11;:40;;;;15995:47;;15893:157;;;:::o;28821:127::-;28886:4;28938:1;28910:30;;:7;:16;28918:7;28910:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28903:37;;28821:127;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;32803:174::-;32905:2;32878:15;:24;32894:7;32878:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32961:7;32957:2;32923:46;;32932:23;32947:7;32932:14;:23::i;:::-;32923:46;;;;;;;;;;;;32803:174;;:::o;29115:348::-;29208:4;29233:16;29241:7;29233;:16::i;:::-;29225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29309:13;29325:23;29340:7;29325:14;:23::i;:::-;29309:39;;29378:5;29367:16;;:7;:16;;;:51;;;;29411:7;29387:31;;:20;29399:7;29387:11;:20::i;:::-;:31;;;29367:51;:87;;;;29422:32;29439:5;29446:7;29422:16;:32::i;:::-;29367:87;29359:96;;;29115:348;;;;:::o;32107:578::-;32266:4;32239:31;;:23;32254:7;32239:14;:23::i;:::-;:31;;;32231:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32349:1;32335:16;;:2;:16;;;;32327:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32405:39;32426:4;32432:2;32436:7;32405:20;:39::i;:::-;32509:29;32526:1;32530:7;32509:8;:29::i;:::-;32570:1;32551:9;:15;32561:4;32551:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32599:1;32582:9;:13;32592:2;32582:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32630:2;32611:7;:16;32619:7;32611:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32669:7;32665:2;32650:27;;32659:4;32650:27;;;;;;;;;;;;32107:578;;;:::o;36292:326::-;36401:8;;36391:6;36377:11;;:20;;;;:::i;:::-;:32;;36369:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36461:6;36456:155;36477:6;36473:1;:10;36456:155;;;36505:22;36511:2;36515:11;;36505:5;:22::i;:::-;36556:11;;36552:2;36547:21;;;;;;;;;;;;36598:1;36583:11;;:16;;;;;;;:::i;:::-;;;;;;;;36485:3;;;;;:::i;:::-;;;;36456:155;;;;36292:326;;:::o;37673:165::-;37736:12;37753:2;:7;;37768:6;37753:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37735:44;;;37798:7;37790:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;37724:114;37673:165;;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5052:128;5007:173;:::o;28193:315::-;28350:28;28360:4;28366:2;28370:7;28350:9;:28::i;:::-;28397:48;28420:4;28426:2;28430:7;28439:5;28397:22;:48::i;:::-;28389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:315;;;;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;34913:126::-;;;;:::o;30799:382::-;30893:1;30879:16;;:2;:16;;;;30871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30952:16;30960:7;30952;:16::i;:::-;30951:17;30943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31014:45;31043:1;31047:2;31051:7;31014:20;:45::i;:::-;31089:1;31072:9;:13;31082:2;31072:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31120:2;31101:7;:16;31109:7;31101:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31165:7;31161:2;31140:33;;31157:1;31140:33;;;;;;;;;;;;30799:382;;:::o;33542:799::-;33697:4;33718:15;:2;:13;;;:15::i;:::-;33714:620;;;33770:2;33754:36;;;33791:12;:10;:12::i;:::-;33805:4;33811:7;33820:5;33754:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33750:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34013:1;33996:6;:13;:18;33992:272;;;34039:60;;;;;;;;;;:::i;:::-;;;;;;;;33992:272;34214:6;34208:13;34199:6;34195:2;34191:15;34184:38;33750:529;33887:41;;;33877:51;;;:6;:51;;;;33870:58;;;;;33714:620;34318:4;34311:11;;33542:799;;;;;;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::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::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8869:845::-;8972:3;9009:5;9003:12;9038:36;9064:9;9038:36;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9210:1;9199:9;9195:17;9226:1;9221:137;;;;9372:1;9367:341;;;;9188:520;;9221:137;9305:4;9301:9;9290;9286:25;9281:3;9274:38;9341:6;9336:3;9332:16;9325:23;;9221:137;;9367:341;9434:38;9466:5;9434:38;:::i;:::-;9494:1;9508:154;9522:6;9519:1;9516:13;9508:154;;;9596:7;9590:14;9586:1;9581:3;9577:11;9570:35;9646:1;9637:7;9633:15;9622:26;;9544:4;9541:1;9537:12;9532:17;;9508:154;;;9691:6;9686:3;9682:16;9675:23;;9374:334;;9188:520;;8976:738;;8869:845;;;;:::o;9720:366::-;9862:3;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9959:93;10048:3;9959:93;:::i;:::-;10077:2;10072:3;10068:12;10061:19;;9720:366;;;:::o;10092:::-;10234:3;10255:67;10319:2;10314:3;10255:67;:::i;:::-;10248:74;;10331:93;10420:3;10331:93;:::i;:::-;10449:2;10444:3;10440:12;10433:19;;10092:366;;;:::o;10464:::-;10606:3;10627:67;10691:2;10686:3;10627:67;:::i;:::-;10620:74;;10703:93;10792:3;10703:93;:::i;:::-;10821:2;10816:3;10812:12;10805:19;;10464:366;;;:::o;10836:::-;10978:3;10999:67;11063:2;11058:3;10999:67;:::i;:::-;10992:74;;11075:93;11164:3;11075:93;:::i;:::-;11193:2;11188:3;11184:12;11177:19;;10836:366;;;:::o;11208:::-;11350:3;11371:67;11435:2;11430:3;11371:67;:::i;:::-;11364:74;;11447:93;11536:3;11447:93;:::i;:::-;11565:2;11560:3;11556:12;11549:19;;11208:366;;;:::o;11580:::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:::-;12094:3;12115:67;12179:2;12174:3;12115:67;:::i;:::-;12108:74;;12191:93;12280:3;12191:93;:::i;:::-;12309:2;12304:3;12300:12;12293:19;;11952:366;;;:::o;12324:::-;12466:3;12487:67;12551:2;12546:3;12487:67;:::i;:::-;12480:74;;12563:93;12652:3;12563:93;:::i;:::-;12681:2;12676:3;12672:12;12665:19;;12324:366;;;:::o;12696:::-;12838:3;12859:67;12923:2;12918:3;12859:67;:::i;:::-;12852:74;;12935:93;13024:3;12935:93;:::i;:::-;13053:2;13048:3;13044:12;13037:19;;12696:366;;;:::o;13068:::-;13210:3;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13307:93;13396:3;13307:93;:::i;:::-;13425:2;13420:3;13416:12;13409:19;;13068:366;;;:::o;13440:::-;13582:3;13603:67;13667:2;13662:3;13603:67;:::i;:::-;13596:74;;13679:93;13768:3;13679:93;:::i;:::-;13797:2;13792:3;13788:12;13781:19;;13440:366;;;:::o;13812:::-;13954:3;13975:67;14039:2;14034:3;13975:67;:::i;:::-;13968:74;;14051:93;14140:3;14051:93;:::i;:::-;14169:2;14164:3;14160:12;14153:19;;13812:366;;;:::o;14184:::-;14326:3;14347:67;14411:2;14406:3;14347:67;:::i;:::-;14340:74;;14423:93;14512:3;14423:93;:::i;:::-;14541:2;14536:3;14532:12;14525:19;;14184:366;;;:::o;14556:::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:::-;15814:3;15835:67;15899:2;15894:3;15835:67;:::i;:::-;15828:74;;15911:93;16000:3;15911:93;:::i;:::-;16029:2;16024:3;16020:12;16013:19;;15672:366;;;:::o;16044:::-;16186:3;16207:67;16271:2;16266:3;16207:67;:::i;:::-;16200:74;;16283:93;16372:3;16283:93;:::i;:::-;16401:2;16396:3;16392:12;16385:19;;16044:366;;;:::o;16416:::-;16558:3;16579:67;16643:2;16638:3;16579:67;:::i;:::-;16572:74;;16655:93;16744:3;16655:93;:::i;:::-;16773:2;16768:3;16764:12;16757:19;;16416:366;;;:::o;16788:398::-;16947:3;16968:83;17049:1;17044:3;16968:83;:::i;:::-;16961:90;;17060:93;17149:3;17060:93;:::i;:::-;17178:1;17173:3;17169:11;17162:18;;16788:398;;;:::o;17192:366::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:118::-;18023:24;18041:5;18023:24;:::i;:::-;18018:3;18011:37;17936:118;;:::o;18060:429::-;18237:3;18259:92;18347:3;18338:6;18259:92;:::i;:::-;18252:99;;18368:95;18459:3;18450:6;18368:95;:::i;:::-;18361:102;;18480:3;18473:10;;18060:429;;;;;:::o;18495:379::-;18679:3;18701:147;18844:3;18701:147;:::i;:::-;18694:154;;18865:3;18858:10;;18495:379;;;:::o;18880:222::-;18973:4;19011:2;19000:9;18996:18;18988:26;;19024:71;19092:1;19081:9;19077:17;19068:6;19024:71;:::i;:::-;18880:222;;;;:::o;19108:640::-;19303:4;19341:3;19330:9;19326:19;19318:27;;19355:71;19423:1;19412:9;19408:17;19399:6;19355:71;:::i;:::-;19436:72;19504:2;19493:9;19489:18;19480:6;19436:72;:::i;:::-;19518;19586:2;19575:9;19571:18;19562:6;19518:72;:::i;:::-;19637:9;19631:4;19627:20;19622:2;19611:9;19607:18;19600:48;19665:76;19736:4;19727:6;19665:76;:::i;:::-;19657:84;;19108:640;;;;;;;:::o;19754:210::-;19841:4;19879:2;19868:9;19864:18;19856:26;;19892:65;19954:1;19943:9;19939:17;19930:6;19892:65;:::i;:::-;19754:210;;;;:::o;19970:313::-;20083:4;20121:2;20110:9;20106:18;20098:26;;20170:9;20164:4;20160:20;20156:1;20145:9;20141:17;20134:47;20198:78;20271:4;20262:6;20198:78;:::i;:::-;20190:86;;19970:313;;;;:::o;20289:419::-;20455:4;20493:2;20482:9;20478:18;20470:26;;20542:9;20536:4;20532:20;20528:1;20517:9;20513:17;20506:47;20570:131;20696:4;20570:131;:::i;:::-;20562:139;;20289:419;;;:::o;20714:::-;20880:4;20918:2;20907:9;20903:18;20895:26;;20967:9;20961:4;20957:20;20953:1;20942:9;20938:17;20931:47;20995:131;21121:4;20995:131;:::i;:::-;20987:139;;20714:419;;;:::o;21139:::-;21305:4;21343:2;21332:9;21328:18;21320:26;;21392:9;21386:4;21382:20;21378:1;21367:9;21363:17;21356:47;21420:131;21546:4;21420:131;:::i;:::-;21412:139;;21139:419;;;:::o;21564:::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21564:419;;;:::o;21989:::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:::-;23005:4;23043:2;23032:9;23028:18;23020:26;;23092:9;23086:4;23082:20;23078:1;23067:9;23063:17;23056:47;23120:131;23246:4;23120:131;:::i;:::-;23112:139;;22839:419;;;:::o;23264:::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:::-;24280:4;24318:2;24307:9;24303:18;24295:26;;24367:9;24361:4;24357:20;24353:1;24342:9;24338:17;24331:47;24395:131;24521:4;24395:131;:::i;:::-;24387:139;;24114:419;;;:::o;24539:::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:::-;26405:4;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26239:419;;;:::o;26664:::-;26830:4;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26664:419;;;:::o;27089:::-;27255:4;27293:2;27282:9;27278:18;27270:26;;27342:9;27336:4;27332:20;27328:1;27317:9;27313:17;27306:47;27370:131;27496:4;27370:131;:::i;:::-;27362:139;;27089:419;;;:::o;27514:::-;27680:4;27718:2;27707:9;27703:18;27695:26;;27767:9;27761:4;27757:20;27753:1;27742:9;27738:17;27731:47;27795:131;27921:4;27795:131;:::i;:::-;27787:139;;27514:419;;;:::o;27939:::-;28105:4;28143:2;28132:9;28128:18;28120:26;;28192:9;28186:4;28182:20;28178:1;28167:9;28163:17;28156:47;28220:131;28346:4;28220:131;:::i;:::-;28212:139;;27939:419;;;:::o;28364:::-;28530:4;28568:2;28557:9;28553:18;28545:26;;28617:9;28611:4;28607:20;28603:1;28592:9;28588:17;28581:47;28645:131;28771:4;28645:131;:::i;:::-;28637:139;;28364:419;;;:::o;28789:::-;28955:4;28993:2;28982:9;28978:18;28970:26;;29042:9;29036:4;29032:20;29028:1;29017:9;29013:17;29006:47;29070:131;29196:4;29070:131;:::i;:::-;29062:139;;28789:419;;;:::o;29214:222::-;29307:4;29345:2;29334:9;29330:18;29322:26;;29358:71;29426:1;29415:9;29411:17;29402:6;29358:71;:::i;:::-;29214:222;;;;:::o;29442:129::-;29476:6;29503:20;;:::i;:::-;29493:30;;29532:33;29560:4;29552:6;29532:33;:::i;:::-;29442:129;;;:::o;29577:75::-;29610:6;29643:2;29637:9;29627:19;;29577:75;:::o;29658:307::-;29719:4;29809:18;29801:6;29798:30;29795:56;;;29831:18;;:::i;:::-;29795:56;29869:29;29891:6;29869:29;:::i;:::-;29861:37;;29953:4;29947;29943:15;29935:23;;29658:307;;;:::o;29971:308::-;30033:4;30123:18;30115:6;30112:30;30109:56;;;30145:18;;:::i;:::-;30109:56;30183:29;30205:6;30183:29;:::i;:::-;30175:37;;30267:4;30261;30257:15;30249:23;;29971:308;;;:::o;30285:141::-;30334:4;30357:3;30349:11;;30380:3;30377:1;30370:14;30414:4;30411:1;30401:18;30393:26;;30285:141;;;:::o;30432:98::-;30483:6;30517:5;30511:12;30501:22;;30432:98;;;:::o;30536:99::-;30588:6;30622:5;30616:12;30606:22;;30536:99;;;:::o;30641:168::-;30724:11;30758:6;30753:3;30746:19;30798:4;30793:3;30789:14;30774:29;;30641:168;;;;:::o;30815:147::-;30916:11;30953:3;30938:18;;30815:147;;;;:::o;30968:169::-;31052:11;31086:6;31081:3;31074:19;31126:4;31121:3;31117:14;31102:29;;30968:169;;;;:::o;31143:148::-;31245:11;31282:3;31267:18;;31143:148;;;;:::o;31297:305::-;31337:3;31356:20;31374:1;31356:20;:::i;:::-;31351:25;;31390:20;31408:1;31390:20;:::i;:::-;31385:25;;31544:1;31476:66;31472:74;31469:1;31466:81;31463:107;;;31550:18;;:::i;:::-;31463:107;31594:1;31591;31587:9;31580:16;;31297:305;;;;:::o;31608:185::-;31648:1;31665:20;31683:1;31665:20;:::i;:::-;31660:25;;31699:20;31717:1;31699:20;:::i;:::-;31694:25;;31738:1;31728:35;;31743:18;;:::i;:::-;31728:35;31785:1;31782;31778:9;31773:14;;31608:185;;;;:::o;31799:191::-;31839:4;31859:20;31877:1;31859:20;:::i;:::-;31854:25;;31893:20;31911:1;31893:20;:::i;:::-;31888:25;;31932:1;31929;31926:8;31923:34;;;31937:18;;:::i;:::-;31923:34;31982:1;31979;31975:9;31967:17;;31799:191;;;;:::o;31996:96::-;32033:7;32062:24;32080:5;32062:24;:::i;:::-;32051:35;;31996:96;;;:::o;32098:90::-;32132:7;32175:5;32168:13;32161:21;32150:32;;32098:90;;;:::o;32194:149::-;32230:7;32270:66;32263:5;32259:78;32248:89;;32194:149;;;:::o;32349:126::-;32386:7;32426:42;32419:5;32415:54;32404:65;;32349:126;;;:::o;32481:77::-;32518:7;32547:5;32536:16;;32481:77;;;:::o;32564:154::-;32648:6;32643:3;32638;32625:30;32710:1;32701:6;32696:3;32692:16;32685:27;32564:154;;;:::o;32724:307::-;32792:1;32802:113;32816:6;32813:1;32810:13;32802:113;;;32901:1;32896:3;32892:11;32886:18;32882:1;32877:3;32873:11;32866:39;32838:2;32835:1;32831:10;32826:15;;32802:113;;;32933:6;32930:1;32927:13;32924:101;;;33013:1;33004:6;32999:3;32995:16;32988:27;32924:101;32773:258;32724:307;;;:::o;33037:320::-;33081:6;33118:1;33112:4;33108:12;33098:22;;33165:1;33159:4;33155:12;33186:18;33176:81;;33242:4;33234:6;33230:17;33220:27;;33176:81;33304:2;33296:6;33293:14;33273:18;33270:38;33267:84;;;33323:18;;:::i;:::-;33267:84;33088:269;33037:320;;;:::o;33363:281::-;33446:27;33468:4;33446:27;:::i;:::-;33438:6;33434:40;33576:6;33564:10;33561:22;33540:18;33528:10;33525:34;33522:62;33519:88;;;33587:18;;:::i;:::-;33519:88;33627:10;33623:2;33616:22;33406:238;33363:281;;:::o;33650:233::-;33689:3;33712:24;33730:5;33712:24;:::i;:::-;33703:33;;33758:66;33751:5;33748:77;33745:103;;;33828:18;;:::i;:::-;33745:103;33875:1;33868:5;33864:13;33857:20;;33650:233;;;:::o;33889:176::-;33921:1;33938:20;33956:1;33938:20;:::i;:::-;33933:25;;33972:20;33990:1;33972:20;:::i;:::-;33967:25;;34011:1;34001:35;;34016:18;;:::i;:::-;34001:35;34057:1;34054;34050:9;34045:14;;33889:176;;;;:::o;34071:180::-;34119:77;34116:1;34109:88;34216:4;34213:1;34206:15;34240:4;34237:1;34230:15;34257:180;34305:77;34302:1;34295:88;34402:4;34399:1;34392:15;34426:4;34423:1;34416:15;34443:180;34491:77;34488:1;34481:88;34588:4;34585:1;34578:15;34612:4;34609:1;34602:15;34629:180;34677:77;34674:1;34667:88;34774:4;34771:1;34764:15;34798:4;34795:1;34788:15;34815:180;34863:77;34860:1;34853:88;34960:4;34957:1;34950:15;34984:4;34981:1;34974:15;35001:117;35110:1;35107;35100:12;35124:117;35233:1;35230;35223:12;35247:117;35356:1;35353;35346:12;35370:117;35479:1;35476;35469:12;35493:102;35534:6;35585:2;35581:7;35576:2;35569:5;35565:14;35561:28;35551:38;;35493:102;;;:::o;35601:229::-;35741:34;35737:1;35729:6;35725:14;35718:58;35810:12;35805:2;35797:6;35793:15;35786:37;35601:229;:::o;35836:237::-;35976:34;35972:1;35964:6;35960:14;35953:58;36045:20;36040:2;36032:6;36028:15;36021:45;35836:237;:::o;36079:168::-;36219:20;36215:1;36207:6;36203:14;36196:44;36079:168;:::o;36253:225::-;36393:34;36389:1;36381:6;36377:14;36370:58;36462:8;36457:2;36449:6;36445:15;36438:33;36253:225;:::o;36484:181::-;36624:33;36620:1;36612:6;36608:14;36601:57;36484:181;:::o;36671:178::-;36811:30;36807:1;36799:6;36795:14;36788:54;36671:178;:::o;36855:223::-;36995:34;36991:1;36983:6;36979:14;36972:58;37064:6;37059:2;37051:6;37047:15;37040:31;36855:223;:::o;37084:175::-;37224:27;37220:1;37212:6;37208:14;37201:51;37084:175;:::o;37265:231::-;37405:34;37401:1;37393:6;37389:14;37382:58;37474:14;37469:2;37461:6;37457:15;37450:39;37265:231;:::o;37502:243::-;37642:34;37638:1;37630:6;37626:14;37619:58;37711:26;37706:2;37698:6;37694:15;37687:51;37502:243;:::o;37751:229::-;37891:34;37887:1;37879:6;37875:14;37868:58;37960:12;37955:2;37947:6;37943:15;37936:37;37751:229;:::o;37986:228::-;38126:34;38122:1;38114:6;38110:14;38103:58;38195:11;38190:2;38182:6;38178:15;38171:36;37986:228;:::o;38220:182::-;38360:34;38356:1;38348:6;38344:14;38337:58;38220:182;:::o;38408:231::-;38548:34;38544:1;38536:6;38532:14;38525:58;38617:14;38612:2;38604:6;38600:15;38593:39;38408:231;:::o;38645:182::-;38785:34;38781:1;38773:6;38769:14;38762:58;38645:182;:::o;38833:170::-;38973:22;38969:1;38961:6;38957:14;38950:46;38833:170;:::o;39009:228::-;39149:34;39145:1;39137:6;39133:14;39126:58;39218:11;39213:2;39205:6;39201:15;39194:36;39009:228;:::o;39243:222::-;39383:34;39379:1;39371:6;39367:14;39360:58;39452:5;39447:2;39439:6;39435:15;39428:30;39243:222;:::o;39471:220::-;39611:34;39607:1;39599:6;39595:14;39588:58;39680:3;39675:2;39667:6;39663:15;39656:28;39471:220;:::o;39697:114::-;;:::o;39817:236::-;39957:34;39953:1;39945:6;39941:14;39934:58;40026:19;40021:2;40013:6;40009:15;40002:44;39817:236;:::o;40059:174::-;40199:26;40195:1;40187:6;40183:14;40176:50;40059:174;:::o;40239:122::-;40312:24;40330:5;40312:24;:::i;:::-;40305:5;40302:35;40292:63;;40351:1;40348;40341:12;40292:63;40239:122;:::o;40367:116::-;40437:21;40452:5;40437:21;:::i;:::-;40430:5;40427:32;40417:60;;40473:1;40470;40463:12;40417:60;40367:116;:::o;40489:120::-;40561:23;40578:5;40561:23;:::i;:::-;40554:5;40551:34;40541:62;;40599:1;40596;40589:12;40541:62;40489:120;:::o;40615:122::-;40688:24;40706:5;40688:24;:::i;:::-;40681:5;40678:35;40668:63;;40727:1;40724;40717:12;40668:63;40615:122;:::o

Swarm Source

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