ETH Price: $2,694.43 (-1.85%)

Token

Mr. Everybody (MEB)
 

Overview

Max Total Supply

607 MEB

Holders

297

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 MEB
0x83f3dca87ee9879f5b15cfd9311e265455ec5717
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:
MrEverybody

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.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;
    }
}


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

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

pragma solidity ^0.8.0;


// 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/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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

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

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

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

pragma solidity ^0.8.0;



// 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(to).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 {}
}


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.3;

contract SodaPassNFT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint16 public constant maxSupply = 5100;
    string private _baseTokenURI;
    
    uint256 public _startDate = 1634850000000;
    uint256 public _whitelistStartDate = 1634677200000;
    
    mapping (address => bool) private _whitelisted;

    constructor() ERC721("Soda Pass", "SODA") {
         for (uint8 i = 0; i < 100; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }
    
    function setWhitelistStartDate(uint256 whitelistStartDate) public onlyOwner {
        _whitelistStartDate = whitelistStartDate;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

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

    // Get minting limit (for a single transaction) based on current token supply
    function getCurrentMintLimit() public view returns (uint8) {
        return block.timestamp >= _startDate ? 20 : 4;
    }

    // Get ether price based on current token supply
    function getCurrentPrice() public pure returns (uint64) {
        return 100_000_000_000_000_000;
    }
    
    function addUserToWhitelist(address wallet) public onlyOwner {
        _whitelisted[wallet] = true;
    }
    
    function removeUserFromWhitelist(address wallet) public onlyOwner {
        _whitelisted[wallet] = false;
    }
    
    // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        require(_startDate <= block.timestamp || (block.timestamp >= _whitelistStartDate && _whitelisted[msg.sender] == true), block.timestamp <= _whitelistStartDate ? "Sale is not open" : "Not whitelisted");
        require(_quantityToMint >= 1, "Must mint at least 1");
        require(block.timestamp >= _whitelistStartDate && block.timestamp <= _startDate ? (_quantityToMint + balanceOf(msg.sender) <= 4) : true, "Whitelisted mints are limited to 4 per wallet");
        require(
            _quantityToMint <= getCurrentMintLimit(),
            "Maximum current buy limit for individual transaction exceeded"
        );
        require(
            (_quantityToMint + totalSupply()) <= maxSupply,
            "Exceeds maximum supply"
        );
        require(
            msg.value == (getCurrentPrice() * _quantityToMint),
            "Ether submitted does not match current price"
        );

        for (uint8 i = 0; i < _quantityToMint; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        
        uint256 _balance = address(this).balance;
        address _coldWallet = 0x9781F65af8324b40Ee9Ca421ea963642Bc8a8C2b;
        payable(_coldWallet).transfer((_balance * 9)/10);
        
        address _devWallet = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0;
        payable(_devWallet).transfer((_balance * 1)/10);
    }
}

pragma solidity 0.8.3;

contract MrEverybody is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter public _tokenIds;
    
    uint16 public constant maxSupply = 1052;
    string private _baseTokenURI;
    
    uint256 public _startDate; // start 
    uint256 public _next48hour = 172800;           // 172800 48 hours
    uint256 public _next24hour = 86400;           // 86400 24 hour
    
    uint256 public _privateSalePrice =  6E16;   // 6E16 0.06 ETH per NFT
    uint256 public _publicSalePrice =  7E16;   //7E16 0.07 ETH per NFT
    bool public sale_started = false;
    event ReturnEvent(uint _amount);
    
    SodaPassNFT  soda_contract;
    
    address sodaContract = 0x3b553Fc51A63298E2E44d8ecd3b1ea01d22cA459;
    
    mapping(address => uint256) public countForAddress;


    constructor() ERC721("Mr. Everybody", "MEB") {
        soda_contract = SodaPassNFT(sodaContract);
        
        // 30 for team
        for (uint8 i = 0; i < 30; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }

    }
    
    function StartSale() public onlyOwner{
        _startDate = block.timestamp;
        sale_started = true;
    }
    
    function StopSale() public onlyOwner{
        sale_started = false;
    }
    
    function getSodaPassBalance(address _zz) public view returns (uint256 balance) {
       return soda_contract.balanceOf(_zz);
    }
    
     function getnow() public view returns (uint256) {
       return block.timestamp;
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = startDate;
    }
    
    function setPrivateSalePrice(uint256 privateSalePrice) public onlyOwner {
        _privateSalePrice = privateSalePrice;
    }
    
    function setPublicSalePrice(uint256 publicSalePrice) public onlyOwner {
        _publicSalePrice = publicSalePrice;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

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

    
    
     // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        
       require(_quantityToMint <= 10, 'can mint only 10 max at a time');
       require((_quantityToMint + totalSupply()) <= maxSupply,"Exceeds maximum supply");
       require(sale_started == true,"Sale Not Started");
       
              // for next 24 hours after presale started by owner
        if(block.timestamp <= (_startDate + _next48hour))
        {
            require(getSodaPassBalance(msg.sender) > 0 , "Needs to have SodaPass");
            require((countForAddress[msg.sender] + _quantityToMint) <= getSodaPassBalance(msg.sender),"cannot mint over the balance of SodaPass ");
            require(msg.value == (_privateSalePrice * _quantityToMint),"Ether submitted does not match current price 0.06 ETH per token");
            for (uint8 i = 0; i < _quantityToMint; i++) {
                _tokenIds.increment();
                uint256 newItemId = _tokenIds.current();
                countForAddress[msg.sender] = countForAddress[msg.sender] + 1;
                emit ReturnEvent(newItemId);
                _mint(msg.sender, newItemId);
                
             }
        }
        if(block.timestamp > (_startDate + _next48hour) && block.timestamp <= (_startDate + _next48hour + _next24hour)){
            require(getSodaPassBalance(msg.sender) > 0 , "Needs to have SodaPass");
            require(msg.value == (_privateSalePrice * _quantityToMint),"Ether submitted does not match current price 0.06 ETH per token");
             for (uint8 i = 0; i < _quantityToMint; i++) {
              _tokenIds.increment();
              uint256 newItemId = _tokenIds.current();
              emit ReturnEvent(newItemId);
              _mint(msg.sender, newItemId);
          }
         }
        if(block.timestamp > (_startDate + _next48hour + _next24hour)) {
             require(msg.value == (_publicSalePrice * _quantityToMint),"Ether submitted does not match current price 0.07 ETH per token");
             for (uint8 i = 0; i < _quantityToMint; i++) {
             _tokenIds.increment();
             uint256 newItemId = _tokenIds.current();
             emit ReturnEvent(newItemId);
             _mint(msg.sender, newItemId);
             }
         }
    }

    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        
        uint256 _balance = address(this).balance;
        address _coldWallet = 0x0aFEe0A7b9389f9Cf8866F866a93C17CaC29BddA;
        payable(_coldWallet).transfer((_balance * 6)/10);
        
        address _devWallet = 0x7d3d95ac0Bacde573860F75d3cd07369E0CE86F4;
        payable(_devWallet).transfer((_balance * 3)/10);
        
        address _devWallet2 = 0x3097617CbA85A26AdC214A1F87B680bE4b275cD0;
        payable(_devWallet2).transfer((_balance * 1)/10);

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ReturnEvent","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":"StartSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"StopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_next24hour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_next48hour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_privateSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"countForAddress","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":"_zz","type":"address"}],"name":"getSodaPassBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getnow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantityToMint","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale_started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newbaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"privateSalePrice","type":"uint256"}],"name":"setPrivateSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicSalePrice","type":"uint256"}],"name":"setPublicSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526202a300600f556201518060105566d529ae9e86000060115566f8b0a10e4700006012556000601360006101000a81548160ff021916908315150217905550733b553fc51a63298e2e44d8ecd3b1ea01d22ca459601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a557600080fd5b506040518060400160405280600d81526020017f4d722e204576657279626f6479000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4542000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200012a92919062000b3d565b5080600190805190602001906200014392919062000b3d565b505050620001666200015a6200023b60201b60201c565b6200024360201b60201c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060005b601e8160ff1610156200023457620001f0600c6200030960201b62001f5a1760201c565b600062000209600c6200031f60201b62001f701760201c565b90506200021d33826200032d60201b60201c565b5080806200022b9062000dbe565b915050620001cc565b5062000eec565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003979062000ca6565b60405180910390fd5b620003b1816200051360201b60201c565b15620003f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003eb9062000c62565b60405180910390fd5b62000408600083836200057f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200045a919062000cd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620005978383836200059c60201b62001f7e1760201c565b505050565b620005b4838383620006e360201b620020921760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200060157620005fb81620006e860201b60201c565b62000649565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000648576200064783826200073160201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000696576200069081620008ae60201b60201c565b620006de565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620006dd57620006dc8282620009f660201b60201c565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016200074b8462000a8260201b620017921760201c565b62000757919062000d36565b90506000600760008481526020019081526020016000205490508181146200083d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050620008c4919062000d36565b90506000600960008481526020019081526020016000205490506000600883815481106200091b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000964577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480620009da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000a0e8362000a8260201b620017921760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aed9062000c84565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000b4b9062000d88565b90600052602060002090601f01602090048101928262000b6f576000855562000bbb565b82601f1062000b8a57805160ff191683800117855562000bbb565b8280016001018555821562000bbb579182015b8281111562000bba57825182559160200191906001019062000b9d565b5b50905062000bca919062000bce565b5090565b5b8082111562000be957600081600090555060010162000bcf565b5090565b600062000bfc601c8362000cc8565b915062000c098262000e4b565b602082019050919050565b600062000c23602a8362000cc8565b915062000c308262000e74565b604082019050919050565b600062000c4a60208362000cc8565b915062000c578262000ec3565b602082019050919050565b6000602082019050818103600083015262000c7d8162000bed565b9050919050565b6000602082019050818103600083015262000c9f8162000c14565b9050919050565b6000602082019050818103600083015262000cc18162000c3b565b9050919050565b600082825260208201905092915050565b600062000ce68262000d71565b915062000cf38362000d71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d2b5762000d2a62000ded565b5b828201905092915050565b600062000d438262000d71565b915062000d508362000d71565b92508282101562000d665762000d6562000ded565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000da157607f821691505b6020821081141562000db85762000db762000e1c565b5b50919050565b600062000dcb8262000d7b565b915060ff82141562000de25762000de162000ded565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b614cf38062000efc6000396000f3fe6080604052600436106102255760003560e01c80636352211e116101235780638da5cb5b116100ab578063b88d4fde1161006f578063b88d4fde146107d6578063c87b56dd146107ff578063d5abeb011461083c578063e985e9c514610867578063f2fde38b146108a457610225565b80638da5cb5b1461070157806395d89b411461072c578063a22cb46514610757578063aa46a40014610780578063ac8daba0146107ab57610225565b8063791a2519116100f2578063791a2519146106445780637944875b1461066d5780637bc36e041461068457806382d95df5146106ad578063881cf122146106d657610225565b80636352211e146105975780636ecd2306146105d457806370a08231146105f0578063715018a61461062d57610225565b806323b872dd116101b15780633ccfd60b116101755780633ccfd60b146104c657806342842e0e146104dd5780634f6ccce71461050657806355f804b3146105435780635abc96221461056c57610225565b806323b872dd146103cd57806326d89e70146103f65780632a0d65d6146104215780632f745c591461044c578063318aed891461048957610225565b8063095ea7b3116101f8578063095ea7b3146102e65780630cc6a5411461030f57806318160ddd1461034c578063190445e1146103775780631f506502146103a257610225565b806301ffc9a71461022a57806303225f4c1461026757806306fdde031461027e578063081812fc146102a9575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906136cb565b6108cd565b60405161025e9190613cf4565b60405180910390f35b34801561027357600080fd5b5061027c6108df565b005b34801561028a57600080fd5b5061029361097f565b6040516102a09190613d0f565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb919061375e565b610a11565b6040516102dd9190613c8d565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061368f565b610a96565b005b34801561031b57600080fd5b5061033660048036038101906103319190613524565b610bae565b60405161034391906140ac565b60405180910390f35b34801561035857600080fd5b50610361610bc6565b60405161036e91906140ac565b60405180910390f35b34801561038357600080fd5b5061038c610bd3565b60405161039991906140ac565b60405180910390f35b3480156103ae57600080fd5b506103b7610bd9565b6040516103c491906140ac565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190613589565b610bdf565b005b34801561040257600080fd5b5061040b610c3f565b60405161041891906140ac565b60405180910390f35b34801561042d57600080fd5b50610436610c45565b60405161044391906140ac565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061368f565b610c4b565b60405161048091906140ac565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613524565b610cf0565b6040516104bd91906140ac565b60405180910390f35b3480156104d257600080fd5b506104db610da4565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613589565b610fd6565b005b34801561051257600080fd5b5061052d6004803603810190610528919061375e565b610ff6565b60405161053a91906140ac565b60405180910390f35b34801561054f57600080fd5b5061056a6004803603810190610565919061371d565b61108d565b005b34801561057857600080fd5b50610581611123565b60405161058e9190613cf4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b9919061375e565b611136565b6040516105cb9190613c8d565b60405180910390f35b6105ee60048036038101906105e991906137b0565b6111e8565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613524565b611792565b60405161062491906140ac565b60405180910390f35b34801561063957600080fd5b5061064261184a565b005b34801561065057600080fd5b5061066b6004803603810190610666919061375e565b6118d2565b005b34801561067957600080fd5b50610682611958565b005b34801561069057600080fd5b506106ab60048036038101906106a6919061375e565b6119f1565b005b3480156106b957600080fd5b506106d460048036038101906106cf919061375e565b611a77565b005b3480156106e257600080fd5b506106eb611afd565b6040516106f891906140ac565b60405180910390f35b34801561070d57600080fd5b50610716611b05565b6040516107239190613c8d565b60405180910390f35b34801561073857600080fd5b50610741611b2f565b60405161074e9190613d0f565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613653565b611bc1565b005b34801561078c57600080fd5b50610795611d42565b6040516107a291906140ac565b60405180910390f35b3480156107b757600080fd5b506107c0611d4e565b6040516107cd91906140ac565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906135d8565b611d54565b005b34801561080b57600080fd5b506108266004803603810190610821919061375e565b611db6565b6040516108339190613d0f565b60405180910390f35b34801561084857600080fd5b50610851611dc8565b60405161085e9190614091565b60405180910390f35b34801561087357600080fd5b5061088e6004803603810190610889919061354d565b611dce565b60405161089b9190613cf4565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613524565b611e62565b005b60006108d882612097565b9050919050565b6108e7612111565b73ffffffffffffffffffffffffffffffffffffffff16610905611b05565b73ffffffffffffffffffffffffffffffffffffffff161461095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290613f91565b60405180910390fd5b42600e819055506001601360006101000a81548160ff021916908315150217905550565b60606000805461098e90614377565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba90614377565b8015610a075780601f106109dc57610100808354040283529160200191610a07565b820191906000526020600020905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b6000610a1c82612119565b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613f71565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa182611136565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613ff1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b31612111565b73ffffffffffffffffffffffffffffffffffffffff161480610b605750610b5f81610b5a612111565b611dce565b5b610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690613eb1565b60405180910390fd5b610ba98383612185565b505050565b60156020528060005260406000206000915090505481565b6000600880549050905090565b60125481565b60105481565b610bf0610bea612111565b8261223e565b610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690614031565b60405180910390fd5b610c3a83838361231c565b505050565b60115481565b600f5481565b6000610c5683611792565b8210610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613d31565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610d4d9190613c8d565b60206040518083038186803b158015610d6557600080fd5b505afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d9190613787565b9050919050565b610dac612111565b73ffffffffffffffffffffffffffffffffffffffff16610dca611b05565b73ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790613f91565b60405180910390fd5b60004711610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90613dd1565b60405180910390fd5b60004790506000730afee0a7b9389f9cf8866f866a93c17cac29bdda90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600685610eaa9190614218565b610eb491906141e7565b9081150290604051600060405180830381858888f19350505050158015610edf573d6000803e3d6000fd5b506000737d3d95ac0bacde573860f75d3cd07369e0ce86f490508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600386610f229190614218565b610f2c91906141e7565b9081150290604051600060405180830381858888f19350505050158015610f57573d6000803e3d6000fd5b506000733097617cba85a26adc214a1f87b680be4b275cd090508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600187610f9a9190614218565b610fa491906141e7565b9081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b5050505050565b610ff183838360405180602001604052806000815250611d54565b505050565b6000611000610bc6565b8210611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614051565b60405180910390fd5b6008828154811061107b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611095612111565b73ffffffffffffffffffffffffffffffffffffffff166110b3611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090613f91565b60405180910390fd5b80600d908051906020019061111f92919061331e565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690613ef1565b60405180910390fd5b80915050919050565b600a8160ff16111561122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690613d71565b60405180910390fd5b61041c61ffff1661123e610bc6565b8260ff1661124c9190614191565b111561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614011565b60405180910390fd5b60011515601360009054906101000a900460ff161515146112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613f31565b60405180910390fd5b600f54600e546112f39190614191565b421161153d57600061130433610cf0565b11611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613e51565b60405180910390fd5b61134d33610cf0565b8160ff16601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139b9190614191565b11156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390613e31565b60405180910390fd5b8060ff166011546113ed9190614218565b341461142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142590614071565b60405180910390fd5b60005b8160ff168160ff16101561153b57611449600c611f5a565b6000611455600c611f70565b90506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a39190614191565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161151591906140ac565b60405180910390a16115273382612578565b50808061153390614423565b915050611431565b505b600f54600e5461154d9190614191565b421180156115775750601054600f54600e546115699190614191565b6115739190614191565b4211155b1561169957600061158733610cf0565b116115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613e51565b60405180910390fd5b8060ff166011546115d89190614218565b3414611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614071565b60405180910390fd5b60005b8160ff168160ff16101561169757611634600c611f5a565b6000611640600c611f70565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161167191906140ac565b60405180910390a16116833382612578565b50808061168f90614423565b91505061161c565b505b601054600f54600e546116ac9190614191565b6116b69190614191565b42111561178f578060ff166012546116ce9190614218565b341461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613e91565b60405180910390fd5b60005b8160ff168160ff16101561178d5761172a600c611f5a565b6000611736600c611f70565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161176791906140ac565b60405180910390a16117793382612578565b50808061178590614423565b915050611712565b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90613ed1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611852612111565b73ffffffffffffffffffffffffffffffffffffffff16611870611b05565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613f91565b60405180910390fd5b6118d06000612746565b565b6118da612111565b73ffffffffffffffffffffffffffffffffffffffff166118f8611b05565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590613f91565b60405180910390fd5b8060128190555050565b611960612111565b73ffffffffffffffffffffffffffffffffffffffff1661197e611b05565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613f91565b60405180910390fd5b6000601360006101000a81548160ff021916908315150217905550565b6119f9612111565b73ffffffffffffffffffffffffffffffffffffffff16611a17611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613f91565b60405180910390fd5b8060118190555050565b611a7f612111565b73ffffffffffffffffffffffffffffffffffffffff16611a9d611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613f91565b60405180910390fd5b80600e8190555050565b600042905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b3e90614377565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6a90614377565b8015611bb75780601f10611b8c57610100808354040283529160200191611bb7565b820191906000526020600020905b815481529060010190602001808311611b9a57829003601f168201915b5050505050905090565b611bc9612111565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90613e11565b60405180910390fd5b8060056000611c44612111565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cf1612111565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d369190613cf4565b60405180910390a35050565b600c8060000154905081565b600e5481565b611d65611d5f612111565b8361223e565b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614031565b60405180910390fd5b611db08484848461280c565b50505050565b6060611dc182612868565b9050919050565b61041c81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e6a612111565b73ffffffffffffffffffffffffffffffffffffffff16611e88611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590613d91565b60405180910390fd5b611f5781612746565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b611f89838383612092565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fcc57611fc7816129ba565b61200b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461200a576120098382612a03565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204e5761204981612b70565b61208d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461208c5761208b8282612cb3565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061210a575061210982612d32565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121f883611136565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061224982612119565b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90613e71565b60405180910390fd5b600061229383611136565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230257508373ffffffffffffffffffffffffffffffffffffffff166122ea84610a11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231357506123128185611dce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233c82611136565b73ffffffffffffffffffffffffffffffffffffffff1614612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990613fb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613df1565b60405180910390fd5b61240d838383612e14565b612418600082612185565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124689190614272565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bf9190614191565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90613f11565b60405180910390fd5b6125f181612119565b15612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890613db1565b60405180910390fd5b61263d60008383612e14565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268d9190614191565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61281784848461231c565b61282384848484612e24565b612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990613d51565b60405180910390fd5b50505050565b606061287382612119565b6128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990613f51565b60405180910390fd5b6000600a600084815260200190815260200160002080546128d290614377565b80601f01602080910402602001604051908101604052809291908181526020018280546128fe90614377565b801561294b5780601f106129205761010080835404028352916020019161294b565b820191906000526020600020905b81548152906001019060200180831161292e57829003601f168201915b50505050509050600061295c612fbb565b90506000815114156129725781925050506129b5565b6000825111156129a757808260405160200161298f929190613c69565b604051602081830303815290604052925050506129b5565b6129b08461304d565b925050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1084611792565b612a1a9190614272565b9050600060076000848152602001908152602001600020549050818114612aff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b849190614272565b9050600060096000848152602001908152602001600020549050600060088381548110612bda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612cbe83611792565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612dfd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e0d5750612e0c826130f4565b5b9050919050565b612e1f838383611f7e565b505050565b6000612e458473ffffffffffffffffffffffffffffffffffffffff1661315e565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6e612111565b8786866040518563ffffffff1660e01b8152600401612e909493929190613ca8565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed891906136f4565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90613d51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b6060600d8054612fca90614377565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff690614377565b80156130435780601f1061301857610100808354040283529160200191613043565b820191906000526020600020905b81548152906001019060200180831161302657829003601f168201915b5050505050905090565b606061305882612119565b613097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308e90613fd1565b60405180910390fd5b60006130a1612fbb565b905060008151116130c157604051806020016040528060008152506130ec565b806130cb84613171565b6040516020016130dc929190613c69565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b606060008214156131b9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613319565b600082905060005b600082146131eb5780806131d4906143da565b915050600a826131e491906141e7565b91506131c1565b60008167ffffffffffffffff81111561322d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561325f5781602001600182028036833780820191505090505b5090505b60008514613312576001826132789190614272565b9150600a85613287919061444d565b60306132939190614191565b60f81b8183815181106132cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561330b91906141e7565b9450613263565b8093505050505b919050565b82805461332a90614377565b90600052602060002090601f01602090048101928261334c5760008555613393565b82601f1061336557805160ff1916838001178555613393565b82800160010185558215613393579182015b82811115613392578251825591602001919060010190613377565b5b5090506133a091906133a4565b5090565b5b808211156133bd5760008160009055506001016133a5565b5090565b60006133d46133cf846140ec565b6140c7565b9050828152602081018484840111156133ec57600080fd5b6133f7848285614335565b509392505050565b600061341261340d8461411d565b6140c7565b90508281526020810184848401111561342a57600080fd5b613435848285614335565b509392505050565b60008135905061344c81614c4a565b92915050565b60008135905061346181614c61565b92915050565b60008135905061347681614c78565b92915050565b60008151905061348b81614c78565b92915050565b600082601f8301126134a257600080fd5b81356134b28482602086016133c1565b91505092915050565b600082601f8301126134cc57600080fd5b81356134dc8482602086016133ff565b91505092915050565b6000813590506134f481614c8f565b92915050565b60008151905061350981614c8f565b92915050565b60008135905061351e81614ca6565b92915050565b60006020828403121561353657600080fd5b60006135448482850161343d565b91505092915050565b6000806040838503121561356057600080fd5b600061356e8582860161343d565b925050602061357f8582860161343d565b9150509250929050565b60008060006060848603121561359e57600080fd5b60006135ac8682870161343d565b93505060206135bd8682870161343d565b92505060406135ce868287016134e5565b9150509250925092565b600080600080608085870312156135ee57600080fd5b60006135fc8782880161343d565b945050602061360d8782880161343d565b935050604061361e878288016134e5565b925050606085013567ffffffffffffffff81111561363b57600080fd5b61364787828801613491565b91505092959194509250565b6000806040838503121561366657600080fd5b60006136748582860161343d565b925050602061368585828601613452565b9150509250929050565b600080604083850312156136a257600080fd5b60006136b08582860161343d565b92505060206136c1858286016134e5565b9150509250929050565b6000602082840312156136dd57600080fd5b60006136eb84828501613467565b91505092915050565b60006020828403121561370657600080fd5b60006137148482850161347c565b91505092915050565b60006020828403121561372f57600080fd5b600082013567ffffffffffffffff81111561374957600080fd5b613755848285016134bb565b91505092915050565b60006020828403121561377057600080fd5b600061377e848285016134e5565b91505092915050565b60006020828403121561379957600080fd5b60006137a7848285016134fa565b91505092915050565b6000602082840312156137c257600080fd5b60006137d08482850161350f565b91505092915050565b6137e2816142a6565b82525050565b6137f1816142b8565b82525050565b60006138028261414e565b61380c8185614164565b935061381c818560208601614344565b6138258161453a565b840191505092915050565b600061383b82614159565b6138458185614175565b9350613855818560208601614344565b61385e8161453a565b840191505092915050565b600061387482614159565b61387e8185614186565b935061388e818560208601614344565b80840191505092915050565b60006138a7602b83614175565b91506138b28261454b565b604082019050919050565b60006138ca603283614175565b91506138d58261459a565b604082019050919050565b60006138ed601e83614175565b91506138f8826145e9565b602082019050919050565b6000613910602683614175565b915061391b82614612565b604082019050919050565b6000613933601c83614175565b915061393e82614661565b602082019050919050565b6000613956601883614175565b91506139618261468a565b602082019050919050565b6000613979602483614175565b9150613984826146b3565b604082019050919050565b600061399c601983614175565b91506139a782614702565b602082019050919050565b60006139bf602983614175565b91506139ca8261472b565b604082019050919050565b60006139e2601683614175565b91506139ed8261477a565b602082019050919050565b6000613a05602c83614175565b9150613a10826147a3565b604082019050919050565b6000613a28603f83614175565b9150613a33826147f2565b604082019050919050565b6000613a4b603883614175565b9150613a5682614841565b604082019050919050565b6000613a6e602a83614175565b9150613a7982614890565b604082019050919050565b6000613a91602983614175565b9150613a9c826148df565b604082019050919050565b6000613ab4602083614175565b9150613abf8261492e565b602082019050919050565b6000613ad7601083614175565b9150613ae282614957565b602082019050919050565b6000613afa603183614175565b9150613b0582614980565b604082019050919050565b6000613b1d602c83614175565b9150613b28826149cf565b604082019050919050565b6000613b40602083614175565b9150613b4b82614a1e565b602082019050919050565b6000613b63602983614175565b9150613b6e82614a47565b604082019050919050565b6000613b86602f83614175565b9150613b9182614a96565b604082019050919050565b6000613ba9602183614175565b9150613bb482614ae5565b604082019050919050565b6000613bcc601683614175565b9150613bd782614b34565b602082019050919050565b6000613bef603183614175565b9150613bfa82614b5d565b604082019050919050565b6000613c12602c83614175565b9150613c1d82614bac565b604082019050919050565b6000613c35603f83614175565b9150613c4082614bfb565b604082019050919050565b613c54816142f0565b82525050565b613c638161431e565b82525050565b6000613c758285613869565b9150613c818284613869565b91508190509392505050565b6000602082019050613ca260008301846137d9565b92915050565b6000608082019050613cbd60008301876137d9565b613cca60208301866137d9565b613cd76040830185613c5a565b8181036060830152613ce981846137f7565b905095945050505050565b6000602082019050613d0960008301846137e8565b92915050565b60006020820190508181036000830152613d298184613830565b905092915050565b60006020820190508181036000830152613d4a8161389a565b9050919050565b60006020820190508181036000830152613d6a816138bd565b9050919050565b60006020820190508181036000830152613d8a816138e0565b9050919050565b60006020820190508181036000830152613daa81613903565b9050919050565b60006020820190508181036000830152613dca81613926565b9050919050565b60006020820190508181036000830152613dea81613949565b9050919050565b60006020820190508181036000830152613e0a8161396c565b9050919050565b60006020820190508181036000830152613e2a8161398f565b9050919050565b60006020820190508181036000830152613e4a816139b2565b9050919050565b60006020820190508181036000830152613e6a816139d5565b9050919050565b60006020820190508181036000830152613e8a816139f8565b9050919050565b60006020820190508181036000830152613eaa81613a1b565b9050919050565b60006020820190508181036000830152613eca81613a3e565b9050919050565b60006020820190508181036000830152613eea81613a61565b9050919050565b60006020820190508181036000830152613f0a81613a84565b9050919050565b60006020820190508181036000830152613f2a81613aa7565b9050919050565b60006020820190508181036000830152613f4a81613aca565b9050919050565b60006020820190508181036000830152613f6a81613aed565b9050919050565b60006020820190508181036000830152613f8a81613b10565b9050919050565b60006020820190508181036000830152613faa81613b33565b9050919050565b60006020820190508181036000830152613fca81613b56565b9050919050565b60006020820190508181036000830152613fea81613b79565b9050919050565b6000602082019050818103600083015261400a81613b9c565b9050919050565b6000602082019050818103600083015261402a81613bbf565b9050919050565b6000602082019050818103600083015261404a81613be2565b9050919050565b6000602082019050818103600083015261406a81613c05565b9050919050565b6000602082019050818103600083015261408a81613c28565b9050919050565b60006020820190506140a66000830184613c4b565b92915050565b60006020820190506140c16000830184613c5a565b92915050565b60006140d16140e2565b90506140dd82826143a9565b919050565b6000604051905090565b600067ffffffffffffffff8211156141075761410661450b565b5b6141108261453a565b9050602081019050919050565b600067ffffffffffffffff8211156141385761413761450b565b5b6141418261453a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061419c8261431e565b91506141a78361431e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141dc576141db61447e565b5b828201905092915050565b60006141f28261431e565b91506141fd8361431e565b92508261420d5761420c6144ad565b5b828204905092915050565b60006142238261431e565b915061422e8361431e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142675761426661447e565b5b828202905092915050565b600061427d8261431e565b91506142888361431e565b92508282101561429b5761429a61447e565b5b828203905092915050565b60006142b1826142fe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614362578082015181840152602081019050614347565b83811115614371576000848401525b50505050565b6000600282049050600182168061438f57607f821691505b602082108114156143a3576143a26144dc565b5b50919050565b6143b28261453a565b810181811067ffffffffffffffff821117156143d1576143d061450b565b5b80604052505050565b60006143e58261431e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144185761441761447e565b5b600182019050919050565b600061442e82614328565b915060ff8214156144425761444161447e565b5b600182019050919050565b60006144588261431e565b91506144638361431e565b925082614473576144726144ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f63616e206d696e74206f6e6c79203130206d617820617420612074696d650000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f63616e6e6f74206d696e74206f766572207468652062616c616e6365206f662060008201527f536f646150617373200000000000000000000000000000000000000000000000602082015250565b7f4e6565647320746f206861766520536f64615061737300000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e7420707269636520302e3037204554482070657220746f6b656e00602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c65204e6f74205374617274656400000000000000000000000000000000600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e7420707269636520302e3036204554482070657220746f6b656e00602082015250565b614c53816142a6565b8114614c5e57600080fd5b50565b614c6a816142b8565b8114614c7557600080fd5b50565b614c81816142c4565b8114614c8c57600080fd5b50565b614c988161431e565b8114614ca357600080fd5b50565b614caf81614328565b8114614cba57600080fd5b5056fea2646970667358221220823ff6d9dcc74dbf2268aeaf1f72580beee36303fcfe222e93d82e6125c4b27f64736f6c63430008030033

Deployed Bytecode

0x6080604052600436106102255760003560e01c80636352211e116101235780638da5cb5b116100ab578063b88d4fde1161006f578063b88d4fde146107d6578063c87b56dd146107ff578063d5abeb011461083c578063e985e9c514610867578063f2fde38b146108a457610225565b80638da5cb5b1461070157806395d89b411461072c578063a22cb46514610757578063aa46a40014610780578063ac8daba0146107ab57610225565b8063791a2519116100f2578063791a2519146106445780637944875b1461066d5780637bc36e041461068457806382d95df5146106ad578063881cf122146106d657610225565b80636352211e146105975780636ecd2306146105d457806370a08231146105f0578063715018a61461062d57610225565b806323b872dd116101b15780633ccfd60b116101755780633ccfd60b146104c657806342842e0e146104dd5780634f6ccce71461050657806355f804b3146105435780635abc96221461056c57610225565b806323b872dd146103cd57806326d89e70146103f65780632a0d65d6146104215780632f745c591461044c578063318aed891461048957610225565b8063095ea7b3116101f8578063095ea7b3146102e65780630cc6a5411461030f57806318160ddd1461034c578063190445e1146103775780631f506502146103a257610225565b806301ffc9a71461022a57806303225f4c1461026757806306fdde031461027e578063081812fc146102a9575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906136cb565b6108cd565b60405161025e9190613cf4565b60405180910390f35b34801561027357600080fd5b5061027c6108df565b005b34801561028a57600080fd5b5061029361097f565b6040516102a09190613d0f565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb919061375e565b610a11565b6040516102dd9190613c8d565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061368f565b610a96565b005b34801561031b57600080fd5b5061033660048036038101906103319190613524565b610bae565b60405161034391906140ac565b60405180910390f35b34801561035857600080fd5b50610361610bc6565b60405161036e91906140ac565b60405180910390f35b34801561038357600080fd5b5061038c610bd3565b60405161039991906140ac565b60405180910390f35b3480156103ae57600080fd5b506103b7610bd9565b6040516103c491906140ac565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190613589565b610bdf565b005b34801561040257600080fd5b5061040b610c3f565b60405161041891906140ac565b60405180910390f35b34801561042d57600080fd5b50610436610c45565b60405161044391906140ac565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e919061368f565b610c4b565b60405161048091906140ac565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613524565b610cf0565b6040516104bd91906140ac565b60405180910390f35b3480156104d257600080fd5b506104db610da4565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613589565b610fd6565b005b34801561051257600080fd5b5061052d6004803603810190610528919061375e565b610ff6565b60405161053a91906140ac565b60405180910390f35b34801561054f57600080fd5b5061056a6004803603810190610565919061371d565b61108d565b005b34801561057857600080fd5b50610581611123565b60405161058e9190613cf4565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b9919061375e565b611136565b6040516105cb9190613c8d565b60405180910390f35b6105ee60048036038101906105e991906137b0565b6111e8565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613524565b611792565b60405161062491906140ac565b60405180910390f35b34801561063957600080fd5b5061064261184a565b005b34801561065057600080fd5b5061066b6004803603810190610666919061375e565b6118d2565b005b34801561067957600080fd5b50610682611958565b005b34801561069057600080fd5b506106ab60048036038101906106a6919061375e565b6119f1565b005b3480156106b957600080fd5b506106d460048036038101906106cf919061375e565b611a77565b005b3480156106e257600080fd5b506106eb611afd565b6040516106f891906140ac565b60405180910390f35b34801561070d57600080fd5b50610716611b05565b6040516107239190613c8d565b60405180910390f35b34801561073857600080fd5b50610741611b2f565b60405161074e9190613d0f565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613653565b611bc1565b005b34801561078c57600080fd5b50610795611d42565b6040516107a291906140ac565b60405180910390f35b3480156107b757600080fd5b506107c0611d4e565b6040516107cd91906140ac565b60405180910390f35b3480156107e257600080fd5b506107fd60048036038101906107f891906135d8565b611d54565b005b34801561080b57600080fd5b506108266004803603810190610821919061375e565b611db6565b6040516108339190613d0f565b60405180910390f35b34801561084857600080fd5b50610851611dc8565b60405161085e9190614091565b60405180910390f35b34801561087357600080fd5b5061088e6004803603810190610889919061354d565b611dce565b60405161089b9190613cf4565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613524565b611e62565b005b60006108d882612097565b9050919050565b6108e7612111565b73ffffffffffffffffffffffffffffffffffffffff16610905611b05565b73ffffffffffffffffffffffffffffffffffffffff161461095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290613f91565b60405180910390fd5b42600e819055506001601360006101000a81548160ff021916908315150217905550565b60606000805461098e90614377565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba90614377565b8015610a075780601f106109dc57610100808354040283529160200191610a07565b820191906000526020600020905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b6000610a1c82612119565b610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5290613f71565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa182611136565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0990613ff1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b31612111565b73ffffffffffffffffffffffffffffffffffffffff161480610b605750610b5f81610b5a612111565b611dce565b5b610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690613eb1565b60405180910390fd5b610ba98383612185565b505050565b60156020528060005260406000206000915090505481565b6000600880549050905090565b60125481565b60105481565b610bf0610bea612111565b8261223e565b610c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2690614031565b60405180910390fd5b610c3a83838361231c565b505050565b60115481565b600f5481565b6000610c5683611792565b8210610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613d31565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610d4d9190613c8d565b60206040518083038186803b158015610d6557600080fd5b505afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d9190613787565b9050919050565b610dac612111565b73ffffffffffffffffffffffffffffffffffffffff16610dca611b05565b73ffffffffffffffffffffffffffffffffffffffff1614610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790613f91565b60405180910390fd5b60004711610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90613dd1565b60405180910390fd5b60004790506000730afee0a7b9389f9cf8866f866a93c17cac29bdda90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600685610eaa9190614218565b610eb491906141e7565b9081150290604051600060405180830381858888f19350505050158015610edf573d6000803e3d6000fd5b506000737d3d95ac0bacde573860f75d3cd07369e0ce86f490508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600386610f229190614218565b610f2c91906141e7565b9081150290604051600060405180830381858888f19350505050158015610f57573d6000803e3d6000fd5b506000733097617cba85a26adc214a1f87b680be4b275cd090508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600187610f9a9190614218565b610fa491906141e7565b9081150290604051600060405180830381858888f19350505050158015610fcf573d6000803e3d6000fd5b5050505050565b610ff183838360405180602001604052806000815250611d54565b505050565b6000611000610bc6565b8210611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614051565b60405180910390fd5b6008828154811061107b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611095612111565b73ffffffffffffffffffffffffffffffffffffffff166110b3611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110090613f91565b60405180910390fd5b80600d908051906020019061111f92919061331e565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690613ef1565b60405180910390fd5b80915050919050565b600a8160ff16111561122f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122690613d71565b60405180910390fd5b61041c61ffff1661123e610bc6565b8260ff1661124c9190614191565b111561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614011565b60405180910390fd5b60011515601360009054906101000a900460ff161515146112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90613f31565b60405180910390fd5b600f54600e546112f39190614191565b421161153d57600061130433610cf0565b11611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b90613e51565b60405180910390fd5b61134d33610cf0565b8160ff16601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461139b9190614191565b11156113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390613e31565b60405180910390fd5b8060ff166011546113ed9190614218565b341461142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142590614071565b60405180910390fd5b60005b8160ff168160ff16101561153b57611449600c611f5a565b6000611455600c611f70565b90506001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114a39190614191565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161151591906140ac565b60405180910390a16115273382612578565b50808061153390614423565b915050611431565b505b600f54600e5461154d9190614191565b421180156115775750601054600f54600e546115699190614191565b6115739190614191565b4211155b1561169957600061158733610cf0565b116115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613e51565b60405180910390fd5b8060ff166011546115d89190614218565b3414611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614071565b60405180910390fd5b60005b8160ff168160ff16101561169757611634600c611f5a565b6000611640600c611f70565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161167191906140ac565b60405180910390a16116833382612578565b50808061168f90614423565b91505061161c565b505b601054600f54600e546116ac9190614191565b6116b69190614191565b42111561178f578060ff166012546116ce9190614218565b341461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613e91565b60405180910390fd5b60005b8160ff168160ff16101561178d5761172a600c611f5a565b6000611736600c611f70565b90507f6c29ed792f8b613fbba10b9e105a1dcebd92b4dd7938e36de410329ef452a2858160405161176791906140ac565b60405180910390a16117793382612578565b50808061178590614423565b915050611712565b505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90613ed1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611852612111565b73ffffffffffffffffffffffffffffffffffffffff16611870611b05565b73ffffffffffffffffffffffffffffffffffffffff16146118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90613f91565b60405180910390fd5b6118d06000612746565b565b6118da612111565b73ffffffffffffffffffffffffffffffffffffffff166118f8611b05565b73ffffffffffffffffffffffffffffffffffffffff161461194e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194590613f91565b60405180910390fd5b8060128190555050565b611960612111565b73ffffffffffffffffffffffffffffffffffffffff1661197e611b05565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613f91565b60405180910390fd5b6000601360006101000a81548160ff021916908315150217905550565b6119f9612111565b73ffffffffffffffffffffffffffffffffffffffff16611a17611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613f91565b60405180910390fd5b8060118190555050565b611a7f612111565b73ffffffffffffffffffffffffffffffffffffffff16611a9d611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90613f91565b60405180910390fd5b80600e8190555050565b600042905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b3e90614377565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6a90614377565b8015611bb75780601f10611b8c57610100808354040283529160200191611bb7565b820191906000526020600020905b815481529060010190602001808311611b9a57829003601f168201915b5050505050905090565b611bc9612111565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e90613e11565b60405180910390fd5b8060056000611c44612111565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cf1612111565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d369190613cf4565b60405180910390a35050565b600c8060000154905081565b600e5481565b611d65611d5f612111565b8361223e565b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614031565b60405180910390fd5b611db08484848461280c565b50505050565b6060611dc182612868565b9050919050565b61041c81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e6a612111565b73ffffffffffffffffffffffffffffffffffffffff16611e88611b05565b73ffffffffffffffffffffffffffffffffffffffff1614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590613f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590613d91565b60405180910390fd5b611f5781612746565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b611f89838383612092565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fcc57611fc7816129ba565b61200b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461200a576120098382612a03565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204e5761204981612b70565b61208d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461208c5761208b8282612cb3565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061210a575061210982612d32565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121f883611136565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061224982612119565b612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90613e71565b60405180910390fd5b600061229383611136565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061230257508373ffffffffffffffffffffffffffffffffffffffff166122ea84610a11565b73ffffffffffffffffffffffffffffffffffffffff16145b8061231357506123128185611dce565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661233c82611136565b73ffffffffffffffffffffffffffffffffffffffff1614612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990613fb1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990613df1565b60405180910390fd5b61240d838383612e14565b612418600082612185565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124689190614272565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124bf9190614191565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df90613f11565b60405180910390fd5b6125f181612119565b15612631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262890613db1565b60405180910390fd5b61263d60008383612e14565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268d9190614191565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61281784848461231c565b61282384848484612e24565b612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990613d51565b60405180910390fd5b50505050565b606061287382612119565b6128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990613f51565b60405180910390fd5b6000600a600084815260200190815260200160002080546128d290614377565b80601f01602080910402602001604051908101604052809291908181526020018280546128fe90614377565b801561294b5780601f106129205761010080835404028352916020019161294b565b820191906000526020600020905b81548152906001019060200180831161292e57829003601f168201915b50505050509050600061295c612fbb565b90506000815114156129725781925050506129b5565b6000825111156129a757808260405160200161298f929190613c69565b604051602081830303815290604052925050506129b5565b6129b08461304d565b925050505b919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a1084611792565b612a1a9190614272565b9050600060076000848152602001908152602001600020549050818114612aff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b849190614272565b9050600060096000848152602001908152602001600020549050600060088381548110612bda577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612c22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612cbe83611792565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612dfd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e0d5750612e0c826130f4565b5b9050919050565b612e1f838383611f7e565b505050565b6000612e458473ffffffffffffffffffffffffffffffffffffffff1661315e565b15612fae578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e6e612111565b8786866040518563ffffffff1660e01b8152600401612e909493929190613ca8565b602060405180830381600087803b158015612eaa57600080fd5b505af1925050508015612edb57506040513d601f19601f82011682018060405250810190612ed891906136f4565b60015b612f5e573d8060008114612f0b576040519150601f19603f3d011682016040523d82523d6000602084013e612f10565b606091505b50600081511415612f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4d90613d51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fb3565b600190505b949350505050565b6060600d8054612fca90614377565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff690614377565b80156130435780601f1061301857610100808354040283529160200191613043565b820191906000526020600020905b81548152906001019060200180831161302657829003601f168201915b5050505050905090565b606061305882612119565b613097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308e90613fd1565b60405180910390fd5b60006130a1612fbb565b905060008151116130c157604051806020016040528060008152506130ec565b806130cb84613171565b6040516020016130dc929190613c69565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080823b905060008111915050919050565b606060008214156131b9576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613319565b600082905060005b600082146131eb5780806131d4906143da565b915050600a826131e491906141e7565b91506131c1565b60008167ffffffffffffffff81111561322d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561325f5781602001600182028036833780820191505090505b5090505b60008514613312576001826132789190614272565b9150600a85613287919061444d565b60306132939190614191565b60f81b8183815181106132cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561330b91906141e7565b9450613263565b8093505050505b919050565b82805461332a90614377565b90600052602060002090601f01602090048101928261334c5760008555613393565b82601f1061336557805160ff1916838001178555613393565b82800160010185558215613393579182015b82811115613392578251825591602001919060010190613377565b5b5090506133a091906133a4565b5090565b5b808211156133bd5760008160009055506001016133a5565b5090565b60006133d46133cf846140ec565b6140c7565b9050828152602081018484840111156133ec57600080fd5b6133f7848285614335565b509392505050565b600061341261340d8461411d565b6140c7565b90508281526020810184848401111561342a57600080fd5b613435848285614335565b509392505050565b60008135905061344c81614c4a565b92915050565b60008135905061346181614c61565b92915050565b60008135905061347681614c78565b92915050565b60008151905061348b81614c78565b92915050565b600082601f8301126134a257600080fd5b81356134b28482602086016133c1565b91505092915050565b600082601f8301126134cc57600080fd5b81356134dc8482602086016133ff565b91505092915050565b6000813590506134f481614c8f565b92915050565b60008151905061350981614c8f565b92915050565b60008135905061351e81614ca6565b92915050565b60006020828403121561353657600080fd5b60006135448482850161343d565b91505092915050565b6000806040838503121561356057600080fd5b600061356e8582860161343d565b925050602061357f8582860161343d565b9150509250929050565b60008060006060848603121561359e57600080fd5b60006135ac8682870161343d565b93505060206135bd8682870161343d565b92505060406135ce868287016134e5565b9150509250925092565b600080600080608085870312156135ee57600080fd5b60006135fc8782880161343d565b945050602061360d8782880161343d565b935050604061361e878288016134e5565b925050606085013567ffffffffffffffff81111561363b57600080fd5b61364787828801613491565b91505092959194509250565b6000806040838503121561366657600080fd5b60006136748582860161343d565b925050602061368585828601613452565b9150509250929050565b600080604083850312156136a257600080fd5b60006136b08582860161343d565b92505060206136c1858286016134e5565b9150509250929050565b6000602082840312156136dd57600080fd5b60006136eb84828501613467565b91505092915050565b60006020828403121561370657600080fd5b60006137148482850161347c565b91505092915050565b60006020828403121561372f57600080fd5b600082013567ffffffffffffffff81111561374957600080fd5b613755848285016134bb565b91505092915050565b60006020828403121561377057600080fd5b600061377e848285016134e5565b91505092915050565b60006020828403121561379957600080fd5b60006137a7848285016134fa565b91505092915050565b6000602082840312156137c257600080fd5b60006137d08482850161350f565b91505092915050565b6137e2816142a6565b82525050565b6137f1816142b8565b82525050565b60006138028261414e565b61380c8185614164565b935061381c818560208601614344565b6138258161453a565b840191505092915050565b600061383b82614159565b6138458185614175565b9350613855818560208601614344565b61385e8161453a565b840191505092915050565b600061387482614159565b61387e8185614186565b935061388e818560208601614344565b80840191505092915050565b60006138a7602b83614175565b91506138b28261454b565b604082019050919050565b60006138ca603283614175565b91506138d58261459a565b604082019050919050565b60006138ed601e83614175565b91506138f8826145e9565b602082019050919050565b6000613910602683614175565b915061391b82614612565b604082019050919050565b6000613933601c83614175565b915061393e82614661565b602082019050919050565b6000613956601883614175565b91506139618261468a565b602082019050919050565b6000613979602483614175565b9150613984826146b3565b604082019050919050565b600061399c601983614175565b91506139a782614702565b602082019050919050565b60006139bf602983614175565b91506139ca8261472b565b604082019050919050565b60006139e2601683614175565b91506139ed8261477a565b602082019050919050565b6000613a05602c83614175565b9150613a10826147a3565b604082019050919050565b6000613a28603f83614175565b9150613a33826147f2565b604082019050919050565b6000613a4b603883614175565b9150613a5682614841565b604082019050919050565b6000613a6e602a83614175565b9150613a7982614890565b604082019050919050565b6000613a91602983614175565b9150613a9c826148df565b604082019050919050565b6000613ab4602083614175565b9150613abf8261492e565b602082019050919050565b6000613ad7601083614175565b9150613ae282614957565b602082019050919050565b6000613afa603183614175565b9150613b0582614980565b604082019050919050565b6000613b1d602c83614175565b9150613b28826149cf565b604082019050919050565b6000613b40602083614175565b9150613b4b82614a1e565b602082019050919050565b6000613b63602983614175565b9150613b6e82614a47565b604082019050919050565b6000613b86602f83614175565b9150613b9182614a96565b604082019050919050565b6000613ba9602183614175565b9150613bb482614ae5565b604082019050919050565b6000613bcc601683614175565b9150613bd782614b34565b602082019050919050565b6000613bef603183614175565b9150613bfa82614b5d565b604082019050919050565b6000613c12602c83614175565b9150613c1d82614bac565b604082019050919050565b6000613c35603f83614175565b9150613c4082614bfb565b604082019050919050565b613c54816142f0565b82525050565b613c638161431e565b82525050565b6000613c758285613869565b9150613c818284613869565b91508190509392505050565b6000602082019050613ca260008301846137d9565b92915050565b6000608082019050613cbd60008301876137d9565b613cca60208301866137d9565b613cd76040830185613c5a565b8181036060830152613ce981846137f7565b905095945050505050565b6000602082019050613d0960008301846137e8565b92915050565b60006020820190508181036000830152613d298184613830565b905092915050565b60006020820190508181036000830152613d4a8161389a565b9050919050565b60006020820190508181036000830152613d6a816138bd565b9050919050565b60006020820190508181036000830152613d8a816138e0565b9050919050565b60006020820190508181036000830152613daa81613903565b9050919050565b60006020820190508181036000830152613dca81613926565b9050919050565b60006020820190508181036000830152613dea81613949565b9050919050565b60006020820190508181036000830152613e0a8161396c565b9050919050565b60006020820190508181036000830152613e2a8161398f565b9050919050565b60006020820190508181036000830152613e4a816139b2565b9050919050565b60006020820190508181036000830152613e6a816139d5565b9050919050565b60006020820190508181036000830152613e8a816139f8565b9050919050565b60006020820190508181036000830152613eaa81613a1b565b9050919050565b60006020820190508181036000830152613eca81613a3e565b9050919050565b60006020820190508181036000830152613eea81613a61565b9050919050565b60006020820190508181036000830152613f0a81613a84565b9050919050565b60006020820190508181036000830152613f2a81613aa7565b9050919050565b60006020820190508181036000830152613f4a81613aca565b9050919050565b60006020820190508181036000830152613f6a81613aed565b9050919050565b60006020820190508181036000830152613f8a81613b10565b9050919050565b60006020820190508181036000830152613faa81613b33565b9050919050565b60006020820190508181036000830152613fca81613b56565b9050919050565b60006020820190508181036000830152613fea81613b79565b9050919050565b6000602082019050818103600083015261400a81613b9c565b9050919050565b6000602082019050818103600083015261402a81613bbf565b9050919050565b6000602082019050818103600083015261404a81613be2565b9050919050565b6000602082019050818103600083015261406a81613c05565b9050919050565b6000602082019050818103600083015261408a81613c28565b9050919050565b60006020820190506140a66000830184613c4b565b92915050565b60006020820190506140c16000830184613c5a565b92915050565b60006140d16140e2565b90506140dd82826143a9565b919050565b6000604051905090565b600067ffffffffffffffff8211156141075761410661450b565b5b6141108261453a565b9050602081019050919050565b600067ffffffffffffffff8211156141385761413761450b565b5b6141418261453a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061419c8261431e565b91506141a78361431e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141dc576141db61447e565b5b828201905092915050565b60006141f28261431e565b91506141fd8361431e565b92508261420d5761420c6144ad565b5b828204905092915050565b60006142238261431e565b915061422e8361431e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142675761426661447e565b5b828202905092915050565b600061427d8261431e565b91506142888361431e565b92508282101561429b5761429a61447e565b5b828203905092915050565b60006142b1826142fe565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614362578082015181840152602081019050614347565b83811115614371576000848401525b50505050565b6000600282049050600182168061438f57607f821691505b602082108114156143a3576143a26144dc565b5b50919050565b6143b28261453a565b810181811067ffffffffffffffff821117156143d1576143d061450b565b5b80604052505050565b60006143e58261431e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144185761441761447e565b5b600182019050919050565b600061442e82614328565b915060ff8214156144425761444161447e565b5b600182019050919050565b60006144588261431e565b91506144638361431e565b925082614473576144726144ad565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f63616e206d696e74206f6e6c79203130206d617820617420612074696d650000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f63616e6e6f74206d696e74206f766572207468652062616c616e6365206f662060008201527f536f646150617373200000000000000000000000000000000000000000000000602082015250565b7f4e6565647320746f206861766520536f64615061737300000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e7420707269636520302e3037204554482070657220746f6b656e00602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c65204e6f74205374617274656400000000000000000000000000000000600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e7420707269636520302e3036204554482070657220746f6b656e00602082015250565b614c53816142a6565b8114614c5e57600080fd5b50565b614c6a816142b8565b8114614c7557600080fd5b50565b614c81816142c4565b8114614c8c57600080fd5b50565b614c988161431e565b8114614ca357600080fd5b50565b614caf81614328565b8114614cba57600080fd5b5056fea2646970667358221220823ff6d9dcc74dbf2268aeaf1f72580beee36303fcfe222e93d82e6125c4b27f64736f6c63430008030033

Deployed Bytecode Sourcemap

50519:6025:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52899:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51710:114;;;;;;;;;;;;;:::i;:::-;;26145:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27704:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27227:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51308:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38783:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51036:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50888:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28594:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50962:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50817:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38451:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51923:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55940:601;;;;;;;;;;;;;:::i;:::-;;29004:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38973:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53121:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51108:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53402:2283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25569:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3778:94;;;;;;;;;;;;;:::i;:::-;;52545:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51836:75;;;;;;;;;;;;;:::i;:::-;;52406:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52295:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52068:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3127:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26314:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27997:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50642:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50775:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29260:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55699:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50688:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28363:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4027:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52899:212;53038:4;53067:36;53091:11;53067:23;:36::i;:::-;53060:43;;52899:212;;;:::o;51710:114::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51771:15:::1;51758:10;:28;;;;51812:4;51797:12;;:19;;;;;;;;;;;;;;;;;;51710:114::o:0;26145:100::-;26199:13;26232:5;26225:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26145:100;:::o;27704:221::-;27780:7;27808:16;27816:7;27808;:16::i;:::-;27800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:15;:24;27909:7;27893:24;;;;;;;;;;;;;;;;;;;;;27886:31;;27704:221;;;:::o;27227:411::-;27308:13;27324:23;27339:7;27324:14;:23::i;:::-;27308:39;;27372:5;27366:11;;:2;:11;;;;27358:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27466:5;27450:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27475:37;27492:5;27499:12;:10;:12::i;:::-;27475:16;:37::i;:::-;27450:62;27428:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:21;27618:2;27622:7;27609:8;:21::i;:::-;27227:411;;;:::o;51308:50::-;;;;;;;;;;;;;;;;;:::o;38783:113::-;38844:7;38871:10;:17;;;;38864:24;;38783:113;:::o;51036:39::-;;;;:::o;50888:34::-;;;;:::o;28594:339::-;28789:41;28808:12;:10;:12::i;:::-;28822:7;28789:18;:41::i;:::-;28781:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28897:28;28907:4;28913:2;28917:7;28897:9;:28::i;:::-;28594:339;;;:::o;50962:40::-;;;;:::o;50817:35::-;;;;:::o;38451:256::-;38548:7;38584:23;38601:5;38584:16;:23::i;:::-;38576:5;:31;38568:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38673:12;:19;38686:5;38673:19;;;;;;;;;;;;;;;:26;38693:5;38673:26;;;;;;;;;;;;38666:33;;38451:256;;;;:::o;51923:132::-;51985:15;52019:13;;;;;;;;;;;:23;;;52043:3;52019:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52012:35;;51923:132;;;:::o;55940:601::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56020:1:::1;55996:21;:25;55988:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;56071:16;56090:21;56071:40;;56122:19;56144:42;56122:64;;56205:11;56197:29;;:48;56242:2;56239:1;56228:8;:12;;;;:::i;:::-;56227:17;;;;:::i;:::-;56197:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56266:18;56287:42;56266:63;;56348:10;56340:28;;:47;56384:2;56381:1;56370:8;:12;;;;:::i;:::-;56369:17;;;;:::i;:::-;56340:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56408:19;56430:42;56408:64;;56491:11;56483:29;;:48;56528:2;56525:1;56514:8;:12;;;;:::i;:::-;56513:17;;;;:::i;:::-;56483:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3418:1;;;;55940:601::o:0;29004:185::-;29142:39;29159:4;29165:2;29169:7;29142:39;;;;;;;;;;;;:16;:39::i;:::-;29004:185;;;:::o;38973:233::-;39048:7;39084:30;:28;:30::i;:::-;39076:5;:38;39068:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39181:10;39192:5;39181:17;;;;;;;;;;;;;;;;;;;;;;;;39174:24;;38973:233;;;:::o;53121:120::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53217:16:::1;53201:13;:32;;;;;;;;;;;;:::i;:::-;;53121:120:::0;:::o;51108:32::-;;;;;;;;;;;;;:::o;25839:239::-;25911:7;25931:13;25947:7;:16;25955:7;25947:16;;;;;;;;;;;;;;;;;;;;;25931:32;;25999:1;25982:19;;:5;:19;;;;25974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26065:5;26058:12;;;25839:239;;;:::o;53402:2283::-;53501:2;53482:15;:21;;;;53474:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50723:4;53556:46;;53575:13;:11;:13::i;:::-;53557:15;:31;;;;;;:::i;:::-;53556:46;;53548:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;53662:4;53646:20;;:12;;;;;;;;;;;:20;;;53638:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53809:11;;53796:10;;:24;;;;:::i;:::-;53776:15;:45;53773:809;;53888:1;53855:30;53874:10;53855:18;:30::i;:::-;:34;53847:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;53991:30;54010:10;53991:18;:30::i;:::-;53971:15;53941:45;;:15;:27;53957:10;53941:27;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;53940:81;;53932:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;54123:15;54103:35;;:17;;:35;;;;:::i;:::-;54089:9;:50;54081:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;54226:7;54221:350;54243:15;54239:19;;:1;:19;;;54221:350;;;54284:21;:9;:19;:21::i;:::-;54324:17;54344:19;:9;:17;:19::i;:::-;54324:39;;54442:1;54412:15;:27;54428:10;54412:27;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;54382:15;:27;54398:10;54382:27;;;;;;;;;;;;;;;:61;;;;54467:22;54479:9;54467:22;;;;;;:::i;:::-;;;;;;;;54508:28;54514:10;54526:9;54508:5;:28::i;:::-;54221:350;54260:3;;;;;:::i;:::-;;;;54221:350;;;;53773:809;54627:11;;54614:10;;:24;;;;:::i;:::-;54595:15;:44;:107;;;;;54690:11;;54676;;54663:10;;:24;;;;:::i;:::-;:38;;;;:::i;:::-;54643:15;:59;;54595:107;54592:605;;;54759:1;54726:30;54745:10;54726:18;:30::i;:::-;:34;54718:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;54845:15;54825:35;;:17;;:35;;;;:::i;:::-;54811:9;:50;54803:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;54949:7;54944:241;54966:15;54962:19;;:1;:19;;;54944:241;;;55005:21;:9;:19;:21::i;:::-;55043:17;55063:19;:9;:17;:19::i;:::-;55043:39;;55104:22;55116:9;55104:22;;;;;;:::i;:::-;;;;;;;;55143:28;55149:10;55161:9;55143:5;:28::i;:::-;54944:241;54983:3;;;;;:::i;:::-;;;;54944:241;;;;54592:605;55256:11;;55242;;55229:10;;:24;;;;:::i;:::-;:38;;;;:::i;:::-;55210:15;:58;55207:471;;;55327:15;55308:34;;:16;;:34;;;;:::i;:::-;55294:9;:49;55286:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;55431:7;55426:240;55448:15;55444:19;;:1;:19;;;55426:240;;;55486:21;:9;:19;:21::i;:::-;55523:17;55543:19;:9;:17;:19::i;:::-;55523:39;;55583:22;55595:9;55583:22;;;;;;:::i;:::-;;;;;;;;55621:28;55627:10;55639:9;55621:5;:28::i;:::-;55426:240;55465:3;;;;;:::i;:::-;;;;55426:240;;;;55207:471;53402:2283;:::o;25569:208::-;25641:7;25686:1;25669:19;;:5;:19;;;;25661:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25753:9;:16;25763:5;25753:16;;;;;;;;;;;;;;;;25746:23;;25569:208;;;:::o;3778:94::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3843:21:::1;3861:1;3843:9;:21::i;:::-;3778:94::o:0;52545:123::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52645:15:::1;52626:16;:34;;;;52545:123:::0;:::o;51836:75::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51898:5:::1;51883:12;;:20;;;;;;;;;;;;;;;;;;51836:75::o:0;52406:127::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52509:16:::1;52489:17;:36;;;;52406:127:::0;:::o;52295:99::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52377:9:::1;52364:10;:22;;;;52295:99:::0;:::o;52068:88::-;52107:7;52133:15;52126:22;;52068:88;:::o;3127:87::-;3173:7;3200:6;;;;;;;;;;;3193:13;;3127:87;:::o;26314:104::-;26370:13;26403:7;26396:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26314:104;:::o;27997:295::-;28112:12;:10;:12::i;:::-;28100:24;;:8;:24;;;;28092:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28212:8;28167:18;:32;28186:12;:10;:12::i;:::-;28167:32;;;;;;;;;;;;;;;:42;28200:8;28167:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28265:8;28236:48;;28251:12;:10;:12::i;:::-;28236:48;;;28275:8;28236:48;;;;;;:::i;:::-;;;;;;;;27997:295;;:::o;50642:33::-;;;;;;;;;:::o;50775:25::-;;;;:::o;29260:328::-;29435:41;29454:12;:10;:12::i;:::-;29468:7;29435:18;:41::i;:::-;29427:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29541:39;29555:4;29561:2;29565:7;29574:5;29541:13;:39::i;:::-;29260:328;;;;:::o;55699:196::-;55826:13;55864:23;55879:7;55864:14;:23::i;:::-;55857:30;;55699:196;;;:::o;50688:39::-;50723:4;50688:39;:::o;28363:164::-;28460:4;28484:18;:25;28503:5;28484:25;;;;;;;;;;;;;;;:35;28510:8;28484:35;;;;;;;;;;;;;;;;;;;;;;;;;28477:42;;28363:164;;;;:::o;4027:192::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4136:1:::1;4116:22;;:8;:22;;;;4108:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4192:19;4202:8;4192:9;:19::i;:::-;4027:192:::0;:::o;880:127::-;987:1;969:7;:14;;;:19;;;;;;;;;;;880:127;:::o;758:114::-;823:7;850;:14;;;843:21;;758:114;;;:::o;39819:589::-;39963:45;39990:4;39996:2;40000:7;39963:26;:45::i;:::-;40041:1;40025:18;;:4;:18;;;40021:187;;;40060:40;40092:7;40060:31;:40::i;:::-;40021:187;;;40130:2;40122:10;;:4;:10;;;40118:90;;40149:47;40182:4;40188:7;40149:32;:47::i;:::-;40118:90;40021:187;40236:1;40222:16;;:2;:16;;;40218:183;;;40255:45;40292:7;40255:36;:45::i;:::-;40218:183;;;40328:4;40322:10;;:2;:10;;;40318:83;;40349:40;40377:2;40381:7;40349:27;:40::i;:::-;40318:83;40218:183;39819:589;;;:::o;37194:126::-;;;;:::o;38143:224::-;38245:4;38284:35;38269:50;;;:11;:50;;;;:90;;;;38323:36;38347:11;38323:23;:36::i;:::-;38269:90;38262:97;;38143:224;;;:::o;1972:98::-;2025:7;2052:10;2045:17;;1972:98;:::o;31098:127::-;31163:4;31215:1;31187:30;;:7;:16;31195:7;31187:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31180:37;;31098:127;;;:::o;35080:174::-;35182:2;35155:15;:24;35171:7;35155:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35238:7;35234:2;35200:46;;35209:23;35224:7;35209:14;:23::i;:::-;35200:46;;;;;;;;;;;;35080:174;;:::o;31392:348::-;31485:4;31510:16;31518:7;31510;:16::i;:::-;31502:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31586:13;31602:23;31617:7;31602:14;:23::i;:::-;31586:39;;31655:5;31644:16;;:7;:16;;;:51;;;;31688:7;31664:31;;:20;31676:7;31664:11;:20::i;:::-;:31;;;31644:51;:87;;;;31699:32;31716:5;31723:7;31699:16;:32::i;:::-;31644:87;31636:96;;;31392:348;;;;:::o;34384:578::-;34543:4;34516:31;;:23;34531:7;34516:14;:23::i;:::-;:31;;;34508:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34626:1;34612:16;;:2;:16;;;;34604:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34682:39;34703:4;34709:2;34713:7;34682:20;:39::i;:::-;34786:29;34803:1;34807:7;34786:8;:29::i;:::-;34847:1;34828:9;:15;34838:4;34828:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34876:1;34859:9;:13;34869:2;34859:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34907:2;34888:7;:16;34896:7;34888:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34946:7;34942:2;34927:27;;34936:4;34927:27;;;;;;;;;;;;34384:578;;;:::o;33076:382::-;33170:1;33156:16;;:2;:16;;;;33148:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:16;33237:7;33229;:16::i;:::-;33228:17;33220:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33291:45;33320:1;33324:2;33328:7;33291:20;:45::i;:::-;33366:1;33349:9;:13;33359:2;33349:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33397:2;33378:7;:16;33386:7;33378:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33442:7;33438:2;33417:33;;33434:1;33417:33;;;;;;;;;;;;33076:382;;:::o;4227:173::-;4283:16;4302:6;;;;;;;;;;;4283:25;;4328:8;4319:6;;:17;;;;;;;;;;;;;;;;;;4383:8;4352:40;;4373:8;4352:40;;;;;;;;;;;;4227:173;;:::o;30470:315::-;30627:28;30637:4;30643:2;30647:7;30627:9;:28::i;:::-;30674:48;30697:4;30703:2;30707:7;30716:5;30674:22;:48::i;:::-;30666:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30470:315;;;;:::o;44636:679::-;44709:13;44743:16;44751:7;44743;:16::i;:::-;44735:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44826:23;44852:10;:19;44863:7;44852:19;;;;;;;;;;;44826:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44882:18;44903:10;:8;:10::i;:::-;44882:31;;45011:1;44995:4;44989:18;:23;44985:72;;;45036:9;45029:16;;;;;;44985:72;45187:1;45167:9;45161:23;:27;45157:108;;;45236:4;45242:9;45219:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45205:48;;;;;;45157:108;45284:23;45299:7;45284:14;:23::i;:::-;45277:30;;;;44636:679;;;;:::o;41131:164::-;41235:10;:17;;;;41208:15;:24;41224:7;41208:24;;;;;;;;;;;:44;;;;41263:10;41279:7;41263:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41131:164;:::o;41922:988::-;42188:22;42238:1;42213:22;42230:4;42213:16;:22::i;:::-;:26;;;;:::i;:::-;42188:51;;42250:18;42271:17;:26;42289:7;42271:26;;;;;;;;;;;;42250:47;;42418:14;42404:10;:28;42400:328;;42449:19;42471:12;:18;42484:4;42471:18;;;;;;;;;;;;;;;:34;42490:14;42471:34;;;;;;;;;;;;42449:56;;42555:11;42522:12;:18;42535:4;42522:18;;;;;;;;;;;;;;;:30;42541:10;42522:30;;;;;;;;;;;:44;;;;42672:10;42639:17;:30;42657:11;42639:30;;;;;;;;;;;:43;;;;42400:328;;42824:17;:26;42842:7;42824:26;;;;;;;;;;;42817:33;;;42868:12;:18;42881:4;42868:18;;;;;;;;;;;;;;;:34;42887:14;42868:34;;;;;;;;;;;42861:41;;;41922:988;;;;:::o;43205:1079::-;43458:22;43503:1;43483:10;:17;;;;:21;;;;:::i;:::-;43458:46;;43515:18;43536:15;:24;43552:7;43536:24;;;;;;;;;;;;43515:45;;43887:19;43909:10;43920:14;43909:26;;;;;;;;;;;;;;;;;;;;;;;;43887:48;;43973:11;43948:10;43959;43948:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44084:10;44053:15;:28;44069:11;44053:28;;;;;;;;;;;:41;;;;44225:15;:24;44241:7;44225:24;;;;;;;;;;;44218:31;;;44260:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43205:1079;;;;:::o;40709:221::-;40794:14;40811:20;40828:2;40811:16;:20::i;:::-;40794:37;;40869:7;40842:12;:16;40855:2;40842:16;;;;;;;;;;;;;;;:24;40859:6;40842:24;;;;;;;;;;;:34;;;;40916:6;40887:17;:26;40905:7;40887:26;;;;;;;;;;;:35;;;;40709:221;;;:::o;25200:305::-;25302:4;25354:25;25339:40;;;:11;:40;;;;:105;;;;25411:33;25396:48;;;:11;:48;;;;25339:105;:158;;;;25461:36;25485:11;25461:23;:36::i;:::-;25339:158;25319:178;;25200:305;;;:::o;52676:215::-;52838:45;52865:4;52871:2;52875:7;52838:26;:45::i;:::-;52676:215;;;:::o;35819:803::-;35974:4;35995:15;:2;:13;;;:15::i;:::-;35991:624;;;36047:2;36031:36;;;36068:12;:10;:12::i;:::-;36082:4;36088:7;36097:5;36031:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36027:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36294:1;36277:6;:13;:18;36273:272;;;36320:60;;;;;;;;;;:::i;:::-;;;;;;;;36273:272;36495:6;36489:13;36480:6;36476:2;36472:15;36465:38;36027:533;36164:45;;;36154:55;;;:6;:55;;;;36147:62;;;;;35991:624;36599:4;36592:11;;35819:803;;;;;;;:::o;53249:106::-;53301:13;53334;53327:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53249:106;:::o;26489:334::-;26562:13;26596:16;26604:7;26596;:16::i;:::-;26588:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26677:21;26701:10;:8;:10::i;:::-;26677:34;;26753:1;26735:7;26729:21;:25;:86;;;;;;;;;;;;;;;;;26781:7;26790:18;:7;:16;:18::i;:::-;26764:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26729:86;26722:93;;;26489:334;;;:::o;6238:157::-;6323:4;6362:25;6347:40;;;:11;:40;;;;6340:47;;6238:157;;;:::o;9284:387::-;9344:4;9552:12;9619:7;9607:20;9599:28;;9662:1;9655:4;:8;9648:15;;;9284:387;;;:::o;6709:723::-;6765:13;6995:1;6986:5;:10;6982:53;;;7013:10;;;;;;;;;;;;;;;;;;;;;6982:53;7045:12;7060:5;7045:20;;7076:14;7101:78;7116:1;7108:4;:9;7101:78;;7134:8;;;;;:::i;:::-;;;;7165:2;7157:10;;;;;:::i;:::-;;;7101:78;;;7189:19;7221:6;7211:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7189:39;;7239:154;7255:1;7246:5;:10;7239:154;;7283:1;7273:11;;;;;:::i;:::-;;;7350:2;7342:5;:10;;;;:::i;:::-;7329:2;:24;;;;:::i;:::-;7316:39;;7299:6;7306;7299:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7379:2;7370:11;;;;;:::i;:::-;;;7239:154;;;7417:6;7403:21;;;;;6709:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:143::-;;2097:6;2091:13;2082:22;;2113:33;2140:5;2113:33;:::i;:::-;2072:80;;;;:::o;2158:135::-;;2240:6;2227:20;2218:29;;2256:31;2281:5;2256:31;:::i;:::-;2208:85;;;;:::o;2299:262::-;;2407:2;2395:9;2386:7;2382:23;2378:32;2375:2;;;2423:1;2420;2413:12;2375:2;2466:1;2491:53;2536:7;2527:6;2516:9;2512:22;2491:53;:::i;:::-;2481:63;;2437:117;2365:196;;;;:::o;2567:407::-;;;2692:2;2680:9;2671:7;2667:23;2663:32;2660:2;;;2708:1;2705;2698:12;2660:2;2751:1;2776:53;2821:7;2812:6;2801:9;2797:22;2776:53;:::i;:::-;2766:63;;2722:117;2878:2;2904:53;2949:7;2940:6;2929:9;2925:22;2904:53;:::i;:::-;2894:63;;2849:118;2650:324;;;;;:::o;2980:552::-;;;;3122:2;3110:9;3101:7;3097:23;3093:32;3090:2;;;3138:1;3135;3128:12;3090:2;3181:1;3206:53;3251:7;3242:6;3231:9;3227:22;3206:53;:::i;:::-;3196:63;;3152:117;3308:2;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3279:118;3436:2;3462:53;3507:7;3498:6;3487:9;3483:22;3462:53;:::i;:::-;3452:63;;3407:118;3080:452;;;;;:::o;3538:809::-;;;;;3706:3;3694:9;3685:7;3681:23;3677:33;3674:2;;;3723:1;3720;3713:12;3674:2;3766:1;3791:53;3836:7;3827:6;3816:9;3812:22;3791:53;:::i;:::-;3781:63;;3737:117;3893:2;3919:53;3964:7;3955:6;3944:9;3940:22;3919:53;:::i;:::-;3909:63;;3864:118;4021:2;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3992:118;4177:2;4166:9;4162:18;4149:32;4208:18;4200:6;4197:30;4194:2;;;4240:1;4237;4230:12;4194:2;4268:62;4322:7;4313:6;4302:9;4298:22;4268:62;:::i;:::-;4258:72;;4120:220;3664:683;;;;;;;:::o;4353:401::-;;;4475:2;4463:9;4454:7;4450:23;4446:32;4443:2;;;4491:1;4488;4481:12;4443:2;4534:1;4559:53;4604:7;4595:6;4584:9;4580:22;4559:53;:::i;:::-;4549:63;;4505:117;4661:2;4687:50;4729:7;4720:6;4709:9;4705:22;4687:50;:::i;:::-;4677:60;;4632:115;4433:321;;;;;:::o;4760:407::-;;;4885:2;4873:9;4864:7;4860:23;4856:32;4853:2;;;4901:1;4898;4891:12;4853:2;4944:1;4969:53;5014:7;5005:6;4994:9;4990:22;4969:53;:::i;:::-;4959:63;;4915:117;5071:2;5097:53;5142:7;5133:6;5122:9;5118:22;5097:53;:::i;:::-;5087:63;;5042:118;4843:324;;;;;:::o;5173:260::-;;5280:2;5268:9;5259:7;5255:23;5251:32;5248:2;;;5296:1;5293;5286:12;5248:2;5339:1;5364:52;5408:7;5399:6;5388:9;5384:22;5364:52;:::i;:::-;5354:62;;5310:116;5238:195;;;;:::o;5439:282::-;;5557:2;5545:9;5536:7;5532:23;5528:32;5525:2;;;5573:1;5570;5563:12;5525:2;5616:1;5641:63;5696:7;5687:6;5676:9;5672:22;5641:63;:::i;:::-;5631:73;;5587:127;5515:206;;;;:::o;5727:375::-;;5845:2;5833:9;5824:7;5820:23;5816:32;5813:2;;;5861:1;5858;5851:12;5813:2;5932:1;5921:9;5917:17;5904:31;5962:18;5954:6;5951:30;5948:2;;;5994:1;5991;5984:12;5948:2;6022:63;6077:7;6068:6;6057:9;6053:22;6022:63;:::i;:::-;6012:73;;5875:220;5803:299;;;;:::o;6108:262::-;;6216:2;6204:9;6195:7;6191:23;6187:32;6184:2;;;6232:1;6229;6222:12;6184:2;6275:1;6300:53;6345:7;6336:6;6325:9;6321:22;6300:53;:::i;:::-;6290:63;;6246:117;6174:196;;;;:::o;6376:284::-;;6495:2;6483:9;6474:7;6470:23;6466:32;6463:2;;;6511:1;6508;6501:12;6463:2;6554:1;6579:64;6635:7;6626:6;6615:9;6611:22;6579:64;:::i;:::-;6569:74;;6525:128;6453:207;;;;:::o;6666:258::-;;6772:2;6760:9;6751:7;6747:23;6743:32;6740:2;;;6788:1;6785;6778:12;6740:2;6831:1;6856:51;6899:7;6890:6;6879:9;6875:22;6856:51;:::i;:::-;6846:61;;6802:115;6730:194;;;;:::o;6930:118::-;7017:24;7035:5;7017:24;:::i;:::-;7012:3;7005:37;6995:53;;:::o;7054:109::-;7135:21;7150:5;7135:21;:::i;:::-;7130:3;7123:34;7113:50;;:::o;7169:360::-;;7283:38;7315:5;7283:38;:::i;:::-;7337:70;7400:6;7395:3;7337:70;:::i;:::-;7330:77;;7416:52;7461:6;7456:3;7449:4;7442:5;7438:16;7416:52;:::i;:::-;7493:29;7515:6;7493:29;:::i;:::-;7488:3;7484:39;7477:46;;7259:270;;;;;:::o;7535:364::-;;7651:39;7684:5;7651:39;:::i;:::-;7706:71;7770:6;7765:3;7706:71;:::i;:::-;7699:78;;7786:52;7831:6;7826:3;7819:4;7812:5;7808:16;7786:52;:::i;:::-;7863:29;7885:6;7863:29;:::i;:::-;7858:3;7854:39;7847:46;;7627:272;;;;;:::o;7905:377::-;;8039:39;8072:5;8039:39;:::i;:::-;8094:89;8176:6;8171:3;8094:89;:::i;:::-;8087:96;;8192:52;8237:6;8232:3;8225:4;8218:5;8214:16;8192:52;:::i;:::-;8269:6;8264:3;8260:16;8253:23;;8015:267;;;;;:::o;8288:366::-;;8451:67;8515:2;8510:3;8451:67;:::i;:::-;8444:74;;8527:93;8616:3;8527:93;:::i;:::-;8645:2;8640:3;8636:12;8629:19;;8434:220;;;:::o;8660:366::-;;8823:67;8887:2;8882:3;8823:67;:::i;:::-;8816:74;;8899:93;8988:3;8899:93;:::i;:::-;9017:2;9012:3;9008:12;9001:19;;8806:220;;;:::o;9032:366::-;;9195:67;9259:2;9254:3;9195:67;:::i;:::-;9188:74;;9271:93;9360:3;9271:93;:::i;:::-;9389:2;9384:3;9380:12;9373:19;;9178:220;;;:::o;9404:366::-;;9567:67;9631:2;9626:3;9567:67;:::i;:::-;9560:74;;9643:93;9732:3;9643:93;:::i;:::-;9761:2;9756:3;9752:12;9745:19;;9550:220;;;:::o;9776:366::-;;9939:67;10003:2;9998:3;9939:67;:::i;:::-;9932:74;;10015:93;10104:3;10015:93;:::i;:::-;10133:2;10128:3;10124:12;10117:19;;9922:220;;;:::o;10148:366::-;;10311:67;10375:2;10370:3;10311:67;:::i;:::-;10304:74;;10387:93;10476:3;10387:93;:::i;:::-;10505:2;10500:3;10496:12;10489:19;;10294:220;;;:::o;10520:366::-;;10683:67;10747:2;10742:3;10683:67;:::i;:::-;10676:74;;10759:93;10848:3;10759:93;:::i;:::-;10877:2;10872:3;10868:12;10861:19;;10666:220;;;:::o;10892:366::-;;11055:67;11119:2;11114:3;11055:67;:::i;:::-;11048:74;;11131:93;11220:3;11131:93;:::i;:::-;11249:2;11244:3;11240:12;11233:19;;11038:220;;;:::o;11264:366::-;;11427:67;11491:2;11486:3;11427:67;:::i;:::-;11420:74;;11503:93;11592:3;11503:93;:::i;:::-;11621:2;11616:3;11612:12;11605:19;;11410:220;;;:::o;11636:366::-;;11799:67;11863:2;11858:3;11799:67;:::i;:::-;11792:74;;11875:93;11964:3;11875:93;:::i;:::-;11993:2;11988:3;11984:12;11977:19;;11782:220;;;:::o;12008:366::-;;12171:67;12235:2;12230:3;12171:67;:::i;:::-;12164:74;;12247:93;12336:3;12247:93;:::i;:::-;12365:2;12360:3;12356:12;12349:19;;12154:220;;;:::o;12380:366::-;;12543:67;12607:2;12602:3;12543:67;:::i;:::-;12536:74;;12619:93;12708:3;12619:93;:::i;:::-;12737:2;12732:3;12728:12;12721:19;;12526:220;;;:::o;12752:366::-;;12915:67;12979:2;12974:3;12915:67;:::i;:::-;12908:74;;12991:93;13080:3;12991:93;:::i;:::-;13109:2;13104:3;13100:12;13093:19;;12898:220;;;:::o;13124:366::-;;13287:67;13351:2;13346:3;13287:67;:::i;:::-;13280:74;;13363:93;13452:3;13363:93;:::i;:::-;13481:2;13476:3;13472:12;13465:19;;13270:220;;;:::o;13496:366::-;;13659:67;13723:2;13718:3;13659:67;:::i;:::-;13652:74;;13735:93;13824:3;13735:93;:::i;:::-;13853:2;13848:3;13844:12;13837:19;;13642:220;;;:::o;13868:366::-;;14031:67;14095:2;14090:3;14031:67;:::i;:::-;14024:74;;14107:93;14196:3;14107:93;:::i;:::-;14225:2;14220:3;14216:12;14209:19;;14014:220;;;:::o;14240:366::-;;14403:67;14467:2;14462:3;14403:67;:::i;:::-;14396:74;;14479:93;14568:3;14479:93;:::i;:::-;14597:2;14592:3;14588:12;14581:19;;14386:220;;;:::o;14612:366::-;;14775:67;14839:2;14834:3;14775:67;:::i;:::-;14768:74;;14851:93;14940:3;14851:93;:::i;:::-;14969:2;14964:3;14960:12;14953:19;;14758:220;;;:::o;14984:366::-;;15147:67;15211:2;15206:3;15147:67;:::i;:::-;15140:74;;15223:93;15312:3;15223:93;:::i;:::-;15341:2;15336:3;15332:12;15325:19;;15130:220;;;:::o;15356:366::-;;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15502:220;;;:::o;15728:366::-;;15891:67;15955:2;15950:3;15891:67;:::i;:::-;15884:74;;15967:93;16056:3;15967:93;:::i;:::-;16085:2;16080:3;16076:12;16069:19;;15874:220;;;:::o;16100:366::-;;16263:67;16327:2;16322:3;16263:67;:::i;:::-;16256:74;;16339:93;16428:3;16339:93;:::i;:::-;16457:2;16452:3;16448:12;16441:19;;16246:220;;;:::o;16472:366::-;;16635:67;16699:2;16694:3;16635:67;:::i;:::-;16628:74;;16711:93;16800:3;16711:93;:::i;:::-;16829:2;16824:3;16820:12;16813:19;;16618:220;;;:::o;16844:366::-;;17007:67;17071:2;17066:3;17007:67;:::i;:::-;17000:74;;17083:93;17172:3;17083:93;:::i;:::-;17201:2;17196:3;17192:12;17185:19;;16990:220;;;:::o;17216:366::-;;17379:67;17443:2;17438:3;17379:67;:::i;:::-;17372:74;;17455:93;17544:3;17455:93;:::i;:::-;17573:2;17568:3;17564:12;17557:19;;17362:220;;;:::o;17588:366::-;;17751:67;17815:2;17810:3;17751:67;:::i;:::-;17744:74;;17827:93;17916:3;17827:93;:::i;:::-;17945:2;17940:3;17936:12;17929:19;;17734:220;;;:::o;17960:366::-;;18123:67;18187:2;18182:3;18123:67;:::i;:::-;18116:74;;18199:93;18288:3;18199:93;:::i;:::-;18317:2;18312:3;18308:12;18301:19;;18106:220;;;:::o;18332:115::-;18417:23;18434:5;18417:23;:::i;:::-;18412:3;18405:36;18395:52;;:::o;18453:118::-;18540:24;18558:5;18540:24;:::i;:::-;18535:3;18528:37;18518:53;;:::o;18577:435::-;;18779:95;18870:3;18861:6;18779:95;:::i;:::-;18772:102;;18891:95;18982:3;18973:6;18891:95;:::i;:::-;18884:102;;19003:3;18996:10;;18761:251;;;;;:::o;19018:222::-;;19149:2;19138:9;19134:18;19126:26;;19162:71;19230:1;19219:9;19215:17;19206:6;19162:71;:::i;:::-;19116:124;;;;:::o;19246:640::-;;19479:3;19468:9;19464:19;19456:27;;19493:71;19561:1;19550:9;19546:17;19537:6;19493:71;:::i;:::-;19574:72;19642:2;19631:9;19627:18;19618:6;19574:72;:::i;:::-;19656;19724:2;19713:9;19709:18;19700:6;19656:72;:::i;:::-;19775:9;19769:4;19765:20;19760:2;19749:9;19745:18;19738:48;19803:76;19874:4;19865:6;19803:76;:::i;:::-;19795:84;;19446:440;;;;;;;:::o;19892:210::-;;20017:2;20006:9;20002:18;19994:26;;20030:65;20092:1;20081:9;20077:17;20068:6;20030:65;:::i;:::-;19984:118;;;;:::o;20108:313::-;;20259:2;20248:9;20244:18;20236:26;;20308:9;20302:4;20298:20;20294:1;20283:9;20279:17;20272:47;20336:78;20409:4;20400:6;20336:78;:::i;:::-;20328:86;;20226:195;;;;:::o;20427:419::-;;20631:2;20620:9;20616:18;20608:26;;20680:9;20674:4;20670:20;20666:1;20655:9;20651:17;20644:47;20708:131;20834:4;20708:131;:::i;:::-;20700:139;;20598:248;;;:::o;20852:419::-;;21056:2;21045:9;21041:18;21033:26;;21105:9;21099:4;21095:20;21091:1;21080:9;21076:17;21069:47;21133:131;21259:4;21133:131;:::i;:::-;21125:139;;21023:248;;;:::o;21277:419::-;;21481:2;21470:9;21466:18;21458:26;;21530:9;21524:4;21520:20;21516:1;21505:9;21501:17;21494:47;21558:131;21684:4;21558:131;:::i;:::-;21550:139;;21448:248;;;:::o;21702:419::-;;21906:2;21895:9;21891:18;21883:26;;21955:9;21949:4;21945:20;21941:1;21930:9;21926:17;21919:47;21983:131;22109:4;21983:131;:::i;:::-;21975:139;;21873:248;;;:::o;22127:419::-;;22331:2;22320:9;22316:18;22308:26;;22380:9;22374:4;22370:20;22366:1;22355:9;22351:17;22344:47;22408:131;22534:4;22408:131;:::i;:::-;22400:139;;22298:248;;;:::o;22552:419::-;;22756:2;22745:9;22741:18;22733:26;;22805:9;22799:4;22795:20;22791:1;22780:9;22776:17;22769:47;22833:131;22959:4;22833:131;:::i;:::-;22825:139;;22723:248;;;:::o;22977:419::-;;23181:2;23170:9;23166:18;23158:26;;23230:9;23224:4;23220:20;23216:1;23205:9;23201:17;23194:47;23258:131;23384:4;23258:131;:::i;:::-;23250:139;;23148:248;;;:::o;23402:419::-;;23606:2;23595:9;23591:18;23583:26;;23655:9;23649:4;23645:20;23641:1;23630:9;23626:17;23619:47;23683:131;23809:4;23683:131;:::i;:::-;23675:139;;23573:248;;;:::o;23827:419::-;;24031:2;24020:9;24016:18;24008:26;;24080:9;24074:4;24070:20;24066:1;24055:9;24051:17;24044:47;24108:131;24234:4;24108:131;:::i;:::-;24100:139;;23998:248;;;:::o;24252:419::-;;24456:2;24445:9;24441:18;24433:26;;24505:9;24499:4;24495:20;24491:1;24480:9;24476:17;24469:47;24533:131;24659:4;24533:131;:::i;:::-;24525:139;;24423:248;;;:::o;24677:419::-;;24881:2;24870:9;24866:18;24858:26;;24930:9;24924:4;24920:20;24916:1;24905:9;24901:17;24894:47;24958:131;25084:4;24958:131;:::i;:::-;24950:139;;24848:248;;;:::o;25102:419::-;;25306:2;25295:9;25291:18;25283:26;;25355:9;25349:4;25345:20;25341:1;25330:9;25326:17;25319:47;25383:131;25509:4;25383:131;:::i;:::-;25375:139;;25273:248;;;:::o;25527:419::-;;25731:2;25720:9;25716:18;25708:26;;25780:9;25774:4;25770:20;25766:1;25755:9;25751:17;25744:47;25808:131;25934:4;25808:131;:::i;:::-;25800:139;;25698:248;;;:::o;25952:419::-;;26156:2;26145:9;26141:18;26133:26;;26205:9;26199:4;26195:20;26191:1;26180:9;26176:17;26169:47;26233:131;26359:4;26233:131;:::i;:::-;26225:139;;26123:248;;;:::o;26377:419::-;;26581:2;26570:9;26566:18;26558:26;;26630:9;26624:4;26620:20;26616:1;26605:9;26601:17;26594:47;26658:131;26784:4;26658:131;:::i;:::-;26650:139;;26548:248;;;:::o;26802:419::-;;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26973:248;;;:::o;27227:419::-;;27431:2;27420:9;27416:18;27408:26;;27480:9;27474:4;27470:20;27466:1;27455:9;27451:17;27444:47;27508:131;27634:4;27508:131;:::i;:::-;27500:139;;27398:248;;;:::o;27652:419::-;;27856:2;27845:9;27841:18;27833:26;;27905:9;27899:4;27895:20;27891:1;27880:9;27876:17;27869:47;27933:131;28059:4;27933:131;:::i;:::-;27925:139;;27823:248;;;:::o;28077:419::-;;28281:2;28270:9;28266:18;28258:26;;28330:9;28324:4;28320:20;28316:1;28305:9;28301:17;28294:47;28358:131;28484:4;28358:131;:::i;:::-;28350:139;;28248:248;;;:::o;28502:419::-;;28706:2;28695:9;28691:18;28683:26;;28755:9;28749:4;28745:20;28741:1;28730:9;28726:17;28719:47;28783:131;28909:4;28783:131;:::i;:::-;28775:139;;28673:248;;;:::o;28927:419::-;;29131:2;29120:9;29116:18;29108:26;;29180:9;29174:4;29170:20;29166:1;29155:9;29151:17;29144:47;29208:131;29334:4;29208:131;:::i;:::-;29200:139;;29098:248;;;:::o;29352:419::-;;29556:2;29545:9;29541:18;29533:26;;29605:9;29599:4;29595:20;29591:1;29580:9;29576:17;29569:47;29633:131;29759:4;29633:131;:::i;:::-;29625:139;;29523:248;;;:::o;29777:419::-;;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29948:248;;;:::o;30202:419::-;;30406:2;30395:9;30391:18;30383:26;;30455:9;30449:4;30445:20;30441:1;30430:9;30426:17;30419:47;30483:131;30609:4;30483:131;:::i;:::-;30475:139;;30373:248;;;:::o;30627:419::-;;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30798:248;;;:::o;31052:419::-;;31256:2;31245:9;31241:18;31233:26;;31305:9;31299:4;31295:20;31291:1;31280:9;31276:17;31269:47;31333:131;31459:4;31333:131;:::i;:::-;31325:139;;31223:248;;;:::o;31477:419::-;;31681:2;31670:9;31666:18;31658:26;;31730:9;31724:4;31720:20;31716:1;31705:9;31701:17;31694:47;31758:131;31884:4;31758:131;:::i;:::-;31750:139;;31648:248;;;:::o;31902:218::-;;32031:2;32020:9;32016:18;32008:26;;32044:69;32110:1;32099:9;32095:17;32086:6;32044:69;:::i;:::-;31998:122;;;;:::o;32126:222::-;;32257:2;32246:9;32242:18;32234:26;;32270:71;32338:1;32327:9;32323:17;32314:6;32270:71;:::i;:::-;32224:124;;;;:::o;32354:129::-;;32415:20;;:::i;:::-;32405:30;;32444:33;32472:4;32464:6;32444:33;:::i;:::-;32395:88;;;:::o;32489:75::-;;32555:2;32549:9;32539:19;;32529:35;:::o;32570:307::-;;32721:18;32713:6;32710:30;32707:2;;;32743:18;;:::i;:::-;32707:2;32781:29;32803:6;32781:29;:::i;:::-;32773:37;;32865:4;32859;32855:15;32847:23;;32636:241;;;:::o;32883:308::-;;33035:18;33027:6;33024:30;33021:2;;;33057:18;;:::i;:::-;33021:2;33095:29;33117:6;33095:29;:::i;:::-;33087:37;;33179:4;33173;33169:15;33161:23;;32950:241;;;:::o;33197:98::-;;33282:5;33276:12;33266:22;;33255:40;;;:::o;33301:99::-;;33387:5;33381:12;33371:22;;33360:40;;;:::o;33406:168::-;;33523:6;33518:3;33511:19;33563:4;33558:3;33554:14;33539:29;;33501:73;;;;:::o;33580:169::-;;33698:6;33693:3;33686:19;33738:4;33733:3;33729:14;33714:29;;33676:73;;;;:::o;33755:148::-;;33894:3;33879:18;;33869:34;;;;:::o;33909:305::-;;33968:20;33986:1;33968:20;:::i;:::-;33963:25;;34002:20;34020:1;34002:20;:::i;:::-;33997:25;;34156:1;34088:66;34084:74;34081:1;34078:81;34075:2;;;34162:18;;:::i;:::-;34075:2;34206:1;34203;34199:9;34192:16;;33953:261;;;;:::o;34220:185::-;;34277:20;34295:1;34277:20;:::i;:::-;34272:25;;34311:20;34329:1;34311:20;:::i;:::-;34306:25;;34350:1;34340:2;;34355:18;;:::i;:::-;34340:2;34397:1;34394;34390:9;34385:14;;34262:143;;;;:::o;34411:348::-;;34474:20;34492:1;34474:20;:::i;:::-;34469:25;;34508:20;34526:1;34508:20;:::i;:::-;34503:25;;34696:1;34628:66;34624:74;34621:1;34618:81;34613:1;34606:9;34599:17;34595:105;34592:2;;;34703:18;;:::i;:::-;34592:2;34751:1;34748;34744:9;34733:20;;34459:300;;;;:::o;34765:191::-;;34825:20;34843:1;34825:20;:::i;:::-;34820:25;;34859:20;34877:1;34859:20;:::i;:::-;34854:25;;34898:1;34895;34892:8;34889:2;;;34903:18;;:::i;:::-;34889:2;34948:1;34945;34941:9;34933:17;;34810:146;;;;:::o;34962:96::-;;35028:24;35046:5;35028:24;:::i;:::-;35017:35;;35007:51;;;:::o;35064:90::-;;35141:5;35134:13;35127:21;35116:32;;35106:48;;;:::o;35160:149::-;;35236:66;35229:5;35225:78;35214:89;;35204:105;;;:::o;35315:89::-;;35391:6;35384:5;35380:18;35369:29;;35359:45;;;:::o;35410:126::-;;35487:42;35480:5;35476:54;35465:65;;35455:81;;;:::o;35542:77::-;;35608:5;35597:16;;35587:32;;;:::o;35625:86::-;;35700:4;35693:5;35689:16;35678:27;;35668:43;;;:::o;35717:154::-;35801:6;35796:3;35791;35778:30;35863:1;35854:6;35849:3;35845:16;35838:27;35768:103;;;:::o;35877:307::-;35945:1;35955:113;35969:6;35966:1;35963:13;35955:113;;;36054:1;36049:3;36045:11;36039:18;36035:1;36030:3;36026:11;36019:39;35991:2;35988:1;35984:10;35979:15;;35955:113;;;36086:6;36083:1;36080:13;36077:2;;;36166:1;36157:6;36152:3;36148:16;36141:27;36077:2;35926:258;;;;:::o;36190:320::-;;36271:1;36265:4;36261:12;36251:22;;36318:1;36312:4;36308:12;36339:18;36329:2;;36395:4;36387:6;36383:17;36373:27;;36329:2;36457;36449:6;36446:14;36426:18;36423:38;36420:2;;;36476:18;;:::i;:::-;36420:2;36241:269;;;;:::o;36516:281::-;36599:27;36621:4;36599:27;:::i;:::-;36591:6;36587:40;36729:6;36717:10;36714:22;36693:18;36681:10;36678:34;36675:62;36672:2;;;36740:18;;:::i;:::-;36672:2;36780:10;36776:2;36769:22;36559:238;;;:::o;36803:233::-;;36865:24;36883:5;36865:24;:::i;:::-;36856:33;;36911:66;36904:5;36901:77;36898:2;;;36981:18;;:::i;:::-;36898:2;37028:1;37021:5;37017:13;37010:20;;36846:190;;;:::o;37042:167::-;;37102:22;37118:5;37102:22;:::i;:::-;37093:31;;37146:4;37139:5;37136:15;37133:2;;;37154:18;;:::i;:::-;37133:2;37201:1;37194:5;37190:13;37183:20;;37083:126;;;:::o;37215:176::-;;37264:20;37282:1;37264:20;:::i;:::-;37259:25;;37298:20;37316:1;37298:20;:::i;:::-;37293:25;;37337:1;37327:2;;37342:18;;:::i;:::-;37327:2;37383:1;37380;37376:9;37371:14;;37249:142;;;;:::o;37397:180::-;37445:77;37442:1;37435:88;37542:4;37539:1;37532:15;37566:4;37563:1;37556:15;37583:180;37631:77;37628:1;37621:88;37728:4;37725:1;37718:15;37752:4;37749:1;37742:15;37769:180;37817:77;37814:1;37807:88;37914:4;37911:1;37904:15;37938:4;37935:1;37928:15;37955:180;38003:77;38000:1;37993:88;38100:4;38097:1;38090:15;38124:4;38121:1;38114:15;38141:102;;38233:2;38229:7;38224:2;38217:5;38213:14;38209:28;38199:38;;38189:54;;;:::o;38249:230::-;38389:34;38385:1;38377:6;38373:14;38366:58;38458:13;38453:2;38445:6;38441:15;38434:38;38355:124;:::o;38485:237::-;38625:34;38621:1;38613:6;38609:14;38602:58;38694:20;38689:2;38681:6;38677:15;38670:45;38591:131;:::o;38728:180::-;38868:32;38864:1;38856:6;38852:14;38845:56;38834:74;:::o;38914:225::-;39054:34;39050:1;39042:6;39038:14;39031:58;39123:8;39118:2;39110:6;39106:15;39099:33;39020:119;:::o;39145:178::-;39285:30;39281:1;39273:6;39269:14;39262:54;39251:72;:::o;39329:174::-;39469:26;39465:1;39457:6;39453:14;39446:50;39435:68;:::o;39509:223::-;39649:34;39645:1;39637:6;39633:14;39626:58;39718:6;39713:2;39705:6;39701:15;39694:31;39615:117;:::o;39738:175::-;39878:27;39874:1;39866:6;39862:14;39855:51;39844:69;:::o;39919:228::-;40059:34;40055:1;40047:6;40043:14;40036:58;40128:11;40123:2;40115:6;40111:15;40104:36;40025:122;:::o;40153:172::-;40293:24;40289:1;40281:6;40277:14;40270:48;40259:66;:::o;40331:231::-;40471:34;40467:1;40459:6;40455:14;40448:58;40540:14;40535:2;40527:6;40523:15;40516:39;40437:125;:::o;40568:250::-;40708:34;40704:1;40696:6;40692:14;40685:58;40777:33;40772:2;40764:6;40760:15;40753:58;40674:144;:::o;40824:243::-;40964:34;40960:1;40952:6;40948:14;40941:58;41033:26;41028:2;41020:6;41016:15;41009:51;40930:137;:::o;41073:229::-;41213:34;41209:1;41201:6;41197:14;41190:58;41282:12;41277:2;41269:6;41265:15;41258:37;41179:123;:::o;41308:228::-;41448:34;41444:1;41436:6;41432:14;41425:58;41517:11;41512:2;41504:6;41500:15;41493:36;41414:122;:::o;41542:182::-;41682:34;41678:1;41670:6;41666:14;41659:58;41648:76;:::o;41730:166::-;41870:18;41866:1;41858:6;41854:14;41847:42;41836:60;:::o;41902:236::-;42042:34;42038:1;42030:6;42026:14;42019:58;42111:19;42106:2;42098:6;42094:15;42087:44;42008:130;:::o;42144:231::-;42284:34;42280:1;42272:6;42268:14;42261:58;42353:14;42348:2;42340:6;42336:15;42329:39;42250:125;:::o;42381:182::-;42521:34;42517:1;42509:6;42505:14;42498:58;42487:76;:::o;42569:228::-;42709:34;42705:1;42697:6;42693:14;42686:58;42778:11;42773:2;42765:6;42761:15;42754:36;42675:122;:::o;42803:234::-;42943:34;42939:1;42931:6;42927:14;42920:58;43012:17;43007:2;42999:6;42995:15;42988:42;42909:128;:::o;43043:220::-;43183:34;43179:1;43171:6;43167:14;43160:58;43252:3;43247:2;43239:6;43235:15;43228:28;43149:114;:::o;43269:172::-;43409:24;43405:1;43397:6;43393:14;43386:48;43375:66;:::o;43447:236::-;43587:34;43583:1;43575:6;43571:14;43564:58;43656:19;43651:2;43643:6;43639:15;43632:44;43553:130;:::o;43689:231::-;43829:34;43825:1;43817:6;43813:14;43806:58;43898:14;43893:2;43885:6;43881:15;43874:39;43795:125;:::o;43926:250::-;44066:34;44062:1;44054:6;44050:14;44043:58;44135:33;44130:2;44122:6;44118:15;44111:58;44032:144;:::o;44182:122::-;44255:24;44273:5;44255:24;:::i;:::-;44248:5;44245:35;44235:2;;44294:1;44291;44284:12;44235:2;44225:79;:::o;44310:116::-;44380:21;44395:5;44380:21;:::i;:::-;44373:5;44370:32;44360:2;;44416:1;44413;44406:12;44360:2;44350:76;:::o;44432:120::-;44504:23;44521:5;44504:23;:::i;:::-;44497:5;44494:34;44484:2;;44542:1;44539;44532:12;44484:2;44474:78;:::o;44558:122::-;44631:24;44649:5;44631:24;:::i;:::-;44624:5;44621:35;44611:2;;44670:1;44667;44660:12;44611:2;44601:79;:::o;44686:118::-;44757:22;44773:5;44757:22;:::i;:::-;44750:5;44747:33;44737:2;;44794:1;44791;44784:12;44737:2;44727:77;:::o

Swarm Source

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