ETH Price: $3,386.90 (-0.85%)
Gas: 11 Gwei

Token

MetaGenesis (MG)
 

Overview

Max Total Supply

1,406 MG

Holders

314

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 MG
0x772906e12a775e3727d158f3f749e1e8df044376
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:
MetaGenesis

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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


pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol


pragma solidity ^0.8.0;

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

// File: openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol


pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// File: openzeppelin-solidity/contracts/utils/Address.sol


pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: openzeppelin-solidity/contracts/utils/Context.sol


pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: openzeppelin-solidity/contracts/utils/Strings.sol


pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: openzeppelin-solidity/contracts/utils/introspection/ERC165.sol


pragma solidity ^0.8.0;


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

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol


pragma solidity ^0.8.0;


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: openzeppelin-solidity/contracts/access/Ownable.sol


pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/Metagenesis.sol

pragma solidity ^0.8.7;



contract MetaGenesis is ERC721, Ownable {

    uint public preMintPrice = 0.08 ether;
    uint public mintPrice = 0.08 ether;
    uint public airdropItems = 70;
    uint public maxItems = 9999;
    uint public airdropMintCount = 0;
    uint public totalSupply = 0;
    uint public maxItemsPerPreMint = 3; 
    uint public maxItemsPerTx = 5; 
    string public _baseTokenURI = "https://ipfs.io/ipns/conf.metagenesis.world/";
    bool public preMintPaused = true;
    bool public publicMintPaused = true;
    bool public airdropPaused = true;

    mapping(address => uint) public preMintLists; // Maps address to how many they can premint

    mapping(address => uint) public airdropLists; // Maps address to how many they can premint


    event Mint(address indexed owner, uint indexed tokenId);

    constructor() ERC721("MetaGenesis", "MG") {}

    receive() external payable {}

    function preMint() external payable {
        require(!preMintPaused, "preMint: Paused");
        uint remainder = msg.value % preMintPrice;
        uint amount = msg.value / preMintPrice;
        require(remainder == 0, "preMint: Send a divisible amount of eth");
        require(amount <= 3, "preMint: max 3 per tx");
        require(amount <= preMintLists[msg.sender], "preMint: Amount greater than allocation");
        _mintWithoutValidation(msg.sender, amount);
    }

    function airdropMint() external payable {
        require(!airdropPaused, "airdropMint: Paused");
        uint amount = 1;
        require(amount <= airdropLists[msg.sender], "airdropMint: Amount greater than allocation");
        airdropMintCount += amount;
        airdropLists[msg.sender] -= amount;
        _mintWithoutValidation(msg.sender, amount);
    }
    
    function publicMint() external payable {
        require(!publicMintPaused, "publicMint: Paused");
        uint remainder = msg.value % mintPrice;
        uint amount = msg.value / mintPrice;
        require(remainder == 0, "publicMint: Send a divisible amount of eth");
        require(amount <= maxItemsPerTx, "publicMint: Max 5 per tx");
        require(totalSupply - airdropMintCount + amount <= maxItems - airdropItems, "publicMint: Surpasses cap");
        _mintWithoutValidation(msg.sender, amount);
    }

    function _mintWithoutValidation(address to, uint amount) internal {
        require(totalSupply + amount <= maxItems, "mintWithoutValidation: Sold out");
        for (uint i = 0; i < amount; i++) {
            totalSupply += 1;
            _mint(to, totalSupply);
            emit Mint(to, totalSupply);
        }
    }

    // ADMIN FUNCTIONALITY

    function addToWhitelist(address[] memory toAdd) external onlyOwner {
        for(uint i = 0; i < toAdd.length; i++) {
            preMintLists[toAdd[i]] = maxItemsPerPreMint;
        }
    }

    function addToAirdroplist(address[] memory toAdd) external onlyOwner {
        for(uint i = 0; i < toAdd.length; i++) {
            airdropLists[toAdd[i]] = 1;
        }
    }

    function setPreMintPaused(bool _preMintPaused) external onlyOwner {
        preMintPaused = _preMintPaused;
    }

    function setPublicMintPaused(bool _publicMintPaused) external onlyOwner {
        publicMintPaused = _publicMintPaused;
    }

    function setAirdropPaused(bool _airdropPaused) external onlyOwner {
        airdropPaused = _airdropPaused;
    }

    function setBaseTokenURI(string memory __baseTokenURI) external onlyOwner {
        _baseTokenURI = __baseTokenURI;
    }

    /**
     * @dev Withdraw the contract balance to the dev address or splitter address
     */

    function withdrawAll() external onlyOwner {
        uint amount = address(this).balance;
        sendEth(0x7Fb563E33C220BfD102a611A95AE55d50806BC58, amount);
    }
    function sendEth(address to, uint amount) internal {
        (bool success,) = to.call{value: amount}("");
        require(success, "Failed to send ether");
    }

    // METADATA FUNCTIONALITY

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"toAdd","type":"address[]"}],"name":"addToAirdroplist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"toAdd","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"airdropLists","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"airdropMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerPreMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItemsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMintLists","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_airdropPaused","type":"bool"}],"name":"setAirdropPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_preMintPaused","type":"bool"}],"name":"setPreMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicMintPaused","type":"bool"}],"name":"setPublicMintPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267011c37937e08000060075567011c37937e080000600855604660095561270f600a556000600b556000600c556003600d556005600e556040518060600160405280602c81526020016200484d602c9139600f90805190602001906200006c9291906200022b565b506001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff021916908315150217905550348015620000cb57600080fd5b506040518060400160405280600b81526020017f4d65746147656e657369730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d470000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001509291906200022b565b508060019080519060200190620001699291906200022b565b50505060006200017e6200022360201b60201c565b905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000340565b600033905090565b8280546200023990620002db565b90600052602060002090601f0160209004810192826200025d5760008555620002a9565b82601f106200027857805160ff1916838001178555620002a9565b82800160010185558215620002a9579182015b82811115620002a85782518255916020019190600101906200028b565b5b509050620002b89190620002bc565b5090565b5b80821115620002d7576000816000905550600101620002bd565b5090565b60006002820490506001821680620002f457607f821691505b602082108114156200030b576200030a62000311565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6144fd80620003506000396000f3fe60806040526004361061023f5760003560e01c80636817c76c1161012e578063a22cb465116100ab578063cfc86f7b1161006f578063cfc86f7b1461082c578063e02767e914610857578063e985e9c514610861578063ea457d0f1461089e578063f2fde38b146108c757610246565b8063a22cb46514610723578063b6de79c31461074c578063b88d4fde14610789578063c601c010146107b2578063c87b56dd146107ef57610246565b8063853828b6116100f2578063853828b6146106605780638da5cb5b14610677578063900e7a1a146106a257806395d89b41146106cd578063a187c89b146106f857610246565b80636817c76c1461058d57806368abfea9146105b857806370a08231146105e3578063715018a6146106205780637f6497831461063757610246565b806333d9d5fd116101bc5780633f0d6258116101805780633f0d6258146104a857806342842e0e146104d357806346813817146104fc5780636352211e1461052557806364a2bc561461056257610246565b806333d9d5fd146103f4578063342615961461041f578063391f0f4a146104485780633c010a3e146104735780633cd29ac81461049e57610246565b806323b872dd1161020357806323b872dd1461034457806326092b831461036d57806330176e131461037757806330666a4d146103a057806333949348146103cb57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612f17565b6108f0565b60405161027f91906135aa565b60405180910390f35b34801561029457600080fd5b5061029d6109d2565b6040516102aa91906135c5565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612fba565b610a64565b6040516102e79190613543565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612e61565b610ae9565b005b34801561032557600080fd5b5061032e610c01565b60405161033b9190613947565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612d4b565b610c07565b005b610375610c67565b005b34801561038357600080fd5b5061039e60048036038101906103999190612f71565b610ddd565b005b3480156103ac57600080fd5b506103b5610e73565b6040516103c29190613947565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612eea565b610e79565b005b34801561040057600080fd5b50610409610f12565b60405161041691906135aa565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612ea1565b610f25565b005b34801561045457600080fd5b5061045d611023565b60405161046a9190613947565b60405180910390f35b34801561047f57600080fd5b50610488611029565b6040516104959190613947565b60405180910390f35b6104a661102f565b005b3480156104b457600080fd5b506104bd6111ba565b6040516104ca9190613947565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190612d4b565b6111c0565b005b34801561050857600080fd5b50610523600480360381019061051e9190612eea565b6111e0565b005b34801561053157600080fd5b5061054c60048036038101906105479190612fba565b611279565b6040516105599190613543565b60405180910390f35b34801561056e57600080fd5b5061057761132b565b60405161058491906135aa565b60405180910390f35b34801561059957600080fd5b506105a261133e565b6040516105af9190613947565b60405180910390f35b3480156105c457600080fd5b506105cd611344565b6040516105da91906135aa565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190612cde565b611357565b6040516106179190613947565b60405180910390f35b34801561062c57600080fd5b5061063561140f565b005b34801561064357600080fd5b5061065e60048036038101906106599190612ea1565b61154c565b005b34801561066c57600080fd5b5061067561164b565b005b34801561068357600080fd5b5061068c6116ed565b6040516106999190613543565b60405180910390f35b3480156106ae57600080fd5b506106b7611717565b6040516106c49190613947565b60405180910390f35b3480156106d957600080fd5b506106e261171d565b6040516106ef91906135c5565b60405180910390f35b34801561070457600080fd5b5061070d6117af565b60405161071a9190613947565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190612e21565b6117b5565b005b34801561075857600080fd5b50610773600480360381019061076e9190612cde565b611936565b6040516107809190613947565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612d9e565b61194e565b005b3480156107be57600080fd5b506107d960048036038101906107d49190612cde565b6119b0565b6040516107e69190613947565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612fba565b6119c8565b60405161082391906135c5565b60405180910390f35b34801561083857600080fd5b506108416119fc565b60405161084e91906135c5565b60405180910390f35b61085f611a8a565b005b34801561086d57600080fd5b5061088860048036038101906108839190612d0b565b611bde565b60405161089591906135aa565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190612eea565b611c72565b005b3480156108d357600080fd5b506108ee60048036038101906108e99190612cde565b611d0b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cb57506109ca82611eb7565b5b9050919050565b6060600080546109e190613be9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0d90613be9565b8015610a5a5780601f10610a2f57610100808354040283529160200191610a5a565b820191906000526020600020905b815481529060010190602001808311610a3d57829003601f168201915b5050505050905090565b6000610a6f82611f21565b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613807565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af482611279565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c906138a7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b84611f8d565b73ffffffffffffffffffffffffffffffffffffffff161480610bb35750610bb281610bad611f8d565b611bde565b5b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990613727565b60405180910390fd5b610bfc8383611f95565b505050565b600c5481565b610c18610c12611f8d565b8261204e565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906138c7565b60405180910390fd5b610c6283838361212c565b505050565b601060019054906101000a900460ff1615610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613647565b60405180910390fd5b600060085434610cc79190613c95565b9050600060085434610cd99190613ace565b905060008214610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590613607565b60405180910390fd5b600e54811115610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a906138e7565b60405180910390fd5b600954600a54610d739190613aff565b81600b54600c54610d849190613aff565b610d8e9190613a78565b1115610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690613927565b60405180910390fd5b610dd93382612388565b5050565b610de5611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610e036116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613827565b60405180910390fd5b80600f9080519060200190610e6f929190612a54565b5050565b600e5481565b610e81611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610e9f6116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90613827565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b610f2d611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610f4b6116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890613827565b60405180910390fd5b60005b815181101561101f57600160126000848481518110610fc657610fc5613d53565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061101790613c4c565b915050610fa4565b5050565b600d5481565b600a5481565b601060009054906101000a900460ff161561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613847565b60405180910390fd5b60006007543461108f9190613c95565b90506000600754346110a19190613ace565b9050600082146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd906135e7565b60405180910390fd5b600381111561112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906137a7565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390613787565b60405180910390fd5b6111b63382612388565b5050565b600b5481565b6111db8383836040518060200160405280600081525061194e565b505050565b6111e8611f8d565b73ffffffffffffffffffffffffffffffffffffffff166112066116ed565b73ffffffffffffffffffffffffffffffffffffffff161461125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390613827565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613767565b60405180910390fd5b80915050919050565b601060029054906101000a900460ff1681565b60085481565b601060009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613747565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611417611f8d565b73ffffffffffffffffffffffffffffffffffffffff166114356116ed565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613827565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611554611f8d565b73ffffffffffffffffffffffffffffffffffffffff166115726116ed565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613827565b60405180910390fd5b60005b815181101561164757600d54601160008484815181106115ee576115ed613d53565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061163f90613c4c565b9150506115cb565b5050565b611653611f8d565b73ffffffffffffffffffffffffffffffffffffffff166116716116ed565b73ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90613827565b60405180910390fd5b60004790506116ea737fb563e33c220bfd102a611a95ae55d50806bc5882612469565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606001805461172c90613be9565b80601f016020809104026020016040519081016040528092919081815260200182805461175890613be9565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b5050505050905090565b60075481565b6117bd611f8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906136e7565b60405180910390fd5b8060056000611838611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118e5611f8d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161192a91906135aa565b60405180910390a35050565b60126020528060005260406000206000915090505481565b61195f611959611f8d565b8361204e565b61199e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611995906138c7565b60405180910390fd5b6119aa8484848461251a565b50505050565b60116020528060005260406000206000915090505481565b6060600f6119d583612576565b6040516020016119e692919061350a565b6040516020818303038152906040529050919050565b600f8054611a0990613be9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3590613be9565b8015611a825780601f10611a5757610100808354040283529160200191611a82565b820191906000526020600020905b815481529060010190602001808311611a6557829003601f168201915b505050505081565b601060029054906101000a900460ff1615611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906137e7565b60405180910390fd5b600060019050601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613907565b60405180910390fd5b80600b6000828254611b749190613a78565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bca9190613aff565b92505081905550611bdb3382612388565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c7a611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611c986116ed565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613827565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d13611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611d316116ed565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90613827565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90613667565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661200883611279565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061205982611f21565b612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613707565b60405180910390fd5b60006120a383611279565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061211257508373ffffffffffffffffffffffffffffffffffffffff166120fa84610a64565b73ffffffffffffffffffffffffffffffffffffffff16145b8061212357506121228185611bde565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661214c82611279565b73ffffffffffffffffffffffffffffffffffffffff16146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613887565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612209906136c7565b60405180910390fd5b61221d8383836126d7565b612228600082611f95565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122789190613aff565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122cf9190613a78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600a5481600c546123999190613a78565b11156123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190613687565b60405180910390fd5b60005b81811015612464576001600c60008282546123f89190613a78565b9250508190555061240b83600c546126dc565b600c548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3808061245c90613c4c565b9150506123dd565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161248f9061352e565b60006040518083038185875af1925050503d80600081146124cc576040519150601f19603f3d011682016040523d82523d6000602084013e6124d1565b606091505b5050905080612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90613867565b60405180910390fd5b505050565b61252584848461212c565b612531848484846128aa565b612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613627565b60405180910390fd5b50505050565b606060008214156125be576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126d2565b600082905060005b600082146125f05780806125d990613c4c565b915050600a826125e99190613ace565b91506125c6565b60008167ffffffffffffffff81111561260c5761260b613d82565b5b6040519080825280601f01601f19166020018201604052801561263e5781602001600182028036833780820191505090505b5090505b600085146126cb576001826126579190613aff565b9150600a856126669190613c95565b60306126729190613a78565b60f81b81838151811061268857612687613d53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126c49190613ace565b9450612642565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906137c7565b60405180910390fd5b61275581611f21565b15612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c906136a7565b60405180910390fd5b6127a1600083836126d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f19190613a78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006128cb8473ffffffffffffffffffffffffffffffffffffffff16612a41565b15612a34578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f4611f8d565b8786866040518563ffffffff1660e01b8152600401612916949392919061355e565b602060405180830381600087803b15801561293057600080fd5b505af192505050801561296157506040513d601f19601f8201168201806040525081019061295e9190612f44565b60015b6129e4573d8060008114612991576040519150601f19603f3d011682016040523d82523d6000602084013e612996565b606091505b506000815114156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390613627565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a39565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a6090613be9565b90600052602060002090601f016020900481019282612a825760008555612ac9565b82601f10612a9b57805160ff1916838001178555612ac9565b82800160010185558215612ac9579182015b82811115612ac8578251825591602001919060010190612aad565b5b509050612ad69190612ada565b5090565b5b80821115612af3576000816000905550600101612adb565b5090565b6000612b0a612b0584613987565b613962565b90508083825260208201905082856020860282011115612b2d57612b2c613db6565b5b60005b85811015612b5d5781612b438882612beb565b845260208401935060208301925050600181019050612b30565b5050509392505050565b6000612b7a612b75846139b3565b613962565b905082815260208101848484011115612b9657612b95613dbb565b5b612ba1848285613ba7565b509392505050565b6000612bbc612bb7846139e4565b613962565b905082815260208101848484011115612bd857612bd7613dbb565b5b612be3848285613ba7565b509392505050565b600081359050612bfa8161446b565b92915050565b600082601f830112612c1557612c14613db1565b5b8135612c25848260208601612af7565b91505092915050565b600081359050612c3d81614482565b92915050565b600081359050612c5281614499565b92915050565b600081519050612c6781614499565b92915050565b600082601f830112612c8257612c81613db1565b5b8135612c92848260208601612b67565b91505092915050565b600082601f830112612cb057612caf613db1565b5b8135612cc0848260208601612ba9565b91505092915050565b600081359050612cd8816144b0565b92915050565b600060208284031215612cf457612cf3613dc5565b5b6000612d0284828501612beb565b91505092915050565b60008060408385031215612d2257612d21613dc5565b5b6000612d3085828601612beb565b9250506020612d4185828601612beb565b9150509250929050565b600080600060608486031215612d6457612d63613dc5565b5b6000612d7286828701612beb565b9350506020612d8386828701612beb565b9250506040612d9486828701612cc9565b9150509250925092565b60008060008060808587031215612db857612db7613dc5565b5b6000612dc687828801612beb565b9450506020612dd787828801612beb565b9350506040612de887828801612cc9565b925050606085013567ffffffffffffffff811115612e0957612e08613dc0565b5b612e1587828801612c6d565b91505092959194509250565b60008060408385031215612e3857612e37613dc5565b5b6000612e4685828601612beb565b9250506020612e5785828601612c2e565b9150509250929050565b60008060408385031215612e7857612e77613dc5565b5b6000612e8685828601612beb565b9250506020612e9785828601612cc9565b9150509250929050565b600060208284031215612eb757612eb6613dc5565b5b600082013567ffffffffffffffff811115612ed557612ed4613dc0565b5b612ee184828501612c00565b91505092915050565b600060208284031215612f0057612eff613dc5565b5b6000612f0e84828501612c2e565b91505092915050565b600060208284031215612f2d57612f2c613dc5565b5b6000612f3b84828501612c43565b91505092915050565b600060208284031215612f5a57612f59613dc5565b5b6000612f6884828501612c58565b91505092915050565b600060208284031215612f8757612f86613dc5565b5b600082013567ffffffffffffffff811115612fa557612fa4613dc0565b5b612fb184828501612c9b565b91505092915050565b600060208284031215612fd057612fcf613dc5565b5b6000612fde84828501612cc9565b91505092915050565b612ff081613b33565b82525050565b612fff81613b45565b82525050565b600061301082613a2a565b61301a8185613a40565b935061302a818560208601613bb6565b61303381613dca565b840191505092915050565b600061304982613a35565b6130538185613a5c565b9350613063818560208601613bb6565b61306c81613dca565b840191505092915050565b600061308282613a35565b61308c8185613a6d565b935061309c818560208601613bb6565b80840191505092915050565b600081546130b581613be9565b6130bf8186613a6d565b945060018216600081146130da57600181146130eb5761311e565b60ff1983168652818601935061311e565b6130f485613a15565b60005b83811015613116578154818901526001820191506020810190506130f7565b838801955050505b50505092915050565b6000613134602783613a5c565b915061313f82613ddb565b604082019050919050565b6000613157602a83613a5c565b915061316282613e2a565b604082019050919050565b600061317a603283613a5c565b915061318582613e79565b604082019050919050565b600061319d601283613a5c565b91506131a882613ec8565b602082019050919050565b60006131c0602683613a5c565b91506131cb82613ef1565b604082019050919050565b60006131e3601f83613a5c565b91506131ee82613f40565b602082019050919050565b6000613206601c83613a5c565b915061321182613f69565b602082019050919050565b6000613229602483613a5c565b915061323482613f92565b604082019050919050565b600061324c601983613a5c565b915061325782613fe1565b602082019050919050565b600061326f602c83613a5c565b915061327a8261400a565b604082019050919050565b6000613292603883613a5c565b915061329d82614059565b604082019050919050565b60006132b5602a83613a5c565b91506132c0826140a8565b604082019050919050565b60006132d8602983613a5c565b91506132e3826140f7565b604082019050919050565b60006132fb602783613a5c565b915061330682614146565b604082019050919050565b600061331e601583613a5c565b915061332982614195565b602082019050919050565b6000613341602083613a5c565b915061334c826141be565b602082019050919050565b6000613364601383613a5c565b915061336f826141e7565b602082019050919050565b6000613387602c83613a5c565b915061339282614210565b604082019050919050565b60006133aa602083613a5c565b91506133b58261425f565b602082019050919050565b60006133cd600f83613a5c565b91506133d882614288565b602082019050919050565b60006133f0601483613a5c565b91506133fb826142b1565b602082019050919050565b6000613413602983613a5c565b915061341e826142da565b604082019050919050565b6000613436602183613a5c565b915061344182614329565b604082019050919050565b6000613459600083613a51565b915061346482614378565b600082019050919050565b600061347c603183613a5c565b91506134878261437b565b604082019050919050565b600061349f601883613a5c565b91506134aa826143ca565b602082019050919050565b60006134c2602b83613a5c565b91506134cd826143f3565b604082019050919050565b60006134e5601983613a5c565b91506134f082614442565b602082019050919050565b61350481613b9d565b82525050565b600061351682856130a8565b91506135228284613077565b91508190509392505050565b60006135398261344c565b9150819050919050565b60006020820190506135586000830184612fe7565b92915050565b60006080820190506135736000830187612fe7565b6135806020830186612fe7565b61358d60408301856134fb565b818103606083015261359f8184613005565b905095945050505050565b60006020820190506135bf6000830184612ff6565b92915050565b600060208201905081810360008301526135df818461303e565b905092915050565b6000602082019050818103600083015261360081613127565b9050919050565b600060208201905081810360008301526136208161314a565b9050919050565b600060208201905081810360008301526136408161316d565b9050919050565b6000602082019050818103600083015261366081613190565b9050919050565b60006020820190508181036000830152613680816131b3565b9050919050565b600060208201905081810360008301526136a0816131d6565b9050919050565b600060208201905081810360008301526136c0816131f9565b9050919050565b600060208201905081810360008301526136e08161321c565b9050919050565b600060208201905081810360008301526137008161323f565b9050919050565b6000602082019050818103600083015261372081613262565b9050919050565b6000602082019050818103600083015261374081613285565b9050919050565b60006020820190508181036000830152613760816132a8565b9050919050565b60006020820190508181036000830152613780816132cb565b9050919050565b600060208201905081810360008301526137a0816132ee565b9050919050565b600060208201905081810360008301526137c081613311565b9050919050565b600060208201905081810360008301526137e081613334565b9050919050565b6000602082019050818103600083015261380081613357565b9050919050565b600060208201905081810360008301526138208161337a565b9050919050565b600060208201905081810360008301526138408161339d565b9050919050565b60006020820190508181036000830152613860816133c0565b9050919050565b60006020820190508181036000830152613880816133e3565b9050919050565b600060208201905081810360008301526138a081613406565b9050919050565b600060208201905081810360008301526138c081613429565b9050919050565b600060208201905081810360008301526138e08161346f565b9050919050565b6000602082019050818103600083015261390081613492565b9050919050565b60006020820190508181036000830152613920816134b5565b9050919050565b60006020820190508181036000830152613940816134d8565b9050919050565b600060208201905061395c60008301846134fb565b92915050565b600061396c61397d565b90506139788282613c1b565b919050565b6000604051905090565b600067ffffffffffffffff8211156139a2576139a1613d82565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139ce576139cd613d82565b5b6139d782613dca565b9050602081019050919050565b600067ffffffffffffffff8211156139ff576139fe613d82565b5b613a0882613dca565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8382613b9d565b9150613a8e83613b9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac357613ac2613cc6565b5b828201905092915050565b6000613ad982613b9d565b9150613ae483613b9d565b925082613af457613af3613cf5565b5b828204905092915050565b6000613b0a82613b9d565b9150613b1583613b9d565b925082821015613b2857613b27613cc6565b5b828203905092915050565b6000613b3e82613b7d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613bd4578082015181840152602081019050613bb9565b83811115613be3576000848401525b50505050565b60006002820490506001821680613c0157607f821691505b60208210811415613c1557613c14613d24565b5b50919050565b613c2482613dca565b810181811067ffffffffffffffff82111715613c4357613c42613d82565b5b80604052505050565b6000613c5782613b9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c8a57613c89613cc6565b5b600182019050919050565b6000613ca082613b9d565b9150613cab83613b9d565b925082613cbb57613cba613cf5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072654d696e743a2053656e64206120646976697369626c6520616d6f756e7460008201527f206f662065746800000000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a20416d6f756e742067726561746572207468616e20616c6c60008201527f6f636174696f6e00000000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a206d61782033207065722074780000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f61697264726f704d696e743a2050617573656400000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072654d696e743a205061757365640000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204d61782035207065722074780000000000000000600082015250565b7f61697264726f704d696e743a20416d6f756e742067726561746572207468616e60008201527f20616c6c6f636174696f6e000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a205375727061737365732063617000000000000000600082015250565b61447481613b33565b811461447f57600080fd5b50565b61448b81613b45565b811461449657600080fd5b50565b6144a281613b51565b81146144ad57600080fd5b50565b6144b981613b9d565b81146144c457600080fd5b5056fea26469706673582212208008f7662de86488ce97d3255b70f479f244342e202af55d6a533e8f67dea50b64736f6c6343000807003368747470733a2f2f697066732e696f2f69706e732f636f6e662e6d65746167656e657369732e776f726c642f

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636817c76c1161012e578063a22cb465116100ab578063cfc86f7b1161006f578063cfc86f7b1461082c578063e02767e914610857578063e985e9c514610861578063ea457d0f1461089e578063f2fde38b146108c757610246565b8063a22cb46514610723578063b6de79c31461074c578063b88d4fde14610789578063c601c010146107b2578063c87b56dd146107ef57610246565b8063853828b6116100f2578063853828b6146106605780638da5cb5b14610677578063900e7a1a146106a257806395d89b41146106cd578063a187c89b146106f857610246565b80636817c76c1461058d57806368abfea9146105b857806370a08231146105e3578063715018a6146106205780637f6497831461063757610246565b806333d9d5fd116101bc5780633f0d6258116101805780633f0d6258146104a857806342842e0e146104d357806346813817146104fc5780636352211e1461052557806364a2bc561461056257610246565b806333d9d5fd146103f4578063342615961461041f578063391f0f4a146104485780633c010a3e146104735780633cd29ac81461049e57610246565b806323b872dd1161020357806323b872dd1461034457806326092b831461036d57806330176e131461037757806330666a4d146103a057806333949348146103cb57610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b3578063095ea7b3146102f057806318160ddd1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190612f17565b6108f0565b60405161027f91906135aa565b60405180910390f35b34801561029457600080fd5b5061029d6109d2565b6040516102aa91906135c5565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612fba565b610a64565b6040516102e79190613543565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612e61565b610ae9565b005b34801561032557600080fd5b5061032e610c01565b60405161033b9190613947565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612d4b565b610c07565b005b610375610c67565b005b34801561038357600080fd5b5061039e60048036038101906103999190612f71565b610ddd565b005b3480156103ac57600080fd5b506103b5610e73565b6040516103c29190613947565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612eea565b610e79565b005b34801561040057600080fd5b50610409610f12565b60405161041691906135aa565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612ea1565b610f25565b005b34801561045457600080fd5b5061045d611023565b60405161046a9190613947565b60405180910390f35b34801561047f57600080fd5b50610488611029565b6040516104959190613947565b60405180910390f35b6104a661102f565b005b3480156104b457600080fd5b506104bd6111ba565b6040516104ca9190613947565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190612d4b565b6111c0565b005b34801561050857600080fd5b50610523600480360381019061051e9190612eea565b6111e0565b005b34801561053157600080fd5b5061054c60048036038101906105479190612fba565b611279565b6040516105599190613543565b60405180910390f35b34801561056e57600080fd5b5061057761132b565b60405161058491906135aa565b60405180910390f35b34801561059957600080fd5b506105a261133e565b6040516105af9190613947565b60405180910390f35b3480156105c457600080fd5b506105cd611344565b6040516105da91906135aa565b60405180910390f35b3480156105ef57600080fd5b5061060a60048036038101906106059190612cde565b611357565b6040516106179190613947565b60405180910390f35b34801561062c57600080fd5b5061063561140f565b005b34801561064357600080fd5b5061065e60048036038101906106599190612ea1565b61154c565b005b34801561066c57600080fd5b5061067561164b565b005b34801561068357600080fd5b5061068c6116ed565b6040516106999190613543565b60405180910390f35b3480156106ae57600080fd5b506106b7611717565b6040516106c49190613947565b60405180910390f35b3480156106d957600080fd5b506106e261171d565b6040516106ef91906135c5565b60405180910390f35b34801561070457600080fd5b5061070d6117af565b60405161071a9190613947565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190612e21565b6117b5565b005b34801561075857600080fd5b50610773600480360381019061076e9190612cde565b611936565b6040516107809190613947565b60405180910390f35b34801561079557600080fd5b506107b060048036038101906107ab9190612d9e565b61194e565b005b3480156107be57600080fd5b506107d960048036038101906107d49190612cde565b6119b0565b6040516107e69190613947565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612fba565b6119c8565b60405161082391906135c5565b60405180910390f35b34801561083857600080fd5b506108416119fc565b60405161084e91906135c5565b60405180910390f35b61085f611a8a565b005b34801561086d57600080fd5b5061088860048036038101906108839190612d0b565b611bde565b60405161089591906135aa565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190612eea565b611c72565b005b3480156108d357600080fd5b506108ee60048036038101906108e99190612cde565b611d0b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109bb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109cb57506109ca82611eb7565b5b9050919050565b6060600080546109e190613be9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0d90613be9565b8015610a5a5780601f10610a2f57610100808354040283529160200191610a5a565b820191906000526020600020905b815481529060010190602001808311610a3d57829003601f168201915b5050505050905090565b6000610a6f82611f21565b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590613807565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af482611279565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5c906138a7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b84611f8d565b73ffffffffffffffffffffffffffffffffffffffff161480610bb35750610bb281610bad611f8d565b611bde565b5b610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be990613727565b60405180910390fd5b610bfc8383611f95565b505050565b600c5481565b610c18610c12611f8d565b8261204e565b610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906138c7565b60405180910390fd5b610c6283838361212c565b505050565b601060019054906101000a900460ff1615610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613647565b60405180910390fd5b600060085434610cc79190613c95565b9050600060085434610cd99190613ace565b905060008214610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590613607565b60405180910390fd5b600e54811115610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a906138e7565b60405180910390fd5b600954600a54610d739190613aff565b81600b54600c54610d849190613aff565b610d8e9190613a78565b1115610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690613927565b60405180910390fd5b610dd93382612388565b5050565b610de5611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610e036116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5090613827565b60405180910390fd5b80600f9080519060200190610e6f929190612a54565b5050565b600e5481565b610e81611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610e9f6116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90613827565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b601060019054906101000a900460ff1681565b610f2d611f8d565b73ffffffffffffffffffffffffffffffffffffffff16610f4b6116ed565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890613827565b60405180910390fd5b60005b815181101561101f57600160126000848481518110610fc657610fc5613d53565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061101790613c4c565b915050610fa4565b5050565b600d5481565b600a5481565b601060009054906101000a900460ff161561107f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107690613847565b60405180910390fd5b60006007543461108f9190613c95565b90506000600754346110a19190613ace565b9050600082146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd906135e7565b60405180910390fd5b600381111561112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906137a7565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390613787565b60405180910390fd5b6111b63382612388565b5050565b600b5481565b6111db8383836040518060200160405280600081525061194e565b505050565b6111e8611f8d565b73ffffffffffffffffffffffffffffffffffffffff166112066116ed565b73ffffffffffffffffffffffffffffffffffffffff161461125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390613827565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613767565b60405180910390fd5b80915050919050565b601060029054906101000a900460ff1681565b60085481565b601060009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90613747565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611417611f8d565b73ffffffffffffffffffffffffffffffffffffffff166114356116ed565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613827565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611554611f8d565b73ffffffffffffffffffffffffffffffffffffffff166115726116ed565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613827565b60405180910390fd5b60005b815181101561164757600d54601160008484815181106115ee576115ed613d53565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061163f90613c4c565b9150506115cb565b5050565b611653611f8d565b73ffffffffffffffffffffffffffffffffffffffff166116716116ed565b73ffffffffffffffffffffffffffffffffffffffff16146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90613827565b60405180910390fd5b60004790506116ea737fb563e33c220bfd102a611a95ae55d50806bc5882612469565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606001805461172c90613be9565b80601f016020809104026020016040519081016040528092919081815260200182805461175890613be9565b80156117a55780601f1061177a576101008083540402835291602001916117a5565b820191906000526020600020905b81548152906001019060200180831161178857829003601f168201915b5050505050905090565b60075481565b6117bd611f8d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906136e7565b60405180910390fd5b8060056000611838611f8d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118e5611f8d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161192a91906135aa565b60405180910390a35050565b60126020528060005260406000206000915090505481565b61195f611959611f8d565b8361204e565b61199e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611995906138c7565b60405180910390fd5b6119aa8484848461251a565b50505050565b60116020528060005260406000206000915090505481565b6060600f6119d583612576565b6040516020016119e692919061350a565b6040516020818303038152906040529050919050565b600f8054611a0990613be9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3590613be9565b8015611a825780601f10611a5757610100808354040283529160200191611a82565b820191906000526020600020905b815481529060010190602001808311611a6557829003601f168201915b505050505081565b601060029054906101000a900460ff1615611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad1906137e7565b60405180910390fd5b600060019050601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990613907565b60405180910390fd5b80600b6000828254611b749190613a78565b9250508190555080601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bca9190613aff565b92505081905550611bdb3382612388565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c7a611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611c986116ed565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590613827565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b611d13611f8d565b73ffffffffffffffffffffffffffffffffffffffff16611d316116ed565b73ffffffffffffffffffffffffffffffffffffffff1614611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90613827565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dee90613667565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661200883611279565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061205982611f21565b612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90613707565b60405180910390fd5b60006120a383611279565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061211257508373ffffffffffffffffffffffffffffffffffffffff166120fa84610a64565b73ffffffffffffffffffffffffffffffffffffffff16145b8061212357506121228185611bde565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661214c82611279565b73ffffffffffffffffffffffffffffffffffffffff16146121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613887565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612209906136c7565b60405180910390fd5b61221d8383836126d7565b612228600082611f95565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122789190613aff565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122cf9190613a78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600a5481600c546123999190613a78565b11156123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190613687565b60405180910390fd5b60005b81811015612464576001600c60008282546123f89190613a78565b9250508190555061240b83600c546126dc565b600c548373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688560405160405180910390a3808061245c90613c4c565b9150506123dd565b505050565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161248f9061352e565b60006040518083038185875af1925050503d80600081146124cc576040519150601f19603f3d011682016040523d82523d6000602084013e6124d1565b606091505b5050905080612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90613867565b60405180910390fd5b505050565b61252584848461212c565b612531848484846128aa565b612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790613627565b60405180910390fd5b50505050565b606060008214156125be576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126d2565b600082905060005b600082146125f05780806125d990613c4c565b915050600a826125e99190613ace565b91506125c6565b60008167ffffffffffffffff81111561260c5761260b613d82565b5b6040519080825280601f01601f19166020018201604052801561263e5781602001600182028036833780820191505090505b5090505b600085146126cb576001826126579190613aff565b9150600a856126669190613c95565b60306126729190613a78565b60f81b81838151811061268857612687613d53565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126c49190613ace565b9450612642565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906137c7565b60405180910390fd5b61275581611f21565b15612795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278c906136a7565b60405180910390fd5b6127a1600083836126d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127f19190613a78565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006128cb8473ffffffffffffffffffffffffffffffffffffffff16612a41565b15612a34578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f4611f8d565b8786866040518563ffffffff1660e01b8152600401612916949392919061355e565b602060405180830381600087803b15801561293057600080fd5b505af192505050801561296157506040513d601f19601f8201168201806040525081019061295e9190612f44565b60015b6129e4573d8060008114612991576040519150601f19603f3d011682016040523d82523d6000602084013e612996565b606091505b506000815114156129dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d390613627565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a39565b600190505b949350505050565b600080823b905060008111915050919050565b828054612a6090613be9565b90600052602060002090601f016020900481019282612a825760008555612ac9565b82601f10612a9b57805160ff1916838001178555612ac9565b82800160010185558215612ac9579182015b82811115612ac8578251825591602001919060010190612aad565b5b509050612ad69190612ada565b5090565b5b80821115612af3576000816000905550600101612adb565b5090565b6000612b0a612b0584613987565b613962565b90508083825260208201905082856020860282011115612b2d57612b2c613db6565b5b60005b85811015612b5d5781612b438882612beb565b845260208401935060208301925050600181019050612b30565b5050509392505050565b6000612b7a612b75846139b3565b613962565b905082815260208101848484011115612b9657612b95613dbb565b5b612ba1848285613ba7565b509392505050565b6000612bbc612bb7846139e4565b613962565b905082815260208101848484011115612bd857612bd7613dbb565b5b612be3848285613ba7565b509392505050565b600081359050612bfa8161446b565b92915050565b600082601f830112612c1557612c14613db1565b5b8135612c25848260208601612af7565b91505092915050565b600081359050612c3d81614482565b92915050565b600081359050612c5281614499565b92915050565b600081519050612c6781614499565b92915050565b600082601f830112612c8257612c81613db1565b5b8135612c92848260208601612b67565b91505092915050565b600082601f830112612cb057612caf613db1565b5b8135612cc0848260208601612ba9565b91505092915050565b600081359050612cd8816144b0565b92915050565b600060208284031215612cf457612cf3613dc5565b5b6000612d0284828501612beb565b91505092915050565b60008060408385031215612d2257612d21613dc5565b5b6000612d3085828601612beb565b9250506020612d4185828601612beb565b9150509250929050565b600080600060608486031215612d6457612d63613dc5565b5b6000612d7286828701612beb565b9350506020612d8386828701612beb565b9250506040612d9486828701612cc9565b9150509250925092565b60008060008060808587031215612db857612db7613dc5565b5b6000612dc687828801612beb565b9450506020612dd787828801612beb565b9350506040612de887828801612cc9565b925050606085013567ffffffffffffffff811115612e0957612e08613dc0565b5b612e1587828801612c6d565b91505092959194509250565b60008060408385031215612e3857612e37613dc5565b5b6000612e4685828601612beb565b9250506020612e5785828601612c2e565b9150509250929050565b60008060408385031215612e7857612e77613dc5565b5b6000612e8685828601612beb565b9250506020612e9785828601612cc9565b9150509250929050565b600060208284031215612eb757612eb6613dc5565b5b600082013567ffffffffffffffff811115612ed557612ed4613dc0565b5b612ee184828501612c00565b91505092915050565b600060208284031215612f0057612eff613dc5565b5b6000612f0e84828501612c2e565b91505092915050565b600060208284031215612f2d57612f2c613dc5565b5b6000612f3b84828501612c43565b91505092915050565b600060208284031215612f5a57612f59613dc5565b5b6000612f6884828501612c58565b91505092915050565b600060208284031215612f8757612f86613dc5565b5b600082013567ffffffffffffffff811115612fa557612fa4613dc0565b5b612fb184828501612c9b565b91505092915050565b600060208284031215612fd057612fcf613dc5565b5b6000612fde84828501612cc9565b91505092915050565b612ff081613b33565b82525050565b612fff81613b45565b82525050565b600061301082613a2a565b61301a8185613a40565b935061302a818560208601613bb6565b61303381613dca565b840191505092915050565b600061304982613a35565b6130538185613a5c565b9350613063818560208601613bb6565b61306c81613dca565b840191505092915050565b600061308282613a35565b61308c8185613a6d565b935061309c818560208601613bb6565b80840191505092915050565b600081546130b581613be9565b6130bf8186613a6d565b945060018216600081146130da57600181146130eb5761311e565b60ff1983168652818601935061311e565b6130f485613a15565b60005b83811015613116578154818901526001820191506020810190506130f7565b838801955050505b50505092915050565b6000613134602783613a5c565b915061313f82613ddb565b604082019050919050565b6000613157602a83613a5c565b915061316282613e2a565b604082019050919050565b600061317a603283613a5c565b915061318582613e79565b604082019050919050565b600061319d601283613a5c565b91506131a882613ec8565b602082019050919050565b60006131c0602683613a5c565b91506131cb82613ef1565b604082019050919050565b60006131e3601f83613a5c565b91506131ee82613f40565b602082019050919050565b6000613206601c83613a5c565b915061321182613f69565b602082019050919050565b6000613229602483613a5c565b915061323482613f92565b604082019050919050565b600061324c601983613a5c565b915061325782613fe1565b602082019050919050565b600061326f602c83613a5c565b915061327a8261400a565b604082019050919050565b6000613292603883613a5c565b915061329d82614059565b604082019050919050565b60006132b5602a83613a5c565b91506132c0826140a8565b604082019050919050565b60006132d8602983613a5c565b91506132e3826140f7565b604082019050919050565b60006132fb602783613a5c565b915061330682614146565b604082019050919050565b600061331e601583613a5c565b915061332982614195565b602082019050919050565b6000613341602083613a5c565b915061334c826141be565b602082019050919050565b6000613364601383613a5c565b915061336f826141e7565b602082019050919050565b6000613387602c83613a5c565b915061339282614210565b604082019050919050565b60006133aa602083613a5c565b91506133b58261425f565b602082019050919050565b60006133cd600f83613a5c565b91506133d882614288565b602082019050919050565b60006133f0601483613a5c565b91506133fb826142b1565b602082019050919050565b6000613413602983613a5c565b915061341e826142da565b604082019050919050565b6000613436602183613a5c565b915061344182614329565b604082019050919050565b6000613459600083613a51565b915061346482614378565b600082019050919050565b600061347c603183613a5c565b91506134878261437b565b604082019050919050565b600061349f601883613a5c565b91506134aa826143ca565b602082019050919050565b60006134c2602b83613a5c565b91506134cd826143f3565b604082019050919050565b60006134e5601983613a5c565b91506134f082614442565b602082019050919050565b61350481613b9d565b82525050565b600061351682856130a8565b91506135228284613077565b91508190509392505050565b60006135398261344c565b9150819050919050565b60006020820190506135586000830184612fe7565b92915050565b60006080820190506135736000830187612fe7565b6135806020830186612fe7565b61358d60408301856134fb565b818103606083015261359f8184613005565b905095945050505050565b60006020820190506135bf6000830184612ff6565b92915050565b600060208201905081810360008301526135df818461303e565b905092915050565b6000602082019050818103600083015261360081613127565b9050919050565b600060208201905081810360008301526136208161314a565b9050919050565b600060208201905081810360008301526136408161316d565b9050919050565b6000602082019050818103600083015261366081613190565b9050919050565b60006020820190508181036000830152613680816131b3565b9050919050565b600060208201905081810360008301526136a0816131d6565b9050919050565b600060208201905081810360008301526136c0816131f9565b9050919050565b600060208201905081810360008301526136e08161321c565b9050919050565b600060208201905081810360008301526137008161323f565b9050919050565b6000602082019050818103600083015261372081613262565b9050919050565b6000602082019050818103600083015261374081613285565b9050919050565b60006020820190508181036000830152613760816132a8565b9050919050565b60006020820190508181036000830152613780816132cb565b9050919050565b600060208201905081810360008301526137a0816132ee565b9050919050565b600060208201905081810360008301526137c081613311565b9050919050565b600060208201905081810360008301526137e081613334565b9050919050565b6000602082019050818103600083015261380081613357565b9050919050565b600060208201905081810360008301526138208161337a565b9050919050565b600060208201905081810360008301526138408161339d565b9050919050565b60006020820190508181036000830152613860816133c0565b9050919050565b60006020820190508181036000830152613880816133e3565b9050919050565b600060208201905081810360008301526138a081613406565b9050919050565b600060208201905081810360008301526138c081613429565b9050919050565b600060208201905081810360008301526138e08161346f565b9050919050565b6000602082019050818103600083015261390081613492565b9050919050565b60006020820190508181036000830152613920816134b5565b9050919050565b60006020820190508181036000830152613940816134d8565b9050919050565b600060208201905061395c60008301846134fb565b92915050565b600061396c61397d565b90506139788282613c1b565b919050565b6000604051905090565b600067ffffffffffffffff8211156139a2576139a1613d82565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156139ce576139cd613d82565b5b6139d782613dca565b9050602081019050919050565b600067ffffffffffffffff8211156139ff576139fe613d82565b5b613a0882613dca565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8382613b9d565b9150613a8e83613b9d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac357613ac2613cc6565b5b828201905092915050565b6000613ad982613b9d565b9150613ae483613b9d565b925082613af457613af3613cf5565b5b828204905092915050565b6000613b0a82613b9d565b9150613b1583613b9d565b925082821015613b2857613b27613cc6565b5b828203905092915050565b6000613b3e82613b7d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613bd4578082015181840152602081019050613bb9565b83811115613be3576000848401525b50505050565b60006002820490506001821680613c0157607f821691505b60208210811415613c1557613c14613d24565b5b50919050565b613c2482613dca565b810181811067ffffffffffffffff82111715613c4357613c42613d82565b5b80604052505050565b6000613c5782613b9d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c8a57613c89613cc6565b5b600182019050919050565b6000613ca082613b9d565b9150613cab83613b9d565b925082613cbb57613cba613cf5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7072654d696e743a2053656e64206120646976697369626c6520616d6f756e7460008201527f206f662065746800000000000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a2053656e64206120646976697369626c6520616d6f60008201527f756e74206f662065746800000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f7075626c69634d696e743a205061757365640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f6d696e74576974686f757456616c69646174696f6e3a20536f6c64206f757400600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a20416d6f756e742067726561746572207468616e20616c6c60008201527f6f636174696f6e00000000000000000000000000000000000000000000000000602082015250565b7f7072654d696e743a206d61782033207065722074780000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f61697264726f704d696e743a2050617573656400000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072654d696e743a205061757365640000000000000000000000000000000000600082015250565b7f4661696c656420746f2073656e64206574686572000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7075626c69634d696e743a204d61782035207065722074780000000000000000600082015250565b7f61697264726f704d696e743a20416d6f756e742067726561746572207468616e60008201527f20616c6c6f636174696f6e000000000000000000000000000000000000000000602082015250565b7f7075626c69634d696e743a205375727061737365732063617000000000000000600082015250565b61447481613b33565b811461447f57600080fd5b50565b61448b81613b45565b811461449657600080fd5b50565b6144a281613b51565b81146144ad57600080fd5b50565b6144b981613b9d565b81146144c457600080fd5b5056fea26469706673582212208008f7662de86488ce97d3255b70f479f244342e202af55d6a533e8f67dea50b64736f6c63430008070033

Deployed Bytecode Sourcemap

34743:4309:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20565:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22957:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22494:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34986:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23847:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36523:520;;;:::i;:::-;;38185:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35062:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37927:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35221:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37617:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35020:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34913:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35655:481;;;:::i;:::-;;34947:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24223:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38062:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21191:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35263:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34836:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35182:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20921:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34120:148;;;;;;;;;;;;;:::i;:::-;;37415:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38418:166;;;;;;;;;;;;;:::i;:::-;;33469:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34877:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21666:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34792:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23250:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35402:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24445:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35304:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38873:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35099:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36144:367;;;:::i;:::-;;23616:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37804:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34423:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20565:292;20667:4;20706:25;20691:40;;;:11;:40;;;;:105;;;;20763:33;20748:48;;;:11;:48;;;;20691:105;:158;;;;20813:36;20837:11;20813:23;:36::i;:::-;20691:158;20684:165;;20565:292;;;:::o;21497:100::-;21551:13;21584:5;21577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21497:100;:::o;22957:221::-;23033:7;23061:16;23069:7;23061;:16::i;:::-;23053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23146:15;:24;23162:7;23146:24;;;;;;;;;;;;;;;;;;;;;23139:31;;22957:221;;;:::o;22494:397::-;22575:13;22591:23;22606:7;22591:14;:23::i;:::-;22575:39;;22639:5;22633:11;;:2;:11;;;;22625:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22719:5;22703:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22728:37;22745:5;22752:12;:10;:12::i;:::-;22728:16;:37::i;:::-;22703:62;22695:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22862:21;22871:2;22875:7;22862:8;:21::i;:::-;22564:327;22494:397;;:::o;34986:27::-;;;;:::o;23847:305::-;24008:41;24027:12;:10;:12::i;:::-;24041:7;24008:18;:41::i;:::-;24000:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24116:28;24126:4;24132:2;24136:7;24116:9;:28::i;:::-;23847:305;;;:::o;36523:520::-;36582:16;;;;;;;;;;;36581:17;36573:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;36632:14;36661:9;;36649;:21;;;;:::i;:::-;36632:38;;36681:11;36707:9;;36695;:21;;;;:::i;:::-;36681:35;;36748:1;36735:9;:14;36727:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:13;;36815:6;:23;;36807:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36940:12;;36929:8;;:23;;;;:::i;:::-;36919:6;36900:16;;36886:11;;:30;;;;:::i;:::-;:39;;;;:::i;:::-;:66;;36878:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;36993:42;37016:10;37028:6;36993:22;:42::i;:::-;36562:481;;36523:520::o;38185:123::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38286:14:::1;38270:13;:30;;;;;;;;;;;;:::i;:::-;;38185:123:::0;:::o;35062:29::-;;;;:::o;37927:127::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38029:17:::1;38010:16;;:36;;;;;;;;;;;;;;;;;;37927:127:::0;:::o;35221:35::-;;;;;;;;;;;;;:::o;37617:179::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37701:6:::1;37697:92;37717:5;:12;37713:1;:16;37697:92;;;37776:1;37751:12;:22;37764:5;37770:1;37764:8;;;;;;;;:::i;:::-;;;;;;;;37751:22;;;;;;;;;;;;;;;:26;;;;37731:3;;;;;:::i;:::-;;;;37697:92;;;;37617:179:::0;:::o;35020:34::-;;;;:::o;34913:27::-;;;;:::o;35655:481::-;35711:13;;;;;;;;;;;35710:14;35702:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;35755:14;35784:12;;35772:9;:24;;;;:::i;:::-;35755:41;;35807:11;35833:12;;35821:9;:24;;;;:::i;:::-;35807:38;;35877:1;35864:9;:14;35856:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35951:1;35941:6;:11;;35933:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;36007:12;:24;36020:10;36007:24;;;;;;;;;;;;;;;;35997:6;:34;;35989:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36086:42;36109:10;36121:6;36086:22;:42::i;:::-;35691:445;;35655:481::o;34947:32::-;;;;:::o;24223:151::-;24327:39;24344:4;24350:2;24354:7;24327:39;;;;;;;;;;;;:16;:39::i;:::-;24223:151;;;:::o;38062:115::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38155:14:::1;38139:13;;:30;;;;;;;;;;;;;;;;;;38062:115:::0;:::o;21191:239::-;21263:7;21283:13;21299:7;:16;21307:7;21299:16;;;;;;;;;;;;;;;;;;;;;21283:32;;21351:1;21334:19;;:5;:19;;;;21326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21417:5;21410:12;;;21191:239;;;:::o;35263:32::-;;;;;;;;;;;;;:::o;34836:34::-;;;;:::o;35182:32::-;;;;;;;;;;;;;:::o;20921:208::-;20993:7;21038:1;21021:19;;:5;:19;;;;21013:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21105:9;:16;21115:5;21105:16;;;;;;;;;;;;;;;;21098:23;;20921:208;;;:::o;34120:148::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34227:1:::1;34190:40;;34211:6;;;;;;;;;;;34190:40;;;;;;;;;;;;34258:1;34241:6;;:19;;;;;;;;;;;;;;;;;;34120:148::o:0;37415:194::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37497:6:::1;37493:109;37513:5;:12;37509:1;:16;37493:109;;;37572:18;;37547:12;:22;37560:5;37566:1;37560:8;;;;;;;;:::i;:::-;;;;;;;;37547:22;;;;;;;;;;;;;;;:43;;;;37527:3;;;;;:::i;:::-;;;;37493:109;;;;37415:194:::0;:::o;38418:166::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38471:11:::1;38485:21;38471:35;;38517:59;38525:42;38569:6;38517:7;:59::i;:::-;38460:124;38418:166::o:0;33469:87::-;33515:7;33542:6;;;;;;;;;;;33535:13;;33469:87;:::o;34877:29::-;;;;:::o;21666:104::-;21722:13;21755:7;21748:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21666:104;:::o;34792:37::-;;;;:::o;23250:295::-;23365:12;:10;:12::i;:::-;23353:24;;:8;:24;;;;23345:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23465:8;23420:18;:32;23439:12;:10;:12::i;:::-;23420:32;;;;;;;;;;;;;;;:42;23453:8;23420:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23518:8;23489:48;;23504:12;:10;:12::i;:::-;23489:48;;;23528:8;23489:48;;;;;;:::i;:::-;;;;;;;;23250:295;;:::o;35402:44::-;;;;;;;;;;;;;;;;;:::o;24445:285::-;24577:41;24596:12;:10;:12::i;:::-;24610:7;24577:18;:41::i;:::-;24569:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24683:39;24697:4;24703:2;24707:7;24716:5;24683:13;:39::i;:::-;24445:285;;;;:::o;35304:44::-;;;;;;;;;;;;;;;;;:::o;38873:174::-;38939:13;38996;39011:26;39028:8;39011:16;:26::i;:::-;38979:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38965:74;;38873:174;;;:::o;35099:76::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36144:367::-;36204:13;;;;;;;;;;;36203:14;36195:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36252:11;36266:1;36252:15;;36296:12;:24;36309:10;36296:24;;;;;;;;;;;;;;;;36286:6;:34;;36278:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36399:6;36379:16;;:26;;;;;;;:::i;:::-;;;;;;;;36444:6;36416:12;:24;36429:10;36416:24;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;36461:42;36484:10;36496:6;36461:22;:42::i;:::-;36184:327;36144:367::o;23616:164::-;23713:4;23737:18;:25;23756:5;23737:25;;;;;;;;;;;;;;;:35;23763:8;23737:35;;;;;;;;;;;;;;;;;;;;;;;;;23730:42;;23616:164;;;;:::o;37804:115::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37897:14:::1;37881:13;;:30;;;;;;;;;;;;;;;;;;37804:115:::0;:::o;34423:244::-;33700:12;:10;:12::i;:::-;33689:23;;:7;:5;:7::i;:::-;:23;;;33681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34532:1:::1;34512:22;;:8;:22;;;;34504:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34622:8;34593:38;;34614:6;;;;;;;;;;;34593:38;;;;;;;;;;;;34651:8;34642:6;;:17;;;;;;;;;;;;;;;;;;34423:244:::0;:::o;19069:157::-;19154:4;19193:25;19178:40;;;:11;:40;;;;19171:47;;19069:157;;;:::o;26197:127::-;26262:4;26314:1;26286:30;;:7;:16;26294:7;26286:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26279:37;;26197:127;;;:::o;15847:98::-;15900:7;15927:10;15920:17;;15847:98;:::o;30074:174::-;30176:2;30149:15;:24;30165:7;30149:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30232:7;30228:2;30194:46;;30203:23;30218:7;30203:14;:23::i;:::-;30194:46;;;;;;;;;;;;30074:174;;:::o;26491:348::-;26584:4;26609:16;26617:7;26609;:16::i;:::-;26601:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26685:13;26701:23;26716:7;26701:14;:23::i;:::-;26685:39;;26754:5;26743:16;;:7;:16;;;:51;;;;26787:7;26763:31;;:20;26775:7;26763:11;:20::i;:::-;:31;;;26743:51;:87;;;;26798:32;26815:5;26822:7;26798:16;:32::i;:::-;26743:87;26735:96;;;26491:348;;;;:::o;29412:544::-;29537:4;29510:31;;:23;29525:7;29510:14;:23::i;:::-;:31;;;29502:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29620:1;29606:16;;:2;:16;;;;29598:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:39;29697:4;29703:2;29707:7;29676:20;:39::i;:::-;29780:29;29797:1;29801:7;29780:8;:29::i;:::-;29841:1;29822:9;:15;29832:4;29822:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29870:1;29853:9;:13;29863:2;29853:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29901:2;29882:7;:16;29890:7;29882:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29940:7;29936:2;29921:27;;29930:4;29921:27;;;;;;;;;;;;29412:544;;;:::o;37051:326::-;37160:8;;37150:6;37136:11;;:20;;;;:::i;:::-;:32;;37128:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37220:6;37215:155;37236:6;37232:1;:10;37215:155;;;37279:1;37264:11;;:16;;;;;;;:::i;:::-;;;;;;;;37295:22;37301:2;37305:11;;37295:5;:22::i;:::-;37346:11;;37342:2;37337:21;;;;;;;;;;;;37244:3;;;;;:::i;:::-;;;;37215:155;;;;37051:326;;:::o;38590:165::-;38653:12;38670:2;:7;;38685:6;38670:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38652:44;;;38715:7;38707:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;38641:114;38590:165;;:::o;25612:272::-;25726:28;25736:4;25742:2;25746:7;25726:9;:28::i;:::-;25773:48;25796:4;25802:2;25806:7;25815:5;25773:22;:48::i;:::-;25765:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25612:272;;;;:::o;16508:723::-;16564:13;16794:1;16785:5;:10;16781:53;;;16812:10;;;;;;;;;;;;;;;;;;;;;16781:53;16844:12;16859:5;16844:20;;16875:14;16900:78;16915:1;16907:4;:9;16900:78;;16933:8;;;;;:::i;:::-;;;;16964:2;16956:10;;;;;:::i;:::-;;;16900:78;;;16988:19;17020:6;17010:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16988:39;;17038:154;17054:1;17045:5;:10;17038:154;;17082:1;17072:11;;;;;:::i;:::-;;;17149:2;17141:5;:10;;;;:::i;:::-;17128:2;:24;;;;:::i;:::-;17115:39;;17098:6;17105;17098:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17178:2;17169:11;;;;;:::i;:::-;;;17038:154;;;17216:6;17202:21;;;;;16508:723;;;;:::o;32269:93::-;;;;:::o;28104:382::-;28198:1;28184:16;;:2;:16;;;;28176:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28257:16;28265:7;28257;:16::i;:::-;28256:17;28248:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28319:45;28348:1;28352:2;28356:7;28319:20;:45::i;:::-;28394:1;28377:9;:13;28387:2;28377:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28425:2;28406:7;:16;28414:7;28406:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28470:7;28466:2;28445:33;;28462:1;28445:33;;;;;;;;;;;;28104:382;;:::o;30813:843::-;30934:4;30960:15;:2;:13;;;:15::i;:::-;30956:693;;;31012:2;30996:36;;;31033:12;:10;:12::i;:::-;31047:4;31053:7;31062:5;30996:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30992:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31259:1;31242:6;:13;:18;31238:341;;;31285:60;;;;;;;;;;:::i;:::-;;;;;;;;31238:341;31529:6;31523:13;31514:6;31510:2;31506:15;31499:38;30992:602;31129:45;;;31119:55;;;:6;:55;;;;31112:62;;;;;30956:693;31633:4;31626:11;;30813:843;;;;;;;:::o;7958:422::-;8018:4;8226:12;8337:7;8325:20;8317:28;;8371:1;8364:4;:8;8357:15;;;7958:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10552:845::-;10655:3;10692:5;10686:12;10721:36;10747:9;10721:36;:::i;:::-;10773:89;10855:6;10850:3;10773:89;:::i;:::-;10766:96;;10893:1;10882:9;10878:17;10909:1;10904:137;;;;11055:1;11050:341;;;;10871:520;;10904:137;10988:4;10984:9;10973;10969:25;10964:3;10957:38;11024:6;11019:3;11015:16;11008:23;;10904:137;;11050:341;11117:38;11149:5;11117:38;:::i;:::-;11177:1;11191:154;11205:6;11202:1;11199:13;11191:154;;;11279:7;11273:14;11269:1;11264:3;11260:11;11253:35;11329:1;11320:7;11316:15;11305:26;;11227:4;11224:1;11220:12;11215:17;;11191:154;;;11374:6;11369:3;11365:16;11358:23;;11057:334;;10871:520;;10659:738;;10552:845;;;;:::o;11403:366::-;11545:3;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11642:93;11731:3;11642:93;:::i;:::-;11760:2;11755:3;11751:12;11744:19;;11403:366;;;:::o;11775:::-;11917:3;11938:67;12002:2;11997:3;11938:67;:::i;:::-;11931:74;;12014:93;12103:3;12014:93;:::i;:::-;12132:2;12127:3;12123:12;12116:19;;11775:366;;;:::o;12147:::-;12289:3;12310:67;12374:2;12369:3;12310:67;:::i;:::-;12303:74;;12386:93;12475:3;12386:93;:::i;:::-;12504:2;12499:3;12495:12;12488:19;;12147:366;;;:::o;12519:::-;12661:3;12682:67;12746:2;12741:3;12682:67;:::i;:::-;12675:74;;12758:93;12847:3;12758:93;:::i;:::-;12876:2;12871:3;12867:12;12860:19;;12519:366;;;:::o;12891:::-;13033:3;13054:67;13118:2;13113:3;13054:67;:::i;:::-;13047:74;;13130:93;13219:3;13130:93;:::i;:::-;13248:2;13243:3;13239:12;13232:19;;12891:366;;;:::o;13263:::-;13405:3;13426:67;13490:2;13485:3;13426:67;:::i;:::-;13419:74;;13502:93;13591:3;13502:93;:::i;:::-;13620:2;13615:3;13611:12;13604:19;;13263:366;;;:::o;13635:::-;13777:3;13798:67;13862:2;13857:3;13798:67;:::i;:::-;13791:74;;13874:93;13963:3;13874:93;:::i;:::-;13992:2;13987:3;13983:12;13976:19;;13635:366;;;:::o;14007:::-;14149:3;14170:67;14234:2;14229:3;14170:67;:::i;:::-;14163:74;;14246:93;14335:3;14246:93;:::i;:::-;14364:2;14359:3;14355:12;14348:19;;14007:366;;;:::o;14379:::-;14521:3;14542:67;14606:2;14601:3;14542:67;:::i;:::-;14535:74;;14618:93;14707:3;14618:93;:::i;:::-;14736:2;14731:3;14727:12;14720:19;;14379:366;;;:::o;14751:::-;14893:3;14914:67;14978:2;14973:3;14914:67;:::i;:::-;14907:74;;14990:93;15079:3;14990:93;:::i;:::-;15108:2;15103:3;15099:12;15092:19;;14751:366;;;:::o;15123:::-;15265:3;15286:67;15350:2;15345:3;15286:67;:::i;:::-;15279:74;;15362:93;15451:3;15362:93;:::i;:::-;15480:2;15475:3;15471:12;15464:19;;15123:366;;;:::o;15495:::-;15637:3;15658:67;15722:2;15717:3;15658:67;:::i;:::-;15651:74;;15734:93;15823:3;15734:93;:::i;:::-;15852:2;15847:3;15843:12;15836:19;;15495:366;;;:::o;15867:::-;16009:3;16030:67;16094:2;16089:3;16030:67;:::i;:::-;16023:74;;16106:93;16195:3;16106:93;:::i;:::-;16224:2;16219:3;16215:12;16208:19;;15867:366;;;:::o;16239:::-;16381:3;16402:67;16466:2;16461:3;16402:67;:::i;:::-;16395:74;;16478:93;16567:3;16478:93;:::i;:::-;16596:2;16591:3;16587:12;16580:19;;16239:366;;;:::o;16611:::-;16753:3;16774:67;16838:2;16833:3;16774:67;:::i;:::-;16767:74;;16850:93;16939:3;16850:93;:::i;:::-;16968:2;16963:3;16959:12;16952:19;;16611:366;;;:::o;16983:::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:::-;17497:3;17518:67;17582:2;17577:3;17518:67;:::i;:::-;17511:74;;17594:93;17683:3;17594:93;:::i;:::-;17712:2;17707:3;17703:12;17696:19;;17355:366;;;:::o;17727:::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:::-;18241:3;18262:67;18326:2;18321:3;18262:67;:::i;:::-;18255:74;;18338:93;18427:3;18338:93;:::i;:::-;18456:2;18451:3;18447:12;18440:19;;18099:366;;;:::o;18471:::-;18613:3;18634:67;18698:2;18693:3;18634:67;:::i;:::-;18627:74;;18710:93;18799:3;18710:93;:::i;:::-;18828:2;18823:3;18819:12;18812:19;;18471:366;;;:::o;18843:::-;18985:3;19006:67;19070:2;19065:3;19006:67;:::i;:::-;18999:74;;19082:93;19171:3;19082:93;:::i;:::-;19200:2;19195:3;19191:12;19184:19;;18843:366;;;:::o;19215:::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:::-;19729:3;19750:67;19814:2;19809:3;19750:67;:::i;:::-;19743:74;;19826:93;19915:3;19826:93;:::i;:::-;19944:2;19939:3;19935:12;19928:19;;19587:366;;;:::o;19959:398::-;20118:3;20139:83;20220:1;20215:3;20139:83;:::i;:::-;20132:90;;20231:93;20320:3;20231:93;:::i;:::-;20349:1;20344:3;20340:11;20333:18;;19959:398;;;:::o;20363:366::-;20505:3;20526:67;20590:2;20585:3;20526:67;:::i;:::-;20519:74;;20602:93;20691:3;20602:93;:::i;:::-;20720:2;20715:3;20711:12;20704:19;;20363:366;;;:::o;20735:::-;20877:3;20898:67;20962:2;20957:3;20898:67;:::i;:::-;20891:74;;20974:93;21063:3;20974:93;:::i;:::-;21092:2;21087:3;21083:12;21076:19;;20735:366;;;:::o;21107:::-;21249:3;21270:67;21334:2;21329:3;21270:67;:::i;:::-;21263:74;;21346:93;21435:3;21346:93;:::i;:::-;21464:2;21459:3;21455:12;21448:19;;21107:366;;;:::o;21479:::-;21621:3;21642:67;21706:2;21701:3;21642:67;:::i;:::-;21635:74;;21718:93;21807:3;21718:93;:::i;:::-;21836:2;21831:3;21827:12;21820:19;;21479:366;;;:::o;21851:118::-;21938:24;21956:5;21938:24;:::i;:::-;21933:3;21926:37;21851:118;;:::o;21975:429::-;22152:3;22174:92;22262:3;22253:6;22174:92;:::i;:::-;22167:99;;22283:95;22374:3;22365:6;22283:95;:::i;:::-;22276:102;;22395:3;22388:10;;21975:429;;;;;:::o;22410:379::-;22594:3;22616:147;22759:3;22616:147;:::i;:::-;22609:154;;22780:3;22773:10;;22410:379;;;:::o;22795:222::-;22888:4;22926:2;22915:9;22911:18;22903:26;;22939:71;23007:1;22996:9;22992:17;22983:6;22939:71;:::i;:::-;22795:222;;;;:::o;23023:640::-;23218:4;23256:3;23245:9;23241:19;23233:27;;23270:71;23338:1;23327:9;23323:17;23314:6;23270:71;:::i;:::-;23351:72;23419:2;23408:9;23404:18;23395:6;23351:72;:::i;:::-;23433;23501:2;23490:9;23486:18;23477:6;23433:72;:::i;:::-;23552:9;23546:4;23542:20;23537:2;23526:9;23522:18;23515:48;23580:76;23651:4;23642:6;23580:76;:::i;:::-;23572:84;;23023:640;;;;;;;:::o;23669:210::-;23756:4;23794:2;23783:9;23779:18;23771:26;;23807:65;23869:1;23858:9;23854:17;23845:6;23807:65;:::i;:::-;23669:210;;;;:::o;23885:313::-;23998:4;24036:2;24025:9;24021:18;24013:26;;24085:9;24079:4;24075:20;24071:1;24060:9;24056:17;24049:47;24113:78;24186:4;24177:6;24113:78;:::i;:::-;24105:86;;23885:313;;;;:::o;24204:419::-;24370:4;24408:2;24397:9;24393:18;24385:26;;24457:9;24451:4;24447:20;24443:1;24432:9;24428:17;24421:47;24485:131;24611:4;24485:131;:::i;:::-;24477:139;;24204:419;;;:::o;24629:::-;24795:4;24833:2;24822:9;24818:18;24810:26;;24882:9;24876:4;24872:20;24868:1;24857:9;24853:17;24846:47;24910:131;25036:4;24910:131;:::i;:::-;24902:139;;24629:419;;;:::o;25054:::-;25220:4;25258:2;25247:9;25243:18;25235:26;;25307:9;25301:4;25297:20;25293:1;25282:9;25278:17;25271:47;25335:131;25461:4;25335:131;:::i;:::-;25327:139;;25054:419;;;:::o;25479:::-;25645:4;25683:2;25672:9;25668:18;25660:26;;25732:9;25726:4;25722:20;25718:1;25707:9;25703:17;25696:47;25760:131;25886:4;25760:131;:::i;:::-;25752:139;;25479:419;;;:::o;25904:::-;26070:4;26108:2;26097:9;26093:18;26085:26;;26157:9;26151:4;26147:20;26143:1;26132:9;26128:17;26121:47;26185:131;26311:4;26185:131;:::i;:::-;26177:139;;25904:419;;;:::o;26329:::-;26495:4;26533:2;26522:9;26518:18;26510:26;;26582:9;26576:4;26572:20;26568:1;26557:9;26553:17;26546:47;26610:131;26736:4;26610:131;:::i;:::-;26602:139;;26329:419;;;:::o;26754:::-;26920:4;26958:2;26947:9;26943:18;26935:26;;27007:9;27001:4;26997:20;26993:1;26982:9;26978:17;26971:47;27035:131;27161:4;27035:131;:::i;:::-;27027:139;;26754:419;;;:::o;27179:::-;27345:4;27383:2;27372:9;27368:18;27360:26;;27432:9;27426:4;27422:20;27418:1;27407:9;27403:17;27396:47;27460:131;27586:4;27460:131;:::i;:::-;27452:139;;27179:419;;;:::o;27604:::-;27770:4;27808:2;27797:9;27793:18;27785:26;;27857:9;27851:4;27847:20;27843:1;27832:9;27828:17;27821:47;27885:131;28011:4;27885:131;:::i;:::-;27877:139;;27604:419;;;:::o;28029:::-;28195:4;28233:2;28222:9;28218:18;28210:26;;28282:9;28276:4;28272:20;28268:1;28257:9;28253:17;28246:47;28310:131;28436:4;28310:131;:::i;:::-;28302:139;;28029:419;;;:::o;28454:::-;28620:4;28658:2;28647:9;28643:18;28635:26;;28707:9;28701:4;28697:20;28693:1;28682:9;28678:17;28671:47;28735:131;28861:4;28735:131;:::i;:::-;28727:139;;28454:419;;;:::o;28879:::-;29045:4;29083:2;29072:9;29068:18;29060:26;;29132:9;29126:4;29122:20;29118:1;29107:9;29103:17;29096:47;29160:131;29286:4;29160:131;:::i;:::-;29152:139;;28879:419;;;:::o;29304:::-;29470:4;29508:2;29497:9;29493:18;29485:26;;29557:9;29551:4;29547:20;29543:1;29532:9;29528:17;29521:47;29585:131;29711:4;29585:131;:::i;:::-;29577:139;;29304:419;;;:::o;29729:::-;29895:4;29933:2;29922:9;29918:18;29910:26;;29982:9;29976:4;29972:20;29968:1;29957:9;29953:17;29946:47;30010:131;30136:4;30010:131;:::i;:::-;30002:139;;29729:419;;;:::o;30154:::-;30320:4;30358:2;30347:9;30343:18;30335:26;;30407:9;30401:4;30397:20;30393:1;30382:9;30378:17;30371:47;30435:131;30561:4;30435:131;:::i;:::-;30427:139;;30154:419;;;:::o;30579:::-;30745:4;30783:2;30772:9;30768:18;30760:26;;30832:9;30826:4;30822:20;30818:1;30807:9;30803:17;30796:47;30860:131;30986:4;30860:131;:::i;:::-;30852:139;;30579:419;;;:::o;31004:::-;31170:4;31208:2;31197:9;31193:18;31185:26;;31257:9;31251:4;31247:20;31243:1;31232:9;31228:17;31221:47;31285:131;31411:4;31285:131;:::i;:::-;31277:139;;31004:419;;;:::o;31429:::-;31595:4;31633:2;31622:9;31618:18;31610:26;;31682:9;31676:4;31672:20;31668:1;31657:9;31653:17;31646:47;31710:131;31836:4;31710:131;:::i;:::-;31702:139;;31429:419;;;:::o;31854:::-;32020:4;32058:2;32047:9;32043:18;32035:26;;32107:9;32101:4;32097:20;32093:1;32082:9;32078:17;32071:47;32135:131;32261:4;32135:131;:::i;:::-;32127:139;;31854:419;;;:::o;32279:::-;32445:4;32483:2;32472:9;32468:18;32460:26;;32532:9;32526:4;32522:20;32518:1;32507:9;32503:17;32496:47;32560:131;32686:4;32560:131;:::i;:::-;32552:139;;32279:419;;;:::o;32704:::-;32870:4;32908:2;32897:9;32893:18;32885:26;;32957:9;32951:4;32947:20;32943:1;32932:9;32928:17;32921:47;32985:131;33111:4;32985:131;:::i;:::-;32977:139;;32704:419;;;:::o;33129:::-;33295:4;33333:2;33322:9;33318:18;33310:26;;33382:9;33376:4;33372:20;33368:1;33357:9;33353:17;33346:47;33410:131;33536:4;33410:131;:::i;:::-;33402:139;;33129:419;;;:::o;33554:::-;33720:4;33758:2;33747:9;33743:18;33735:26;;33807:9;33801:4;33797:20;33793:1;33782:9;33778:17;33771:47;33835:131;33961:4;33835:131;:::i;:::-;33827:139;;33554:419;;;:::o;33979:::-;34145:4;34183:2;34172:9;34168:18;34160:26;;34232:9;34226:4;34222:20;34218:1;34207:9;34203:17;34196:47;34260:131;34386:4;34260:131;:::i;:::-;34252:139;;33979:419;;;:::o;34404:::-;34570:4;34608:2;34597:9;34593:18;34585:26;;34657:9;34651:4;34647:20;34643:1;34632:9;34628:17;34621:47;34685:131;34811:4;34685:131;:::i;:::-;34677:139;;34404:419;;;:::o;34829:::-;34995:4;35033:2;35022:9;35018:18;35010:26;;35082:9;35076:4;35072:20;35068:1;35057:9;35053:17;35046:47;35110:131;35236:4;35110:131;:::i;:::-;35102:139;;34829:419;;;:::o;35254:::-;35420:4;35458:2;35447:9;35443:18;35435:26;;35507:9;35501:4;35497:20;35493:1;35482:9;35478:17;35471:47;35535:131;35661:4;35535:131;:::i;:::-;35527:139;;35254:419;;;:::o;35679:222::-;35772:4;35810:2;35799:9;35795:18;35787:26;;35823:71;35891:1;35880:9;35876:17;35867:6;35823:71;:::i;:::-;35679:222;;;;:::o;35907:129::-;35941:6;35968:20;;:::i;:::-;35958:30;;35997:33;36025:4;36017:6;35997:33;:::i;:::-;35907:129;;;:::o;36042:75::-;36075:6;36108:2;36102:9;36092:19;;36042:75;:::o;36123:311::-;36200:4;36290:18;36282:6;36279:30;36276:56;;;36312:18;;:::i;:::-;36276:56;36362:4;36354:6;36350:17;36342:25;;36422:4;36416;36412:15;36404:23;;36123:311;;;:::o;36440:307::-;36501:4;36591:18;36583:6;36580:30;36577:56;;;36613:18;;:::i;:::-;36577:56;36651:29;36673:6;36651:29;:::i;:::-;36643:37;;36735:4;36729;36725:15;36717:23;;36440:307;;;:::o;36753:308::-;36815:4;36905:18;36897:6;36894:30;36891:56;;;36927:18;;:::i;:::-;36891:56;36965:29;36987:6;36965:29;:::i;:::-;36957:37;;37049:4;37043;37039:15;37031:23;;36753:308;;;:::o;37067:141::-;37116:4;37139:3;37131:11;;37162:3;37159:1;37152:14;37196:4;37193:1;37183:18;37175:26;;37067:141;;;:::o;37214:98::-;37265:6;37299:5;37293:12;37283:22;;37214:98;;;:::o;37318:99::-;37370:6;37404:5;37398:12;37388:22;;37318:99;;;:::o;37423:168::-;37506:11;37540:6;37535:3;37528:19;37580:4;37575:3;37571:14;37556:29;;37423:168;;;;:::o;37597:147::-;37698:11;37735:3;37720:18;;37597:147;;;;:::o;37750:169::-;37834:11;37868:6;37863:3;37856:19;37908:4;37903:3;37899:14;37884:29;;37750:169;;;;:::o;37925:148::-;38027:11;38064:3;38049:18;;37925:148;;;;:::o;38079:305::-;38119:3;38138:20;38156:1;38138:20;:::i;:::-;38133:25;;38172:20;38190:1;38172:20;:::i;:::-;38167:25;;38326:1;38258:66;38254:74;38251:1;38248:81;38245:107;;;38332:18;;:::i;:::-;38245:107;38376:1;38373;38369:9;38362:16;;38079:305;;;;:::o;38390:185::-;38430:1;38447:20;38465:1;38447:20;:::i;:::-;38442:25;;38481:20;38499:1;38481:20;:::i;:::-;38476:25;;38520:1;38510:35;;38525:18;;:::i;:::-;38510:35;38567:1;38564;38560:9;38555:14;;38390:185;;;;:::o;38581:191::-;38621:4;38641:20;38659:1;38641:20;:::i;:::-;38636:25;;38675:20;38693:1;38675:20;:::i;:::-;38670:25;;38714:1;38711;38708:8;38705:34;;;38719:18;;:::i;:::-;38705:34;38764:1;38761;38757:9;38749:17;;38581:191;;;;:::o;38778:96::-;38815:7;38844:24;38862:5;38844:24;:::i;:::-;38833:35;;38778:96;;;:::o;38880:90::-;38914:7;38957:5;38950:13;38943:21;38932:32;;38880:90;;;:::o;38976:149::-;39012:7;39052:66;39045:5;39041:78;39030:89;;38976:149;;;:::o;39131:126::-;39168:7;39208:42;39201:5;39197:54;39186:65;;39131:126;;;:::o;39263:77::-;39300:7;39329:5;39318:16;;39263:77;;;:::o;39346:154::-;39430:6;39425:3;39420;39407:30;39492:1;39483:6;39478:3;39474:16;39467:27;39346:154;;;:::o;39506:307::-;39574:1;39584:113;39598:6;39595:1;39592:13;39584:113;;;39683:1;39678:3;39674:11;39668:18;39664:1;39659:3;39655:11;39648:39;39620:2;39617:1;39613:10;39608:15;;39584:113;;;39715:6;39712:1;39709:13;39706:101;;;39795:1;39786:6;39781:3;39777:16;39770:27;39706:101;39555:258;39506:307;;;:::o;39819:320::-;39863:6;39900:1;39894:4;39890:12;39880:22;;39947:1;39941:4;39937:12;39968:18;39958:81;;40024:4;40016:6;40012:17;40002:27;;39958:81;40086:2;40078:6;40075:14;40055:18;40052:38;40049:84;;;40105:18;;:::i;:::-;40049:84;39870:269;39819:320;;;:::o;40145:281::-;40228:27;40250:4;40228:27;:::i;:::-;40220:6;40216:40;40358:6;40346:10;40343:22;40322:18;40310:10;40307:34;40304:62;40301:88;;;40369:18;;:::i;:::-;40301:88;40409:10;40405:2;40398:22;40188:238;40145:281;;:::o;40432:233::-;40471:3;40494:24;40512:5;40494:24;:::i;:::-;40485:33;;40540:66;40533:5;40530:77;40527:103;;;40610:18;;:::i;:::-;40527:103;40657:1;40650:5;40646:13;40639:20;;40432:233;;;:::o;40671:176::-;40703:1;40720:20;40738:1;40720:20;:::i;:::-;40715:25;;40754:20;40772:1;40754:20;:::i;:::-;40749:25;;40793:1;40783:35;;40798:18;;:::i;:::-;40783:35;40839:1;40836;40832:9;40827:14;;40671:176;;;;:::o;40853:180::-;40901:77;40898:1;40891:88;40998:4;40995:1;40988:15;41022:4;41019:1;41012:15;41039:180;41087:77;41084:1;41077:88;41184:4;41181:1;41174:15;41208:4;41205:1;41198:15;41225:180;41273:77;41270:1;41263:88;41370:4;41367:1;41360:15;41394:4;41391:1;41384:15;41411:180;41459:77;41456:1;41449:88;41556:4;41553:1;41546:15;41580:4;41577:1;41570:15;41597:180;41645:77;41642:1;41635:88;41742:4;41739:1;41732:15;41766:4;41763:1;41756:15;41783:117;41892:1;41889;41882:12;41906:117;42015:1;42012;42005:12;42029:117;42138:1;42135;42128:12;42152:117;42261:1;42258;42251:12;42275:117;42384:1;42381;42374:12;42398:102;42439:6;42490:2;42486:7;42481:2;42474:5;42470:14;42466:28;42456:38;;42398:102;;;:::o;42506:226::-;42646:34;42642:1;42634:6;42630:14;42623:58;42715:9;42710:2;42702:6;42698:15;42691:34;42506:226;:::o;42738:229::-;42878:34;42874:1;42866:6;42862:14;42855:58;42947:12;42942:2;42934:6;42930:15;42923:37;42738:229;:::o;42973:237::-;43113:34;43109:1;43101:6;43097:14;43090:58;43182:20;43177:2;43169:6;43165:15;43158:45;42973:237;:::o;43216:168::-;43356:20;43352:1;43344:6;43340:14;43333:44;43216:168;:::o;43390:225::-;43530:34;43526:1;43518:6;43514:14;43507:58;43599:8;43594:2;43586:6;43582:15;43575:33;43390:225;:::o;43621:181::-;43761:33;43757:1;43749:6;43745:14;43738:57;43621:181;:::o;43808:178::-;43948:30;43944:1;43936:6;43932:14;43925:54;43808:178;:::o;43992:223::-;44132:34;44128:1;44120:6;44116:14;44109:58;44201:6;44196:2;44188:6;44184:15;44177:31;43992:223;:::o;44221:175::-;44361:27;44357:1;44349:6;44345:14;44338:51;44221:175;:::o;44402:231::-;44542:34;44538:1;44530:6;44526:14;44519:58;44611:14;44606:2;44598:6;44594:15;44587:39;44402:231;:::o;44639:243::-;44779:34;44775:1;44767:6;44763:14;44756:58;44848:26;44843:2;44835:6;44831:15;44824:51;44639:243;:::o;44888:229::-;45028:34;45024:1;45016:6;45012:14;45005:58;45097:12;45092:2;45084:6;45080:15;45073:37;44888:229;:::o;45123:228::-;45263:34;45259:1;45251:6;45247:14;45240:58;45332:11;45327:2;45319:6;45315:15;45308:36;45123:228;:::o;45357:226::-;45497:34;45493:1;45485:6;45481:14;45474:58;45566:9;45561:2;45553:6;45549:15;45542:34;45357:226;:::o;45589:171::-;45729:23;45725:1;45717:6;45713:14;45706:47;45589:171;:::o;45766:182::-;45906:34;45902:1;45894:6;45890:14;45883:58;45766:182;:::o;45954:169::-;46094:21;46090:1;46082:6;46078:14;46071:45;45954:169;:::o;46129:231::-;46269:34;46265:1;46257:6;46253:14;46246:58;46338:14;46333:2;46325:6;46321:15;46314:39;46129:231;:::o;46366:182::-;46506:34;46502:1;46494:6;46490:14;46483:58;46366:182;:::o;46554:165::-;46694:17;46690:1;46682:6;46678:14;46671:41;46554:165;:::o;46725:170::-;46865:22;46861:1;46853:6;46849:14;46842:46;46725:170;:::o;46901:228::-;47041:34;47037:1;47029:6;47025:14;47018:58;47110:11;47105:2;47097:6;47093:15;47086:36;46901:228;:::o;47135:220::-;47275:34;47271:1;47263:6;47259:14;47252:58;47344:3;47339:2;47331:6;47327:15;47320:28;47135:220;:::o;47361:114::-;;:::o;47481:236::-;47621:34;47617:1;47609:6;47605:14;47598:58;47690:19;47685:2;47677:6;47673:15;47666:44;47481:236;:::o;47723:174::-;47863:26;47859:1;47851:6;47847:14;47840:50;47723:174;:::o;47903:230::-;48043:34;48039:1;48031:6;48027:14;48020:58;48112:13;48107:2;48099:6;48095:15;48088:38;47903:230;:::o;48139:175::-;48279:27;48275:1;48267:6;48263:14;48256:51;48139:175;:::o;48320:122::-;48393:24;48411:5;48393:24;:::i;:::-;48386:5;48383:35;48373:63;;48432:1;48429;48422:12;48373:63;48320:122;:::o;48448:116::-;48518:21;48533:5;48518:21;:::i;:::-;48511:5;48508:32;48498:60;;48554:1;48551;48544:12;48498:60;48448:116;:::o;48570:120::-;48642:23;48659:5;48642:23;:::i;:::-;48635:5;48632:34;48622:62;;48680:1;48677;48670:12;48622:62;48570:120;:::o;48696:122::-;48769:24;48787:5;48769:24;:::i;:::-;48762:5;48759:35;48749:63;;48808:1;48805;48798:12;48749:63;48696:122;:::o

Swarm Source

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