ETH Price: $3,278.44 (-3.87%)
Gas: 14 Gwei

Token

SpaceWalker (SWJ)
 

Overview

Max Total Supply

1,111 SWJ

Holders

427

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
nostylist.eth
Balance
3 SWJ
0xDBbb3d58287eBA06e583C808560b9b58640c693E
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:
SpaceWalker

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-06
*/

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

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

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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


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


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

pragma solidity ^0.8.0;







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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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

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


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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

pragma solidity ^0.8.0;

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

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


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File contracts/SpaceWalker.sol



pragma solidity ^0.8.0;




contract SpaceWalker is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string public _baseTokenURI;
    uint256 public _discountPrice = 0.05 ether;
    uint256 public _price = 0.06 ether;
    uint256 public _maxSupply = 1111;
    bytes32 public _merkleRoot;
    bool public _saleIsActive = false;

    ERC721[] public _partnerContracts;

    address a1 = 0x18fe32A32c693879838843eec5934f6A12A36268;
    address a2 = 0x44EB5cd3d39D83EAc7b717e2E88B4Bbb4a00f039;
    address a3 = 0x0817713F7D8507Ab1276D1cA6ECA7dC1b221B12a;
    address a4 = 0x0674Ea417cbD52Ee7eb4d9798f634d14E4455FF3;

    constructor(string memory baseURI, bytes32 merkleRoot) ERC721("SpaceWalker", "SWJ") {
        _baseTokenURI = baseURI;
        _merkleRoot = merkleRoot;
    }

    function mint(uint256 mintCount) external payable {
        uint256 supply = totalSupply();

        require(_saleIsActive,                      "sale_not_active");
        require(mintCount <= 20,                    "max_mint_count_exceeded");
        require(supply + mintCount <= _maxSupply,   "max_token_supply_exceeded");
        require(msg.value >= _price * mintCount,    "insufficient_payment_value");

        for (uint256 i; i < mintCount; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function ownerMint(uint256 mintCount, address recipient) external {
        uint256 supply = totalSupply();
        bool canMint;

        if (msg.sender == a1 || msg.sender == a2 || msg.sender == a3 || msg.sender == a4) {
            canMint = true;
        }
        require(canMint, "unauthorized_sender");
        require(supply + mintCount <= _maxSupply, "max_token_supply_exceeded");

        for (uint256 i; i < mintCount; i++) {
            _safeMint(recipient, supply + i);
        }
    }

    function discountMint(address to, uint256 mintCount) private {
        uint256 supply = totalSupply();

        require(_saleIsActive,                      "sale_not_active");
        require(mintCount <= 20,                    "max_mint_count_exceeded");
        require(supply + mintCount <= _maxSupply,   "max_token_supply_exceeded");

        for (uint256 i; i < mintCount; i++) {
            _safeMint(to, supply + i);
        }
    }

    function whitelistMint(uint256 mintCount, bytes32[] calldata merkleProof) external payable {
        require(msg.value >= _discountPrice * mintCount, "insufficient_payment_value");
        require(this.isWhitelisted(msg.sender, merkleProof), "not_whitelisted");
        discountMint(msg.sender, mintCount);
    }

    function isWhitelisted(address from, bytes32[] calldata merkleProof) external view returns (bool) {
        bytes32 leaf = keccak256(abi.encodePacked(from));
        return MerkleProof.verify(merkleProof, _merkleRoot, leaf);
    }

    function partnerMint(uint256 mintCount) external payable {
        require(msg.value >= _discountPrice * mintCount, "insufficient_payment_value");
        require(this.hasPartnerToken(msg.sender), "partner_token_not_found");
        discountMint(msg.sender, mintCount);
    }

    function hasPartnerToken(address from) external view returns (bool) {
        for (uint256 i; i < _partnerContracts.length; i++) {
            if (_partnerContracts[i].balanceOf(from) > 0) {
                return true;
            }
        }
        return false;
    }

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

    function setBaseURI(string memory baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function setDiscountPrice(uint256 discountPrice) external onlyOwner {
        _discountPrice = discountPrice;
    }

    function setPrice(uint256 price) external onlyOwner {
        _price = price;
    }

    function setMerkleRoot(bytes32 merkleRoot) external onlyOwner {
        _merkleRoot = merkleRoot;
    }

    function addPartnerContract(address partnerContract) external onlyOwner {
        _partnerContracts.push(ERC721(partnerContract));
    }

    function saleStart() external onlyOwner {
        _saleIsActive = true;
    }

    function saleStop() external onlyOwner {
        _saleIsActive = false;
    }

    function tokensOfOwner(address owner) external view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }

    function projectTokensMint() external onlyOwner {
        require(totalSupply() == 0, "token_supply_not_zero");

        for (uint256 i; i < 111; i++) {
            if (i < 10) {
                _safeMint(a1, i);
            }
            else if (i < 20) {
                _safeMint(0x81a76401a46FA740c911e374324E4046b84cFA33, i);
            }
            else if (i < 30) {
                _safeMint(a3, i);
            }
            else if (i < 111) {
                _safeMint(a4, i);
            }
        }
    }

    function withdrawFixed() external onlyOwner {
        (bool p1, ) = payable(a2).call{value: 4 ether}("");
        require(p1, "transaction_failed");

        (bool p2, ) = payable(a3).call{value: 1 ether}("");
        require(p2, "transaction_failed");

        (bool p3, ) = payable(a4).call{value: 6 ether}("");
        require(p3, "transaction_failed");
    }

    function withdrawTeam() external onlyOwner {
        uint256 balance = address(this).balance;

        (bool p1, ) = payable(a1).call{value: balance * 30 / 100}("");
        require(p1, "transaction_failed");

        (bool p2, ) = payable(a2).call{value: balance * 30 / 100}("");
        require(p2, "transaction_failed");

        (bool p3, ) = payable(a3).call{value: balance * 22 / 100}("");
        require(p3, "transaction_failed");

        (bool p4, ) = payable(0x543874CeA651a5Dd4CDF88B2Ed9B92aF57b8507E).call{value: balance * 15 / 100}("");
        require(p4, "transaction_failed");

        (bool p5, ) = payable(0x4AA2b3615Fe2e9041f3cD8440e0Ada4be07e677c).call{value: balance * 3 / 100}("");
        require(p5, "transaction_failed");
    }

    function withdrawAll() external onlyOwner {
        require(payable(a4).send(address(this).balance));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_discountPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_partnerContracts","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"partnerContract","type":"address"}],"name":"addPartnerContract","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":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"hasPartnerToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"partnerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"projectTokensMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"discountPrice","type":"uint256"}],"name":"setDiscountPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTeam","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec50000600c5566d529ae9e860000600d55610457600e556000601060006101000a81548160ff0219169083151502179055507318fe32a32c693879838843eec5934f6a12a36268601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344eb5cd3d39d83eac7b717e2e88b4bbb4a00f039601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730817713f7d8507ab1276d1ca6eca7dc1b221b12a601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730674ea417cbd52ee7eb4d9798f634d14e4455ff3601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019c57600080fd5b5060405162006510380380620065108339818101604052810190620001c29190620004b1565b6040518060400160405280600b81526020017f537061636557616c6b65720000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53574a000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200024692919062000378565b5080600190805190602001906200025f92919062000378565b5050506200028262000276620002aa60201b60201c565b620002b260201b60201c565b81600b90805190602001906200029a92919062000378565b5080600f8190555050506200069f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200038690620005aa565b90600052602060002090601f016020900481019282620003aa5760008555620003f6565b82601f10620003c557805160ff1916838001178555620003f6565b82800160010185558215620003f6579182015b82811115620003f5578251825591602001919060010190620003d8565b5b50905062000405919062000409565b5090565b5b80821115620004245760008160009055506001016200040a565b5090565b60006200043f620004398462000534565b6200050b565b9050828152602081018484840111156200045857600080fd5b6200046584828562000574565b509392505050565b6000815190506200047e8162000685565b92915050565b600082601f8301126200049657600080fd5b8151620004a884826020860162000428565b91505092915050565b60008060408385031215620004c557600080fd5b600083015167ffffffffffffffff811115620004e057600080fd5b620004ee8582860162000484565b925050602062000501858286016200046d565b9150509250929050565b6000620005176200052a565b9050620005258282620005e0565b919050565b6000604051905090565b600067ffffffffffffffff82111562000552576200055162000645565b5b6200055d8262000674565b9050602081019050919050565b6000819050919050565b60005b838110156200059457808201518184015260208101905062000577565b83811115620005a4576000848401525b50505050565b60006002820490506001821680620005c357607f821691505b60208210811415620005da57620005d962000616565b5b50919050565b620005eb8262000674565b810181811067ffffffffffffffff821117156200060d576200060c62000645565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62000690816200056a565b81146200069c57600080fd5b50565b615e6180620006af6000396000f3fe6080604052600436106102675760003560e01c806382c8732811610144578063ab0bcc41116100b6578063c87b56dd1161007a578063c87b56dd146108c4578063cfc86f7b14610901578063d2cab0561461092c578063d52c57e014610948578063e985e9c514610971578063f2fde38b146109ae57610267565b8063ab0bcc411461082b578063b814200514610842578063b88d4fde1461086d578063bb51f32d14610896578063bf2561b4146108ad57610267565b80638b78c116116101085780638b78c1161461073e5780638da5cb5b1461076757806391b7f5ed1461079257806395d89b41146107bb578063a0712d68146107e6578063a22cb4651461080257610267565b806382c873281461068e5780638462151c146106aa5780638511b50d146106e7578063853828b61461071057806389ca81531461072757610267565b806342842e0e116101dd5780636352211e116101a15780636352211e1461058057806370a08231146105bd578063715018a6146105fa5780637cb64759146106115780637f05243c1461063a5780638078059c1461067757610267565b806342842e0e146104895780634f6ccce7146104b257806355f804b3146104ef5780635a23dd99146105185780635d893ba01461055557610267565b80631a3c5b261161022f5780631a3c5b261461036557806322f4596f146103a2578063235b6ea1146103cd57806323b872dd146103f85780632f745c59146104215780632fc37ab21461045e57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806318160ddd1461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906145e2565b6109d7565b6040516102a09190614e63565b60405180910390f35b3480156102b557600080fd5b506102be610a51565b6040516102cb9190614eb4565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190614675565b610ae3565b6040516103089190614da8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190614554565b610b68565b005b34801561034657600080fd5b5061034f610c80565b60405161035c9190615236565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190614675565b610c8d565b6040516103999190614e99565b60405180910390f35b3480156103ae57600080fd5b506103b7610ccc565b6040516103c49190615236565b60405180910390f35b3480156103d957600080fd5b506103e2610cd2565b6040516103ef9190615236565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906143f6565b610cd8565b005b34801561042d57600080fd5b5061044860048036038101906104439190614554565b610d38565b6040516104559190615236565b60405180910390f35b34801561046a57600080fd5b50610473610ddd565b6040516104809190614e7e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906143f6565b610de3565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614675565b610e03565b6040516104e69190615236565b60405180910390f35b3480156104fb57600080fd5b5061051660048036038101906105119190614634565b610e9a565b005b34801561052457600080fd5b5061053f600480360381019061053a91906144c0565b610f30565b60405161054c9190614e63565b60405180910390f35b34801561056157600080fd5b5061056a610fb4565b6040516105779190614e63565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614675565b610fc7565b6040516105b49190614da8565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190614391565b611079565b6040516105f19190615236565b60405180910390f35b34801561060657600080fd5b5061060f611131565b005b34801561061d57600080fd5b50610638600480360381019061063391906145b9565b6111b9565b005b34801561064657600080fd5b50610661600480360381019061065c9190614391565b61123f565b60405161066e9190614e63565b60405180910390f35b34801561068357600080fd5b5061068c61136d565b005b6106a860048036038101906106a39190614675565b611406565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190614391565b61152b565b6040516106de9190614e41565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190614391565b611625565b005b34801561071c57600080fd5b50610725611707565b005b34801561073357600080fd5b5061073c6117e5565b005b34801561074a57600080fd5b5061076560048036038101906107609190614675565b611ae8565b005b34801561077357600080fd5b5061077c611b6e565b6040516107899190614da8565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614675565b611b98565b005b3480156107c757600080fd5b506107d0611c1e565b6040516107dd9190614eb4565b60405180910390f35b61080060048036038101906107fb9190614675565b611cb0565b005b34801561080e57600080fd5b5061082960048036038101906108249190614518565b611e27565b005b34801561083757600080fd5b50610840611e3d565b005b34801561084e57600080fd5b50610857611ed6565b6040516108649190615236565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190614445565b611edc565b005b3480156108a257600080fd5b506108ab611f3e565b005b3480156108b957600080fd5b506108c2612429565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190614675565b6125ea565b6040516108f89190614eb4565b60405180910390f35b34801561090d57600080fd5b50610916612691565b6040516109239190614eb4565b60405180910390f35b61094660048036038101906109419190614703565b61271f565b005b34801561095457600080fd5b5061096f600480360381019061096a91906146c7565b61284a565b005b34801561097d57600080fd5b50610998600480360381019061099391906143ba565b612a85565b6040516109a59190614e63565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190614391565b612b19565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4a5750610a4982612c11565b5b9050919050565b606060008054610a6090615569565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90615569565b8015610ad95780601f10610aae57610100808354040283529160200191610ad9565b820191906000526020600020905b815481529060010190602001808311610abc57829003601f168201915b5050505050905090565b6000610aee82612cf3565b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490615116565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7382610fc7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90615196565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c03612d5f565b73ffffffffffffffffffffffffffffffffffffffff161480610c325750610c3181610c2c612d5f565b612a85565b5b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890615016565b60405180910390fd5b610c7b8383612d67565b505050565b6000600880549050905090565b60118181548110610c9d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600d5481565b610ce9610ce3612d5f565b82612e20565b610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906151d6565b60405180910390fd5b610d33838383612efe565b505050565b6000610d4383611079565b8210610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614ed6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610dfe83838360405180602001604052806000815250611edc565b505050565b6000610e0d610c80565b8210610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590615216565b60405180910390fd5b60088281548110610e88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ea2612d5f565b73ffffffffffffffffffffffffffffffffffffffff16610ec0611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90615136565b60405180910390fd5b80600b9080519060200190610f2c92919061412c565b5050565b60008084604051602001610f449190614d28565b604051602081830303815290604052805190602001209050610faa848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361315a565b9150509392505050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790615076565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190615056565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611139612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611157611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490615136565b60405180910390fd5b6111b76000613171565b565b6111c1612d5f565b73ffffffffffffffffffffffffffffffffffffffff166111df611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90615136565b60405180910390fd5b80600f8190555050565b6000805b6011805490508110156113625760006011828154811061128c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016112ef9190614da8565b60206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f919061469e565b111561134f576001915050611368565b808061135a906155cc565b915050611243565b50600090505b919050565b611375612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611393611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090615136565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b80600c5461141491906153f7565b341015611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d906151b6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637f05243c336040518263ffffffff1660e01b815260040161148f9190614da8565b60206040518083038186803b1580156114a757600080fd5b505afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190614590565b61151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614ff6565b60405180910390fd5b6115283382613237565b50565b6060600061153883611079565b905060008167ffffffffffffffff81111561157c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156115aa5781602001602082028036833780820191505090505b50905060005b8281101561161a576115c28582610d38565b8282815181106115fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611612906155cc565b9150506115b0565b508092505050919050565b61162d612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661164b611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890615136565b60405180910390fd5b6011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61170f612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661172d611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90615136565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506117e357600080fd5b565b6117ed612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661180b611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890615136565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16673782dace9d9000006040516118b190614d93565b60006040518083038185875af1925050503d80600081146118ee576040519150601f19603f3d011682016040523d82523d6000602084013e6118f3565b606091505b5050905080611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614f56565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a764000060405161198790614d93565b60006040518083038185875af1925050503d80600081146119c4576040519150601f19603f3d011682016040523d82523d6000602084013e6119c9565b606091505b5050905080611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614f56565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166753444835ec580000604051611a5d90614d93565b60006040518083038185875af1925050503d8060008114611a9a576040519150601f19603f3d011682016040523d82523d6000602084013e611a9f565b606091505b5050905080611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614f56565b60405180910390fd5b505050565b611af0612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90615136565b60405180910390fd5b80600c8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ba0612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611bbe611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b90615136565b60405180910390fd5b80600d8190555050565b606060018054611c2d90615569565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5990615569565b8015611ca65780601f10611c7b57610100808354040283529160200191611ca6565b820191906000526020600020905b815481529060010190602001808311611c8957829003601f168201915b5050505050905090565b6000611cba610c80565b9050601060009054906101000a900460ff16611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906150b6565b60405180910390fd5b6014821115611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690615096565b60405180910390fd5b600e548282611d5e9190615370565b1115611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906151f6565b60405180910390fd5b81600d54611dad91906153f7565b341015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de6906151b6565b60405180910390fd5b60005b82811015611e2257611e0f338284611e0a9190615370565b61335f565b8080611e1a906155cc565b915050611df2565b505050565b611e39611e32612d5f565b838361337d565b5050565b611e45612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611e63611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090615136565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b600c5481565b611eed611ee7612d5f565b83612e20565b611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f23906151d6565b60405180910390fd5b611f38848484846134ea565b50505050565b611f46612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611f64611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190615136565b60405180910390fd5b60004790506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e8461200991906153f7565b61201391906153c6565b60405161201f90614d93565b60006040518083038185875af1925050503d806000811461205c576040519150601f19603f3d011682016040523d82523d6000602084013e612061565b606091505b50509050806120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614f56565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e856120ef91906153f7565b6120f991906153c6565b60405161210590614d93565b60006040518083038185875af1925050503d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b505090508061218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614f56565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646016866121d591906153f7565b6121df91906153c6565b6040516121eb90614d93565b60006040518083038185875af1925050503d8060008114612228576040519150601f19603f3d011682016040523d82523d6000602084013e61222d565b606091505b5050905080612271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226890614f56565b60405180910390fd5b600073543874cea651a5dd4cdf88b2ed9b92af57b8507e73ffffffffffffffffffffffffffffffffffffffff166064600f876122ad91906153f7565b6122b791906153c6565b6040516122c390614d93565b60006040518083038185875af1925050503d8060008114612300576040519150601f19603f3d011682016040523d82523d6000602084013e612305565b606091505b5050905080612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614f56565b60405180910390fd5b6000734aa2b3615fe2e9041f3cd8440e0ada4be07e677c73ffffffffffffffffffffffffffffffffffffffff16606460038861238591906153f7565b61238f91906153c6565b60405161239b90614d93565b60006040518083038185875af1925050503d80600081146123d8576040519150601f19603f3d011682016040523d82523d6000602084013e6123dd565b606091505b5050905080612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614f56565b60405180910390fd5b505050505050565b612431612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661244f611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c90615136565b60405180910390fd5b60006124af610c80565b146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906150d6565b60405180910390fd5b60005b606f8110156125e757600a81101561253557612530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b6125d4565b60148110156125615761255c7381a76401a46fa740c911e374324e4046b84cfa338261335f565b6125d3565b601e81101561259b57612596601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b6125d2565b606f8110156125d1576125d0601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b5b5b5b5b80806125df906155cc565b9150506124f2565b50565b60606125f582612cf3565b612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90615176565b60405180910390fd5b600061263e613546565b9050600081511161265e5760405180602001604052806000815250612689565b80612668846135d8565b604051602001612679929190614d6f565b6040516020818303038152906040525b915050919050565b600b805461269e90615569565b80601f01602080910402602001604051908101604052809291908181526020018280546126ca90615569565b80156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b505050505081565b82600c5461272d91906153f7565b34101561276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906151b6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16635a23dd993384846040518463ffffffff1660e01b81526004016127ac93929190614e0f565b60206040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc9190614590565b61283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290615036565b60405180910390fd5b6128453384613237565b505050565b6000612854610c80565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129015750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806129595750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806129b15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156129bb57600190505b806129fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f290614fb6565b60405180910390fd5b600e548483612a0a9190615370565b1115612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906151f6565b60405180910390fd5b60005b84811015612a7e57612a6b848285612a669190615370565b61335f565b8080612a76906155cc565b915050612a4e565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b21612d5f565b73ffffffffffffffffffffffffffffffffffffffff16612b3f611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c90615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90614f16565b60405180910390fd5b612c0e81613171565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cdc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cec5750612ceb82613785565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dda83610fc7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e2b82612cf3565b612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190614fd6565b60405180910390fd5b6000612e7583610fc7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ee457508373ffffffffffffffffffffffffffffffffffffffff16612ecc84610ae3565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ef55750612ef48185612a85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f1e82610fc7565b73ffffffffffffffffffffffffffffffffffffffff1614612f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6b90615156565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdb90614f76565b60405180910390fd5b612fef8383836137ef565b612ffa600082612d67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304a9190615451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a19190615370565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826131678584613903565b1490509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000613241610c80565b9050601060009054906101000a900460ff16613292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613289906150b6565b60405180910390fd5b60148211156132d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cd90615096565b60405180910390fd5b600e5482826132e59190615370565b1115613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d906151f6565b60405180910390fd5b60005b82811015613359576133468482846133419190615370565b61335f565b8080613351906155cc565b915050613329565b50505050565b6133798282604051806020016040528060008152506139dc565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e390614f96565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134dd9190614e63565b60405180910390a3505050565b6134f5848484612efe565b61350184848484613a37565b613540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353790614ef6565b60405180910390fd5b50505050565b6060600b805461355590615569565b80601f016020809104026020016040519081016040528092919081815260200182805461358190615569565b80156135ce5780601f106135a3576101008083540402835291602001916135ce565b820191906000526020600020905b8154815290600101906020018083116135b157829003601f168201915b5050505050905090565b60606000821415613620576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613780565b600082905060005b6000821461365257808061363b906155cc565b915050600a8261364b91906153c6565b9150613628565b60008167ffffffffffffffff811115613694577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156136c65781602001600182028036833780820191505090505b5090505b60008514613779576001826136df9190615451565b9150600a856136ee9190615643565b60306136fa9190615370565b60f81b818381518110613736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561377291906153c6565b94506136ca565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137fa838383613bce565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561383d5761383881613bd3565b61387c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461387b5761387a8382613c1c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138bf576138ba81613d89565b6138fe565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138fd576138fc8282613ecc565b5b5b505050565b60008082905060005b84518110156139d1576000858281518110613950577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311613991578281604051602001613974929190614d43565b6040516020818303038152906040528051906020012092506139bd565b80836040516020016139a4929190614d43565b6040516020818303038152906040528051906020012092505b5080806139c9906155cc565b91505061390c565b508091505092915050565b6139e68383613f4b565b6139f36000848484613a37565b613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2990614ef6565b60405180910390fd5b505050565b6000613a588473ffffffffffffffffffffffffffffffffffffffff16614119565b15613bc1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a81612d5f565b8786866040518563ffffffff1660e01b8152600401613aa39493929190614dc3565b602060405180830381600087803b158015613abd57600080fd5b505af1925050508015613aee57506040513d601f19601f82011682018060405250810190613aeb919061460b565b60015b613b71573d8060008114613b1e576040519150601f19603f3d011682016040523d82523d6000602084013e613b23565b606091505b50600081511415613b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6090614ef6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bc6565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c2984611079565b613c339190615451565b9050600060076000848152602001908152602001600020549050818114613d18576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613d9d9190615451565b9050600060096000848152602001908152602001600020549050600060088381548110613df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613eb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613ed783611079565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb2906150f6565b60405180910390fd5b613fc481612cf3565b15614004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ffb90614f36565b60405180910390fd5b614010600083836137ef565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140609190615370565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461413890615569565b90600052602060002090601f01602090048101928261415a57600085556141a1565b82601f1061417357805160ff19168380011785556141a1565b828001600101855582156141a1579182015b828111156141a0578251825591602001919060010190614185565b5b5090506141ae91906141b2565b5090565b5b808211156141cb5760008160009055506001016141b3565b5090565b60006141e26141dd84615276565b615251565b9050828152602081018484840111156141fa57600080fd5b614205848285615527565b509392505050565b600061422061421b846152a7565b615251565b90508281526020810184848401111561423857600080fd5b614243848285615527565b509392505050565b60008135905061425a81615db8565b92915050565b60008083601f84011261427257600080fd5b8235905067ffffffffffffffff81111561428b57600080fd5b6020830191508360208202830111156142a357600080fd5b9250929050565b6000813590506142b981615dcf565b92915050565b6000815190506142ce81615dcf565b92915050565b6000813590506142e381615de6565b92915050565b6000813590506142f881615dfd565b92915050565b60008151905061430d81615dfd565b92915050565b600082601f83011261432457600080fd5b81356143348482602086016141cf565b91505092915050565b600082601f83011261434e57600080fd5b813561435e84826020860161420d565b91505092915050565b60008135905061437681615e14565b92915050565b60008151905061438b81615e14565b92915050565b6000602082840312156143a357600080fd5b60006143b18482850161424b565b91505092915050565b600080604083850312156143cd57600080fd5b60006143db8582860161424b565b92505060206143ec8582860161424b565b9150509250929050565b60008060006060848603121561440b57600080fd5b60006144198682870161424b565b935050602061442a8682870161424b565b925050604061443b86828701614367565b9150509250925092565b6000806000806080858703121561445b57600080fd5b60006144698782880161424b565b945050602061447a8782880161424b565b935050604061448b87828801614367565b925050606085013567ffffffffffffffff8111156144a857600080fd5b6144b487828801614313565b91505092959194509250565b6000806000604084860312156144d557600080fd5b60006144e38682870161424b565b935050602084013567ffffffffffffffff81111561450057600080fd5b61450c86828701614260565b92509250509250925092565b6000806040838503121561452b57600080fd5b60006145398582860161424b565b925050602061454a858286016142aa565b9150509250929050565b6000806040838503121561456757600080fd5b60006145758582860161424b565b925050602061458685828601614367565b9150509250929050565b6000602082840312156145a257600080fd5b60006145b0848285016142bf565b91505092915050565b6000602082840312156145cb57600080fd5b60006145d9848285016142d4565b91505092915050565b6000602082840312156145f457600080fd5b6000614602848285016142e9565b91505092915050565b60006020828403121561461d57600080fd5b600061462b848285016142fe565b91505092915050565b60006020828403121561464657600080fd5b600082013567ffffffffffffffff81111561466057600080fd5b61466c8482850161433d565b91505092915050565b60006020828403121561468757600080fd5b600061469584828501614367565b91505092915050565b6000602082840312156146b057600080fd5b60006146be8482850161437c565b91505092915050565b600080604083850312156146da57600080fd5b60006146e885828601614367565b92505060206146f98582860161424b565b9150509250929050565b60008060006040848603121561471857600080fd5b600061472686828701614367565b935050602084013567ffffffffffffffff81111561474357600080fd5b61474f86828701614260565b92509250509250925092565b60006147678383614d0a565b60208301905092915050565b61477c81615485565b82525050565b61479361478e82615485565b615615565b82525050565b60006147a58385615316565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156147d457600080fd5b6020830292506147e5838584615527565b82840190509392505050565b60006147fc826152e8565b6148068185615327565b9350614811836152d8565b8060005b83811015614842578151614829888261475b565b975061483483615309565b925050600181019050614815565b5085935050505092915050565b61485881615497565b82525050565b614867816154a3565b82525050565b61487e614879826154a3565b615627565b82525050565b600061488f826152f3565b6148998185615338565b93506148a9818560208601615536565b6148b281615730565b840191505092915050565b6148c681615503565b82525050565b60006148d7826152fe565b6148e18185615354565b93506148f1818560208601615536565b6148fa81615730565b840191505092915050565b6000614910826152fe565b61491a8185615365565b935061492a818560208601615536565b80840191505092915050565b6000614943602b83615354565b915061494e8261574e565b604082019050919050565b6000614966603283615354565b91506149718261579d565b604082019050919050565b6000614989602683615354565b9150614994826157ec565b604082019050919050565b60006149ac601c83615354565b91506149b78261583b565b602082019050919050565b60006149cf601283615354565b91506149da82615864565b602082019050919050565b60006149f2602483615354565b91506149fd8261588d565b604082019050919050565b6000614a15601983615354565b9150614a20826158dc565b602082019050919050565b6000614a38601383615354565b9150614a4382615905565b602082019050919050565b6000614a5b602c83615354565b9150614a668261592e565b604082019050919050565b6000614a7e601783615354565b9150614a898261597d565b602082019050919050565b6000614aa1603883615354565b9150614aac826159a6565b604082019050919050565b6000614ac4600f83615354565b9150614acf826159f5565b602082019050919050565b6000614ae7602a83615354565b9150614af282615a1e565b604082019050919050565b6000614b0a602983615354565b9150614b1582615a6d565b604082019050919050565b6000614b2d601783615354565b9150614b3882615abc565b602082019050919050565b6000614b50600f83615354565b9150614b5b82615ae5565b602082019050919050565b6000614b73601583615354565b9150614b7e82615b0e565b602082019050919050565b6000614b96602083615354565b9150614ba182615b37565b602082019050919050565b6000614bb9602c83615354565b9150614bc482615b60565b604082019050919050565b6000614bdc602083615354565b9150614be782615baf565b602082019050919050565b6000614bff602983615354565b9150614c0a82615bd8565b604082019050919050565b6000614c22602f83615354565b9150614c2d82615c27565b604082019050919050565b6000614c45602183615354565b9150614c5082615c76565b604082019050919050565b6000614c68601a83615354565b9150614c7382615cc5565b602082019050919050565b6000614c8b600083615349565b9150614c9682615cee565b600082019050919050565b6000614cae603183615354565b9150614cb982615cf1565b604082019050919050565b6000614cd1601983615354565b9150614cdc82615d40565b602082019050919050565b6000614cf4602c83615354565b9150614cff82615d69565b604082019050919050565b614d13816154f9565b82525050565b614d22816154f9565b82525050565b6000614d348284614782565b60148201915081905092915050565b6000614d4f828561486d565b602082019150614d5f828461486d565b6020820191508190509392505050565b6000614d7b8285614905565b9150614d878284614905565b91508190509392505050565b6000614d9e82614c7e565b9150819050919050565b6000602082019050614dbd6000830184614773565b92915050565b6000608082019050614dd86000830187614773565b614de56020830186614773565b614df26040830185614d19565b8181036060830152614e048184614884565b905095945050505050565b6000604082019050614e246000830186614773565b8181036020830152614e37818486614799565b9050949350505050565b60006020820190508181036000830152614e5b81846147f1565b905092915050565b6000602082019050614e78600083018461484f565b92915050565b6000602082019050614e93600083018461485e565b92915050565b6000602082019050614eae60008301846148bd565b92915050565b60006020820190508181036000830152614ece81846148cc565b905092915050565b60006020820190508181036000830152614eef81614936565b9050919050565b60006020820190508181036000830152614f0f81614959565b9050919050565b60006020820190508181036000830152614f2f8161497c565b9050919050565b60006020820190508181036000830152614f4f8161499f565b9050919050565b60006020820190508181036000830152614f6f816149c2565b9050919050565b60006020820190508181036000830152614f8f816149e5565b9050919050565b60006020820190508181036000830152614faf81614a08565b9050919050565b60006020820190508181036000830152614fcf81614a2b565b9050919050565b60006020820190508181036000830152614fef81614a4e565b9050919050565b6000602082019050818103600083015261500f81614a71565b9050919050565b6000602082019050818103600083015261502f81614a94565b9050919050565b6000602082019050818103600083015261504f81614ab7565b9050919050565b6000602082019050818103600083015261506f81614ada565b9050919050565b6000602082019050818103600083015261508f81614afd565b9050919050565b600060208201905081810360008301526150af81614b20565b9050919050565b600060208201905081810360008301526150cf81614b43565b9050919050565b600060208201905081810360008301526150ef81614b66565b9050919050565b6000602082019050818103600083015261510f81614b89565b9050919050565b6000602082019050818103600083015261512f81614bac565b9050919050565b6000602082019050818103600083015261514f81614bcf565b9050919050565b6000602082019050818103600083015261516f81614bf2565b9050919050565b6000602082019050818103600083015261518f81614c15565b9050919050565b600060208201905081810360008301526151af81614c38565b9050919050565b600060208201905081810360008301526151cf81614c5b565b9050919050565b600060208201905081810360008301526151ef81614ca1565b9050919050565b6000602082019050818103600083015261520f81614cc4565b9050919050565b6000602082019050818103600083015261522f81614ce7565b9050919050565b600060208201905061524b6000830184614d19565b92915050565b600061525b61526c565b9050615267828261559b565b919050565b6000604051905090565b600067ffffffffffffffff82111561529157615290615701565b5b61529a82615730565b9050602081019050919050565b600067ffffffffffffffff8211156152c2576152c1615701565b5b6152cb82615730565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061537b826154f9565b9150615386836154f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153bb576153ba615674565b5b828201905092915050565b60006153d1826154f9565b91506153dc836154f9565b9250826153ec576153eb6156a3565b5b828204905092915050565b6000615402826154f9565b915061540d836154f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561544657615445615674565b5b828202905092915050565b600061545c826154f9565b9150615467836154f9565b92508282101561547a57615479615674565b5b828203905092915050565b6000615490826154d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061550e82615515565b9050919050565b6000615520826154d9565b9050919050565b82818337600083830152505050565b60005b83811015615554578082015181840152602081019050615539565b83811115615563576000848401525b50505050565b6000600282049050600182168061558157607f821691505b60208210811415615595576155946156d2565b5b50919050565b6155a482615730565b810181811067ffffffffffffffff821117156155c3576155c2615701565b5b80604052505050565b60006155d7826154f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561560a57615609615674565b5b600182019050919050565b600061562082615631565b9050919050565b6000819050919050565b600061563c82615741565b9050919050565b600061564e826154f9565b9150615659836154f9565b925082615669576156686156a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7472616e73616374696f6e5f6661696c65640000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f756e617574686f72697a65645f73656e64657200000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f706172746e65725f746f6b656e5f6e6f745f666f756e64000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6f745f77686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d61785f6d696e745f636f756e745f6578636565646564000000000000000000600082015250565b7f73616c655f6e6f745f6163746976650000000000000000000000000000000000600082015250565b7f746f6b656e5f737570706c795f6e6f745f7a65726f0000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e745f7061796d656e745f76616c7565000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d61785f746f6b656e5f737570706c795f657863656564656400000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615dc181615485565b8114615dcc57600080fd5b50565b615dd881615497565b8114615de357600080fd5b50565b615def816154a3565b8114615dfa57600080fd5b50565b615e06816154ad565b8114615e1157600080fd5b50565b615e1d816154f9565b8114615e2857600080fd5b5056fea26469706673582212205021d94bf5739e38f61d3319458d3b84f3ec3b8dfc9556b1077c4f6fa66dc34c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000004079e9e5781cb844f02f30c57ef8273f5723eae79974ec6ef1c4b21bed48b31d840000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d647a674c57356362663768536a4543515776426f556a46356a447268544172367444644b344b6955506e576e3f00000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c806382c8732811610144578063ab0bcc41116100b6578063c87b56dd1161007a578063c87b56dd146108c4578063cfc86f7b14610901578063d2cab0561461092c578063d52c57e014610948578063e985e9c514610971578063f2fde38b146109ae57610267565b8063ab0bcc411461082b578063b814200514610842578063b88d4fde1461086d578063bb51f32d14610896578063bf2561b4146108ad57610267565b80638b78c116116101085780638b78c1161461073e5780638da5cb5b1461076757806391b7f5ed1461079257806395d89b41146107bb578063a0712d68146107e6578063a22cb4651461080257610267565b806382c873281461068e5780638462151c146106aa5780638511b50d146106e7578063853828b61461071057806389ca81531461072757610267565b806342842e0e116101dd5780636352211e116101a15780636352211e1461058057806370a08231146105bd578063715018a6146105fa5780637cb64759146106115780637f05243c1461063a5780638078059c1461067757610267565b806342842e0e146104895780634f6ccce7146104b257806355f804b3146104ef5780635a23dd99146105185780635d893ba01461055557610267565b80631a3c5b261161022f5780631a3c5b261461036557806322f4596f146103a2578063235b6ea1146103cd57806323b872dd146103f85780632f745c59146104215780632fc37ab21461045e57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b31461031157806318160ddd1461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906145e2565b6109d7565b6040516102a09190614e63565b60405180910390f35b3480156102b557600080fd5b506102be610a51565b6040516102cb9190614eb4565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190614675565b610ae3565b6040516103089190614da8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190614554565b610b68565b005b34801561034657600080fd5b5061034f610c80565b60405161035c9190615236565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190614675565b610c8d565b6040516103999190614e99565b60405180910390f35b3480156103ae57600080fd5b506103b7610ccc565b6040516103c49190615236565b60405180910390f35b3480156103d957600080fd5b506103e2610cd2565b6040516103ef9190615236565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906143f6565b610cd8565b005b34801561042d57600080fd5b5061044860048036038101906104439190614554565b610d38565b6040516104559190615236565b60405180910390f35b34801561046a57600080fd5b50610473610ddd565b6040516104809190614e7e565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906143f6565b610de3565b005b3480156104be57600080fd5b506104d960048036038101906104d49190614675565b610e03565b6040516104e69190615236565b60405180910390f35b3480156104fb57600080fd5b5061051660048036038101906105119190614634565b610e9a565b005b34801561052457600080fd5b5061053f600480360381019061053a91906144c0565b610f30565b60405161054c9190614e63565b60405180910390f35b34801561056157600080fd5b5061056a610fb4565b6040516105779190614e63565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190614675565b610fc7565b6040516105b49190614da8565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190614391565b611079565b6040516105f19190615236565b60405180910390f35b34801561060657600080fd5b5061060f611131565b005b34801561061d57600080fd5b50610638600480360381019061063391906145b9565b6111b9565b005b34801561064657600080fd5b50610661600480360381019061065c9190614391565b61123f565b60405161066e9190614e63565b60405180910390f35b34801561068357600080fd5b5061068c61136d565b005b6106a860048036038101906106a39190614675565b611406565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190614391565b61152b565b6040516106de9190614e41565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190614391565b611625565b005b34801561071c57600080fd5b50610725611707565b005b34801561073357600080fd5b5061073c6117e5565b005b34801561074a57600080fd5b5061076560048036038101906107609190614675565b611ae8565b005b34801561077357600080fd5b5061077c611b6e565b6040516107899190614da8565b60405180910390f35b34801561079e57600080fd5b506107b960048036038101906107b49190614675565b611b98565b005b3480156107c757600080fd5b506107d0611c1e565b6040516107dd9190614eb4565b60405180910390f35b61080060048036038101906107fb9190614675565b611cb0565b005b34801561080e57600080fd5b5061082960048036038101906108249190614518565b611e27565b005b34801561083757600080fd5b50610840611e3d565b005b34801561084e57600080fd5b50610857611ed6565b6040516108649190615236565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190614445565b611edc565b005b3480156108a257600080fd5b506108ab611f3e565b005b3480156108b957600080fd5b506108c2612429565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190614675565b6125ea565b6040516108f89190614eb4565b60405180910390f35b34801561090d57600080fd5b50610916612691565b6040516109239190614eb4565b60405180910390f35b61094660048036038101906109419190614703565b61271f565b005b34801561095457600080fd5b5061096f600480360381019061096a91906146c7565b61284a565b005b34801561097d57600080fd5b50610998600480360381019061099391906143ba565b612a85565b6040516109a59190614e63565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190614391565b612b19565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a4a5750610a4982612c11565b5b9050919050565b606060008054610a6090615569565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90615569565b8015610ad95780601f10610aae57610100808354040283529160200191610ad9565b820191906000526020600020905b815481529060010190602001808311610abc57829003601f168201915b5050505050905090565b6000610aee82612cf3565b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490615116565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7382610fc7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90615196565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c03612d5f565b73ffffffffffffffffffffffffffffffffffffffff161480610c325750610c3181610c2c612d5f565b612a85565b5b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890615016565b60405180910390fd5b610c7b8383612d67565b505050565b6000600880549050905090565b60118181548110610c9d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600d5481565b610ce9610ce3612d5f565b82612e20565b610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f906151d6565b60405180910390fd5b610d33838383612efe565b505050565b6000610d4383611079565b8210610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614ed6565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610dfe83838360405180602001604052806000815250611edc565b505050565b6000610e0d610c80565b8210610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590615216565b60405180910390fd5b60088281548110610e88577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ea2612d5f565b73ffffffffffffffffffffffffffffffffffffffff16610ec0611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90615136565b60405180910390fd5b80600b9080519060200190610f2c92919061412c565b5050565b60008084604051602001610f449190614d28565b604051602081830303815290604052805190602001209050610faa848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361315a565b9150509392505050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790615076565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190615056565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611139612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611157611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490615136565b60405180910390fd5b6111b76000613171565b565b6111c1612d5f565b73ffffffffffffffffffffffffffffffffffffffff166111df611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90615136565b60405180910390fd5b80600f8190555050565b6000805b6011805490508110156113625760006011828154811061128c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016112ef9190614da8565b60206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f919061469e565b111561134f576001915050611368565b808061135a906155cc565b915050611243565b50600090505b919050565b611375612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611393611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090615136565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b80600c5461141491906153f7565b341015611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d906151b6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637f05243c336040518263ffffffff1660e01b815260040161148f9190614da8565b60206040518083038186803b1580156114a757600080fd5b505afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190614590565b61151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151590614ff6565b60405180910390fd5b6115283382613237565b50565b6060600061153883611079565b905060008167ffffffffffffffff81111561157c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156115aa5781602001602082028036833780820191505090505b50905060005b8281101561161a576115c28582610d38565b8282815181106115fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080611612906155cc565b9150506115b0565b508092505050919050565b61162d612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661164b611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890615136565b60405180910390fd5b6011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61170f612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661172d611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90615136565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506117e357600080fd5b565b6117ed612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661180b611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890615136565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16673782dace9d9000006040516118b190614d93565b60006040518083038185875af1925050503d80600081146118ee576040519150601f19603f3d011682016040523d82523d6000602084013e6118f3565b606091505b5050905080611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614f56565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a764000060405161198790614d93565b60006040518083038185875af1925050503d80600081146119c4576040519150601f19603f3d011682016040523d82523d6000602084013e6119c9565b606091505b5050905080611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614f56565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166753444835ec580000604051611a5d90614d93565b60006040518083038185875af1925050503d8060008114611a9a576040519150601f19603f3d011682016040523d82523d6000602084013e611a9f565b606091505b5050905080611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90614f56565b60405180910390fd5b505050565b611af0612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611b0e611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90615136565b60405180910390fd5b80600c8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611ba0612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611bbe611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0b90615136565b60405180910390fd5b80600d8190555050565b606060018054611c2d90615569565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5990615569565b8015611ca65780601f10611c7b57610100808354040283529160200191611ca6565b820191906000526020600020905b815481529060010190602001808311611c8957829003601f168201915b5050505050905090565b6000611cba610c80565b9050601060009054906101000a900460ff16611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906150b6565b60405180910390fd5b6014821115611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690615096565b60405180910390fd5b600e548282611d5e9190615370565b1115611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906151f6565b60405180910390fd5b81600d54611dad91906153f7565b341015611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de6906151b6565b60405180910390fd5b60005b82811015611e2257611e0f338284611e0a9190615370565b61335f565b8080611e1a906155cc565b915050611df2565b505050565b611e39611e32612d5f565b838361337d565b5050565b611e45612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611e63611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090615136565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550565b600c5481565b611eed611ee7612d5f565b83612e20565b611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f23906151d6565b60405180910390fd5b611f38848484846134ea565b50505050565b611f46612d5f565b73ffffffffffffffffffffffffffffffffffffffff16611f64611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190615136565b60405180910390fd5b60004790506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e8461200991906153f7565b61201391906153c6565b60405161201f90614d93565b60006040518083038185875af1925050503d806000811461205c576040519150601f19603f3d011682016040523d82523d6000602084013e612061565b606091505b50509050806120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c90614f56565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064601e856120ef91906153f7565b6120f991906153c6565b60405161210590614d93565b60006040518083038185875af1925050503d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b505090508061218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614f56565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646016866121d591906153f7565b6121df91906153c6565b6040516121eb90614d93565b60006040518083038185875af1925050503d8060008114612228576040519150601f19603f3d011682016040523d82523d6000602084013e61222d565b606091505b5050905080612271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226890614f56565b60405180910390fd5b600073543874cea651a5dd4cdf88b2ed9b92af57b8507e73ffffffffffffffffffffffffffffffffffffffff166064600f876122ad91906153f7565b6122b791906153c6565b6040516122c390614d93565b60006040518083038185875af1925050503d8060008114612300576040519150601f19603f3d011682016040523d82523d6000602084013e612305565b606091505b5050905080612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614f56565b60405180910390fd5b6000734aa2b3615fe2e9041f3cd8440e0ada4be07e677c73ffffffffffffffffffffffffffffffffffffffff16606460038861238591906153f7565b61238f91906153c6565b60405161239b90614d93565b60006040518083038185875af1925050503d80600081146123d8576040519150601f19603f3d011682016040523d82523d6000602084013e6123dd565b606091505b5050905080612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614f56565b60405180910390fd5b505050505050565b612431612d5f565b73ffffffffffffffffffffffffffffffffffffffff1661244f611b6e565b73ffffffffffffffffffffffffffffffffffffffff16146124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c90615136565b60405180910390fd5b60006124af610c80565b146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e6906150d6565b60405180910390fd5b60005b606f8110156125e757600a81101561253557612530601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b6125d4565b60148110156125615761255c7381a76401a46fa740c911e374324e4046b84cfa338261335f565b6125d3565b601e81101561259b57612596601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b6125d2565b606f8110156125d1576125d0601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261335f565b5b5b5b5b80806125df906155cc565b9150506124f2565b50565b60606125f582612cf3565b612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b90615176565b60405180910390fd5b600061263e613546565b9050600081511161265e5760405180602001604052806000815250612689565b80612668846135d8565b604051602001612679929190614d6f565b6040516020818303038152906040525b915050919050565b600b805461269e90615569565b80601f01602080910402602001604051908101604052809291908181526020018280546126ca90615569565b80156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b505050505081565b82600c5461272d91906153f7565b34101561276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906151b6565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16635a23dd993384846040518463ffffffff1660e01b81526004016127ac93929190614e0f565b60206040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fc9190614590565b61283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290615036565b60405180910390fd5b6128453384613237565b505050565b6000612854610c80565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806129015750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806129595750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806129b15750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b156129bb57600190505b806129fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f290614fb6565b60405180910390fd5b600e548483612a0a9190615370565b1115612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906151f6565b60405180910390fd5b60005b84811015612a7e57612a6b848285612a669190615370565b61335f565b8080612a76906155cc565b915050612a4e565b5050505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b21612d5f565b73ffffffffffffffffffffffffffffffffffffffff16612b3f611b6e565b73ffffffffffffffffffffffffffffffffffffffff1614612b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8c90615136565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfc90614f16565b60405180910390fd5b612c0e81613171565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cdc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612cec5750612ceb82613785565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612dda83610fc7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612e2b82612cf3565b612e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6190614fd6565b60405180910390fd5b6000612e7583610fc7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ee457508373ffffffffffffffffffffffffffffffffffffffff16612ecc84610ae3565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ef55750612ef48185612a85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612f1e82610fc7565b73ffffffffffffffffffffffffffffffffffffffff1614612f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6b90615156565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fdb90614f76565b60405180910390fd5b612fef8383836137ef565b612ffa600082612d67565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461304a9190615451565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130a19190615370565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826131678584613903565b1490509392505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000613241610c80565b9050601060009054906101000a900460ff16613292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613289906150b6565b60405180910390fd5b60148211156132d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cd90615096565b60405180910390fd5b600e5482826132e59190615370565b1115613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d906151f6565b60405180910390fd5b60005b82811015613359576133468482846133419190615370565b61335f565b8080613351906155cc565b915050613329565b50505050565b6133798282604051806020016040528060008152506139dc565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e390614f96565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134dd9190614e63565b60405180910390a3505050565b6134f5848484612efe565b61350184848484613a37565b613540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353790614ef6565b60405180910390fd5b50505050565b6060600b805461355590615569565b80601f016020809104026020016040519081016040528092919081815260200182805461358190615569565b80156135ce5780601f106135a3576101008083540402835291602001916135ce565b820191906000526020600020905b8154815290600101906020018083116135b157829003601f168201915b5050505050905090565b60606000821415613620576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613780565b600082905060005b6000821461365257808061363b906155cc565b915050600a8261364b91906153c6565b9150613628565b60008167ffffffffffffffff811115613694577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156136c65781602001600182028036833780820191505090505b5090505b60008514613779576001826136df9190615451565b9150600a856136ee9190615643565b60306136fa9190615370565b60f81b818381518110613736577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561377291906153c6565b94506136ca565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6137fa838383613bce565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561383d5761383881613bd3565b61387c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461387b5761387a8382613c1c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138bf576138ba81613d89565b6138fe565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146138fd576138fc8282613ecc565b5b5b505050565b60008082905060005b84518110156139d1576000858281518110613950577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050808311613991578281604051602001613974929190614d43565b6040516020818303038152906040528051906020012092506139bd565b80836040516020016139a4929190614d43565b6040516020818303038152906040528051906020012092505b5080806139c9906155cc565b91505061390c565b508091505092915050565b6139e68383613f4b565b6139f36000848484613a37565b613a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2990614ef6565b60405180910390fd5b505050565b6000613a588473ffffffffffffffffffffffffffffffffffffffff16614119565b15613bc1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613a81612d5f565b8786866040518563ffffffff1660e01b8152600401613aa39493929190614dc3565b602060405180830381600087803b158015613abd57600080fd5b505af1925050508015613aee57506040513d601f19601f82011682018060405250810190613aeb919061460b565b60015b613b71573d8060008114613b1e576040519150601f19603f3d011682016040523d82523d6000602084013e613b23565b606091505b50600081511415613b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6090614ef6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613bc6565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c2984611079565b613c339190615451565b9050600060076000848152602001908152602001600020549050818114613d18576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613d9d9190615451565b9050600060096000848152602001908152602001600020549050600060088381548110613df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613eb0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613ed783611079565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fb2906150f6565b60405180910390fd5b613fc481612cf3565b15614004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ffb90614f36565b60405180910390fd5b614010600083836137ef565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140609190615370565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461413890615569565b90600052602060002090601f01602090048101928261415a57600085556141a1565b82601f1061417357805160ff19168380011785556141a1565b828001600101855582156141a1579182015b828111156141a0578251825591602001919060010190614185565b5b5090506141ae91906141b2565b5090565b5b808211156141cb5760008160009055506001016141b3565b5090565b60006141e26141dd84615276565b615251565b9050828152602081018484840111156141fa57600080fd5b614205848285615527565b509392505050565b600061422061421b846152a7565b615251565b90508281526020810184848401111561423857600080fd5b614243848285615527565b509392505050565b60008135905061425a81615db8565b92915050565b60008083601f84011261427257600080fd5b8235905067ffffffffffffffff81111561428b57600080fd5b6020830191508360208202830111156142a357600080fd5b9250929050565b6000813590506142b981615dcf565b92915050565b6000815190506142ce81615dcf565b92915050565b6000813590506142e381615de6565b92915050565b6000813590506142f881615dfd565b92915050565b60008151905061430d81615dfd565b92915050565b600082601f83011261432457600080fd5b81356143348482602086016141cf565b91505092915050565b600082601f83011261434e57600080fd5b813561435e84826020860161420d565b91505092915050565b60008135905061437681615e14565b92915050565b60008151905061438b81615e14565b92915050565b6000602082840312156143a357600080fd5b60006143b18482850161424b565b91505092915050565b600080604083850312156143cd57600080fd5b60006143db8582860161424b565b92505060206143ec8582860161424b565b9150509250929050565b60008060006060848603121561440b57600080fd5b60006144198682870161424b565b935050602061442a8682870161424b565b925050604061443b86828701614367565b9150509250925092565b6000806000806080858703121561445b57600080fd5b60006144698782880161424b565b945050602061447a8782880161424b565b935050604061448b87828801614367565b925050606085013567ffffffffffffffff8111156144a857600080fd5b6144b487828801614313565b91505092959194509250565b6000806000604084860312156144d557600080fd5b60006144e38682870161424b565b935050602084013567ffffffffffffffff81111561450057600080fd5b61450c86828701614260565b92509250509250925092565b6000806040838503121561452b57600080fd5b60006145398582860161424b565b925050602061454a858286016142aa565b9150509250929050565b6000806040838503121561456757600080fd5b60006145758582860161424b565b925050602061458685828601614367565b9150509250929050565b6000602082840312156145a257600080fd5b60006145b0848285016142bf565b91505092915050565b6000602082840312156145cb57600080fd5b60006145d9848285016142d4565b91505092915050565b6000602082840312156145f457600080fd5b6000614602848285016142e9565b91505092915050565b60006020828403121561461d57600080fd5b600061462b848285016142fe565b91505092915050565b60006020828403121561464657600080fd5b600082013567ffffffffffffffff81111561466057600080fd5b61466c8482850161433d565b91505092915050565b60006020828403121561468757600080fd5b600061469584828501614367565b91505092915050565b6000602082840312156146b057600080fd5b60006146be8482850161437c565b91505092915050565b600080604083850312156146da57600080fd5b60006146e885828601614367565b92505060206146f98582860161424b565b9150509250929050565b60008060006040848603121561471857600080fd5b600061472686828701614367565b935050602084013567ffffffffffffffff81111561474357600080fd5b61474f86828701614260565b92509250509250925092565b60006147678383614d0a565b60208301905092915050565b61477c81615485565b82525050565b61479361478e82615485565b615615565b82525050565b60006147a58385615316565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156147d457600080fd5b6020830292506147e5838584615527565b82840190509392505050565b60006147fc826152e8565b6148068185615327565b9350614811836152d8565b8060005b83811015614842578151614829888261475b565b975061483483615309565b925050600181019050614815565b5085935050505092915050565b61485881615497565b82525050565b614867816154a3565b82525050565b61487e614879826154a3565b615627565b82525050565b600061488f826152f3565b6148998185615338565b93506148a9818560208601615536565b6148b281615730565b840191505092915050565b6148c681615503565b82525050565b60006148d7826152fe565b6148e18185615354565b93506148f1818560208601615536565b6148fa81615730565b840191505092915050565b6000614910826152fe565b61491a8185615365565b935061492a818560208601615536565b80840191505092915050565b6000614943602b83615354565b915061494e8261574e565b604082019050919050565b6000614966603283615354565b91506149718261579d565b604082019050919050565b6000614989602683615354565b9150614994826157ec565b604082019050919050565b60006149ac601c83615354565b91506149b78261583b565b602082019050919050565b60006149cf601283615354565b91506149da82615864565b602082019050919050565b60006149f2602483615354565b91506149fd8261588d565b604082019050919050565b6000614a15601983615354565b9150614a20826158dc565b602082019050919050565b6000614a38601383615354565b9150614a4382615905565b602082019050919050565b6000614a5b602c83615354565b9150614a668261592e565b604082019050919050565b6000614a7e601783615354565b9150614a898261597d565b602082019050919050565b6000614aa1603883615354565b9150614aac826159a6565b604082019050919050565b6000614ac4600f83615354565b9150614acf826159f5565b602082019050919050565b6000614ae7602a83615354565b9150614af282615a1e565b604082019050919050565b6000614b0a602983615354565b9150614b1582615a6d565b604082019050919050565b6000614b2d601783615354565b9150614b3882615abc565b602082019050919050565b6000614b50600f83615354565b9150614b5b82615ae5565b602082019050919050565b6000614b73601583615354565b9150614b7e82615b0e565b602082019050919050565b6000614b96602083615354565b9150614ba182615b37565b602082019050919050565b6000614bb9602c83615354565b9150614bc482615b60565b604082019050919050565b6000614bdc602083615354565b9150614be782615baf565b602082019050919050565b6000614bff602983615354565b9150614c0a82615bd8565b604082019050919050565b6000614c22602f83615354565b9150614c2d82615c27565b604082019050919050565b6000614c45602183615354565b9150614c5082615c76565b604082019050919050565b6000614c68601a83615354565b9150614c7382615cc5565b602082019050919050565b6000614c8b600083615349565b9150614c9682615cee565b600082019050919050565b6000614cae603183615354565b9150614cb982615cf1565b604082019050919050565b6000614cd1601983615354565b9150614cdc82615d40565b602082019050919050565b6000614cf4602c83615354565b9150614cff82615d69565b604082019050919050565b614d13816154f9565b82525050565b614d22816154f9565b82525050565b6000614d348284614782565b60148201915081905092915050565b6000614d4f828561486d565b602082019150614d5f828461486d565b6020820191508190509392505050565b6000614d7b8285614905565b9150614d878284614905565b91508190509392505050565b6000614d9e82614c7e565b9150819050919050565b6000602082019050614dbd6000830184614773565b92915050565b6000608082019050614dd86000830187614773565b614de56020830186614773565b614df26040830185614d19565b8181036060830152614e048184614884565b905095945050505050565b6000604082019050614e246000830186614773565b8181036020830152614e37818486614799565b9050949350505050565b60006020820190508181036000830152614e5b81846147f1565b905092915050565b6000602082019050614e78600083018461484f565b92915050565b6000602082019050614e93600083018461485e565b92915050565b6000602082019050614eae60008301846148bd565b92915050565b60006020820190508181036000830152614ece81846148cc565b905092915050565b60006020820190508181036000830152614eef81614936565b9050919050565b60006020820190508181036000830152614f0f81614959565b9050919050565b60006020820190508181036000830152614f2f8161497c565b9050919050565b60006020820190508181036000830152614f4f8161499f565b9050919050565b60006020820190508181036000830152614f6f816149c2565b9050919050565b60006020820190508181036000830152614f8f816149e5565b9050919050565b60006020820190508181036000830152614faf81614a08565b9050919050565b60006020820190508181036000830152614fcf81614a2b565b9050919050565b60006020820190508181036000830152614fef81614a4e565b9050919050565b6000602082019050818103600083015261500f81614a71565b9050919050565b6000602082019050818103600083015261502f81614a94565b9050919050565b6000602082019050818103600083015261504f81614ab7565b9050919050565b6000602082019050818103600083015261506f81614ada565b9050919050565b6000602082019050818103600083015261508f81614afd565b9050919050565b600060208201905081810360008301526150af81614b20565b9050919050565b600060208201905081810360008301526150cf81614b43565b9050919050565b600060208201905081810360008301526150ef81614b66565b9050919050565b6000602082019050818103600083015261510f81614b89565b9050919050565b6000602082019050818103600083015261512f81614bac565b9050919050565b6000602082019050818103600083015261514f81614bcf565b9050919050565b6000602082019050818103600083015261516f81614bf2565b9050919050565b6000602082019050818103600083015261518f81614c15565b9050919050565b600060208201905081810360008301526151af81614c38565b9050919050565b600060208201905081810360008301526151cf81614c5b565b9050919050565b600060208201905081810360008301526151ef81614ca1565b9050919050565b6000602082019050818103600083015261520f81614cc4565b9050919050565b6000602082019050818103600083015261522f81614ce7565b9050919050565b600060208201905061524b6000830184614d19565b92915050565b600061525b61526c565b9050615267828261559b565b919050565b6000604051905090565b600067ffffffffffffffff82111561529157615290615701565b5b61529a82615730565b9050602081019050919050565b600067ffffffffffffffff8211156152c2576152c1615701565b5b6152cb82615730565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061537b826154f9565b9150615386836154f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153bb576153ba615674565b5b828201905092915050565b60006153d1826154f9565b91506153dc836154f9565b9250826153ec576153eb6156a3565b5b828204905092915050565b6000615402826154f9565b915061540d836154f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561544657615445615674565b5b828202905092915050565b600061545c826154f9565b9150615467836154f9565b92508282101561547a57615479615674565b5b828203905092915050565b6000615490826154d9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061550e82615515565b9050919050565b6000615520826154d9565b9050919050565b82818337600083830152505050565b60005b83811015615554578082015181840152602081019050615539565b83811115615563576000848401525b50505050565b6000600282049050600182168061558157607f821691505b60208210811415615595576155946156d2565b5b50919050565b6155a482615730565b810181811067ffffffffffffffff821117156155c3576155c2615701565b5b80604052505050565b60006155d7826154f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561560a57615609615674565b5b600182019050919050565b600061562082615631565b9050919050565b6000819050919050565b600061563c82615741565b9050919050565b600061564e826154f9565b9150615659836154f9565b925082615669576156686156a3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f7472616e73616374696f6e5f6661696c65640000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f756e617574686f72697a65645f73656e64657200000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f706172746e65725f746f6b656e5f6e6f745f666f756e64000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6f745f77686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d61785f6d696e745f636f756e745f6578636565646564000000000000000000600082015250565b7f73616c655f6e6f745f6163746976650000000000000000000000000000000000600082015250565b7f746f6b656e5f737570706c795f6e6f745f7a65726f0000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e745f7061796d656e745f76616c7565000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d61785f746f6b656e5f737570706c795f657863656564656400000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b615dc181615485565b8114615dcc57600080fd5b50565b615dd881615497565b8114615de357600080fd5b50565b615def816154a3565b8114615dfa57600080fd5b50565b615e06816154ad565b8114615e1157600080fd5b50565b615e1d816154f9565b8114615e2857600080fd5b5056fea26469706673582212205021d94bf5739e38f61d3319458d3b84f3ec3b8dfc9556b1077c4f6fa66dc34c64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000004079e9e5781cb844f02f30c57ef8273f5723eae79974ec6ef1c4b21bed48b31d840000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d647a674c57356362663768536a4543515776426f556a46356a447268544172367444644b344b6955506e576e3f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmdzgLW5cbf7hSjECQWvBoUjF5jDrhTAr6tDdK4KiUPnWn?
Arg [1] : merkleRoot (bytes32): 0x79e9e5781cb844f02f30c57ef8273f5723eae79974ec6ef1c4b21bed48b31d84

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 79e9e5781cb844f02f30c57ef8273f5723eae79974ec6ef1c4b21bed48b31d84
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d647a674c57356362663768536a4543515776426f556a46
Arg [4] : 356a447268544172367444644b344b6955506e576e3f00000000000000000000


Deployed Bytecode Sourcemap

46841:6493:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35905:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22314:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23873:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23396:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36545:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47172:33;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47058:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47017:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24623:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36213:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47097:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25033:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36735:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50407:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49471:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47130:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22008:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21738:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45948:103;;;;;;;;;;;;;:::i;:::-;;50737:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49999:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51083:79;;;;;;;;;;;;;:::i;:::-;;49712:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51170:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50850:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53222:109;;;;;;;;;;;;;:::i;:::-;;52065:371;;;;;;;;;;;;;:::i;:::-;;50519:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45297:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50644:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22483:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47633:530;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24166:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50996:79;;;;;;;;;;;;;:::i;:::-;;46968:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25289:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52444:770;;;;;;;;;;;;;:::i;:::-;;51520:537;;;;;;;;;;;;;:::i;:::-;;22658:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46934:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49147:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48171:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24392:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46206:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35905:224;36007:4;36046:35;36031:50;;;:11;:50;;;;:90;;;;36085:36;36109:11;36085:23;:36::i;:::-;36031:90;36024:97;;35905:224;;;:::o;22314:100::-;22368:13;22401:5;22394:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22314:100;:::o;23873:221::-;23949:7;23977:16;23985:7;23977;:16::i;:::-;23969:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24062:15;:24;24078:7;24062:24;;;;;;;;;;;;;;;;;;;;;24055:31;;23873:221;;;:::o;23396:411::-;23477:13;23493:23;23508:7;23493:14;:23::i;:::-;23477:39;;23541:5;23535:11;;:2;:11;;;;23527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23635:5;23619:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23644:37;23661:5;23668:12;:10;:12::i;:::-;23644:16;:37::i;:::-;23619:62;23597:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:21;23787:2;23791:7;23778:8;:21::i;:::-;23396:411;;;:::o;36545:113::-;36606:7;36633:10;:17;;;;36626:24;;36545:113;:::o;47172:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47058:32::-;;;;:::o;47017:34::-;;;;:::o;24623:339::-;24818:41;24837:12;:10;:12::i;:::-;24851:7;24818:18;:41::i;:::-;24810:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24926:28;24936:4;24942:2;24946:7;24926:9;:28::i;:::-;24623:339;;;:::o;36213:256::-;36310:7;36346:23;36363:5;36346:16;:23::i;:::-;36338:5;:31;36330:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36435:12;:19;36448:5;36435:19;;;;;;;;;;;;;;;:26;36455:5;36435:26;;;;;;;;;;;;36428:33;;36213:256;;;;:::o;47097:26::-;;;;:::o;25033:185::-;25171:39;25188:4;25194:2;25198:7;25171:39;;;;;;;;;;;;:16;:39::i;:::-;25033:185;;;:::o;36735:233::-;36810:7;36846:30;:28;:30::i;:::-;36838:5;:38;36830:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36943:10;36954:5;36943:17;;;;;;;;;;;;;;;;;;;;;;;;36936:24;;36735:233;;;:::o;50407:104::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50496:7:::1;50480:13;:23;;;;;;;;;;;;:::i;:::-;;50407:104:::0;:::o;49471:233::-;49563:4;49580:12;49622:4;49605:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;49595:33;;;;;;49580:48;;49646:50;49665:11;;49646:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49678:11;;49691:4;49646:18;:50::i;:::-;49639:57;;;49471:233;;;;;:::o;47130:33::-;;;;;;;;;;;;;:::o;22008:239::-;22080:7;22100:13;22116:7;:16;22124:7;22116:16;;;;;;;;;;;;;;;;;;;;;22100:32;;22168:1;22151:19;;:5;:19;;;;22143:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22234:5;22227:12;;;22008:239;;;:::o;21738:208::-;21810:7;21855:1;21838:19;;:5;:19;;;;21830:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:9;:16;21932:5;21922:16;;;;;;;;;;;;;;;;21915:23;;21738:208;;;:::o;45948:103::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46013:30:::1;46040:1;46013:18;:30::i;:::-;45948:103::o:0;50737:105::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50824:10:::1;50810:11;:24;;;;50737:105:::0;:::o;49999:278::-;50061:4;50083:9;50078:169;50098:17;:24;;;;50094:1;:28;50078:169;;;50187:1;50148:17;50166:1;50148:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;50179:4;50148:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;50144:92;;;50216:4;50209:11;;;;;50144:92;50124:3;;;;;:::i;:::-;;;;50078:169;;;;50264:5;50257:12;;49999:278;;;;:::o;51083:79::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51149:5:::1;51133:13;;:21;;;;;;;;;;;;;;;;;;51083:79::o:0;49712:279::-;49818:9;49801:14;;:26;;;;:::i;:::-;49788:9;:39;;49780:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49877:4;:20;;;49898:10;49877:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49948:35;49961:10;49973:9;49948:12;:35::i;:::-;49712:279;:::o;51170:342::-;51231:16;51260:18;51281:16;51291:5;51281:9;:16::i;:::-;51260:37;;51308:25;51350:10;51336:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51308:53;;51377:9;51372:107;51392:10;51388:1;:14;51372:107;;;51438:29;51458:5;51465:1;51438:19;:29::i;:::-;51424:8;51433:1;51424:11;;;;;;;;;;;;;;;;;;;;;:43;;;;;51404:3;;;;;:::i;:::-;;;;51372:107;;;;51496:8;51489:15;;;;51170:342;;;:::o;50850:138::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50933:17:::1;50963:15;50933:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50850:138:::0;:::o;53222:109::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53291:2:::1;;;;;;;;;;;53283:16;;:39;53300:21;53283:39;;;;;;;;;;;;;;;;;;;;;;;53275:48;;;::::0;::::1;;53222:109::o:0;52065:371::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52121:7:::1;52142:2;;;;;;;;;;;52134:16;;52158:7;52134:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52120:50;;;52189:2;52181:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52228:7;52249:2;;;;;;;;;;;52241:16;;52265:7;52241:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52227:50;;;52296:2;52288:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52335:7;52356:2;;;;;;;;;;;52348:16;;52372:7;52348:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52334:50;;;52403:2;52395:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;45588:1;;;52065:371::o:0;50519:117::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50615:13:::1;50598:14;:30;;;;50519:117:::0;:::o;45297:87::-;45343:7;45370:6;;;;;;;;;;;45363:13;;45297:87;:::o;50644:85::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50716:5:::1;50707:6;:14;;;;50644:85:::0;:::o;22483:104::-;22539:13;22572:7;22565:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22483:104;:::o;47633:530::-;47694:14;47711:13;:11;:13::i;:::-;47694:30;;47745:13;;;;;;;;;;;47737:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47831:2;47818:9;:15;;47810:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47921:10;;47908:9;47899:6;:18;;;;:::i;:::-;:32;;47891:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48004:9;47995:6;;:18;;;;:::i;:::-;47982:9;:31;;47974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48065:9;48060:96;48080:9;48076:1;:13;48060:96;;;48111:33;48121:10;48142:1;48133:6;:10;;;;:::i;:::-;48111:9;:33::i;:::-;48091:3;;;;;:::i;:::-;;;;48060:96;;;;47633:530;;:::o;24166:155::-;24261:52;24280:12;:10;:12::i;:::-;24294:8;24304;24261:18;:52::i;:::-;24166:155;;:::o;50996:79::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51063:4:::1;51047:13;;:20;;;;;;;;;;;;;;;;;;50996:79::o:0;46968:42::-;;;;:::o;25289:328::-;25464:41;25483:12;:10;:12::i;:::-;25497:7;25464:18;:41::i;:::-;25456:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25570:39;25584:4;25590:2;25594:7;25603:5;25570:13;:39::i;:::-;25289:328;;;;:::o;52444:770::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52498:15:::1;52516:21;52498:39;;52551:7;52572:2;;;;;;;;;;;52564:16;;52603:3;52598:2;52588:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;52564:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52550:61;;;52630:2;52622:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52669:7;52690:2;;;;;;;;;;;52682:16;;52721:3;52716:2;52706:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;52682:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52668:61;;;52748:2;52740:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52787:7;52808:2;;;;;;;;;;;52800:16;;52839:3;52834:2;52824:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;52800:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52786:61;;;52866:2;52858:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;52905:7;52926:42;52918:56;;52997:3;52992:2;52982:7;:12;;;;:::i;:::-;:18;;;;:::i;:::-;52918:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52904:101;;;53024:2;53016:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;53063:7;53084:42;53076:56;;53154:3;53150:1;53140:7;:11;;;;:::i;:::-;:17;;;;:::i;:::-;53076:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53062:100;;;53181:2;53173:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;45588:1;;;;;;52444:770::o:0;51520:537::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51604:1:::1;51587:13;:11;:13::i;:::-;:18;51579:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;51649:9;51644:406;51664:3;51660:1;:7;51644:406;;;51697:2;51693:1;:6;51689:350;;;51720:16;51730:2;;;;;;;;;;;51734:1;51720:9;:16::i;:::-;51689:350;;;51779:2;51775:1;:6;51771:268;;;51802:56;51812:42;51856:1;51802:9;:56::i;:::-;51771:268;;;51901:2;51897:1;:6;51893:146;;;51924:16;51934:2;;;;;;;;;;;51938:1;51924:9;:16::i;:::-;51893:146;;;51983:3;51979:1;:7;51975:64;;;52007:16;52017:2;;;;;;;;;;;52021:1;52007:9;:16::i;:::-;51975:64;51893:146;51771:268;51689:350;51669:3;;;;;:::i;:::-;;;;51644:406;;;;51520:537::o:0;22658:334::-;22731:13;22765:16;22773:7;22765;:16::i;:::-;22757:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22846:21;22870:10;:8;:10::i;:::-;22846:34;;22922:1;22904:7;22898:21;:25;:86;;;;;;;;;;;;;;;;;22950:7;22959:18;:7;:16;:18::i;:::-;22933:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22898:86;22891:93;;;22658:334;;;:::o;46934:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49147:316::-;49287:9;49270:14;;:26;;;;:::i;:::-;49257:9;:39;;49249:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;49346:4;:18;;;49365:10;49377:11;;49346:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49338:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49420:35;49433:10;49445:9;49420:12;:35::i;:::-;49147:316;;;:::o;48171:511::-;48248:14;48265:13;:11;:13::i;:::-;48248:30;;48289:12;48332:2;;;;;;;;;;;48318:16;;:10;:16;;;:36;;;;48352:2;;;;;;;;;;;48338:16;;:10;:16;;;48318:36;:56;;;;48372:2;;;;;;;;;;;48358:16;;:10;:16;;;48318:56;:76;;;;48392:2;;;;;;;;;;;48378:16;;:10;:16;;;48318:76;48314:123;;;48421:4;48411:14;;48314:123;48455:7;48447:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;48527:10;;48514:9;48505:6;:18;;;;:::i;:::-;:32;;48497:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48585:9;48580:95;48600:9;48596:1;:13;48580:95;;;48631:32;48641:9;48661:1;48652:6;:10;;;;:::i;:::-;48631:9;:32::i;:::-;48611:3;;;;;:::i;:::-;;;;48580:95;;;;48171:511;;;;:::o;24392:164::-;24489:4;24513:18;:25;24532:5;24513:25;;;;;;;;;;;;;;;:35;24539:8;24513:35;;;;;;;;;;;;;;;;;;;;;;;;;24506:42;;24392:164;;;;:::o;46206:201::-;45528:12;:10;:12::i;:::-;45517:23;;:7;:5;:7::i;:::-;:23;;;45509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46315:1:::1;46295:22;;:8;:22;;;;46287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46371:28;46390:8;46371:18;:28::i;:::-;46206:201:::0;:::o;21369:305::-;21471:4;21523:25;21508:40;;;:11;:40;;;;:105;;;;21580:33;21565:48;;;:11;:48;;;;21508:105;:158;;;;21630:36;21654:11;21630:23;:36::i;:::-;21508:158;21488:178;;21369:305;;;:::o;27127:127::-;27192:4;27244:1;27216:30;;:7;:16;27224:7;27216:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27209:37;;27127:127;;;:::o;16590:98::-;16643:7;16670:10;16663:17;;16590:98;:::o;31109:174::-;31211:2;31184:15;:24;31200:7;31184:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31267:7;31263:2;31229:46;;31238:23;31253:7;31238:14;:23::i;:::-;31229:46;;;;;;;;;;;;31109:174;;:::o;27421:348::-;27514:4;27539:16;27547:7;27539;:16::i;:::-;27531:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27615:13;27631:23;27646:7;27631:14;:23::i;:::-;27615:39;;27684:5;27673:16;;:7;:16;;;:51;;;;27717:7;27693:31;;:20;27705:7;27693:11;:20::i;:::-;:31;;;27673:51;:87;;;;27728:32;27745:5;27752:7;27728:16;:32::i;:::-;27673:87;27665:96;;;27421:348;;;;:::o;30413:578::-;30572:4;30545:31;;:23;30560:7;30545:14;:23::i;:::-;:31;;;30537:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:1;30641:16;;:2;:16;;;;30633:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30711:39;30732:4;30738:2;30742:7;30711:20;:39::i;:::-;30815:29;30832:1;30836:7;30815:8;:29::i;:::-;30876:1;30857:9;:15;30867:4;30857:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30905:1;30888:9;:13;30898:2;30888:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30936:2;30917:7;:16;30925:7;30917:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30975:7;30971:2;30956:27;;30965:4;30956:27;;;;;;;;;;;;30413:578;;;:::o;42969:190::-;43094:4;43147;43118:25;43131:5;43138:4;43118:12;:25::i;:::-;:33;43111:40;;42969:190;;;;;:::o;46567:191::-;46641:16;46660:6;;;;;;;;;;;46641:25;;46686:8;46677:6;;:17;;;;;;;;;;;;;;;;;;46741:8;46710:40;;46731:8;46710:40;;;;;;;;;;;;46567:191;;:::o;48690:449::-;48762:14;48779:13;:11;:13::i;:::-;48762:30;;48813:13;;;;;;;;;;;48805:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48899:2;48886:9;:15;;48878:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;48989:10;;48976:9;48967:6;:18;;;;:::i;:::-;:32;;48959:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49049:9;49044:88;49064:9;49060:1;:13;49044:88;;;49095:25;49105:2;49118:1;49109:6;:10;;;;:::i;:::-;49095:9;:25::i;:::-;49075:3;;;;;:::i;:::-;;;;49044:88;;;;48690:449;;;:::o;28111:110::-;28187:26;28197:2;28201:7;28187:26;;;;;;;;;;;;:9;:26::i;:::-;28111:110;;:::o;31425:315::-;31580:8;31571:17;;:5;:17;;;;31563:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31667:8;31629:18;:25;31648:5;31629:25;;;;;;;;;;;;;;;:35;31655:8;31629:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31713:8;31691:41;;31706:5;31691:41;;;31723:8;31691:41;;;;;;:::i;:::-;;;;;;;;31425:315;;;:::o;26499:::-;26656:28;26666:4;26672:2;26676:7;26656:9;:28::i;:::-;26703:48;26726:4;26732:2;26736:7;26745:5;26703:22;:48::i;:::-;26695:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26499:315;;;;:::o;50285:114::-;50345:13;50378;50371:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50285:114;:::o;17177:723::-;17233:13;17463:1;17454:5;:10;17450:53;;;17481:10;;;;;;;;;;;;;;;;;;;;;17450:53;17513:12;17528:5;17513:20;;17544:14;17569:78;17584:1;17576:4;:9;17569:78;;17602:8;;;;;:::i;:::-;;;;17633:2;17625:10;;;;;:::i;:::-;;;17569:78;;;17657:19;17689:6;17679:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17657:39;;17707:154;17723:1;17714:5;:10;17707:154;;17751:1;17741:11;;;;;:::i;:::-;;;17818:2;17810:5;:10;;;;:::i;:::-;17797:2;:24;;;;:::i;:::-;17784:39;;17767:6;17774;17767:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17847:2;17838:11;;;;;:::i;:::-;;;17707:154;;;17885:6;17871:21;;;;;17177:723;;;;:::o;19807:157::-;19892:4;19931:25;19916:40;;;:11;:40;;;;19909:47;;19807:157;;;:::o;37581:589::-;37725:45;37752:4;37758:2;37762:7;37725:26;:45::i;:::-;37803:1;37787:18;;:4;:18;;;37783:187;;;37822:40;37854:7;37822:31;:40::i;:::-;37783:187;;;37892:2;37884:10;;:4;:10;;;37880:90;;37911:47;37944:4;37950:7;37911:32;:47::i;:::-;37880:90;37783:187;37998:1;37984:16;;:2;:16;;;37980:183;;;38017:45;38054:7;38017:36;:45::i;:::-;37980:183;;;38090:4;38084:10;;:2;:10;;;38080:83;;38111:40;38139:2;38143:7;38111:27;:40::i;:::-;38080:83;37980:183;37581:589;;;:::o;43521:701::-;43604:7;43624:20;43647:4;43624:27;;43667:9;43662:523;43686:5;:12;43682:1;:16;43662:523;;;43720:20;43743:5;43749:1;43743:8;;;;;;;;;;;;;;;;;;;;;;43720:31;;43786:12;43770;:28;43766:408;;43940:12;43954;43923:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43913:55;;;;;;43898:70;;43766:408;;;44130:12;44144;44113:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44103:55;;;;;;44088:70;;43766:408;43662:523;43700:3;;;;;:::i;:::-;;;;43662:523;;;;44202:12;44195:19;;;43521:701;;;;:::o;28448:321::-;28578:18;28584:2;28588:7;28578:5;:18::i;:::-;28629:54;28660:1;28664:2;28668:7;28677:5;28629:22;:54::i;:::-;28607:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28448:321;;;:::o;32305:799::-;32460:4;32481:15;:2;:13;;;:15::i;:::-;32477:620;;;32533:2;32517:36;;;32554:12;:10;:12::i;:::-;32568:4;32574:7;32583:5;32517:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32513:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32776:1;32759:6;:13;:18;32755:272;;;32802:60;;;;;;;;;;:::i;:::-;;;;;;;;32755:272;32977:6;32971:13;32962:6;32958:2;32954:15;32947:38;32513:529;32650:41;;;32640:51;;;:6;:51;;;;32633:58;;;;;32477:620;33081:4;33074:11;;32305:799;;;;;;;:::o;33676:126::-;;;;:::o;38893:164::-;38997:10;:17;;;;38970:15;:24;38986:7;38970:24;;;;;;;;;;;:44;;;;39025:10;39041:7;39025:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38893:164;:::o;39684:988::-;39950:22;40000:1;39975:22;39992:4;39975:16;:22::i;:::-;:26;;;;:::i;:::-;39950:51;;40012:18;40033:17;:26;40051:7;40033:26;;;;;;;;;;;;40012:47;;40180:14;40166:10;:28;40162:328;;40211:19;40233:12;:18;40246:4;40233:18;;;;;;;;;;;;;;;:34;40252:14;40233:34;;;;;;;;;;;;40211:56;;40317:11;40284:12;:18;40297:4;40284:18;;;;;;;;;;;;;;;:30;40303:10;40284:30;;;;;;;;;;;:44;;;;40434:10;40401:17;:30;40419:11;40401:30;;;;;;;;;;;:43;;;;40162:328;;40586:17;:26;40604:7;40586:26;;;;;;;;;;;40579:33;;;40630:12;:18;40643:4;40630:18;;;;;;;;;;;;;;;:34;40649:14;40630:34;;;;;;;;;;;40623:41;;;39684:988;;;;:::o;40967:1079::-;41220:22;41265:1;41245:10;:17;;;;:21;;;;:::i;:::-;41220:46;;41277:18;41298:15;:24;41314:7;41298:24;;;;;;;;;;;;41277:45;;41649:19;41671:10;41682:14;41671:26;;;;;;;;;;;;;;;;;;;;;;;;41649:48;;41735:11;41710:10;41721;41710:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41846:10;41815:15;:28;41831:11;41815:28;;;;;;;;;;;:41;;;;41987:15;:24;42003:7;41987:24;;;;;;;;;;;41980:31;;;42022:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40967:1079;;;;:::o;38471:221::-;38556:14;38573:20;38590:2;38573:16;:20::i;:::-;38556:37;;38631:7;38604:12;:16;38617:2;38604:16;;;;;;;;;;;;;;;:24;38621:6;38604:24;;;;;;;;;;;:34;;;;38678:6;38649:17;:26;38667:7;38649:26;;;;;;;;;;;:35;;;;38471:221;;;:::o;29105:382::-;29199:1;29185:16;;:2;:16;;;;29177:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29258:16;29266:7;29258;:16::i;:::-;29257:17;29249:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29320:45;29349:1;29353:2;29357:7;29320:20;:45::i;:::-;29395:1;29378:9;:13;29388:2;29378:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29426:2;29407:7;:16;29415:7;29407:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29471:7;29467:2;29446:33;;29463:1;29446:33;;;;;;;;;;;;29105:382;;:::o;8572:387::-;8632:4;8840:12;8907:7;8895:20;8887:28;;8950:1;8943:4;:8;8936:15;;;8572:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;1435:5;1466:6;1460:13;1451:22;;1482:30;1506:5;1482:30;:::i;:::-;1441:77;;;;:::o;1524:139::-;1570:5;1608:6;1595:20;1586:29;;1624:33;1651:5;1624:33;:::i;:::-;1576:87;;;;:::o;1669:137::-;1714:5;1752:6;1739:20;1730:29;;1768:32;1794:5;1768:32;:::i;:::-;1720:86;;;;:::o;1812:141::-;1868:5;1899:6;1893:13;1884:22;;1915:32;1941:5;1915:32;:::i;:::-;1874:79;;;;:::o;1972:271::-;2027:5;2076:3;2069:4;2061:6;2057:17;2053:27;2043:2;;2094:1;2091;2084:12;2043:2;2134:6;2121:20;2159:78;2233:3;2225:6;2218:4;2210:6;2206:17;2159:78;:::i;:::-;2150:87;;2033:210;;;;;:::o;2263:273::-;2319:5;2368:3;2361:4;2353:6;2349:17;2345:27;2335:2;;2386:1;2383;2376:12;2335:2;2426:6;2413:20;2451:79;2526:3;2518:6;2511:4;2503:6;2499:17;2451:79;:::i;:::-;2442:88;;2325:211;;;;;:::o;2542:139::-;2588:5;2626:6;2613:20;2604:29;;2642:33;2669:5;2642:33;:::i;:::-;2594:87;;;;:::o;2687:143::-;2744:5;2775:6;2769:13;2760:22;;2791:33;2818:5;2791:33;:::i;:::-;2750:80;;;;:::o;2836:262::-;2895:6;2944:2;2932:9;2923:7;2919:23;2915:32;2912:2;;;2960:1;2957;2950:12;2912:2;3003:1;3028:53;3073:7;3064:6;3053:9;3049:22;3028:53;:::i;:::-;3018:63;;2974:117;2902:196;;;;:::o;3104:407::-;3172:6;3180;3229:2;3217:9;3208:7;3204:23;3200:32;3197:2;;;3245:1;3242;3235:12;3197:2;3288:1;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3259:117;3415:2;3441:53;3486:7;3477:6;3466:9;3462:22;3441:53;:::i;:::-;3431:63;;3386:118;3187:324;;;;;:::o;3517:552::-;3594:6;3602;3610;3659:2;3647:9;3638:7;3634:23;3630:32;3627:2;;;3675:1;3672;3665:12;3627:2;3718:1;3743:53;3788:7;3779:6;3768:9;3764:22;3743:53;:::i;:::-;3733:63;;3689:117;3845:2;3871:53;3916:7;3907:6;3896:9;3892:22;3871:53;:::i;:::-;3861:63;;3816:118;3973:2;3999:53;4044:7;4035:6;4024:9;4020:22;3999:53;:::i;:::-;3989:63;;3944:118;3617:452;;;;;:::o;4075:809::-;4170:6;4178;4186;4194;4243:3;4231:9;4222:7;4218:23;4214:33;4211:2;;;4260:1;4257;4250:12;4211:2;4303:1;4328:53;4373:7;4364:6;4353:9;4349:22;4328:53;:::i;:::-;4318:63;;4274:117;4430:2;4456:53;4501:7;4492:6;4481:9;4477:22;4456:53;:::i;:::-;4446:63;;4401:118;4558:2;4584:53;4629:7;4620:6;4609:9;4605:22;4584:53;:::i;:::-;4574:63;;4529:118;4714:2;4703:9;4699:18;4686:32;4745:18;4737:6;4734:30;4731:2;;;4777:1;4774;4767:12;4731:2;4805:62;4859:7;4850:6;4839:9;4835:22;4805:62;:::i;:::-;4795:72;;4657:220;4201:683;;;;;;;:::o;4890:570::-;4985:6;4993;5001;5050:2;5038:9;5029:7;5025:23;5021:32;5018:2;;;5066:1;5063;5056:12;5018:2;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5264:2;5253:9;5249:18;5236:32;5295:18;5287:6;5284:30;5281:2;;;5327:1;5324;5317:12;5281:2;5363:80;5435:7;5426:6;5415:9;5411:22;5363:80;:::i;:::-;5345:98;;;;5207:246;5008:452;;;;;:::o;5466:401::-;5531:6;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:2;;;5604:1;5601;5594:12;5556:2;5647:1;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5618:117;5774:2;5800:50;5842:7;5833:6;5822:9;5818:22;5800:50;:::i;:::-;5790:60;;5745:115;5546:321;;;;;:::o;5873:407::-;5941:6;5949;5998:2;5986:9;5977:7;5973:23;5969:32;5966:2;;;6014:1;6011;6004:12;5966:2;6057:1;6082:53;6127:7;6118:6;6107:9;6103:22;6082:53;:::i;:::-;6072:63;;6028:117;6184:2;6210:53;6255:7;6246:6;6235:9;6231:22;6210:53;:::i;:::-;6200:63;;6155:118;5956:324;;;;;:::o;6286:278::-;6353:6;6402:2;6390:9;6381:7;6377:23;6373:32;6370:2;;;6418:1;6415;6408:12;6370:2;6461:1;6486:61;6539:7;6530:6;6519:9;6515:22;6486:61;:::i;:::-;6476:71;;6432:125;6360:204;;;;:::o;6570:262::-;6629:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:2;;;6694:1;6691;6684:12;6646:2;6737:1;6762:53;6807:7;6798:6;6787:9;6783:22;6762:53;:::i;:::-;6752:63;;6708:117;6636:196;;;;:::o;6838:260::-;6896:6;6945:2;6933:9;6924:7;6920:23;6916:32;6913:2;;;6961:1;6958;6951:12;6913:2;7004:1;7029:52;7073:7;7064:6;7053:9;7049:22;7029:52;:::i;:::-;7019:62;;6975:116;6903:195;;;;:::o;7104:282::-;7173:6;7222:2;7210:9;7201:7;7197:23;7193:32;7190:2;;;7238:1;7235;7228:12;7190:2;7281:1;7306:63;7361:7;7352:6;7341:9;7337:22;7306:63;:::i;:::-;7296:73;;7252:127;7180:206;;;;:::o;7392:375::-;7461:6;7510:2;7498:9;7489:7;7485:23;7481:32;7478:2;;;7526:1;7523;7516:12;7478:2;7597:1;7586:9;7582:17;7569:31;7627:18;7619:6;7616:30;7613:2;;;7659:1;7656;7649:12;7613:2;7687:63;7742:7;7733:6;7722:9;7718:22;7687:63;:::i;:::-;7677:73;;7540:220;7468:299;;;;:::o;7773:262::-;7832:6;7881:2;7869:9;7860:7;7856:23;7852:32;7849:2;;;7897:1;7894;7887:12;7849:2;7940:1;7965:53;8010:7;8001:6;7990:9;7986:22;7965:53;:::i;:::-;7955:63;;7911:117;7839:196;;;;:::o;8041:284::-;8111:6;8160:2;8148:9;8139:7;8135:23;8131:32;8128:2;;;8176:1;8173;8166:12;8128:2;8219:1;8244:64;8300:7;8291:6;8280:9;8276:22;8244:64;:::i;:::-;8234:74;;8190:128;8118:207;;;;:::o;8331:407::-;8399:6;8407;8456:2;8444:9;8435:7;8431:23;8427:32;8424:2;;;8472:1;8469;8462:12;8424:2;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8642:2;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8613:118;8414:324;;;;;:::o;8744:570::-;8839:6;8847;8855;8904:2;8892:9;8883:7;8879:23;8875:32;8872:2;;;8920:1;8917;8910:12;8872:2;8963:1;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8934:117;9118:2;9107:9;9103:18;9090:32;9149:18;9141:6;9138:30;9135:2;;;9181:1;9178;9171:12;9135:2;9217:80;9289:7;9280:6;9269:9;9265:22;9217:80;:::i;:::-;9199:98;;;;9061:246;8862:452;;;;;:::o;9320:179::-;9389:10;9410:46;9452:3;9444:6;9410:46;:::i;:::-;9488:4;9483:3;9479:14;9465:28;;9400:99;;;;:::o;9505:118::-;9592:24;9610:5;9592:24;:::i;:::-;9587:3;9580:37;9570:53;;:::o;9629:157::-;9734:45;9754:24;9772:5;9754:24;:::i;:::-;9734:45;:::i;:::-;9729:3;9722:58;9712:74;;:::o;9822:470::-;9950:3;9971:86;10050:6;10045:3;9971:86;:::i;:::-;9964:93;;10081:66;10073:6;10070:78;10067:2;;;10161:1;10158;10151:12;10067:2;10196:4;10188:6;10184:17;10174:27;;10211:43;10247:6;10242:3;10235:5;10211:43;:::i;:::-;10279:6;10274:3;10270:16;10263:23;;9954:338;;;;;:::o;10328:732::-;10447:3;10476:54;10524:5;10476:54;:::i;:::-;10546:86;10625:6;10620:3;10546:86;:::i;:::-;10539:93;;10656:56;10706:5;10656:56;:::i;:::-;10735:7;10766:1;10751:284;10776:6;10773:1;10770:13;10751:284;;;10852:6;10846:13;10879:63;10938:3;10923:13;10879:63;:::i;:::-;10872:70;;10965:60;11018:6;10965:60;:::i;:::-;10955:70;;10811:224;10798:1;10795;10791:9;10786:14;;10751:284;;;10755:14;11051:3;11044:10;;10452:608;;;;;;;:::o;11066:109::-;11147:21;11162:5;11147:21;:::i;:::-;11142:3;11135:34;11125:50;;:::o;11181:118::-;11268:24;11286:5;11268:24;:::i;:::-;11263:3;11256:37;11246:53;;:::o;11305:157::-;11410:45;11430:24;11448:5;11430:24;:::i;:::-;11410:45;:::i;:::-;11405:3;11398:58;11388:74;;:::o;11468:360::-;11554:3;11582:38;11614:5;11582:38;:::i;:::-;11636:70;11699:6;11694:3;11636:70;:::i;:::-;11629:77;;11715:52;11760:6;11755:3;11748:4;11741:5;11737:16;11715:52;:::i;:::-;11792:29;11814:6;11792:29;:::i;:::-;11787:3;11783:39;11776:46;;11558:270;;;;;:::o;11834:161::-;11936:52;11982:5;11936:52;:::i;:::-;11931:3;11924:65;11914:81;;:::o;12001:364::-;12089:3;12117:39;12150:5;12117:39;:::i;:::-;12172:71;12236:6;12231:3;12172:71;:::i;:::-;12165:78;;12252:52;12297:6;12292:3;12285:4;12278:5;12274:16;12252:52;:::i;:::-;12329:29;12351:6;12329:29;:::i;:::-;12324:3;12320:39;12313:46;;12093:272;;;;;:::o;12371:377::-;12477:3;12505:39;12538:5;12505:39;:::i;:::-;12560:89;12642:6;12637:3;12560:89;:::i;:::-;12553:96;;12658:52;12703:6;12698:3;12691:4;12684:5;12680:16;12658:52;:::i;:::-;12735:6;12730:3;12726:16;12719:23;;12481:267;;;;;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12900:220;;;:::o;13126:366::-;13268:3;13289:67;13353:2;13348:3;13289:67;:::i;:::-;13282:74;;13365:93;13454:3;13365:93;:::i;:::-;13483:2;13478:3;13474:12;13467:19;;13272:220;;;:::o;13498:366::-;13640:3;13661:67;13725:2;13720:3;13661:67;:::i;:::-;13654:74;;13737:93;13826:3;13737:93;:::i;:::-;13855:2;13850:3;13846:12;13839:19;;13644:220;;;:::o;13870:366::-;14012:3;14033:67;14097:2;14092:3;14033:67;:::i;:::-;14026:74;;14109:93;14198:3;14109:93;:::i;:::-;14227:2;14222:3;14218:12;14211:19;;14016:220;;;:::o;14242:366::-;14384:3;14405:67;14469:2;14464:3;14405:67;:::i;:::-;14398:74;;14481:93;14570:3;14481:93;:::i;:::-;14599:2;14594:3;14590:12;14583:19;;14388:220;;;:::o;14614:366::-;14756:3;14777:67;14841:2;14836:3;14777:67;:::i;:::-;14770:74;;14853:93;14942:3;14853:93;:::i;:::-;14971:2;14966:3;14962:12;14955:19;;14760:220;;;:::o;14986:366::-;15128:3;15149:67;15213:2;15208:3;15149:67;:::i;:::-;15142:74;;15225:93;15314:3;15225:93;:::i;:::-;15343:2;15338:3;15334:12;15327:19;;15132:220;;;:::o;15358:366::-;15500:3;15521:67;15585:2;15580:3;15521:67;:::i;:::-;15514:74;;15597:93;15686:3;15597:93;:::i;:::-;15715:2;15710:3;15706:12;15699:19;;15504:220;;;:::o;15730:366::-;15872:3;15893:67;15957:2;15952:3;15893:67;:::i;:::-;15886:74;;15969:93;16058:3;15969:93;:::i;:::-;16087:2;16082:3;16078:12;16071:19;;15876:220;;;:::o;16102:366::-;16244:3;16265:67;16329:2;16324:3;16265:67;:::i;:::-;16258:74;;16341:93;16430:3;16341:93;:::i;:::-;16459:2;16454:3;16450:12;16443:19;;16248:220;;;:::o;16474:366::-;16616:3;16637:67;16701:2;16696:3;16637:67;:::i;:::-;16630:74;;16713:93;16802:3;16713:93;:::i;:::-;16831:2;16826:3;16822:12;16815:19;;16620:220;;;:::o;16846:366::-;16988:3;17009:67;17073:2;17068:3;17009:67;:::i;:::-;17002:74;;17085:93;17174:3;17085:93;:::i;:::-;17203:2;17198:3;17194:12;17187:19;;16992:220;;;:::o;17218:366::-;17360:3;17381:67;17445:2;17440:3;17381:67;:::i;:::-;17374:74;;17457:93;17546:3;17457:93;:::i;:::-;17575:2;17570:3;17566:12;17559:19;;17364:220;;;:::o;17590:366::-;17732:3;17753:67;17817:2;17812:3;17753:67;:::i;:::-;17746:74;;17829:93;17918:3;17829:93;:::i;:::-;17947:2;17942:3;17938:12;17931:19;;17736:220;;;:::o;17962:366::-;18104:3;18125:67;18189:2;18184:3;18125:67;:::i;:::-;18118:74;;18201:93;18290:3;18201:93;:::i;:::-;18319:2;18314:3;18310:12;18303:19;;18108:220;;;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18480:220;;;:::o;18706:366::-;18848:3;18869:67;18933:2;18928:3;18869:67;:::i;:::-;18862:74;;18945:93;19034:3;18945:93;:::i;:::-;19063:2;19058:3;19054:12;19047:19;;18852:220;;;:::o;19078:366::-;19220:3;19241:67;19305:2;19300:3;19241:67;:::i;:::-;19234:74;;19317:93;19406:3;19317:93;:::i;:::-;19435:2;19430:3;19426:12;19419:19;;19224:220;;;:::o;19450:366::-;19592:3;19613:67;19677:2;19672:3;19613:67;:::i;:::-;19606:74;;19689:93;19778:3;19689:93;:::i;:::-;19807:2;19802:3;19798:12;19791:19;;19596:220;;;:::o;19822:366::-;19964:3;19985:67;20049:2;20044:3;19985:67;:::i;:::-;19978:74;;20061:93;20150:3;20061:93;:::i;:::-;20179:2;20174:3;20170:12;20163:19;;19968:220;;;:::o;20194:366::-;20336:3;20357:67;20421:2;20416:3;20357:67;:::i;:::-;20350:74;;20433:93;20522:3;20433:93;:::i;:::-;20551:2;20546:3;20542:12;20535:19;;20340:220;;;:::o;20566:366::-;20708:3;20729:67;20793:2;20788:3;20729:67;:::i;:::-;20722:74;;20805:93;20894:3;20805:93;:::i;:::-;20923:2;20918:3;20914:12;20907:19;;20712:220;;;:::o;20938:366::-;21080:3;21101:67;21165:2;21160:3;21101:67;:::i;:::-;21094:74;;21177:93;21266:3;21177:93;:::i;:::-;21295:2;21290:3;21286:12;21279:19;;21084:220;;;:::o;21310:366::-;21452:3;21473:67;21537:2;21532:3;21473:67;:::i;:::-;21466:74;;21549:93;21638:3;21549:93;:::i;:::-;21667:2;21662:3;21658:12;21651:19;;21456:220;;;:::o;21682:398::-;21841:3;21862:83;21943:1;21938:3;21862:83;:::i;:::-;21855:90;;21954:93;22043:3;21954:93;:::i;:::-;22072:1;22067:3;22063:11;22056:18;;21845:235;;;:::o;22086:366::-;22228:3;22249:67;22313:2;22308:3;22249:67;:::i;:::-;22242:74;;22325:93;22414:3;22325:93;:::i;:::-;22443:2;22438:3;22434:12;22427:19;;22232:220;;;:::o;22458:366::-;22600:3;22621:67;22685:2;22680:3;22621:67;:::i;:::-;22614:74;;22697:93;22786:3;22697:93;:::i;:::-;22815:2;22810:3;22806:12;22799:19;;22604:220;;;:::o;22830:366::-;22972:3;22993:67;23057:2;23052:3;22993:67;:::i;:::-;22986:74;;23069:93;23158:3;23069:93;:::i;:::-;23187:2;23182:3;23178:12;23171:19;;22976:220;;;:::o;23202:108::-;23279:24;23297:5;23279:24;:::i;:::-;23274:3;23267:37;23257:53;;:::o;23316:118::-;23403:24;23421:5;23403:24;:::i;:::-;23398:3;23391:37;23381:53;;:::o;23440:256::-;23552:3;23567:75;23638:3;23629:6;23567:75;:::i;:::-;23667:2;23662:3;23658:12;23651:19;;23687:3;23680:10;;23556:140;;;;:::o;23702:397::-;23842:3;23857:75;23928:3;23919:6;23857:75;:::i;:::-;23957:2;23952:3;23948:12;23941:19;;23970:75;24041:3;24032:6;23970:75;:::i;:::-;24070:2;24065:3;24061:12;24054:19;;24090:3;24083:10;;23846:253;;;;;:::o;24105:435::-;24285:3;24307:95;24398:3;24389:6;24307:95;:::i;:::-;24300:102;;24419:95;24510:3;24501:6;24419:95;:::i;:::-;24412:102;;24531:3;24524:10;;24289:251;;;;;:::o;24546:379::-;24730:3;24752:147;24895:3;24752:147;:::i;:::-;24745:154;;24916:3;24909:10;;24734:191;;;:::o;24931:222::-;25024:4;25062:2;25051:9;25047:18;25039:26;;25075:71;25143:1;25132:9;25128:17;25119:6;25075:71;:::i;:::-;25029:124;;;;:::o;25159:640::-;25354:4;25392:3;25381:9;25377:19;25369:27;;25406:71;25474:1;25463:9;25459:17;25450:6;25406:71;:::i;:::-;25487:72;25555:2;25544:9;25540:18;25531:6;25487:72;:::i;:::-;25569;25637:2;25626:9;25622:18;25613:6;25569:72;:::i;:::-;25688:9;25682:4;25678:20;25673:2;25662:9;25658:18;25651:48;25716:76;25787:4;25778:6;25716:76;:::i;:::-;25708:84;;25359:440;;;;;;;:::o;25805:503::-;25986:4;26024:2;26013:9;26009:18;26001:26;;26037:71;26105:1;26094:9;26090:17;26081:6;26037:71;:::i;:::-;26155:9;26149:4;26145:20;26140:2;26129:9;26125:18;26118:48;26183:118;26296:4;26287:6;26279;26183:118;:::i;:::-;26175:126;;25991:317;;;;;;:::o;26314:373::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:108;26675:4;26666:6;26572:108;:::i;:::-;26564:116;;26462:225;;;;:::o;26693:210::-;26780:4;26818:2;26807:9;26803:18;26795:26;;26831:65;26893:1;26882:9;26878:17;26869:6;26831:65;:::i;:::-;26785:118;;;;:::o;26909:222::-;27002:4;27040:2;27029:9;27025:18;27017:26;;27053:71;27121:1;27110:9;27106:17;27097:6;27053:71;:::i;:::-;27007:124;;;;:::o;27137:252::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27296:86;27379:1;27368:9;27364:17;27355:6;27296:86;:::i;:::-;27250:139;;;;:::o;27395:313::-;27508:4;27546:2;27535:9;27531:18;27523:26;;27595:9;27589:4;27585:20;27581:1;27570:9;27566:17;27559:47;27623:78;27696:4;27687:6;27623:78;:::i;:::-;27615:86;;27513:195;;;;:::o;27714:419::-;27880:4;27918:2;27907:9;27903:18;27895:26;;27967:9;27961:4;27957:20;27953:1;27942:9;27938:17;27931:47;27995:131;28121:4;27995:131;:::i;:::-;27987:139;;27885:248;;;:::o;28139:419::-;28305:4;28343:2;28332:9;28328:18;28320:26;;28392:9;28386:4;28382:20;28378:1;28367:9;28363:17;28356:47;28420:131;28546:4;28420:131;:::i;:::-;28412:139;;28310:248;;;:::o;28564:419::-;28730:4;28768:2;28757:9;28753:18;28745:26;;28817:9;28811:4;28807:20;28803:1;28792:9;28788:17;28781:47;28845:131;28971:4;28845:131;:::i;:::-;28837:139;;28735:248;;;:::o;28989:419::-;29155:4;29193:2;29182:9;29178:18;29170:26;;29242:9;29236:4;29232:20;29228:1;29217:9;29213:17;29206:47;29270:131;29396:4;29270:131;:::i;:::-;29262:139;;29160:248;;;:::o;29414:419::-;29580:4;29618:2;29607:9;29603:18;29595:26;;29667:9;29661:4;29657:20;29653:1;29642:9;29638:17;29631:47;29695:131;29821:4;29695:131;:::i;:::-;29687:139;;29585:248;;;:::o;29839:419::-;30005:4;30043:2;30032:9;30028:18;30020:26;;30092:9;30086:4;30082:20;30078:1;30067:9;30063:17;30056:47;30120:131;30246:4;30120:131;:::i;:::-;30112:139;;30010:248;;;:::o;30264:419::-;30430:4;30468:2;30457:9;30453:18;30445:26;;30517:9;30511:4;30507:20;30503:1;30492:9;30488:17;30481:47;30545:131;30671:4;30545:131;:::i;:::-;30537:139;;30435:248;;;:::o;30689:419::-;30855:4;30893:2;30882:9;30878:18;30870:26;;30942:9;30936:4;30932:20;30928:1;30917:9;30913:17;30906:47;30970:131;31096:4;30970:131;:::i;:::-;30962:139;;30860:248;;;:::o;31114:419::-;31280:4;31318:2;31307:9;31303:18;31295:26;;31367:9;31361:4;31357:20;31353:1;31342:9;31338:17;31331:47;31395:131;31521:4;31395:131;:::i;:::-;31387:139;;31285:248;;;:::o;31539:419::-;31705:4;31743:2;31732:9;31728:18;31720:26;;31792:9;31786:4;31782:20;31778:1;31767:9;31763:17;31756:47;31820:131;31946:4;31820:131;:::i;:::-;31812:139;;31710:248;;;:::o;31964:419::-;32130:4;32168:2;32157:9;32153:18;32145:26;;32217:9;32211:4;32207:20;32203:1;32192:9;32188:17;32181:47;32245:131;32371:4;32245:131;:::i;:::-;32237:139;;32135:248;;;:::o;32389:419::-;32555:4;32593:2;32582:9;32578:18;32570:26;;32642:9;32636:4;32632:20;32628:1;32617:9;32613:17;32606:47;32670:131;32796:4;32670:131;:::i;:::-;32662:139;;32560:248;;;:::o;32814:419::-;32980:4;33018:2;33007:9;33003:18;32995:26;;33067:9;33061:4;33057:20;33053:1;33042:9;33038:17;33031:47;33095:131;33221:4;33095:131;:::i;:::-;33087:139;;32985:248;;;:::o;33239:419::-;33405:4;33443:2;33432:9;33428:18;33420:26;;33492:9;33486:4;33482:20;33478:1;33467:9;33463:17;33456:47;33520:131;33646:4;33520:131;:::i;:::-;33512:139;;33410:248;;;:::o;33664:419::-;33830:4;33868:2;33857:9;33853:18;33845:26;;33917:9;33911:4;33907:20;33903:1;33892:9;33888:17;33881:47;33945:131;34071:4;33945:131;:::i;:::-;33937:139;;33835:248;;;:::o;34089:419::-;34255:4;34293:2;34282:9;34278:18;34270:26;;34342:9;34336:4;34332:20;34328:1;34317:9;34313:17;34306:47;34370:131;34496:4;34370:131;:::i;:::-;34362:139;;34260:248;;;:::o;34514:419::-;34680:4;34718:2;34707:9;34703:18;34695:26;;34767:9;34761:4;34757:20;34753:1;34742:9;34738:17;34731:47;34795:131;34921:4;34795:131;:::i;:::-;34787:139;;34685:248;;;:::o;34939:419::-;35105:4;35143:2;35132:9;35128:18;35120:26;;35192:9;35186:4;35182:20;35178:1;35167:9;35163:17;35156:47;35220:131;35346:4;35220:131;:::i;:::-;35212:139;;35110:248;;;:::o;35364:419::-;35530:4;35568:2;35557:9;35553:18;35545:26;;35617:9;35611:4;35607:20;35603:1;35592:9;35588:17;35581:47;35645:131;35771:4;35645:131;:::i;:::-;35637:139;;35535:248;;;:::o;35789:419::-;35955:4;35993:2;35982:9;35978:18;35970:26;;36042:9;36036:4;36032:20;36028:1;36017:9;36013:17;36006:47;36070:131;36196:4;36070:131;:::i;:::-;36062:139;;35960:248;;;:::o;36214:419::-;36380:4;36418:2;36407:9;36403:18;36395:26;;36467:9;36461:4;36457:20;36453:1;36442:9;36438:17;36431:47;36495:131;36621:4;36495:131;:::i;:::-;36487:139;;36385:248;;;:::o;36639:419::-;36805:4;36843:2;36832:9;36828:18;36820:26;;36892:9;36886:4;36882:20;36878:1;36867:9;36863:17;36856:47;36920:131;37046:4;36920:131;:::i;:::-;36912:139;;36810:248;;;:::o;37064:419::-;37230:4;37268:2;37257:9;37253:18;37245:26;;37317:9;37311:4;37307:20;37303:1;37292:9;37288:17;37281:47;37345:131;37471:4;37345:131;:::i;:::-;37337:139;;37235:248;;;:::o;37489:419::-;37655:4;37693:2;37682:9;37678:18;37670:26;;37742:9;37736:4;37732:20;37728:1;37717:9;37713:17;37706:47;37770:131;37896:4;37770:131;:::i;:::-;37762:139;;37660:248;;;:::o;37914:419::-;38080:4;38118:2;38107:9;38103:18;38095:26;;38167:9;38161:4;38157:20;38153:1;38142:9;38138:17;38131:47;38195:131;38321:4;38195:131;:::i;:::-;38187:139;;38085:248;;;:::o;38339:419::-;38505:4;38543:2;38532:9;38528:18;38520:26;;38592:9;38586:4;38582:20;38578:1;38567:9;38563:17;38556:47;38620:131;38746:4;38620:131;:::i;:::-;38612:139;;38510:248;;;:::o;38764:419::-;38930:4;38968:2;38957:9;38953:18;38945:26;;39017:9;39011:4;39007:20;39003:1;38992:9;38988:17;38981:47;39045:131;39171:4;39045:131;:::i;:::-;39037:139;;38935:248;;;:::o;39189:222::-;39282:4;39320:2;39309:9;39305:18;39297:26;;39333:71;39401:1;39390:9;39386:17;39377:6;39333:71;:::i;:::-;39287:124;;;;:::o;39417:129::-;39451:6;39478:20;;:::i;:::-;39468:30;;39507:33;39535:4;39527:6;39507:33;:::i;:::-;39458:88;;;:::o;39552:75::-;39585:6;39618:2;39612:9;39602:19;;39592:35;:::o;39633:307::-;39694:4;39784:18;39776:6;39773:30;39770:2;;;39806:18;;:::i;:::-;39770:2;39844:29;39866:6;39844:29;:::i;:::-;39836:37;;39928:4;39922;39918:15;39910:23;;39699:241;;;:::o;39946:308::-;40008:4;40098:18;40090:6;40087:30;40084:2;;;40120:18;;:::i;:::-;40084:2;40158:29;40180:6;40158:29;:::i;:::-;40150:37;;40242:4;40236;40232:15;40224:23;;40013:241;;;:::o;40260:132::-;40327:4;40350:3;40342:11;;40380:4;40375:3;40371:14;40363:22;;40332:60;;;:::o;40398:114::-;40465:6;40499:5;40493:12;40483:22;;40472:40;;;:::o;40518:98::-;40569:6;40603:5;40597:12;40587:22;;40576:40;;;:::o;40622:99::-;40674:6;40708:5;40702:12;40692:22;;40681:40;;;:::o;40727:113::-;40797:4;40829;40824:3;40820:14;40812:22;;40802:38;;;:::o;40846:184::-;40945:11;40979:6;40974:3;40967:19;41019:4;41014:3;41010:14;40995:29;;40957:73;;;;:::o;41036:184::-;41135:11;41169:6;41164:3;41157:19;41209:4;41204:3;41200:14;41185:29;;41147:73;;;;:::o;41226:168::-;41309:11;41343:6;41338:3;41331:19;41383:4;41378:3;41374:14;41359:29;;41321:73;;;;:::o;41400:147::-;41501:11;41538:3;41523:18;;41513:34;;;;:::o;41553:169::-;41637:11;41671:6;41666:3;41659:19;41711:4;41706:3;41702:14;41687:29;;41649:73;;;;:::o;41728:148::-;41830:11;41867:3;41852:18;;41842:34;;;;:::o;41882:305::-;41922:3;41941:20;41959:1;41941:20;:::i;:::-;41936:25;;41975:20;41993:1;41975:20;:::i;:::-;41970:25;;42129:1;42061:66;42057:74;42054:1;42051:81;42048:2;;;42135:18;;:::i;:::-;42048:2;42179:1;42176;42172:9;42165:16;;41926:261;;;;:::o;42193:185::-;42233:1;42250:20;42268:1;42250:20;:::i;:::-;42245:25;;42284:20;42302:1;42284:20;:::i;:::-;42279:25;;42323:1;42313:2;;42328:18;;:::i;:::-;42313:2;42370:1;42367;42363:9;42358:14;;42235:143;;;;:::o;42384:348::-;42424:7;42447:20;42465:1;42447:20;:::i;:::-;42442:25;;42481:20;42499:1;42481:20;:::i;:::-;42476:25;;42669:1;42601:66;42597:74;42594:1;42591:81;42586:1;42579:9;42572:17;42568:105;42565:2;;;42676:18;;:::i;:::-;42565:2;42724:1;42721;42717:9;42706:20;;42432:300;;;;:::o;42738:191::-;42778:4;42798:20;42816:1;42798:20;:::i;:::-;42793:25;;42832:20;42850:1;42832:20;:::i;:::-;42827:25;;42871:1;42868;42865:8;42862:2;;;42876:18;;:::i;:::-;42862:2;42921:1;42918;42914:9;42906:17;;42783:146;;;;:::o;42935:96::-;42972:7;43001:24;43019:5;43001:24;:::i;:::-;42990:35;;42980:51;;;:::o;43037:90::-;43071:7;43114:5;43107:13;43100:21;43089:32;;43079:48;;;:::o;43133:77::-;43170:7;43199:5;43188:16;;43178:32;;;:::o;43216:149::-;43252:7;43292:66;43285:5;43281:78;43270:89;;43260:105;;;:::o;43371:126::-;43408:7;43448:42;43441:5;43437:54;43426:65;;43416:81;;;:::o;43503:77::-;43540:7;43569:5;43558:16;;43548:32;;;:::o;43586:156::-;43651:9;43684:52;43730:5;43684:52;:::i;:::-;43671:65;;43661:81;;;:::o;43748:128::-;43813:9;43846:24;43864:5;43846:24;:::i;:::-;43833:37;;43823:53;;;:::o;43882:154::-;43966:6;43961:3;43956;43943:30;44028:1;44019:6;44014:3;44010:16;44003:27;43933:103;;;:::o;44042:307::-;44110:1;44120:113;44134:6;44131:1;44128:13;44120:113;;;44219:1;44214:3;44210:11;44204:18;44200:1;44195:3;44191:11;44184:39;44156:2;44153:1;44149:10;44144:15;;44120:113;;;44251:6;44248:1;44245:13;44242:2;;;44331:1;44322:6;44317:3;44313:16;44306:27;44242:2;44091:258;;;;:::o;44355:320::-;44399:6;44436:1;44430:4;44426:12;44416:22;;44483:1;44477:4;44473:12;44504:18;44494:2;;44560:4;44552:6;44548:17;44538:27;;44494:2;44622;44614:6;44611:14;44591:18;44588:38;44585:2;;;44641:18;;:::i;:::-;44585:2;44406:269;;;;:::o;44681:281::-;44764:27;44786:4;44764:27;:::i;:::-;44756:6;44752:40;44894:6;44882:10;44879:22;44858:18;44846:10;44843:34;44840:62;44837:2;;;44905:18;;:::i;:::-;44837:2;44945:10;44941:2;44934:22;44724:238;;;:::o;44968:233::-;45007:3;45030:24;45048:5;45030:24;:::i;:::-;45021:33;;45076:66;45069:5;45066:77;45063:2;;;45146:18;;:::i;:::-;45063:2;45193:1;45186:5;45182:13;45175:20;;45011:190;;;:::o;45207:100::-;45246:7;45275:26;45295:5;45275:26;:::i;:::-;45264:37;;45254:53;;;:::o;45313:79::-;45352:7;45381:5;45370:16;;45360:32;;;:::o;45398:94::-;45437:7;45466:20;45480:5;45466:20;:::i;:::-;45455:31;;45445:47;;;:::o;45498:176::-;45530:1;45547:20;45565:1;45547:20;:::i;:::-;45542:25;;45581:20;45599:1;45581:20;:::i;:::-;45576:25;;45620:1;45610:2;;45625:18;;:::i;:::-;45610:2;45666:1;45663;45659:9;45654:14;;45532:142;;;;:::o;45680:180::-;45728:77;45725:1;45718:88;45825:4;45822:1;45815:15;45849:4;45846:1;45839:15;45866:180;45914:77;45911:1;45904:88;46011:4;46008:1;46001:15;46035:4;46032:1;46025:15;46052:180;46100:77;46097:1;46090:88;46197:4;46194:1;46187:15;46221:4;46218:1;46211:15;46238:180;46286:77;46283:1;46276:88;46383:4;46380:1;46373:15;46407:4;46404:1;46397:15;46424:102;46465:6;46516:2;46512:7;46507:2;46500:5;46496:14;46492:28;46482:38;;46472:54;;;:::o;46532:94::-;46565:8;46613:5;46609:2;46605:14;46584:35;;46574:52;;;:::o;46632:230::-;46772:34;46768:1;46760:6;46756:14;46749:58;46841:13;46836:2;46828:6;46824:15;46817:38;46738:124;:::o;46868:237::-;47008:34;47004:1;46996:6;46992:14;46985:58;47077:20;47072:2;47064:6;47060:15;47053:45;46974:131;:::o;47111:225::-;47251:34;47247:1;47239:6;47235:14;47228:58;47320:8;47315:2;47307:6;47303:15;47296:33;47217:119;:::o;47342:178::-;47482:30;47478:1;47470:6;47466:14;47459:54;47448:72;:::o;47526:168::-;47666:20;47662:1;47654:6;47650:14;47643:44;47632:62;:::o;47700:223::-;47840:34;47836:1;47828:6;47824:14;47817:58;47909:6;47904:2;47896:6;47892:15;47885:31;47806:117;:::o;47929:175::-;48069:27;48065:1;48057:6;48053:14;48046:51;48035:69;:::o;48110:169::-;48250:21;48246:1;48238:6;48234:14;48227:45;48216:63;:::o;48285:231::-;48425:34;48421:1;48413:6;48409:14;48402:58;48494:14;48489:2;48481:6;48477:15;48470:39;48391:125;:::o;48522:173::-;48662:25;48658:1;48650:6;48646:14;48639:49;48628:67;:::o;48701:243::-;48841:34;48837:1;48829:6;48825:14;48818:58;48910:26;48905:2;48897:6;48893:15;48886:51;48807:137;:::o;48950:165::-;49090:17;49086:1;49078:6;49074:14;49067:41;49056:59;:::o;49121:229::-;49261:34;49257:1;49249:6;49245:14;49238:58;49330:12;49325:2;49317:6;49313:15;49306:37;49227:123;:::o;49356:228::-;49496:34;49492:1;49484:6;49480:14;49473:58;49565:11;49560:2;49552:6;49548:15;49541:36;49462:122;:::o;49590:173::-;49730:25;49726:1;49718:6;49714:14;49707:49;49696:67;:::o;49769:165::-;49909:17;49905:1;49897:6;49893:14;49886:41;49875:59;:::o;49940:171::-;50080:23;50076:1;50068:6;50064:14;50057:47;50046:65;:::o;50117:182::-;50257:34;50253:1;50245:6;50241:14;50234:58;50223:76;:::o;50305:231::-;50445:34;50441:1;50433:6;50429:14;50422:58;50514:14;50509:2;50501:6;50497:15;50490:39;50411:125;:::o;50542:182::-;50682:34;50678:1;50670:6;50666:14;50659:58;50648:76;:::o;50730:228::-;50870:34;50866:1;50858:6;50854:14;50847:58;50939:11;50934:2;50926:6;50922:15;50915:36;50836:122;:::o;50964:234::-;51104:34;51100:1;51092:6;51088:14;51081:58;51173:17;51168:2;51160:6;51156:15;51149:42;51070:128;:::o;51204:220::-;51344:34;51340:1;51332:6;51328:14;51321:58;51413:3;51408:2;51400:6;51396:15;51389:28;51310:114;:::o;51430:176::-;51570:28;51566:1;51558:6;51554:14;51547:52;51536:70;:::o;51612:114::-;51718:8;:::o;51732:236::-;51872:34;51868:1;51860:6;51856:14;51849:58;51941:19;51936:2;51928:6;51924:15;51917:44;51838:130;:::o;51974:175::-;52114:27;52110:1;52102:6;52098:14;52091:51;52080:69;:::o;52155:231::-;52295:34;52291:1;52283:6;52279:14;52272:58;52364:14;52359:2;52351:6;52347:15;52340:39;52261:125;:::o;52392:122::-;52465:24;52483:5;52465:24;:::i;:::-;52458:5;52455:35;52445:2;;52504:1;52501;52494:12;52445:2;52435:79;:::o;52520:116::-;52590:21;52605:5;52590:21;:::i;:::-;52583:5;52580:32;52570:2;;52626:1;52623;52616:12;52570:2;52560:76;:::o;52642:122::-;52715:24;52733:5;52715:24;:::i;:::-;52708:5;52705:35;52695:2;;52754:1;52751;52744:12;52695:2;52685:79;:::o;52770:120::-;52842:23;52859:5;52842:23;:::i;:::-;52835:5;52832:34;52822:2;;52880:1;52877;52870:12;52822:2;52812:78;:::o;52896:122::-;52969:24;52987:5;52969:24;:::i;:::-;52962:5;52959:35;52949:2;;53008:1;53005;52998:12;52949:2;52939:79;:::o

Swarm Source

ipfs://5021d94bf5739e38f61d3319458d3b84f3ec3b8dfc9556b1077c4f6fa66dc34c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.