ETH Price: $2,786.32 (+4.01%)

dav99c (99C)
 

Overview

TokenID

15

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
dav99c

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-27
*/

// SPDX-License-Identifier: MIT

//:::::::,::;+++++++++++++++++++*+++++++*++++++++++++++++++++++++++****??%%%%SSSSSSSS%?*+****+++*+?SSSS%?%?%%SSS%*********
//:::::::;++++++++++++++++++++++++++++++*+++++++++++++++++++++++**?%%%SSSSSSSSSSSSSSSSSS%*+******+?SSS%S%%%S*S%%%*********
//:::::;++++++++++++++++++++++++++++++++*+++++++++++++++++++++*?%SSSSSSSSSSSSSSSSSSSSSSSSS*+?*****?SSS?%#%?#SSSSSS%?******
//:::;+++++++++++++++++++++++++++++++++**+++++++++++++++++++?%SSSSSSSS%%??***%SSSSSSSSSSSSS+*%???**SSS%?#?%S@@@@@@S?******
//:+++++++++++++++++**++++++++++++++++***+++++++++++++++++*%SSSSSSSSS?*?SS##%+*SSSSSSSSSSSS%+%%???*SSS%?#?%%@###SS%?******
//++++++++++++++***++;+++++++++++****??????*+++**++*++++++%SSSSSSSSS*?#@@@@@@%;%SSSSSSSSSSSS*?S%??*SSSS?#?%?S%%%%?********
//+++++++++++***++++?%S*++++++**?%%%%SSSSSSS%*+*??**+++++%SSSSSSSSS?+#@@@####S+?SSSSSSSSSSSS**SS%%*%SSS?#%%??%SSS%*?******
//++++++++***+++*?%SS##*+++*?%%SSSSS%%%%SS%%SS*+?S%?***+*SSSSSSSSSS**##@##SSS%+*SSSSSSSSSSSS**##SS?%SSS%%?%??SSSS??%******
//+++++***+++*%SSS####S***?%SS%%%%%%%S%%%%%%%%%++SSS?**+*SSSSSSSSSS**S##SSS%%%+*SSSSSSSSSSSS?+S#S%%*%SSSS%SSSSSS%*S%?*****
//+++***++*?SS#####SS%?+*%S%%%%%???%**%%%%%%%%S*+%##%**+*SSSS%%%%SS**S##S%%%??+*SSSSSSSSSSSS?+S#S%%%%?%%%SSS%%%?%SS%?*****
//+***+*?SS#####S%????*?%%%%%%??S#@@S+?S%%%%%%S**%##S?*+?S%%%%%%%%S*+S##%%????+*SSSSSSSSSSSS?+S#S%%SS#SSS??%*S####%??*****
//?*+*%S#####S%??******S%%%%%%*#@@@@#+?S%%%%%%S?*S###%?+?S%%%%%%%%S?+%SS%%????++SSSSSSSSSSSS%+S#S%%%SS##@#?%%@@#S%???*****
//*?S#####%?***?????*+%%%%%%%??#@@@#S+?S%%%%%%S?+S###%?+?S%%%%%%%%S?+%SS%%????*+SSSS%%%%%%SS%+%#S%%%%%SSS###@#SSS%??******
//S####S%??****??**?**S%%%%%%*%##@#S%+%S%%%%%%S?*S###S?+?S%%%%%%%%S%+?SS%?????+?S%%%%%%%%%SS%+%#S%%%%%%%%SSSSSSSSS?*******
//##S???????***?**??+?S%%%%%%*S##@#S?+%SS%%%%%S**S###%?+?SSSSSSSSS%S?+?%%??***?%%%%%%%S%%SSS%+?#S%%??????????%SSS%%????*%%
//#S%*????????***???+?S%%%%%%*SS###%?+%S%%%%%%S**S###S%+*SSSSSSSSSSSS%?****?%%SS%%%SSSSSSSSS%+?SS%???????????%SSS%%SSS%?SS
//SS%??????????????*+%S%%%%%%*SSS#S%*+%SSS%%%%S*?S###S%*+%SSSSSSSSSSSSSSS%%SSS%*%SSSSSSSSSSS%+*SS%%?????%%S%?SSSSSSSSSS%SS
//SS???????????????++%S%%%%S%*%SS#S%**SSSSSS%%%+%S###S%?+*SSSSSSSSSSSSSSSSSS%*++%SSSSSSSSS?*?*?SS%??%SSSSSSSSSSSSSSSSSSSSS
//##????????????***++%S%%%%S%+%SS#S?*%SSSSSSSS%+%S###S%%?+*%SSSSSSSSSSSSS%?*?S%+%SSSSSSS%*?SS##SSSSSSSSSSSSSSSSSSSSSSSSSSS
//#S??????????*++++++%%%%%%%%*+?%%?*%SSSSSSSSS%+%S###S%?%?*+*?%%%%%%%%??*?%S@@%+%SSSSSS%+%#SSSSSSSSSSSSS#SSSSSSSSSSSSSSSSS
//#S????????%?+++++++%%%%%%%S%????%SS%SSSSSSSS%+%S###S%???%??**??????%%S#@@@@@%+%SSSSSS**#SSSS#SSSSSSSSS#SSSSSSSSSSSS##SSS
//?***?????%?*+++*?++%S%%%%%%%SSSSS%*?SSS%SSSS%+%S###S%?????%%%%S#############%+%SSSSSS+%#SSSS@@SSSSSSSS@SSSSS##SSSS###SSS
//*++++?%%%%?**???%*+?S%%%%%%%%SS%??+?SSSSSSSS?+?S###S%???????%%%%SSSSSSSSSSSS%+?SSSSSS*?@SSSS#SSSSSSSSS@@###@@@#SSSSSSSSS
//*****?%%%%%%???%SS?+?%SSSSSS%%?*%#*?SSSSSSSS?+?S###S%????????%%%%%%%%%%%%%%%%+?SSSSSS%+%#SSSSSSS@####@@###@#######SSSS##
//?***??SSSSS%%%SSSSS*+*????????S###+?SSSSSSSS?+?####S%???********??+%SS%??????+?SSSSSSS%*?%%??##@@@@@@#####SSSS####@@@###
//????%S####SSSS####S***+*??%S##@###+%SSSSSSSS?+%####S?+?%%%%%SSSSSS+?##S%?????+%SSSSSSSSSS%%+?@@@######SS%%%%%%%%%???????
//?%%%S#############S****???%SSSSSS%+%SSSSSSSS?*S####S*+SSSSSSSSSSSS**S#S%%???**SSSSSSSSSSS#%+S@#%???**?**++***++*?**++?*+
//%%%SS##SSSSSS#%###S*****???%%%%%%?+%SSSSSSSS*?S####%?+%SSSSSSSSSSS%+?SS%%%?**%SSSSSSSSSSSS*?#@?+?*?++*?*+*?*?*+*?*?++?**
//SSS####%%%?%??%###%++*****?%%SS%%?+%SSSSSSSS*%#####%?+?SSSSSSSSSSSS%**???**?SSSSSSSSSSSSS**#@@?+?**+*+?+???***+*?*?++??+
//%##SS?%%%%?SS*SSS?**??%%%?*SS###%?*SSSSSSSS%*S#####%%*+%SSSSSSSSSSSSSS%%%SSSSSSSSSSSSSS%**#@@#S***?*****???**?+*?*?*+*?+
//?%S%%???%%?%%S##?*SSSSSSS%*%SS##S*?SSSSSSSS*?#####S%%%++%SSSSSSSSSSSSSSSSSSSSSSSSSSSS%**%#@@##%+?*??*****?****++****+***
//??%???%S####?##S*?SSSSSSSS**%SSS*?SSSSSSSS?*S#####%%???*+?%SSSSSSSSSSSSSSSSSSSSSSS%?*?%#@@##SSS+****??***#????%%?%%%SSSS
//SS%S####SS%%S%?*+?SSSSSSSS%**???%SSSSSSSS%*%#####S%?%????***?%%SSSSSSSSSSSS%%%??**?%#@@###SSSSS%%SSS@####@@#############
//S###S%%SS?%S?++*+*SSSSSSSSSS%%%SSSSSSSSS?*%#####S%%???????%??*************???%%S##@@###SSSSSSS%%%S############SSSSSSSSSS
//###S%SS##S#S???%S+?SSSSSSSSSSSSSSSSSS%?*?S#####S%??????????%%%SSSSSSS#############SSSSS%%%%%%%%%%%%%SSSSSSS%%%%%%%%%%%%%
//#################%+?SSSSSSSSSSSSSS%??*?S#####S%%%?????????????%%%S%%SSSSSSSSSSSSSS%%%%%?????????????%%%%?%%%????????????
//%S##S##@#######%#S*+**?%%%%%%??????%S######S%%%????*******???????%??%%%%%%%%%%%%%%%????????**?*****?????????????????????
//?%SSS##########*%S*******???%%SS########SS%%%????***************??????????????????????****************?********?????****
//S######@#####@#S#%****???%%SSSSSSSSSSS%%%%%????*************************************************************************
//?S####@@####@@###%*??*?*???%%%%%%%%%%%???????********************************************[email protected]

// File: @openzeppelin/[email protected]/utils/Counters.sol


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

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/[email protected]/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/[email protected]/utils/Address.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol


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

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/[email protected]/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol


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

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];
        }
    }
}

// File: 99cent.sol







pragma solidity ^0.8.7;






contract dav99c is ERC721, ERC721URIStorage, Pausable, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;

    uint public transferGen;
    uint256[] public genArray;

    string[] public uriList;

    constructor() ERC721("dav99c", "99C") {
        _tokenIdCounter.increment();
        genArray.push(0);
        uriList.push("x"); // 0
        uriList.push("https://fjrxum7pkjc62uqmopu6hzjwfwsebusdvhg5rxihq4x5cse3vj5q.arweave.net/KmN6M-9SRe1SDHPp4-U2LaRA0kOpzdjdB4cv0Uibqns"); // 1
        uriList.push("https://7twgavvscek3kdthy7ni3ghby2sqbb6nxrvq7tgxebt5m3ojcm5q.arweave.net/_OxgVrIRFbUOZ8fajZjhxqUAh828aw_M1yBn1m3JEzs"); // 2
        uriList.push("https://yizo5zcjogcbftznbts54qjgmi7cwlwmsuncrbk2ga2ryxikrnoq.arweave.net/wjLu5ElxhBLPLQzl3kEmYj4rLsyVGiiFWjA1HF0Ki10"); // 3
        uriList.push("https://smq5cchq3jcue3oih3sggl4giomgp2laj6pqme54d727nvrfmxua.arweave.net/kyHRCPDaRUJtyD7kYy-GQ5hn6WBPnwYTvB_19tYlZeg"); // 4
        uriList.push("https://bk7nqdxdrkuw2m5bhqwvp4qmli5avwrdfbgfhxmzbcaytpoooxca.arweave.net/Cr7YDuOKqW0zoTwtV_IMWjoK2iMoTFPdmQiBib3OdcQ"); // 5
        uriList.push("https://tquoqq7noj7otn77ljug2ltlurwmvcigz342x5urejcu2k74s23a.arweave.net/nCjoQ-1yfum3_1pobS5rpGzKiQbO-av2kSJFTSv8lrY"); // 6
        uriList.push("https://eyor2bcdobbppdyrbhun7aj47sk76p4qxfb252bjvmgqczk3vr3a.arweave.net/Jh0dBENwQvePEQno34E8_JX_P5C5Q67oKasNAWVbrHY"); // 7
        uriList.push("https://s77rqufoblvc34uaiso4cxskppyxnkuexxt5wc4ton3h5c7mtodq.arweave.net/l_8YUK4K6i3ygESdwV5Ke_F2qoS959sLk3N2fovsm4c"); // 8
        uriList.push("https://myogaddcxayv7e64abtrde55d6clklh6bfh4sdoe4sky2jjixdcq.arweave.net/ZhxgDGK4MV-T3ABnEZO9H4S1LP4JT8kNxOSVjSUouMU"); // 9
    }

    function addGenUri (string memory newGen) public onlyOwner {
        uriList.push(newGen);
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function safeMint(address to) public onlyOwner {  //  string memory uri
            uint256 tokenId = _tokenIdCounter.current();
            _tokenIdCounter.increment();
            _safeMint(to, tokenId);
            _setTokenURI(tokenId, "https://lgprhcdvafsmbqwsfyhx4lzzvr76gqlfnbdl2iscm52k5v5v5e4q.arweave.net/WZ8TiHUBZMDC0i4Pfi85rH_jQWVoRr0iQmd0rte16Tk");
            genArray.push(0);            
    }

    function updateUriList(uint updatedToken, string memory updatedUri) public onlyOwner {
        uriList[updatedToken] = updatedUri;
    }

      function withdraw() public onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }


    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, tokenId);
            if (from != address(0) && uriList.length > genArray[tokenId] + 1) {
                transferGen = genArray[tokenId];
                transferGen++;
                genArray[tokenId] = transferGen;
                _setTokenURI(tokenId, uriList[transferGen]);
            }
              
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"string","name":"newGen","type":"string"}],"name":"addGenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genArray","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"transferGen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"updatedToken","type":"uint256"},{"internalType":"string","name":"updatedUri","type":"string"}],"name":"updateUriList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uriList","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f64617639396300000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f39394300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000969291906200057c565b508060019080519060200190620000af9291906200057c565b5050506000600760006101000a81548160ff021916908315150217905550620000ed620000e16200049860201b60201c565b620004a060201b60201c565b6200010460086200056660201b620012731760201c565b600a60009080600181540180825580915050600190039060005260206000200160009091909190915055600b80600181540180825580915050600190039060005260206000200160006040518060400160405280600181526020017f7800000000000000000000000000000000000000000000000000000000000000815250909190915090805190602001906200019d9291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a00160405280607481526020016200445f6074913990919091509080519060200190620001f19291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620045bb6074913990919091509080519060200190620002459291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a00160405280607481526020016200421b6074913990919091509080519060200190620002999291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a00160405280607481526020016200428f6074913990919091509080519060200190620002ed9291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620043036074913990919091509080519060200190620003419291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620044d36074913990919091509080519060200190620003959291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620045476074913990919091509080519060200190620003e99291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620043eb60749139909190915090805190602001906200043d9291906200057c565b50600b80600181540180825580915050600190039060005260206000200160006040518060a0016040528060748152602001620043776074913990919091509080519060200190620004919291906200057c565b5062000691565b600033905090565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b8280546200058a906200062c565b90600052602060002090601f016020900481019282620005ae5760008555620005fa565b82601f10620005c957805160ff1916838001178555620005fa565b82800160010185558215620005fa579182015b82811115620005f9578251825591602001919060010190620005dc565b5b5090506200060991906200060d565b5090565b5b80821115620006285760008160009055506001016200060e565b5090565b600060028204905060018216806200064557607f821691505b602082108114156200065c576200065b62000662565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613b7a80620006a16000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636352211e116100de57806395d89b4111610097578063b88d4fde11610071578063b88d4fde14610435578063c87b56dd14610451578063e985e9c514610481578063f2fde38b146104b15761018e565b806395d89b41146103df578063a22cb465146103fd578063b56448d9146104195761018e565b80636352211e1461032f5780636844ecd21461035f57806370a082311461037d578063715018a6146103ad5780638456cb59146103b75780638da5cb5b146103c15761018e565b806323b872dd1161014b5780633f4ba83a116101255780633f4ba83a146102cf57806340d097c3146102d957806342842e0e146102f55780635c975abb146103115761018e565b806323b872dd14610279578063369b95f7146102955780633ccfd60b146102c55761018e565b806301ffc9a714610193578063049f2fe5146101c357806306fdde03146101f3578063081812fc14610211578063095ea7b314610241578063130378291461025d575b600080fd5b6101ad60048036038101906101a891906128a3565b6104cd565b6040516101ba9190612e1e565b60405180910390f35b6101dd60048036038101906101d89190612946565b6105af565b6040516101ea91906130db565b60405180910390f35b6101fb6105d3565b6040516102089190612e39565b60405180910390f35b61022b60048036038101906102269190612946565b610665565b6040516102389190612db7565b60405180910390f35b61025b60048036038101906102569190612863565b6106ea565b005b610277600480360381019061027291906128fd565b610802565b005b610293600480360381019061028e919061274d565b6108bd565b005b6102af60048036038101906102aa9190612946565b61091d565b6040516102bc9190612e39565b60405180910390f35b6102cd6109c9565b005b6102d7610ac5565b005b6102f360048036038101906102ee91906126e0565b610b4b565b005b61030f600480360381019061030a919061274d565b610c39565b005b610319610c59565b6040516103269190612e1e565b60405180910390f35b61034960048036038101906103449190612946565b610c70565b6040516103569190612db7565b60405180910390f35b610367610d22565b60405161037491906130db565b60405180910390f35b610397600480360381019061039291906126e0565b610d28565b6040516103a491906130db565b60405180910390f35b6103b5610de0565b005b6103bf610e68565b005b6103c9610eee565b6040516103d69190612db7565b60405180910390f35b6103e7610f18565b6040516103f49190612e39565b60405180910390f35b61041760048036038101906104129190612823565b610faa565b005b610433600480360381019061042e9190612973565b610fc0565b005b61044f600480360381019061044a91906127a0565b611073565b005b61046b60048036038101906104669190612946565b6110d5565b6040516104789190612e39565b60405180910390f35b61049b6004803603810190610496919061270d565b6110e7565b6040516104a89190612e1e565b60405180910390f35b6104cb60048036038101906104c691906126e0565b61117b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105a857506105a782611289565b5b9050919050565b600a81815481106105bf57600080fd5b906000526020600020016000915090505481565b6060600080546105e29061333c565b80601f016020809104026020016040519081016040528092919081815260200182805461060e9061333c565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b5050505050905090565b6000610670826112f3565b6106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a69061301b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f582610c70565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d9061309b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078561135f565b73ffffffffffffffffffffffffffffffffffffffff1614806107b457506107b3816107ae61135f565b6110e7565b5b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90612f5b565b60405180910390fd5b6107fd8383611367565b505050565b61080a61135f565b73ffffffffffffffffffffffffffffffffffffffff16610828610eee565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108759061303b565b60405180910390fd5b600b819080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906108b99291906124f4565b5050565b6108ce6108c861135f565b82611420565b61090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610904906130bb565b60405180910390fd5b6109188383836114fe565b505050565b600b818154811061092d57600080fd5b9060005260206000200160009150905080546109489061333c565b80601f01602080910402602001604051908101604052809291908181526020018280546109749061333c565b80156109c15780601f10610996576101008083540402835291602001916109c1565b820191906000526020600020905b8154815290600101906020018083116109a457829003601f168201915b505050505081565b6109d161135f565b73ffffffffffffffffffffffffffffffffffffffff166109ef610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c9061303b565b60405180910390fd5b6000610a4f610eee565b73ffffffffffffffffffffffffffffffffffffffff1647604051610a7290612da2565b60006040518083038185875af1925050503d8060008114610aaf576040519150601f19603f3d011682016040523d82523d6000602084013e610ab4565b606091505b5050905080610ac257600080fd5b50565b610acd61135f565b73ffffffffffffffffffffffffffffffffffffffff16610aeb610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b389061303b565b60405180910390fd5b610b4961175a565b565b610b5361135f565b73ffffffffffffffffffffffffffffffffffffffff16610b71610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061303b565b60405180910390fd5b6000610bd360086117fc565b9050610bdf6008611273565b610be9828261180a565b610c0b816040518060a0016040528060748152602001613ad160749139611828565b600a600090806001815401808255809150506001900390600052602060002001600090919091909150555050565b610c5483838360405180602001604052806000815250611073565b505050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612f9b565b60405180910390fd5b80915050919050565b60095481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090612f7b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de861135f565b73ffffffffffffffffffffffffffffffffffffffff16610e06610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e539061303b565b60405180910390fd5b610e66600061189c565b565b610e7061135f565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061303b565b60405180910390fd5b610eec611962565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f279061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f539061333c565b8015610fa05780601f10610f7557610100808354040283529160200191610fa0565b820191906000526020600020905b815481529060010190602001808311610f8357829003601f168201915b5050505050905090565b610fbc610fb561135f565b8383611a05565b5050565b610fc861135f565b73ffffffffffffffffffffffffffffffffffffffff16610fe6610eee565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061303b565b60405180910390fd5b80600b8381548110611051576110506134a6565b5b90600052602060002001908051906020019061106e9291906124f4565b505050565b61108461107e61135f565b83611420565b6110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba906130bb565b60405180910390fd5b6110cf84848484611b72565b50505050565b60606110e082611bce565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118361135f565b73ffffffffffffffffffffffffffffffffffffffff166111a1610eee565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061303b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612e9b565b60405180910390fd5b6112708161189c565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113da83610c70565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061142b826112f3565b61146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190612f1b565b60405180910390fd5b600061147583610c70565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114e457508373ffffffffffffffffffffffffffffffffffffffff166114cc84610665565b73ffffffffffffffffffffffffffffffffffffffff16145b806114f557506114f481856110e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661151e82610c70565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b9061305b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612edb565b60405180910390fd5b6115ef838383611d20565b6115fa600082611367565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164a9190613252565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a191906131cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611762610c59565b6117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890612e5b565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117e561135f565b6040516117f29190612db7565b60405180910390a1565b600081600001549050919050565b611824828260405180602001604052806000815250611efd565b5050565b611831826112f3565b611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612fbb565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906118979291906124f4565b505050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61196a610c59565b156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190612f3b565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119ee61135f565b6040516119fb9190612db7565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90612efb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b659190612e1e565b60405180910390a3505050565b611b7d8484846114fe565b611b8984848484611f58565b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90612e7b565b60405180910390fd5b50505050565b6060611bd9826112f3565b611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90612ffb565b60405180910390fd5b6000600660008481526020019081526020016000208054611c389061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c649061333c565b8015611cb15780601f10611c8657610100808354040283529160200191611cb1565b820191906000526020600020905b815481529060010190602001808311611c9457829003601f168201915b505050505090506000611cc26120ef565b9050600081511415611cd8578192505050611d1b565b600082511115611d0d578082604051602001611cf5929190612d7e565b60405160208183030381529060405292505050611d1b565b611d1684612106565b925050505b919050565b611d28610c59565b15611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90612f3b565b60405180910390fd5b611d738383836121ad565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dde57506001600a8281548110611dc157611dc06134a6565b5b9060005260206000200154611dd691906131cb565b600b80549050115b15611ef857600a8181548110611df757611df66134a6565b5b906000526020600020015460098190555060096000815480929190611e1b9061339f565b9190505550600954600a8281548110611e3757611e366134a6565b5b9060005260206000200181905550611ef781600b60095481548110611e5f57611e5e6134a6565b5b906000526020600020018054611e749061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea09061333c565b8015611eed5780601f10611ec257610100808354040283529160200191611eed565b820191906000526020600020905b815481529060010190602001808311611ed057829003601f168201915b5050505050611828565b5b505050565b611f0783836121b2565b611f146000848484611f58565b611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90612e7b565b60405180910390fd5b505050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612380565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa261135f565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612dd2565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c91906128d0565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190612e7b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060612111826112f3565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121479061307b565b60405180910390fd5b600061215a6120ef565b9050600081511161217a57604051806020016040528060008152506121a5565b8061218484612393565b604051602001612195929190612d7e565b6040516020818303038152906040525b915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990612fdb565b60405180910390fd5b61222b816112f3565b1561226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290612ebb565b60405180910390fd5b61227760008383611d20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c791906131cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156123db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124ef565b600082905060005b6000821461240d5780806123f69061339f565b915050600a826124069190613221565b91506123e3565b60008167ffffffffffffffff811115612429576124286134d5565b5b6040519080825280601f01601f19166020018201604052801561245b5781602001600182028036833780820191505090505b5090505b600085146124e8576001826124749190613252565b9150600a8561248391906133e8565b603061248f91906131cb565b60f81b8183815181106124a5576124a46134a6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124e19190613221565b945061245f565b8093505050505b919050565b8280546125009061333c565b90600052602060002090601f0160209004810192826125225760008555612569565b82601f1061253b57805160ff1916838001178555612569565b82800160010185558215612569579182015b8281111561256857825182559160200191906001019061254d565b5b509050612576919061257a565b5090565b5b8082111561259357600081600090555060010161257b565b5090565b60006125aa6125a58461311b565b6130f6565b9050828152602081018484840111156125c6576125c5613509565b5b6125d18482856132fa565b509392505050565b60006125ec6125e78461314c565b6130f6565b90508281526020810184848401111561260857612607613509565b5b6126138482856132fa565b509392505050565b60008135905061262a81613a74565b92915050565b60008135905061263f81613a8b565b92915050565b60008135905061265481613aa2565b92915050565b60008151905061266981613aa2565b92915050565b600082601f83011261268457612683613504565b5b8135612694848260208601612597565b91505092915050565b600082601f8301126126b2576126b1613504565b5b81356126c28482602086016125d9565b91505092915050565b6000813590506126da81613ab9565b92915050565b6000602082840312156126f6576126f5613513565b5b60006127048482850161261b565b91505092915050565b6000806040838503121561272457612723613513565b5b60006127328582860161261b565b92505060206127438582860161261b565b9150509250929050565b60008060006060848603121561276657612765613513565b5b60006127748682870161261b565b93505060206127858682870161261b565b9250506040612796868287016126cb565b9150509250925092565b600080600080608085870312156127ba576127b9613513565b5b60006127c88782880161261b565b94505060206127d98782880161261b565b93505060406127ea878288016126cb565b925050606085013567ffffffffffffffff81111561280b5761280a61350e565b5b6128178782880161266f565b91505092959194509250565b6000806040838503121561283a57612839613513565b5b60006128488582860161261b565b925050602061285985828601612630565b9150509250929050565b6000806040838503121561287a57612879613513565b5b60006128888582860161261b565b9250506020612899858286016126cb565b9150509250929050565b6000602082840312156128b9576128b8613513565b5b60006128c784828501612645565b91505092915050565b6000602082840312156128e6576128e5613513565b5b60006128f48482850161265a565b91505092915050565b60006020828403121561291357612912613513565b5b600082013567ffffffffffffffff8111156129315761293061350e565b5b61293d8482850161269d565b91505092915050565b60006020828403121561295c5761295b613513565b5b600061296a848285016126cb565b91505092915050565b6000806040838503121561298a57612989613513565b5b6000612998858286016126cb565b925050602083013567ffffffffffffffff8111156129b9576129b861350e565b5b6129c58582860161269d565b9150509250929050565b6129d881613286565b82525050565b6129e781613298565b82525050565b60006129f88261317d565b612a028185613193565b9350612a12818560208601613309565b612a1b81613518565b840191505092915050565b6000612a3182613188565b612a3b81856131af565b9350612a4b818560208601613309565b612a5481613518565b840191505092915050565b6000612a6a82613188565b612a7481856131c0565b9350612a84818560208601613309565b80840191505092915050565b6000612a9d6014836131af565b9150612aa882613529565b602082019050919050565b6000612ac06032836131af565b9150612acb82613552565b604082019050919050565b6000612ae36026836131af565b9150612aee826135a1565b604082019050919050565b6000612b06601c836131af565b9150612b11826135f0565b602082019050919050565b6000612b296024836131af565b9150612b3482613619565b604082019050919050565b6000612b4c6019836131af565b9150612b5782613668565b602082019050919050565b6000612b6f602c836131af565b9150612b7a82613691565b604082019050919050565b6000612b926010836131af565b9150612b9d826136e0565b602082019050919050565b6000612bb56038836131af565b9150612bc082613709565b604082019050919050565b6000612bd8602a836131af565b9150612be382613758565b604082019050919050565b6000612bfb6029836131af565b9150612c06826137a7565b604082019050919050565b6000612c1e602e836131af565b9150612c29826137f6565b604082019050919050565b6000612c416020836131af565b9150612c4c82613845565b602082019050919050565b6000612c646031836131af565b9150612c6f8261386e565b604082019050919050565b6000612c87602c836131af565b9150612c92826138bd565b604082019050919050565b6000612caa6020836131af565b9150612cb58261390c565b602082019050919050565b6000612ccd6029836131af565b9150612cd882613935565b604082019050919050565b6000612cf0602f836131af565b9150612cfb82613984565b604082019050919050565b6000612d136021836131af565b9150612d1e826139d3565b604082019050919050565b6000612d366000836131a4565b9150612d4182613a22565b600082019050919050565b6000612d596031836131af565b9150612d6482613a25565b604082019050919050565b612d78816132f0565b82525050565b6000612d8a8285612a5f565b9150612d968284612a5f565b91508190509392505050565b6000612dad82612d29565b9150819050919050565b6000602082019050612dcc60008301846129cf565b92915050565b6000608082019050612de760008301876129cf565b612df460208301866129cf565b612e016040830185612d6f565b8181036060830152612e1381846129ed565b905095945050505050565b6000602082019050612e3360008301846129de565b92915050565b60006020820190508181036000830152612e538184612a26565b905092915050565b60006020820190508181036000830152612e7481612a90565b9050919050565b60006020820190508181036000830152612e9481612ab3565b9050919050565b60006020820190508181036000830152612eb481612ad6565b9050919050565b60006020820190508181036000830152612ed481612af9565b9050919050565b60006020820190508181036000830152612ef481612b1c565b9050919050565b60006020820190508181036000830152612f1481612b3f565b9050919050565b60006020820190508181036000830152612f3481612b62565b9050919050565b60006020820190508181036000830152612f5481612b85565b9050919050565b60006020820190508181036000830152612f7481612ba8565b9050919050565b60006020820190508181036000830152612f9481612bcb565b9050919050565b60006020820190508181036000830152612fb481612bee565b9050919050565b60006020820190508181036000830152612fd481612c11565b9050919050565b60006020820190508181036000830152612ff481612c34565b9050919050565b6000602082019050818103600083015261301481612c57565b9050919050565b6000602082019050818103600083015261303481612c7a565b9050919050565b6000602082019050818103600083015261305481612c9d565b9050919050565b6000602082019050818103600083015261307481612cc0565b9050919050565b6000602082019050818103600083015261309481612ce3565b9050919050565b600060208201905081810360008301526130b481612d06565b9050919050565b600060208201905081810360008301526130d481612d4c565b9050919050565b60006020820190506130f06000830184612d6f565b92915050565b6000613100613111565b905061310c828261336e565b919050565b6000604051905090565b600067ffffffffffffffff821115613136576131356134d5565b5b61313f82613518565b9050602081019050919050565b600067ffffffffffffffff821115613167576131666134d5565b5b61317082613518565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131d6826132f0565b91506131e1836132f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321657613215613419565b5b828201905092915050565b600061322c826132f0565b9150613237836132f0565b92508261324757613246613448565b5b828204905092915050565b600061325d826132f0565b9150613268836132f0565b92508282101561327b5761327a613419565b5b828203905092915050565b6000613291826132d0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561332757808201518184015260208101905061330c565b83811115613336576000848401525b50505050565b6000600282049050600182168061335457607f821691505b6020821081141561336857613367613477565b5b50919050565b61337782613518565b810181811067ffffffffffffffff82111715613396576133956134d5565b5b80604052505050565b60006133aa826132f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133dd576133dc613419565b5b600182019050919050565b60006133f3826132f0565b91506133fe836132f0565b92508261340e5761340d613448565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a7d81613286565b8114613a8857600080fd5b50565b613a9481613298565b8114613a9f57600080fd5b50565b613aab816132a4565b8114613ab657600080fd5b50565b613ac2816132f0565b8114613acd57600080fd5b5056fe68747470733a2f2f6c677072686364766166736d6271777366796878346c7a7a7672373667716c666e62646c326973636d35326b35763576356534712e617277656176652e6e65742f575a3854694855425a4d4443306934506669383572485f6a5157566f52723069516d64307274653136546ba26469706673582212202af3b90a2798e2711bdf5e0c5f056061987569f7f3a9ef5b58965c5e6fa3709964736f6c6343000807003368747470733a2f2f79697a6f357a636a6f67636266747a6e6274733534716a676d693763776c776d73756e6372626b32676132727978696b726e6f712e617277656176652e6e65742f776a4c7535456c7868424c504c517a6c336b456d596a34724c73795647696946576a41314846304b69313068747470733a2f2f736d713563636871336a637565336f6968337367676c3467696f6d6770326c616a3670716d653534643732376e7672666d7875612e617277656176652e6e65742f6b7948524350446152554a747944376b59792d475135686e365742506e77595476425f313974596c5a656768747470733a2f2f626b376e71647864726b7577326d3562687177767034716d6c693561767772646662676668786d7a6263617974706f6f6f7863612e617277656176652e6e65742f4372375944754f4b7157307a6f547774565f494d576a6f4b32694d6f544650646d5169426962334f64635168747470733a2f2f6d796f6761646463786179763765363461627472646535356436636c6b6c68366266683473646f6534736b79326a6a69786463712e617277656176652e6e65742f5a68786744474b344d562d543341426e455a4f39483453314c50344a54386b4e784f53566a53556f754d5568747470733a2f2f733737727175666f626c76633334756169736f346378736b707079786e6b756578787435776334746f6e33683563376d746f64712e617277656176652e6e65742f6c5f3859554b344b36693379674553647756354b655f4632716f53393539734c6b334e32666f76736d346368747470733a2f2f666a7278756d37706b6a63363275716d6f707536687a6a77667773656275736476686735727869687134783563736533766a35712e617277656176652e6e65742f4b6d4e364d2d39535265315344485070342d55324c615241306b4f707a646a644234637630556962716e7368747470733a2f2f7471756f7171376e6f6a376f746e37376c6a7567326c746c7572776d766369677a33343278357572656a6375326b3734733233612e617277656176652e6e65742f6e436a6f512d317966756d335f31706f6253357270477a4b6951624f2d6176326b534a46545376386c725968747470733a2f2f65796f72326263646f626270706479726268756e37616a3437736b3736703471786662323532626a766d6771637a6b33767233612e617277656176652e6e65742f4a68306442454e775176655045516e6f333445385f4a585f503543355136376f4b61734e4157566272485968747470733a2f2f377477676176767363656b336b64746879376e6933676862793273716262366e7872767137746778656274356d336f6a636d35712e617277656176652e6e65742f5f4f7867567249524662554f5a3866616a5a6a68787155416838323861775f4d3179426e316d334a457a73

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80636352211e116100de57806395d89b4111610097578063b88d4fde11610071578063b88d4fde14610435578063c87b56dd14610451578063e985e9c514610481578063f2fde38b146104b15761018e565b806395d89b41146103df578063a22cb465146103fd578063b56448d9146104195761018e565b80636352211e1461032f5780636844ecd21461035f57806370a082311461037d578063715018a6146103ad5780638456cb59146103b75780638da5cb5b146103c15761018e565b806323b872dd1161014b5780633f4ba83a116101255780633f4ba83a146102cf57806340d097c3146102d957806342842e0e146102f55780635c975abb146103115761018e565b806323b872dd14610279578063369b95f7146102955780633ccfd60b146102c55761018e565b806301ffc9a714610193578063049f2fe5146101c357806306fdde03146101f3578063081812fc14610211578063095ea7b314610241578063130378291461025d575b600080fd5b6101ad60048036038101906101a891906128a3565b6104cd565b6040516101ba9190612e1e565b60405180910390f35b6101dd60048036038101906101d89190612946565b6105af565b6040516101ea91906130db565b60405180910390f35b6101fb6105d3565b6040516102089190612e39565b60405180910390f35b61022b60048036038101906102269190612946565b610665565b6040516102389190612db7565b60405180910390f35b61025b60048036038101906102569190612863565b6106ea565b005b610277600480360381019061027291906128fd565b610802565b005b610293600480360381019061028e919061274d565b6108bd565b005b6102af60048036038101906102aa9190612946565b61091d565b6040516102bc9190612e39565b60405180910390f35b6102cd6109c9565b005b6102d7610ac5565b005b6102f360048036038101906102ee91906126e0565b610b4b565b005b61030f600480360381019061030a919061274d565b610c39565b005b610319610c59565b6040516103269190612e1e565b60405180910390f35b61034960048036038101906103449190612946565b610c70565b6040516103569190612db7565b60405180910390f35b610367610d22565b60405161037491906130db565b60405180910390f35b610397600480360381019061039291906126e0565b610d28565b6040516103a491906130db565b60405180910390f35b6103b5610de0565b005b6103bf610e68565b005b6103c9610eee565b6040516103d69190612db7565b60405180910390f35b6103e7610f18565b6040516103f49190612e39565b60405180910390f35b61041760048036038101906104129190612823565b610faa565b005b610433600480360381019061042e9190612973565b610fc0565b005b61044f600480360381019061044a91906127a0565b611073565b005b61046b60048036038101906104669190612946565b6110d5565b6040516104789190612e39565b60405180910390f35b61049b6004803603810190610496919061270d565b6110e7565b6040516104a89190612e1e565b60405180910390f35b6104cb60048036038101906104c691906126e0565b61117b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061059857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105a857506105a782611289565b5b9050919050565b600a81815481106105bf57600080fd5b906000526020600020016000915090505481565b6060600080546105e29061333c565b80601f016020809104026020016040519081016040528092919081815260200182805461060e9061333c565b801561065b5780601f106106305761010080835404028352916020019161065b565b820191906000526020600020905b81548152906001019060200180831161063e57829003601f168201915b5050505050905090565b6000610670826112f3565b6106af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a69061301b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106f582610c70565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d9061309b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078561135f565b73ffffffffffffffffffffffffffffffffffffffff1614806107b457506107b3816107ae61135f565b6110e7565b5b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90612f5b565b60405180910390fd5b6107fd8383611367565b505050565b61080a61135f565b73ffffffffffffffffffffffffffffffffffffffff16610828610eee565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108759061303b565b60405180910390fd5b600b819080600181540180825580915050600190039060005260206000200160009091909190915090805190602001906108b99291906124f4565b5050565b6108ce6108c861135f565b82611420565b61090d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610904906130bb565b60405180910390fd5b6109188383836114fe565b505050565b600b818154811061092d57600080fd5b9060005260206000200160009150905080546109489061333c565b80601f01602080910402602001604051908101604052809291908181526020018280546109749061333c565b80156109c15780601f10610996576101008083540402835291602001916109c1565b820191906000526020600020905b8154815290600101906020018083116109a457829003601f168201915b505050505081565b6109d161135f565b73ffffffffffffffffffffffffffffffffffffffff166109ef610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c9061303b565b60405180910390fd5b6000610a4f610eee565b73ffffffffffffffffffffffffffffffffffffffff1647604051610a7290612da2565b60006040518083038185875af1925050503d8060008114610aaf576040519150601f19603f3d011682016040523d82523d6000602084013e610ab4565b606091505b5050905080610ac257600080fd5b50565b610acd61135f565b73ffffffffffffffffffffffffffffffffffffffff16610aeb610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b389061303b565b60405180910390fd5b610b4961175a565b565b610b5361135f565b73ffffffffffffffffffffffffffffffffffffffff16610b71610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe9061303b565b60405180910390fd5b6000610bd360086117fc565b9050610bdf6008611273565b610be9828261180a565b610c0b816040518060a0016040528060748152602001613ad160749139611828565b600a600090806001815401808255809150506001900390600052602060002001600090919091909150555050565b610c5483838360405180602001604052806000815250611073565b505050565b6000600760009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090612f9b565b60405180910390fd5b80915050919050565b60095481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090612f7b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de861135f565b73ffffffffffffffffffffffffffffffffffffffff16610e06610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e539061303b565b60405180910390fd5b610e66600061189c565b565b610e7061135f565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610eee565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061303b565b60405180910390fd5b610eec611962565b565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f279061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f539061333c565b8015610fa05780601f10610f7557610100808354040283529160200191610fa0565b820191906000526020600020905b815481529060010190602001808311610f8357829003601f168201915b5050505050905090565b610fbc610fb561135f565b8383611a05565b5050565b610fc861135f565b73ffffffffffffffffffffffffffffffffffffffff16610fe6610eee565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110339061303b565b60405180910390fd5b80600b8381548110611051576110506134a6565b5b90600052602060002001908051906020019061106e9291906124f4565b505050565b61108461107e61135f565b83611420565b6110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba906130bb565b60405180910390fd5b6110cf84848484611b72565b50505050565b60606110e082611bce565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61118361135f565b73ffffffffffffffffffffffffffffffffffffffff166111a1610eee565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061303b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612e9b565b60405180910390fd5b6112708161189c565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113da83610c70565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061142b826112f3565b61146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190612f1b565b60405180910390fd5b600061147583610c70565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114e457508373ffffffffffffffffffffffffffffffffffffffff166114cc84610665565b73ffffffffffffffffffffffffffffffffffffffff16145b806114f557506114f481856110e7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661151e82610c70565b73ffffffffffffffffffffffffffffffffffffffff1614611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b9061305b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612edb565b60405180910390fd5b6115ef838383611d20565b6115fa600082611367565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164a9190613252565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a191906131cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611762610c59565b6117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890612e5b565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117e561135f565b6040516117f29190612db7565b60405180910390a1565b600081600001549050919050565b611824828260405180602001604052806000815250611efd565b5050565b611831826112f3565b611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790612fbb565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906118979291906124f4565b505050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61196a610c59565b156119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190612f3b565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119ee61135f565b6040516119fb9190612db7565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90612efb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b659190612e1e565b60405180910390a3505050565b611b7d8484846114fe565b611b8984848484611f58565b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90612e7b565b60405180910390fd5b50505050565b6060611bd9826112f3565b611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90612ffb565b60405180910390fd5b6000600660008481526020019081526020016000208054611c389061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c649061333c565b8015611cb15780601f10611c8657610100808354040283529160200191611cb1565b820191906000526020600020905b815481529060010190602001808311611c9457829003601f168201915b505050505090506000611cc26120ef565b9050600081511415611cd8578192505050611d1b565b600082511115611d0d578082604051602001611cf5929190612d7e565b60405160208183030381529060405292505050611d1b565b611d1684612106565b925050505b919050565b611d28610c59565b15611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f90612f3b565b60405180910390fd5b611d738383836121ad565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dde57506001600a8281548110611dc157611dc06134a6565b5b9060005260206000200154611dd691906131cb565b600b80549050115b15611ef857600a8181548110611df757611df66134a6565b5b906000526020600020015460098190555060096000815480929190611e1b9061339f565b9190505550600954600a8281548110611e3757611e366134a6565b5b9060005260206000200181905550611ef781600b60095481548110611e5f57611e5e6134a6565b5b906000526020600020018054611e749061333c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea09061333c565b8015611eed5780601f10611ec257610100808354040283529160200191611eed565b820191906000526020600020905b815481529060010190602001808311611ed057829003601f168201915b5050505050611828565b5b505050565b611f0783836121b2565b611f146000848484611f58565b611f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4a90612e7b565b60405180910390fd5b505050565b6000611f798473ffffffffffffffffffffffffffffffffffffffff16612380565b156120e2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fa261135f565b8786866040518563ffffffff1660e01b8152600401611fc49493929190612dd2565b602060405180830381600087803b158015611fde57600080fd5b505af192505050801561200f57506040513d601f19601f8201168201806040525081019061200c91906128d0565b60015b612092573d806000811461203f576040519150601f19603f3d011682016040523d82523d6000602084013e612044565b606091505b5060008151141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190612e7b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120e7565b600190505b949350505050565b606060405180602001604052806000815250905090565b6060612111826112f3565b612150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121479061307b565b60405180910390fd5b600061215a6120ef565b9050600081511161217a57604051806020016040528060008152506121a5565b8061218484612393565b604051602001612195929190612d7e565b6040516020818303038152906040525b915050919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990612fdb565b60405180910390fd5b61222b816112f3565b1561226b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226290612ebb565b60405180910390fd5b61227760008383611d20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122c791906131cb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156123db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124ef565b600082905060005b6000821461240d5780806123f69061339f565b915050600a826124069190613221565b91506123e3565b60008167ffffffffffffffff811115612429576124286134d5565b5b6040519080825280601f01601f19166020018201604052801561245b5781602001600182028036833780820191505090505b5090505b600085146124e8576001826124749190613252565b9150600a8561248391906133e8565b603061248f91906131cb565b60f81b8183815181106124a5576124a46134a6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124e19190613221565b945061245f565b8093505050505b919050565b8280546125009061333c565b90600052602060002090601f0160209004810192826125225760008555612569565b82601f1061253b57805160ff1916838001178555612569565b82800160010185558215612569579182015b8281111561256857825182559160200191906001019061254d565b5b509050612576919061257a565b5090565b5b8082111561259357600081600090555060010161257b565b5090565b60006125aa6125a58461311b565b6130f6565b9050828152602081018484840111156125c6576125c5613509565b5b6125d18482856132fa565b509392505050565b60006125ec6125e78461314c565b6130f6565b90508281526020810184848401111561260857612607613509565b5b6126138482856132fa565b509392505050565b60008135905061262a81613a74565b92915050565b60008135905061263f81613a8b565b92915050565b60008135905061265481613aa2565b92915050565b60008151905061266981613aa2565b92915050565b600082601f83011261268457612683613504565b5b8135612694848260208601612597565b91505092915050565b600082601f8301126126b2576126b1613504565b5b81356126c28482602086016125d9565b91505092915050565b6000813590506126da81613ab9565b92915050565b6000602082840312156126f6576126f5613513565b5b60006127048482850161261b565b91505092915050565b6000806040838503121561272457612723613513565b5b60006127328582860161261b565b92505060206127438582860161261b565b9150509250929050565b60008060006060848603121561276657612765613513565b5b60006127748682870161261b565b93505060206127858682870161261b565b9250506040612796868287016126cb565b9150509250925092565b600080600080608085870312156127ba576127b9613513565b5b60006127c88782880161261b565b94505060206127d98782880161261b565b93505060406127ea878288016126cb565b925050606085013567ffffffffffffffff81111561280b5761280a61350e565b5b6128178782880161266f565b91505092959194509250565b6000806040838503121561283a57612839613513565b5b60006128488582860161261b565b925050602061285985828601612630565b9150509250929050565b6000806040838503121561287a57612879613513565b5b60006128888582860161261b565b9250506020612899858286016126cb565b9150509250929050565b6000602082840312156128b9576128b8613513565b5b60006128c784828501612645565b91505092915050565b6000602082840312156128e6576128e5613513565b5b60006128f48482850161265a565b91505092915050565b60006020828403121561291357612912613513565b5b600082013567ffffffffffffffff8111156129315761293061350e565b5b61293d8482850161269d565b91505092915050565b60006020828403121561295c5761295b613513565b5b600061296a848285016126cb565b91505092915050565b6000806040838503121561298a57612989613513565b5b6000612998858286016126cb565b925050602083013567ffffffffffffffff8111156129b9576129b861350e565b5b6129c58582860161269d565b9150509250929050565b6129d881613286565b82525050565b6129e781613298565b82525050565b60006129f88261317d565b612a028185613193565b9350612a12818560208601613309565b612a1b81613518565b840191505092915050565b6000612a3182613188565b612a3b81856131af565b9350612a4b818560208601613309565b612a5481613518565b840191505092915050565b6000612a6a82613188565b612a7481856131c0565b9350612a84818560208601613309565b80840191505092915050565b6000612a9d6014836131af565b9150612aa882613529565b602082019050919050565b6000612ac06032836131af565b9150612acb82613552565b604082019050919050565b6000612ae36026836131af565b9150612aee826135a1565b604082019050919050565b6000612b06601c836131af565b9150612b11826135f0565b602082019050919050565b6000612b296024836131af565b9150612b3482613619565b604082019050919050565b6000612b4c6019836131af565b9150612b5782613668565b602082019050919050565b6000612b6f602c836131af565b9150612b7a82613691565b604082019050919050565b6000612b926010836131af565b9150612b9d826136e0565b602082019050919050565b6000612bb56038836131af565b9150612bc082613709565b604082019050919050565b6000612bd8602a836131af565b9150612be382613758565b604082019050919050565b6000612bfb6029836131af565b9150612c06826137a7565b604082019050919050565b6000612c1e602e836131af565b9150612c29826137f6565b604082019050919050565b6000612c416020836131af565b9150612c4c82613845565b602082019050919050565b6000612c646031836131af565b9150612c6f8261386e565b604082019050919050565b6000612c87602c836131af565b9150612c92826138bd565b604082019050919050565b6000612caa6020836131af565b9150612cb58261390c565b602082019050919050565b6000612ccd6029836131af565b9150612cd882613935565b604082019050919050565b6000612cf0602f836131af565b9150612cfb82613984565b604082019050919050565b6000612d136021836131af565b9150612d1e826139d3565b604082019050919050565b6000612d366000836131a4565b9150612d4182613a22565b600082019050919050565b6000612d596031836131af565b9150612d6482613a25565b604082019050919050565b612d78816132f0565b82525050565b6000612d8a8285612a5f565b9150612d968284612a5f565b91508190509392505050565b6000612dad82612d29565b9150819050919050565b6000602082019050612dcc60008301846129cf565b92915050565b6000608082019050612de760008301876129cf565b612df460208301866129cf565b612e016040830185612d6f565b8181036060830152612e1381846129ed565b905095945050505050565b6000602082019050612e3360008301846129de565b92915050565b60006020820190508181036000830152612e538184612a26565b905092915050565b60006020820190508181036000830152612e7481612a90565b9050919050565b60006020820190508181036000830152612e9481612ab3565b9050919050565b60006020820190508181036000830152612eb481612ad6565b9050919050565b60006020820190508181036000830152612ed481612af9565b9050919050565b60006020820190508181036000830152612ef481612b1c565b9050919050565b60006020820190508181036000830152612f1481612b3f565b9050919050565b60006020820190508181036000830152612f3481612b62565b9050919050565b60006020820190508181036000830152612f5481612b85565b9050919050565b60006020820190508181036000830152612f7481612ba8565b9050919050565b60006020820190508181036000830152612f9481612bcb565b9050919050565b60006020820190508181036000830152612fb481612bee565b9050919050565b60006020820190508181036000830152612fd481612c11565b9050919050565b60006020820190508181036000830152612ff481612c34565b9050919050565b6000602082019050818103600083015261301481612c57565b9050919050565b6000602082019050818103600083015261303481612c7a565b9050919050565b6000602082019050818103600083015261305481612c9d565b9050919050565b6000602082019050818103600083015261307481612cc0565b9050919050565b6000602082019050818103600083015261309481612ce3565b9050919050565b600060208201905081810360008301526130b481612d06565b9050919050565b600060208201905081810360008301526130d481612d4c565b9050919050565b60006020820190506130f06000830184612d6f565b92915050565b6000613100613111565b905061310c828261336e565b919050565b6000604051905090565b600067ffffffffffffffff821115613136576131356134d5565b5b61313f82613518565b9050602081019050919050565b600067ffffffffffffffff821115613167576131666134d5565b5b61317082613518565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006131d6826132f0565b91506131e1836132f0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321657613215613419565b5b828201905092915050565b600061322c826132f0565b9150613237836132f0565b92508261324757613246613448565b5b828204905092915050565b600061325d826132f0565b9150613268836132f0565b92508282101561327b5761327a613419565b5b828203905092915050565b6000613291826132d0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561332757808201518184015260208101905061330c565b83811115613336576000848401525b50505050565b6000600282049050600182168061335457607f821691505b6020821081141561336857613367613477565b5b50919050565b61337782613518565b810181811067ffffffffffffffff82111715613396576133956134d5565b5b80604052505050565b60006133aa826132f0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133dd576133dc613419565b5b600182019050919050565b60006133f3826132f0565b91506133fe836132f0565b92508261340e5761340d613448565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a7d81613286565b8114613a8857600080fd5b50565b613a9481613298565b8114613a9f57600080fd5b50565b613aab816132a4565b8114613ab657600080fd5b50565b613ac2816132f0565b8114613acd57600080fd5b5056fe68747470733a2f2f6c677072686364766166736d6271777366796878346c7a7a7672373667716c666e62646c326973636d35326b35763576356534712e617277656176652e6e65742f575a3854694855425a4d4443306934506669383572485f6a5157566f52723069516d64307274653136546ba26469706673582212202af3b90a2798e2711bdf5e0c5f056061987569f7f3a9ef5b58965c5e6fa3709964736f6c63430008070033

Deployed Bytecode Sourcemap

47117:3555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32594:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47310:25;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33539:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35098:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34621:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48860:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35848:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47344:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49678:147;;;:::i;:::-;;49035:65;;;:::i;:::-;;49108:414;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36258:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13171:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33233:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47280:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32963:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11216:103;;;:::i;:::-;;48966:61;;;:::i;:::-;;10565:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33708:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35391:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49530:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36514:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50473:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35617:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11474:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32594:305;32696:4;32748:25;32733:40;;;:11;:40;;;;:105;;;;32805:33;32790:48;;;:11;:48;;;;32733:105;:158;;;;32855:36;32879:11;32855:23;:36::i;:::-;32733:158;32713:178;;32594:305;;;:::o;47310:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33539:100::-;33593:13;33626:5;33619:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33539:100;:::o;35098:221::-;35174:7;35202:16;35210:7;35202;:16::i;:::-;35194:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35287:15;:24;35303:7;35287:24;;;;;;;;;;;;;;;;;;;;;35280:31;;35098:221;;;:::o;34621:411::-;34702:13;34718:23;34733:7;34718:14;:23::i;:::-;34702:39;;34766:5;34760:11;;:2;:11;;;;34752:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34860:5;34844:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34869:37;34886:5;34893:12;:10;:12::i;:::-;34869:16;:37::i;:::-;34844:62;34822:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;35003:21;35012:2;35016:7;35003:8;:21::i;:::-;34691:341;34621:411;;:::o;48860:98::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48930:7:::1;48943:6;48930:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48860:98:::0;:::o;35848:339::-;36043:41;36062:12;:10;:12::i;:::-;36076:7;36043:18;:41::i;:::-;36035:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36151:28;36161:4;36167:2;36171:7;36151:9;:28::i;:::-;35848:339;;;:::o;47344:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49678:147::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49727:7:::1;49748;:5;:7::i;:::-;49740:21;;49769;49740:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49726:69;;;49814:2;49806:11;;;::::0;::::1;;49715:110;49678:147::o:0;49035:65::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49082:10:::1;:8;:10::i;:::-;49035:65::o:0;49108:414::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49193:15:::1;49211:25;:15;:23;:25::i;:::-;49193:43;;49251:27;:15;:25;:27::i;:::-;49293:22;49303:2;49307:7;49293:9;:22::i;:::-;49330:141;49343:7;49330:141;;;;;;;;;;;;;;;;;:12;:141::i;:::-;49486:8;49500:1;49486:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49155:367;49108:414:::0;:::o;36258:185::-;36396:39;36413:4;36419:2;36423:7;36396:39;;;;;;;;;;;;:16;:39::i;:::-;36258:185;;;:::o;13171:86::-;13218:4;13242:7;;;;;;;;;;;13235:14;;13171:86;:::o;33233:239::-;33305:7;33325:13;33341:7;:16;33349:7;33341:16;;;;;;;;;;;;;;;;;;;;;33325:32;;33393:1;33376:19;;:5;:19;;;;33368:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33459:5;33452:12;;;33233:239;;;:::o;47280:23::-;;;;:::o;32963:208::-;33035:7;33080:1;33063:19;;:5;:19;;;;33055:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33147:9;:16;33157:5;33147:16;;;;;;;;;;;;;;;;33140:23;;32963:208;;;:::o;11216:103::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11281:30:::1;11308:1;11281:18;:30::i;:::-;11216:103::o:0;48966:61::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49011:8:::1;:6;:8::i;:::-;48966:61::o:0;10565:87::-;10611:7;10638:6;;;;;;;;;;;10631:13;;10565:87;:::o;33708:104::-;33764:13;33797:7;33790:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33708:104;:::o;35391:155::-;35486:52;35505:12;:10;:12::i;:::-;35519:8;35529;35486:18;:52::i;:::-;35391:155;;:::o;49530:138::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49650:10:::1;49626:7;49634:12;49626:21;;;;;;;;:::i;:::-;;;;;;;;;:34;;;;;;;;;;;;:::i;:::-;;49530:138:::0;;:::o;36514:328::-;36689:41;36708:12;:10;:12::i;:::-;36722:7;36689:18;:41::i;:::-;36681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;36795:39;36809:4;36815:2;36819:7;36828:5;36795:13;:39::i;:::-;36514:328;;;;:::o;50473:196::-;50600:13;50638:23;50653:7;50638:14;:23::i;:::-;50631:30;;50473:196;;;:::o;35617:164::-;35714:4;35738:18;:25;35757:5;35738:25;;;;;;;;;;;;;;;:35;35764:8;35738:35;;;;;;;;;;;;;;;;;;;;;;;;;35731:42;;35617:164;;;;:::o;11474:201::-;10796:12;:10;:12::i;:::-;10785:23;;:7;:5;:7::i;:::-;:23;;;10777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11583:1:::1;11563:22;;:8;:22;;;;11555:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11639:28;11658:8;11639:18;:28::i;:::-;11474:201:::0;:::o;5997:127::-;6104:1;6086:7;:14;;;:19;;;;;;;;;;;5997:127;:::o;25345:157::-;25430:4;25469:25;25454:40;;;:11;:40;;;;25447:47;;25345:157;;;:::o;38352:127::-;38417:4;38469:1;38441:30;;:7;:16;38449:7;38441:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38434:37;;38352:127;;;:::o;9283:98::-;9336:7;9363:10;9356:17;;9283:98;:::o;42334:174::-;42436:2;42409:15;:24;42425:7;42409:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42492:7;42488:2;42454:46;;42463:23;42478:7;42463:14;:23::i;:::-;42454:46;;;;;;;;;;;;42334:174;;:::o;38646:348::-;38739:4;38764:16;38772:7;38764;:16::i;:::-;38756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:13;38856:23;38871:7;38856:14;:23::i;:::-;38840:39;;38909:5;38898:16;;:7;:16;;;:51;;;;38942:7;38918:31;;:20;38930:7;38918:11;:20::i;:::-;:31;;;38898:51;:87;;;;38953:32;38970:5;38977:7;38953:16;:32::i;:::-;38898:87;38890:96;;;38646:348;;;;:::o;41638:578::-;41797:4;41770:31;;:23;41785:7;41770:14;:23::i;:::-;:31;;;41762:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41880:1;41866:16;;:2;:16;;;;41858:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41936:39;41957:4;41963:2;41967:7;41936:20;:39::i;:::-;42040:29;42057:1;42061:7;42040:8;:29::i;:::-;42101:1;42082:9;:15;42092:4;42082:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42130:1;42113:9;:13;42123:2;42113:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42161:2;42142:7;:16;42150:7;42142:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42200:7;42196:2;42181:27;;42190:4;42181:27;;;;;;;;;;;;41638:578;;;:::o;14230:120::-;13774:8;:6;:8::i;:::-;13766:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;14299:5:::1;14289:7;;:15;;;;;;;;;;;;;;;;;;14320:22;14329:12;:10;:12::i;:::-;14320:22;;;;;;:::i;:::-;;;;;;;;14230:120::o:0;5875:114::-;5940:7;5967;:14;;;5960:21;;5875:114;;;:::o;39336:110::-;39412:26;39422:2;39426:7;39412:26;;;;;;;;;;;;:9;:26::i;:::-;39336:110;;:::o;46386:217::-;46486:16;46494:7;46486;:16::i;:::-;46478:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46586:9;46564:10;:19;46575:7;46564:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;46386:217;;:::o;11835:191::-;11909:16;11928:6;;;;;;;;;;;11909:25;;11954:8;11945:6;;:17;;;;;;;;;;;;;;;;;;12009:8;11978:40;;11999:8;11978:40;;;;;;;;;;;;11898:128;11835:191;:::o;13971:118::-;13497:8;:6;:8::i;:::-;13496:9;13488:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14041:4:::1;14031:7;;:14;;;;;;;;;;;;;;;;;;14061:20;14068:12;:10;:12::i;:::-;14061:20;;;;;;:::i;:::-;;;;;;;;13971:118::o:0;42650:315::-;42805:8;42796:17;;:5;:17;;;;42788:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42892:8;42854:18;:25;42873:5;42854:25;;;;;;;;;;;;;;;:35;42880:8;42854:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42938:8;42916:41;;42931:5;42916:41;;;42948:8;42916:41;;;;;;:::i;:::-;;;;;;;;42650:315;;;:::o;37724:::-;37881:28;37891:4;37897:2;37901:7;37881:9;:28::i;:::-;37928:48;37951:4;37957:2;37961:7;37970:5;37928:22;:48::i;:::-;37920:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;37724:315;;;;:::o;45551:679::-;45624:13;45658:16;45666:7;45658;:16::i;:::-;45650:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45741:23;45767:10;:19;45778:7;45767:19;;;;;;;;;;;45741:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45797:18;45818:10;:8;:10::i;:::-;45797:31;;45926:1;45910:4;45904:18;:23;45900:72;;;45951:9;45944:16;;;;;;45900:72;46102:1;46082:9;46076:23;:27;46072:108;;;46151:4;46157:9;46134:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46120:48;;;;;;46072:108;46199:23;46214:7;46199:14;:23::i;:::-;46192:30;;;;45551:679;;;;:::o;49835:507::-;13497:8;:6;:8::i;:::-;13496:9;13488:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49983:45:::1;50010:4;50016:2;50020:7;49983:26;:45::i;:::-;50063:1;50047:18;;:4;:18;;;;:60;;;;;50106:1;50086:8;50095:7;50086:17;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;:::i;:::-;50069:7;:14;;;;:38;50047:60;50043:276;;;50142:8;50151:7;50142:17;;;;;;;;:::i;:::-;;;;;;;;;;50128:11;:31;;;;50178:11;;:13;;;;;;;;;:::i;:::-;;;;;;50230:11;;50210:8;50219:7;50210:17;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;50260:43;50273:7;50282;50290:11;;50282:20;;;;;;;;:::i;:::-;;;;;;;;;50260:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:43::i;:::-;50043:276;49835:507:::0;;;:::o;39673:321::-;39803:18;39809:2;39813:7;39803:5;:18::i;:::-;39854:54;39885:1;39889:2;39893:7;39902:5;39854:22;:54::i;:::-;39832:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;39673:321;;;:::o;43530:799::-;43685:4;43706:15;:2;:13;;;:15::i;:::-;43702:620;;;43758:2;43742:36;;;43779:12;:10;:12::i;:::-;43793:4;43799:7;43808:5;43742:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43738:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44001:1;43984:6;:13;:18;43980:272;;;44027:60;;;;;;;;;;:::i;:::-;;;;;;;;43980:272;44202:6;44196:13;44187:6;44183:2;44179:15;44172:38;43738:529;43875:41;;;43865:51;;;:6;:51;;;;43858:58;;;;;43702:620;44306:4;44299:11;;43530:799;;;;;;;:::o;34465:94::-;34516:13;34542:9;;;;;;;;;;;;;;34465:94;:::o;33883:334::-;33956:13;33990:16;33998:7;33990;:16::i;:::-;33982:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34071:21;34095:10;:8;:10::i;:::-;34071:34;;34147:1;34129:7;34123:21;:25;:86;;;;;;;;;;;;;;;;;34175:7;34184:18;:7;:16;:18::i;:::-;34158:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34123:86;34116:93;;;33883:334;;;:::o;44901:126::-;;;;:::o;40330:382::-;40424:1;40410:16;;:2;:16;;;;40402:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40483:16;40491:7;40483;:16::i;:::-;40482:17;40474:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40545:45;40574:1;40578:2;40582:7;40545:20;:45::i;:::-;40620:1;40603:9;:13;40613:2;40603:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40651:2;40632:7;:16;40640:7;40632:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40696:7;40692:2;40671:33;;40688:1;40671:33;;;;;;;;;;;;40330:382;;:::o;15183:387::-;15243:4;15451:12;15518:7;15506:20;15498:28;;15561:1;15554:4;:8;15547:15;;;15183:387;;;:::o;6839:723::-;6895:13;7125:1;7116:5;:10;7112:53;;;7143:10;;;;;;;;;;;;;;;;;;;;;7112:53;7175:12;7190:5;7175:20;;7206:14;7231:78;7246:1;7238:4;:9;7231:78;;7264:8;;;;;:::i;:::-;;;;7295:2;7287:10;;;;;:::i;:::-;;;7231:78;;;7319:19;7351:6;7341:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7319:39;;7369:154;7385:1;7376:5;:10;7369:154;;7413:1;7403:11;;;;;:::i;:::-;;;7480:2;7472:5;:10;;;;:::i;:::-;7459:2;:24;;;;:::i;:::-;7446:39;;7429:6;7436;7429:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7509:2;7500:11;;;;;:::i;:::-;;;7369:154;;;7547:6;7533:21;;;;;6839:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:654::-;7236:6;7244;7293:2;7281:9;7272:7;7268:23;7264:32;7261:119;;;7299:79;;:::i;:::-;7261:119;7419:1;7444:53;7489:7;7480:6;7469:9;7465:22;7444:53;:::i;:::-;7434:63;;7390:117;7574:2;7563:9;7559:18;7546:32;7605:18;7597:6;7594:30;7591:117;;;7627:79;;:::i;:::-;7591:117;7732:63;7787:7;7778:6;7767:9;7763:22;7732:63;:::i;:::-;7722:73;;7517:288;7158:654;;;;;:::o;7818:118::-;7905:24;7923:5;7905:24;:::i;:::-;7900:3;7893:37;7818:118;;:::o;7942:109::-;8023:21;8038:5;8023:21;:::i;:::-;8018:3;8011:34;7942:109;;:::o;8057:360::-;8143:3;8171:38;8203:5;8171:38;:::i;:::-;8225:70;8288:6;8283:3;8225:70;:::i;:::-;8218:77;;8304:52;8349:6;8344:3;8337:4;8330:5;8326:16;8304:52;:::i;:::-;8381:29;8403:6;8381:29;:::i;:::-;8376:3;8372:39;8365:46;;8147:270;8057:360;;;;:::o;8423:364::-;8511:3;8539:39;8572:5;8539:39;:::i;:::-;8594:71;8658:6;8653:3;8594:71;:::i;:::-;8587:78;;8674:52;8719:6;8714:3;8707:4;8700:5;8696:16;8674:52;:::i;:::-;8751:29;8773:6;8751:29;:::i;:::-;8746:3;8742:39;8735:46;;8515:272;8423:364;;;;:::o;8793:377::-;8899:3;8927:39;8960:5;8927:39;:::i;:::-;8982:89;9064:6;9059:3;8982:89;:::i;:::-;8975:96;;9080:52;9125:6;9120:3;9113:4;9106:5;9102:16;9080:52;:::i;:::-;9157:6;9152:3;9148:16;9141:23;;8903:267;8793:377;;;;:::o;9176:366::-;9318:3;9339:67;9403:2;9398:3;9339:67;:::i;:::-;9332:74;;9415:93;9504:3;9415:93;:::i;:::-;9533:2;9528:3;9524:12;9517:19;;9176:366;;;:::o;9548:::-;9690:3;9711:67;9775:2;9770:3;9711:67;:::i;:::-;9704:74;;9787:93;9876:3;9787:93;:::i;:::-;9905:2;9900:3;9896:12;9889:19;;9548:366;;;:::o;9920:::-;10062:3;10083:67;10147:2;10142:3;10083:67;:::i;:::-;10076:74;;10159:93;10248:3;10159:93;:::i;:::-;10277:2;10272:3;10268:12;10261:19;;9920:366;;;:::o;10292:::-;10434:3;10455:67;10519:2;10514:3;10455:67;:::i;:::-;10448:74;;10531:93;10620:3;10531:93;:::i;:::-;10649:2;10644:3;10640:12;10633:19;;10292:366;;;:::o;10664:::-;10806:3;10827:67;10891:2;10886:3;10827:67;:::i;:::-;10820:74;;10903:93;10992:3;10903:93;:::i;:::-;11021:2;11016:3;11012:12;11005:19;;10664:366;;;:::o;11036:::-;11178:3;11199:67;11263:2;11258:3;11199:67;:::i;:::-;11192:74;;11275:93;11364:3;11275:93;:::i;:::-;11393:2;11388:3;11384:12;11377:19;;11036:366;;;:::o;11408:::-;11550:3;11571:67;11635:2;11630:3;11571:67;:::i;:::-;11564:74;;11647:93;11736:3;11647:93;:::i;:::-;11765:2;11760:3;11756:12;11749:19;;11408:366;;;:::o;11780:::-;11922:3;11943:67;12007:2;12002:3;11943:67;:::i;:::-;11936:74;;12019:93;12108:3;12019:93;:::i;:::-;12137:2;12132:3;12128:12;12121:19;;11780:366;;;:::o;12152:::-;12294:3;12315:67;12379:2;12374:3;12315:67;:::i;:::-;12308:74;;12391:93;12480:3;12391:93;:::i;:::-;12509:2;12504:3;12500:12;12493:19;;12152:366;;;:::o;12524:::-;12666:3;12687:67;12751:2;12746:3;12687:67;:::i;:::-;12680:74;;12763:93;12852:3;12763:93;:::i;:::-;12881:2;12876:3;12872:12;12865:19;;12524:366;;;:::o;12896:::-;13038:3;13059:67;13123:2;13118:3;13059:67;:::i;:::-;13052:74;;13135:93;13224:3;13135:93;:::i;:::-;13253:2;13248:3;13244:12;13237:19;;12896:366;;;:::o;13268:::-;13410:3;13431:67;13495:2;13490:3;13431:67;:::i;:::-;13424:74;;13507:93;13596:3;13507:93;:::i;:::-;13625:2;13620:3;13616:12;13609:19;;13268:366;;;:::o;13640:::-;13782:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13879:93;13968:3;13879:93;:::i;:::-;13997:2;13992:3;13988:12;13981:19;;13640:366;;;:::o;14012:::-;14154:3;14175:67;14239:2;14234:3;14175:67;:::i;:::-;14168:74;;14251:93;14340:3;14251:93;:::i;:::-;14369:2;14364:3;14360:12;14353:19;;14012:366;;;:::o;14384:::-;14526:3;14547:67;14611:2;14606:3;14547:67;:::i;:::-;14540:74;;14623:93;14712:3;14623:93;:::i;:::-;14741:2;14736:3;14732:12;14725:19;;14384:366;;;:::o;14756:::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:::-;15270:3;15291:67;15355:2;15350:3;15291:67;:::i;:::-;15284:74;;15367:93;15456:3;15367:93;:::i;:::-;15485:2;15480:3;15476:12;15469:19;;15128:366;;;:::o;15500:::-;15642:3;15663:67;15727:2;15722:3;15663:67;:::i;:::-;15656:74;;15739:93;15828:3;15739:93;:::i;:::-;15857:2;15852:3;15848:12;15841:19;;15500:366;;;:::o;15872:::-;16014:3;16035:67;16099:2;16094:3;16035:67;:::i;:::-;16028:74;;16111:93;16200:3;16111:93;:::i;:::-;16229:2;16224:3;16220:12;16213:19;;15872:366;;;:::o;16244:398::-;16403:3;16424:83;16505:1;16500:3;16424:83;:::i;:::-;16417:90;;16516:93;16605:3;16516:93;:::i;:::-;16634:1;16629:3;16625:11;16618:18;;16244:398;;;:::o;16648:366::-;16790:3;16811:67;16875:2;16870:3;16811:67;:::i;:::-;16804:74;;16887:93;16976:3;16887:93;:::i;:::-;17005:2;17000:3;16996:12;16989:19;;16648:366;;;:::o;17020:118::-;17107:24;17125:5;17107:24;:::i;:::-;17102:3;17095:37;17020:118;;:::o;17144:435::-;17324:3;17346:95;17437:3;17428:6;17346:95;:::i;:::-;17339:102;;17458:95;17549:3;17540:6;17458:95;:::i;:::-;17451:102;;17570:3;17563:10;;17144:435;;;;;:::o;17585:379::-;17769:3;17791:147;17934:3;17791:147;:::i;:::-;17784:154;;17955:3;17948:10;;17585:379;;;:::o;17970:222::-;18063:4;18101:2;18090:9;18086:18;18078:26;;18114:71;18182:1;18171:9;18167:17;18158:6;18114:71;:::i;:::-;17970:222;;;;:::o;18198:640::-;18393:4;18431:3;18420:9;18416:19;18408:27;;18445:71;18513:1;18502:9;18498:17;18489:6;18445:71;:::i;:::-;18526:72;18594:2;18583:9;18579:18;18570:6;18526:72;:::i;:::-;18608;18676:2;18665:9;18661:18;18652:6;18608:72;:::i;:::-;18727:9;18721:4;18717:20;18712:2;18701:9;18697:18;18690:48;18755:76;18826:4;18817:6;18755:76;:::i;:::-;18747:84;;18198:640;;;;;;;:::o;18844:210::-;18931:4;18969:2;18958:9;18954:18;18946:26;;18982:65;19044:1;19033:9;19029:17;19020:6;18982:65;:::i;:::-;18844:210;;;;:::o;19060:313::-;19173:4;19211:2;19200:9;19196:18;19188:26;;19260:9;19254:4;19250:20;19246:1;19235:9;19231:17;19224:47;19288:78;19361:4;19352:6;19288:78;:::i;:::-;19280:86;;19060:313;;;;:::o;19379:419::-;19545:4;19583:2;19572:9;19568:18;19560:26;;19632:9;19626:4;19622:20;19618:1;19607:9;19603:17;19596:47;19660:131;19786:4;19660:131;:::i;:::-;19652:139;;19379:419;;;:::o;19804:::-;19970:4;20008:2;19997:9;19993:18;19985:26;;20057:9;20051:4;20047:20;20043:1;20032:9;20028:17;20021:47;20085:131;20211:4;20085:131;:::i;:::-;20077:139;;19804:419;;;:::o;20229:::-;20395:4;20433:2;20422:9;20418:18;20410:26;;20482:9;20476:4;20472:20;20468:1;20457:9;20453:17;20446:47;20510:131;20636:4;20510:131;:::i;:::-;20502:139;;20229:419;;;:::o;20654:::-;20820:4;20858:2;20847:9;20843:18;20835:26;;20907:9;20901:4;20897:20;20893:1;20882:9;20878:17;20871:47;20935:131;21061:4;20935:131;:::i;:::-;20927:139;;20654:419;;;:::o;21079:::-;21245:4;21283:2;21272:9;21268:18;21260:26;;21332:9;21326:4;21322:20;21318:1;21307:9;21303:17;21296:47;21360:131;21486:4;21360:131;:::i;:::-;21352:139;;21079:419;;;:::o;21504:::-;21670:4;21708:2;21697:9;21693:18;21685:26;;21757:9;21751:4;21747:20;21743:1;21732:9;21728:17;21721:47;21785:131;21911:4;21785:131;:::i;:::-;21777:139;;21504:419;;;:::o;21929:::-;22095:4;22133:2;22122:9;22118:18;22110:26;;22182:9;22176:4;22172:20;22168:1;22157:9;22153:17;22146:47;22210:131;22336:4;22210:131;:::i;:::-;22202:139;;21929:419;;;:::o;22354:::-;22520:4;22558:2;22547:9;22543:18;22535:26;;22607:9;22601:4;22597:20;22593:1;22582:9;22578:17;22571:47;22635:131;22761:4;22635:131;:::i;:::-;22627:139;;22354:419;;;:::o;22779:::-;22945:4;22983:2;22972:9;22968:18;22960:26;;23032:9;23026:4;23022:20;23018:1;23007:9;23003:17;22996:47;23060:131;23186:4;23060:131;:::i;:::-;23052:139;;22779:419;;;:::o;23204:::-;23370:4;23408:2;23397:9;23393:18;23385:26;;23457:9;23451:4;23447:20;23443:1;23432:9;23428:17;23421:47;23485:131;23611:4;23485:131;:::i;:::-;23477:139;;23204:419;;;:::o;23629:::-;23795:4;23833:2;23822:9;23818:18;23810:26;;23882:9;23876:4;23872:20;23868:1;23857:9;23853:17;23846:47;23910:131;24036:4;23910:131;:::i;:::-;23902:139;;23629:419;;;:::o;24054:::-;24220:4;24258:2;24247:9;24243:18;24235:26;;24307:9;24301:4;24297:20;24293:1;24282:9;24278:17;24271:47;24335:131;24461:4;24335:131;:::i;:::-;24327:139;;24054:419;;;:::o;24479:::-;24645:4;24683:2;24672:9;24668:18;24660:26;;24732:9;24726:4;24722:20;24718:1;24707:9;24703:17;24696:47;24760:131;24886:4;24760:131;:::i;:::-;24752:139;;24479:419;;;:::o;24904:::-;25070:4;25108:2;25097:9;25093:18;25085:26;;25157:9;25151:4;25147:20;25143:1;25132:9;25128:17;25121:47;25185:131;25311:4;25185:131;:::i;:::-;25177:139;;24904:419;;;:::o;25329:::-;25495:4;25533:2;25522:9;25518:18;25510:26;;25582:9;25576:4;25572:20;25568:1;25557:9;25553:17;25546:47;25610:131;25736:4;25610:131;:::i;:::-;25602:139;;25329:419;;;:::o;25754:::-;25920:4;25958:2;25947:9;25943:18;25935:26;;26007:9;26001:4;25997:20;25993:1;25982:9;25978:17;25971:47;26035:131;26161:4;26035:131;:::i;:::-;26027:139;;25754:419;;;:::o;26179:::-;26345:4;26383:2;26372:9;26368:18;26360:26;;26432:9;26426:4;26422:20;26418:1;26407:9;26403:17;26396:47;26460:131;26586:4;26460:131;:::i;:::-;26452:139;;26179:419;;;:::o;26604:::-;26770:4;26808:2;26797:9;26793:18;26785:26;;26857:9;26851:4;26847:20;26843:1;26832:9;26828:17;26821:47;26885:131;27011:4;26885:131;:::i;:::-;26877:139;;26604:419;;;:::o;27029:::-;27195:4;27233:2;27222:9;27218:18;27210:26;;27282:9;27276:4;27272:20;27268:1;27257:9;27253:17;27246:47;27310:131;27436:4;27310:131;:::i;:::-;27302:139;;27029:419;;;:::o;27454:::-;27620:4;27658:2;27647:9;27643:18;27635:26;;27707:9;27701:4;27697:20;27693:1;27682:9;27678:17;27671:47;27735:131;27861:4;27735:131;:::i;:::-;27727:139;;27454:419;;;:::o;27879:222::-;27972:4;28010:2;27999:9;27995:18;27987:26;;28023:71;28091:1;28080:9;28076:17;28067:6;28023:71;:::i;:::-;27879:222;;;;:::o;28107:129::-;28141:6;28168:20;;:::i;:::-;28158:30;;28197:33;28225:4;28217:6;28197:33;:::i;:::-;28107:129;;;:::o;28242:75::-;28275:6;28308:2;28302:9;28292:19;;28242:75;:::o;28323:307::-;28384:4;28474:18;28466:6;28463:30;28460:56;;;28496:18;;:::i;:::-;28460:56;28534:29;28556:6;28534:29;:::i;:::-;28526:37;;28618:4;28612;28608:15;28600:23;;28323:307;;;:::o;28636:308::-;28698:4;28788:18;28780:6;28777:30;28774:56;;;28810:18;;:::i;:::-;28774:56;28848:29;28870:6;28848:29;:::i;:::-;28840:37;;28932:4;28926;28922:15;28914:23;;28636:308;;;:::o;28950:98::-;29001:6;29035:5;29029:12;29019:22;;28950:98;;;:::o;29054:99::-;29106:6;29140:5;29134:12;29124:22;;29054:99;;;:::o;29159:168::-;29242:11;29276:6;29271:3;29264:19;29316:4;29311:3;29307:14;29292:29;;29159:168;;;;:::o;29333:147::-;29434:11;29471:3;29456:18;;29333:147;;;;:::o;29486:169::-;29570:11;29604:6;29599:3;29592:19;29644:4;29639:3;29635:14;29620:29;;29486:169;;;;:::o;29661:148::-;29763:11;29800:3;29785:18;;29661:148;;;;:::o;29815:305::-;29855:3;29874:20;29892:1;29874:20;:::i;:::-;29869:25;;29908:20;29926:1;29908:20;:::i;:::-;29903:25;;30062:1;29994:66;29990:74;29987:1;29984:81;29981:107;;;30068:18;;:::i;:::-;29981:107;30112:1;30109;30105:9;30098:16;;29815:305;;;;:::o;30126:185::-;30166:1;30183:20;30201:1;30183:20;:::i;:::-;30178:25;;30217:20;30235:1;30217:20;:::i;:::-;30212:25;;30256:1;30246:35;;30261:18;;:::i;:::-;30246:35;30303:1;30300;30296:9;30291:14;;30126:185;;;;:::o;30317:191::-;30357:4;30377:20;30395:1;30377:20;:::i;:::-;30372:25;;30411:20;30429:1;30411:20;:::i;:::-;30406:25;;30450:1;30447;30444:8;30441:34;;;30455:18;;:::i;:::-;30441:34;30500:1;30497;30493:9;30485:17;;30317:191;;;;:::o;30514:96::-;30551:7;30580:24;30598:5;30580:24;:::i;:::-;30569:35;;30514:96;;;:::o;30616:90::-;30650:7;30693:5;30686:13;30679:21;30668:32;;30616:90;;;:::o;30712:149::-;30748:7;30788:66;30781:5;30777:78;30766:89;;30712:149;;;:::o;30867:126::-;30904:7;30944:42;30937:5;30933:54;30922:65;;30867:126;;;:::o;30999:77::-;31036:7;31065:5;31054:16;;30999:77;;;:::o;31082:154::-;31166:6;31161:3;31156;31143:30;31228:1;31219:6;31214:3;31210:16;31203:27;31082:154;;;:::o;31242:307::-;31310:1;31320:113;31334:6;31331:1;31328:13;31320:113;;;31419:1;31414:3;31410:11;31404:18;31400:1;31395:3;31391:11;31384:39;31356:2;31353:1;31349:10;31344:15;;31320:113;;;31451:6;31448:1;31445:13;31442:101;;;31531:1;31522:6;31517:3;31513:16;31506:27;31442:101;31291:258;31242:307;;;:::o;31555:320::-;31599:6;31636:1;31630:4;31626:12;31616:22;;31683:1;31677:4;31673:12;31704:18;31694:81;;31760:4;31752:6;31748:17;31738:27;;31694:81;31822:2;31814:6;31811:14;31791:18;31788:38;31785:84;;;31841:18;;:::i;:::-;31785:84;31606:269;31555:320;;;:::o;31881:281::-;31964:27;31986:4;31964:27;:::i;:::-;31956:6;31952:40;32094:6;32082:10;32079:22;32058:18;32046:10;32043:34;32040:62;32037:88;;;32105:18;;:::i;:::-;32037:88;32145:10;32141:2;32134:22;31924:238;31881:281;;:::o;32168:233::-;32207:3;32230:24;32248:5;32230:24;:::i;:::-;32221:33;;32276:66;32269:5;32266:77;32263:103;;;32346:18;;:::i;:::-;32263:103;32393:1;32386:5;32382:13;32375:20;;32168:233;;;:::o;32407:176::-;32439:1;32456:20;32474:1;32456:20;:::i;:::-;32451:25;;32490:20;32508:1;32490:20;:::i;:::-;32485:25;;32529:1;32519:35;;32534:18;;:::i;:::-;32519:35;32575:1;32572;32568:9;32563:14;;32407:176;;;;:::o;32589:180::-;32637:77;32634:1;32627:88;32734:4;32731:1;32724:15;32758:4;32755:1;32748:15;32775:180;32823:77;32820:1;32813:88;32920:4;32917:1;32910:15;32944:4;32941:1;32934:15;32961:180;33009:77;33006:1;32999:88;33106:4;33103:1;33096:15;33130:4;33127:1;33120:15;33147:180;33195:77;33192:1;33185:88;33292:4;33289:1;33282:15;33316:4;33313:1;33306:15;33333:180;33381:77;33378:1;33371:88;33478:4;33475:1;33468:15;33502:4;33499:1;33492:15;33519:117;33628:1;33625;33618:12;33642:117;33751:1;33748;33741:12;33765:117;33874:1;33871;33864:12;33888:117;33997:1;33994;33987:12;34011:102;34052:6;34103:2;34099:7;34094:2;34087:5;34083:14;34079:28;34069:38;;34011:102;;;:::o;34119:170::-;34259:22;34255:1;34247:6;34243:14;34236:46;34119:170;:::o;34295:237::-;34435:34;34431:1;34423:6;34419:14;34412:58;34504:20;34499:2;34491:6;34487:15;34480:45;34295:237;:::o;34538:225::-;34678:34;34674:1;34666:6;34662:14;34655:58;34747:8;34742:2;34734:6;34730:15;34723:33;34538:225;:::o;34769:178::-;34909:30;34905:1;34897:6;34893:14;34886:54;34769:178;:::o;34953:223::-;35093:34;35089:1;35081:6;35077:14;35070:58;35162:6;35157:2;35149:6;35145:15;35138:31;34953:223;:::o;35182:175::-;35322:27;35318:1;35310:6;35306:14;35299:51;35182:175;:::o;35363:231::-;35503:34;35499:1;35491:6;35487:14;35480:58;35572:14;35567:2;35559:6;35555:15;35548:39;35363:231;:::o;35600:166::-;35740:18;35736:1;35728:6;35724:14;35717:42;35600:166;:::o;35772:243::-;35912:34;35908:1;35900:6;35896:14;35889:58;35981:26;35976:2;35968:6;35964:15;35957:51;35772:243;:::o;36021:229::-;36161:34;36157:1;36149:6;36145:14;36138:58;36230:12;36225:2;36217:6;36213:15;36206:37;36021:229;:::o;36256:228::-;36396:34;36392:1;36384:6;36380:14;36373:58;36465:11;36460:2;36452:6;36448:15;36441:36;36256:228;:::o;36490:233::-;36630:34;36626:1;36618:6;36614:14;36607:58;36699:16;36694:2;36686:6;36682:15;36675:41;36490:233;:::o;36729:182::-;36869:34;36865:1;36857:6;36853:14;36846:58;36729:182;:::o;36917:236::-;37057:34;37053:1;37045:6;37041:14;37034:58;37126:19;37121:2;37113:6;37109:15;37102:44;36917:236;:::o;37159:231::-;37299:34;37295:1;37287:6;37283:14;37276:58;37368:14;37363:2;37355:6;37351:15;37344:39;37159:231;:::o;37396:182::-;37536:34;37532:1;37524:6;37520:14;37513:58;37396:182;:::o;37584:228::-;37724:34;37720:1;37712:6;37708:14;37701:58;37793:11;37788:2;37780:6;37776:15;37769:36;37584:228;:::o;37818:234::-;37958:34;37954:1;37946:6;37942:14;37935:58;38027:17;38022:2;38014:6;38010:15;38003:42;37818:234;:::o;38058:220::-;38198:34;38194:1;38186:6;38182:14;38175:58;38267:3;38262:2;38254:6;38250:15;38243:28;38058:220;:::o;38284:114::-;;:::o;38404:236::-;38544:34;38540:1;38532:6;38528:14;38521:58;38613:19;38608:2;38600:6;38596:15;38589:44;38404:236;:::o;38646:122::-;38719:24;38737:5;38719:24;:::i;:::-;38712:5;38709:35;38699:63;;38758:1;38755;38748:12;38699:63;38646:122;:::o;38774:116::-;38844:21;38859:5;38844:21;:::i;:::-;38837:5;38834:32;38824:60;;38880:1;38877;38870:12;38824:60;38774:116;:::o;38896:120::-;38968:23;38985:5;38968:23;:::i;:::-;38961:5;38958:34;38948:62;;39006:1;39003;38996:12;38948:62;38896:120;:::o;39022:122::-;39095:24;39113:5;39095:24;:::i;:::-;39088:5;39085:35;39075:63;;39134:1;39131;39124:12;39075:63;39022:122;:::o

Swarm Source

ipfs://2af3b90a2798e2711bdf5e0c5f056061987569f7f3a9ef5b58965c5e6fa37099
Loading...
Loading
Loading...
Loading
[ 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.