ETH Price: $2,278.52 (+2.04%)

Token

DCG Mastermind (DCG)
 

Overview

Max Total Supply

0 DCG

Holders

136

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 DCG
0xc28f24b8e6a35a09de08c86d39660001d7de23e7
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:
DCG

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-08
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.6;

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


/**
 * @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;
    }
}


/**
 * @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;
}

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


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


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


/*
 * @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;
    }
}


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

}


/**
 * @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;

    string internal _uri;

    // 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 uri = _baseURI();
        return
            bytes(uri).length > 0
                ? string(abi.encodePacked(uri, _tokenId.toString(),".json"))
                : "";
    }

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

    /**
     * @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 { }
}


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



contract DCG is Ownable(), ERC721("DCG Mastermind","DCG") {
    
    address saleAddress;
    address public devAddress;
    address public creatorAddress;
    uint256 public diamond = 0; 
    uint256 public elite = 50;
    uint256 public og = 200;
    uint256 public team = 400;
    uint256 public team2 = 650; 
    
    mapping(uint256 => bool) internal notForSale;
    
    mapping(address => bool) internal administrators;
    mapping(address => bool) public whitelist1;
    mapping(address => bool) public whitelist2;
    mapping(address => bool) public whitelist3;
    mapping(address => bool) public whitelist4;
    mapping(address => bool) public whitelist5;

    event sale(address indexed _to, uint256 id);
    
    modifier onlyAdministrator() {
        require(administrators[msg.sender], "ERROR: You are not allowed");
        _;
    }
    
    
    constructor()  {
        saleAddress = 0xa82C5d98ee13D3bE7a3e3549Cb6fa2f0426F809F;
        devAddress = 0x7cF196415CDD1eF08ca2358a8282D33Ba089B9f3;
        creatorAddress = 0xc2d3eB4D45985f806AD2BB8e0Dec9C1C1BD3C960;
        _uri = "https://ipfs.io/ipfs/QmQsjRvszWoPHaCzuMT3ZWX5RsDCLGEH69toLLPg5m3j1t/";
        administrators[msg.sender] = true;
    } 
    
    
    function buyDCGNFT(uint256 _id) payable public {
        require(!notForSale[_id],"ERROR: This token has already purchased");
        require(_id <= 999,"ERROR: Only 999 limit");
        require(msg.value == choosePrice(_id),"ERROR: You have provide wrong price against the tokenid");
        
        _mint(_msgSender(),_id);
        notForSale[_id] = true;

        payable(saleAddress).transfer(msg.value*88/100);
        payable(devAddress).transfer(msg.value*6/100);
        payable(creatorAddress).transfer(msg.value*6/100);

        emit sale(msg.sender,_id);
    }
  
    function preMintNftBatch(uint256[] memory _ids, address[] memory _to) onlyAdministrator public  {
        require(_ids.length == _to.length,"ERROR: Wrong address or id");
        for(uint256 i=0; i<_ids.length; i++){
            _mint(_to[i],_ids[i]);
            updateId(_ids[i]);
        }
    }  
    
    function preMintNft(uint256 _id, address _to) onlyAdministrator public  {
        _mint(_to,_id);
        updateId(_id);

    }
    
    
    function addAdministrators(address _address) public onlyOwner {
        administrators[_address] = true;
    }
    
    function removeAdministrators(address _address) public onlyOwner {
        administrators[_address] = false;
    }
   
    function changeSaleAddress(address _newAddress) public onlyOwner {
        saleAddress = _newAddress;
    }
   
    function addWhitelistAddress(address[] memory addresses,uint256 whiteliseNumber) public onlyOwner{
        for(uint256 i=0; i<addresses.length; i++){
            if(whiteliseNumber == 1){
                whitelist1[addresses[i]] = true;
            }else if(whiteliseNumber == 2){
                whitelist2[addresses[i]] = true;
            }else if(whiteliseNumber == 3){
                whitelist3[addresses[i]] = true;
            }else if(whiteliseNumber == 4){
                whitelist4[addresses[i]] = true;
            }else if(whiteliseNumber == 5){
                whitelist5[addresses[i]] = true;
            }
        }
    }

    function removeWhitelistAddress(address[] memory addresses, uint256 whiteliseNumber) public onlyOwner{
        for(uint256 i=0; i<addresses.length; i++){
            if(whiteliseNumber == 1){
                whitelist1[addresses[i]] = false;
            }else if(whiteliseNumber == 2){
                whitelist2[addresses[i]] = false;
            }else if(whiteliseNumber == 3){
                whitelist3[addresses[i]] = false;
            }else if(whiteliseNumber == 4){
                whitelist4[addresses[i]] = false;
            }else if(whiteliseNumber == 5){
                whitelist5[addresses[i]] = false;
            }
        }
    }

    function choosePrice(uint256 _tokenId) internal returns(uint256){
        updateId(_tokenId);
        if (_tokenId < 50) {
            if(whitelist1[msg.sender]){
                whitelist1[msg.sender] = false;
              return 0;
            }
          return 5 ether;
        }   
        else if (_tokenId >= 50 && _tokenId < 200) {
            if(whitelist2[msg.sender]){
                whitelist2[msg.sender] = false;
                return 0;
            }
          return 3 ether;
        } 
        else if (_tokenId >= 200 && _tokenId < 400) {
            if(whitelist3[msg.sender]){
              whitelist3[msg.sender] = false;
              return 0;
            }
          return 1 ether;
        }
        else if (_tokenId >= 400 && _tokenId < 650) {
            if(whitelist4[msg.sender]){
                whitelist4[msg.sender] = false;
                return 0;
            }
          return 0.5 ether;
        } 
        else if (_tokenId >= 650) {
          if(whitelist5[msg.sender]){
              whitelist5[msg.sender] = false;
              return 0;
          }
          return 0.1 ether;
        } 
        return 0;
    }

    function updateId(uint256 _tokenId) internal {
        if (_tokenId < 50) {
          diamond++;
        } 
        else if (_tokenId >= 50 && _tokenId < 200) {
          elite++;
        } 
        else if (_tokenId >= 200 && _tokenId < 400) {
          og++;
        }
        else if (_tokenId >= 400 && _tokenId < 650) {
          team++;
        } 
        else if (_tokenId >= 650) {
          team2++;
        } 
    }

    function changeTokenUri(string memory _newUri) onlyOwner public {
        _uri = _newUri;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"sale","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAdministrators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"whiteliseNumber","type":"uint256"}],"name":"addWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"buyDCGNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeSaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"}],"name":"changeTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"diamond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"elite","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"og","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"preMintNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"preMintNftBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAdministrators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"whiteliseNumber","type":"uint256"}],"name":"removeWhitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist2","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist3","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist4","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist5","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526000600b556032600c5560c8600d55610190600e5561028a600f553480156200002c57600080fd5b506040518060400160405280600e81526020017f444347204d61737465726d696e640000000000000000000000000000000000008152506040518060400160405280600381526020017f44434700000000000000000000000000000000000000000000000000000000008152506000620000ab6200030c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600190805190602001906200016192919062000314565b5080600290805190602001906200017a92919062000314565b50505073a82c5d98ee13d3be7a3e3549cb6fa2f0426f809f600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737cf196415cdd1ef08ca2358a8282d33ba089b9f3600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c2d3eb4d45985f806ad2bb8e0dec9c1c1bd3c960600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806080016040528060448152602001620051d96044913960039080519060200190620002ad92919062000314565b506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000429565b600033905090565b8280546200032290620003c4565b90600052602060002090601f01602090048101928262000346576000855562000392565b82601f106200036157805160ff191683800117855562000392565b8280016001018555821562000392579182015b828111156200039157825182559160200191906001019062000374565b5b509050620003a19190620003a5565b5090565b5b80821115620003c0576000816000905550600101620003a6565b5090565b60006002820490506001821680620003dd57607f821691505b60208210811415620003f457620003f3620003fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614da080620004396000396000f3fe60806040526004361061021a5760003560e01c80636c66867411610123578063a22cb465116100ab578063e927fc5c1161006f578063e927fc5c146107e4578063e985e9c51461080f578063f0b7db4e1461084c578063f2fde38b14610877578063fcdf3ae2146108a05761021a565b8063a22cb465146106ff578063b88d4fde14610728578063c87b56dd14610751578063d43cc84f1461078e578063e612c0ad146107b95761021a565b8063866f6196116100f2578063866f61961461062c5780638da5cb5b1461065757806393cd22b81461068257806395d89b41146106ab578063a20e08ca146106d65761021a565b80636c6686741461057057806370a08231146105ad578063715018a6146105ea57806385f2aef2146106015761021a565b806323b872dd116101a65780633ad10ef6116101755780633ad10ef6146104795780633ad504c0146104a45780633dde3918146104e157806342842e0e1461050a5780636352211e146105335761021a565b806323b872dd146103ce57806326826f24146103f757806328bd718414610413578063311a04671461043c5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed5780630b3546df1461031657806317199cc41461033f578063184bd3941461037c5780631872e9ef146103a55761021a565b806301ffc9a71461021f57806306fdde031461025c57806307336df114610287578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613a25565b6108dd565b6040516102539190613f9d565b60405180910390f35b34801561026857600080fd5b506102716109bf565b60405161027e9190613fb8565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613951565b610a51565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190613ac8565b610d8a565b6040516102e49190613f36565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613911565b610e0f565b005b34801561032257600080fd5b5061033d600480360381019061033891906139ad565b610f27565b005b34801561034b57600080fd5b506103666004803603810190610361919061378e565b61107c565b6040516103739190613f9d565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e919061378e565b61109c565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613af5565b611175565b005b3480156103da57600080fd5b506103f560048036038101906103f091906137fb565b611218565b005b610411600480360381019061040c9190613ac8565b611278565b005b34801561041f57600080fd5b5061043a60048036038101906104359190613951565b611579565b005b34801561044857600080fd5b50610463600480360381019061045e919061378e565b6118b2565b6040516104709190613f9d565b60405180910390f35b34801561048557600080fd5b5061048e6118d2565b60405161049b9190613f36565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c6919061378e565b6118f8565b6040516104d89190613f9d565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061378e565b611918565b005b34801561051657600080fd5b50610531600480360381019061052c91906137fb565b611a08565b005b34801561053f57600080fd5b5061055a60048036038101906105559190613ac8565b611a28565b6040516105679190613f36565b60405180910390f35b34801561057c57600080fd5b506105976004803603810190610592919061378e565b611ada565b6040516105a49190613f9d565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061378e565b611afa565b6040516105e1919061427a565b60405180910390f35b3480156105f657600080fd5b506105ff611bb2565b005b34801561060d57600080fd5b50610616611d05565b604051610623919061427a565b60405180910390f35b34801561063857600080fd5b50610641611d0b565b60405161064e919061427a565b60405180910390f35b34801561066357600080fd5b5061066c611d11565b6040516106799190613f36565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a4919061378e565b611d3a565b005b3480156106b757600080fd5b506106c0611e2a565b6040516106cd9190613fb8565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a7f565b611ebc565b005b34801561070b57600080fd5b50610726600480360381019061072191906138d1565b611f6b565b005b34801561073457600080fd5b5061074f600480360381019061074a919061384e565b6120ec565b005b34801561075d57600080fd5b5061077860048036038101906107739190613ac8565b61214e565b6040516107859190613fb8565b60405180910390f35b34801561079a57600080fd5b506107a36121f5565b6040516107b0919061427a565b60405180910390f35b3480156107c557600080fd5b506107ce6121fb565b6040516107db919061427a565b60405180910390f35b3480156107f057600080fd5b506107f9612201565b6040516108069190613f36565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906137bb565b612227565b6040516108439190613f9d565b60405180910390f35b34801561085857600080fd5b506108616122bb565b60405161086e919061427a565b60405180910390f35b34801561088357600080fd5b5061089e6004803603810190610899919061378e565b6122c1565b005b3480156108ac57600080fd5b506108c760048036038101906108c2919061378e565b612483565b6040516108d49190613f9d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b857506109b7826124a3565b5b9050919050565b6060600180546109ce90614582565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90614582565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b610a5961250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613fda565b60405180910390fd5b60005b8251811015610d85576001821415610b7257600060126000858481518110610b1457610b136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d72565b6002821415610bf257600060136000858481518110610b9457610b936146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d71565b6003821415610c7257600060146000858481518110610c1457610c136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d70565b6004821415610cf257600060156000858481518110610c9457610c936146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d6f565b6005821415610d6e57600060166000858481518110610d1457610d136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b5b8080610d7d906145e5565b915050610ae9565b505050565b6000610d9582612515565b610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb9061401a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e1a82611a28565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e829061415a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eaa61250d565b73ffffffffffffffffffffffffffffffffffffffff161480610ed95750610ed881610ed361250d565b612227565b5b610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906141ba565b60405180910390fd5b610f228383612581565b505050565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906140ba565b60405180910390fd5b8051825114610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906140da565b60405180910390fd5b60005b825181101561107757611041828281518110611019576110186146ec565b5b6020026020010151848381518110611034576110336146ec565b5b602002602001015161263a565b611064838281518110611057576110566146ec565b5b6020026020010151612808565b808061106f906145e5565b915050610ffa565b505050565b60166020528060005260406000206000915054906101000a900460ff1681565b6110a461250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613fda565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f8906140ba565b60405180910390fd5b61120b818361263a565b61121482612808565b5050565b61122961122361250d565b826128f3565b611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f9061419a565b60405180910390fd5b6112738383836129d1565b505050565b6010600082815260200190815260200160002060009054906101000a900460ff16156112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061411a565b60405180910390fd5b6103e781111561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061405a565b60405180910390fd5b61132781612c2d565b3414611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906140fa565b60405180910390fd5b61137961137361250d565b8261263a565b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646058346113f0919061443e565b6113fa919061440d565b9081150290604051600060405180830381858888f19350505050158015611425573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600634611471919061443e565b61147b919061440d565b9081150290604051600060405180830381858888f193505050501580156114a6573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646006346114f2919061443e565b6114fc919061440d565b9081150290604051600060405180830381858888f19350505050158015611527573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f611efc09913fa36c4426aee8b47fa356982a4793a490fda6913da8fb44401e368260405161156e919061427a565b60405180910390a250565b61158161250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613fda565b60405180910390fd5b60005b82518110156118ad57600182141561169a5760016012600085848151811061163c5761163b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061189a565b600282141561171a576001601360008584815181106116bc576116bb6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611899565b600382141561179a5760016014600085848151811061173c5761173b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611898565b600482141561181a576001601560008584815181106117bc576117bb6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611897565b60058214156118965760016016600085848151811061183c5761183b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b5b80806118a5906145e5565b915050611611565b505050565b60146020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b61192061250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613fda565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a23838383604051806020016040528060008152506120ec565b505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac89061423a565b60405180910390fd5b80915050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629061409a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bba61250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613fda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5481565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4261250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690613fda565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060028054611e3990614582565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6590614582565b8015611eb25780601f10611e8757610100808354040283529160200191611eb2565b820191906000526020600020905b815481529060010190602001808311611e9557829003601f168201915b5050505050905090565b611ec461250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613fda565b60405180910390fd5b8060039080519060200190611f67929190613466565b5050565b611f7361250d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061425a565b60405180910390fd5b8060076000611fee61250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661209b61250d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120e09190613f9d565b60405180910390a35050565b6120fd6120f761250d565b836128f3565b61213c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121339061419a565b60405180910390fd5b61214884848484613068565b50505050565b606061215982612515565b612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f9061417a565b60405180910390fd5b60006121a26130c4565b905060008151116121c257604051806020016040528060008152506121ed565b806121cc84613156565b6040516020016121dd929190613f07565b6040516020818303038152906040525b915050919050565b600d5481565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b6122c961250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613fda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906141fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125f483611a28565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190613ffa565b60405180910390fd5b6126b381612515565b156126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea9061407a565b60405180910390fd5b6126ff600083836132b7565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274f91906143b7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b603281101561282e57600b6000815480929190612824906145e5565b91905055506128f0565b6032811015801561283f575060c881105b1561286157600c6000815480929190612857906145e5565b91905055506128ef565b60c88110158015612873575061019081105b1561289557600d600081548092919061288b906145e5565b91905055506128ee565b61019081101580156128a8575061028a81105b156128ca57600e60008154809291906128c0906145e5565b91905055506128ed565b61028a81106128ec57600f60008154809291906128e6906145e5565b91905055505b5b5b5b5b50565b60006128fe82612515565b61293d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129349061403a565b60405180910390fd5b600061294883611a28565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129b757508373ffffffffffffffffffffffffffffffffffffffff1661299f84610d8a565b73ffffffffffffffffffffffffffffffffffffffff16145b806129c857506129c78185612227565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129f182611a28565b73ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e9061421a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906141da565b60405180910390fd5b612ac28383836132b7565b612acd600082612581565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b1d9190614498565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7491906143b7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612c3882612808565b6032821015612d0457601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf4576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b674563918244f400009050613063565b60328210158015612d15575060c882105b15612ddd57601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dcd576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b6729a2241af62c00009050613063565b60c88210158015612def575061019082105b15612eb757601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ea7576000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b670de0b6b3a76400009050613063565b6101908210158015612eca575061028a82105b15612f9257601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f82576000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b6706f05b59d3b200009050613063565b61028a821061305e57601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561304e576000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b67016345785d8a00009050613063565b600090505b919050565b6130738484846129d1565b61307f848484846132bc565b6130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b59061413a565b60405180910390fd5b50505050565b6060600380546130d390614582565b80601f01602080910402602001604051908101604052809291908181526020018280546130ff90614582565b801561314c5780601f106131215761010080835404028352916020019161314c565b820191906000526020600020905b81548152906001019060200180831161312f57829003601f168201915b5050505050905090565b6060600082141561319e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132b2565b600082905060005b600082146131d05780806131b9906145e5565b915050600a826131c9919061440d565b91506131a6565b60008167ffffffffffffffff8111156131ec576131eb61471b565b5b6040519080825280601f01601f19166020018201604052801561321e5781602001600182028036833780820191505090505b5090505b600085146132ab576001826132379190614498565b9150600a85613246919061462e565b603061325291906143b7565b60f81b818381518110613268576132676146ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a4919061440d565b9450613222565b8093505050505b919050565b505050565b60006132dd8473ffffffffffffffffffffffffffffffffffffffff16613453565b15613446578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261330661250d565b8786866040518563ffffffff1660e01b81526004016133289493929190613f51565b602060405180830381600087803b15801561334257600080fd5b505af192505050801561337357506040513d601f19601f820116820180604052508101906133709190613a52565b60015b6133f6573d80600081146133a3576040519150601f19603f3d011682016040523d82523d6000602084013e6133a8565b606091505b506000815114156133ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e59061413a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061344b565b600190505b949350505050565b600080823b905060008111915050919050565b82805461347290614582565b90600052602060002090601f01602090048101928261349457600085556134db565b82601f106134ad57805160ff19168380011785556134db565b828001600101855582156134db579182015b828111156134da5782518255916020019190600101906134bf565b5b5090506134e891906134ec565b5090565b5b808211156135055760008160009055506001016134ed565b5090565b600061351c613517846142ba565b614295565b9050808382526020820190508285602086028201111561353f5761353e61474f565b5b60005b8581101561356f5781613555888261366d565b845260208401935060208301925050600181019050613542565b5050509392505050565b600061358c613587846142e6565b614295565b905080838252602082019050828560208602820111156135af576135ae61474f565b5b60005b858110156135df57816135c58882613779565b8452602084019350602083019250506001810190506135b2565b5050509392505050565b60006135fc6135f784614312565b614295565b90508281526020810184848401111561361857613617614754565b5b613623848285614540565b509392505050565b600061363e61363984614343565b614295565b90508281526020810184848401111561365a57613659614754565b5b613665848285614540565b509392505050565b60008135905061367c81614d0e565b92915050565b600082601f8301126136975761369661474a565b5b81356136a7848260208601613509565b91505092915050565b600082601f8301126136c5576136c461474a565b5b81356136d5848260208601613579565b91505092915050565b6000813590506136ed81614d25565b92915050565b60008135905061370281614d3c565b92915050565b60008151905061371781614d3c565b92915050565b600082601f8301126137325761373161474a565b5b81356137428482602086016135e9565b91505092915050565b600082601f8301126137605761375f61474a565b5b813561377084826020860161362b565b91505092915050565b60008135905061378881614d53565b92915050565b6000602082840312156137a4576137a361475e565b5b60006137b28482850161366d565b91505092915050565b600080604083850312156137d2576137d161475e565b5b60006137e08582860161366d565b92505060206137f18582860161366d565b9150509250929050565b6000806000606084860312156138145761381361475e565b5b60006138228682870161366d565b93505060206138338682870161366d565b925050604061384486828701613779565b9150509250925092565b600080600080608085870312156138685761386761475e565b5b60006138768782880161366d565b94505060206138878782880161366d565b935050604061389887828801613779565b925050606085013567ffffffffffffffff8111156138b9576138b8614759565b5b6138c58782880161371d565b91505092959194509250565b600080604083850312156138e8576138e761475e565b5b60006138f68582860161366d565b9250506020613907858286016136de565b9150509250929050565b600080604083850312156139285761392761475e565b5b60006139368582860161366d565b925050602061394785828601613779565b9150509250929050565b600080604083850312156139685761396761475e565b5b600083013567ffffffffffffffff81111561398657613985614759565b5b61399285828601613682565b92505060206139a385828601613779565b9150509250929050565b600080604083850312156139c4576139c361475e565b5b600083013567ffffffffffffffff8111156139e2576139e1614759565b5b6139ee858286016136b0565b925050602083013567ffffffffffffffff811115613a0f57613a0e614759565b5b613a1b85828601613682565b9150509250929050565b600060208284031215613a3b57613a3a61475e565b5b6000613a49848285016136f3565b91505092915050565b600060208284031215613a6857613a6761475e565b5b6000613a7684828501613708565b91505092915050565b600060208284031215613a9557613a9461475e565b5b600082013567ffffffffffffffff811115613ab357613ab2614759565b5b613abf8482850161374b565b91505092915050565b600060208284031215613ade57613add61475e565b5b6000613aec84828501613779565b91505092915050565b60008060408385031215613b0c57613b0b61475e565b5b6000613b1a85828601613779565b9250506020613b2b8582860161366d565b9150509250929050565b613b3e816144cc565b82525050565b613b4d816144de565b82525050565b6000613b5e82614374565b613b68818561438a565b9350613b7881856020860161454f565b613b8181614763565b840191505092915050565b6000613b978261437f565b613ba1818561439b565b9350613bb181856020860161454f565b613bba81614763565b840191505092915050565b6000613bd08261437f565b613bda81856143ac565b9350613bea81856020860161454f565b80840191505092915050565b6000613c0360208361439b565b9150613c0e82614774565b602082019050919050565b6000613c2660208361439b565b9150613c318261479d565b602082019050919050565b6000613c49602c8361439b565b9150613c54826147c6565b604082019050919050565b6000613c6c602c8361439b565b9150613c7782614815565b604082019050919050565b6000613c8f60158361439b565b9150613c9a82614864565b602082019050919050565b6000613cb2601c8361439b565b9150613cbd8261488d565b602082019050919050565b6000613cd5602a8361439b565b9150613ce0826148b6565b604082019050919050565b6000613cf8601a8361439b565b9150613d0382614905565b602082019050919050565b6000613d1b601a8361439b565b9150613d268261492e565b602082019050919050565b6000613d3e60378361439b565b9150613d4982614957565b604082019050919050565b6000613d6160278361439b565b9150613d6c826149a6565b604082019050919050565b6000613d846005836143ac565b9150613d8f826149f5565b600582019050919050565b6000613da760328361439b565b9150613db282614a1e565b604082019050919050565b6000613dca60218361439b565b9150613dd582614a6d565b604082019050919050565b6000613ded602f8361439b565b9150613df882614abc565b604082019050919050565b6000613e1060318361439b565b9150613e1b82614b0b565b604082019050919050565b6000613e3360388361439b565b9150613e3e82614b5a565b604082019050919050565b6000613e5660248361439b565b9150613e6182614ba9565b604082019050919050565b6000613e7960268361439b565b9150613e8482614bf8565b604082019050919050565b6000613e9c60298361439b565b9150613ea782614c47565b604082019050919050565b6000613ebf60298361439b565b9150613eca82614c96565b604082019050919050565b6000613ee260198361439b565b9150613eed82614ce5565b602082019050919050565b613f0181614536565b82525050565b6000613f138285613bc5565b9150613f1f8284613bc5565b9150613f2a82613d77565b91508190509392505050565b6000602082019050613f4b6000830184613b35565b92915050565b6000608082019050613f666000830187613b35565b613f736020830186613b35565b613f806040830185613ef8565b8181036060830152613f928184613b53565b905095945050505050565b6000602082019050613fb26000830184613b44565b92915050565b60006020820190508181036000830152613fd28184613b8c565b905092915050565b60006020820190508181036000830152613ff381613bf6565b9050919050565b6000602082019050818103600083015261401381613c19565b9050919050565b6000602082019050818103600083015261403381613c3c565b9050919050565b6000602082019050818103600083015261405381613c5f565b9050919050565b6000602082019050818103600083015261407381613c82565b9050919050565b6000602082019050818103600083015261409381613ca5565b9050919050565b600060208201905081810360008301526140b381613cc8565b9050919050565b600060208201905081810360008301526140d381613ceb565b9050919050565b600060208201905081810360008301526140f381613d0e565b9050919050565b6000602082019050818103600083015261411381613d31565b9050919050565b6000602082019050818103600083015261413381613d54565b9050919050565b6000602082019050818103600083015261415381613d9a565b9050919050565b6000602082019050818103600083015261417381613dbd565b9050919050565b6000602082019050818103600083015261419381613de0565b9050919050565b600060208201905081810360008301526141b381613e03565b9050919050565b600060208201905081810360008301526141d381613e26565b9050919050565b600060208201905081810360008301526141f381613e49565b9050919050565b6000602082019050818103600083015261421381613e6c565b9050919050565b6000602082019050818103600083015261423381613e8f565b9050919050565b6000602082019050818103600083015261425381613eb2565b9050919050565b6000602082019050818103600083015261427381613ed5565b9050919050565b600060208201905061428f6000830184613ef8565b92915050565b600061429f6142b0565b90506142ab82826145b4565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d5576142d461471b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143015761430061471b565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561432d5761432c61471b565b5b61433682614763565b9050602081019050919050565b600067ffffffffffffffff82111561435e5761435d61471b565b5b61436782614763565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c282614536565b91506143cd83614536565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144025761440161465f565b5b828201905092915050565b600061441882614536565b915061442383614536565b9250826144335761443261468e565b5b828204905092915050565b600061444982614536565b915061445483614536565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448d5761448c61465f565b5b828202905092915050565b60006144a382614536565b91506144ae83614536565b9250828210156144c1576144c061465f565b5b828203905092915050565b60006144d782614516565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561456d578082015181840152602081019050614552565b8381111561457c576000848401525b50505050565b6000600282049050600182168061459a57607f821691505b602082108114156145ae576145ad6146bd565b5b50919050565b6145bd82614763565b810181811067ffffffffffffffff821117156145dc576145db61471b565b5b80604052505050565b60006145f082614536565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146235761462261465f565b5b600182019050919050565b600061463982614536565b915061464483614536565b9250826146545761465361468e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a204d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20417070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a204f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a204f6e6c7920393939206c696d69740000000000000000000000600082015250565b7f4552433732313a20546f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2042616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552524f523a20596f7520617265206e6f7420616c6c6f776564000000000000600082015250565b7f4552524f523a2057726f6e672061646472657373206f72206964000000000000600082015250565b7f4552524f523a20596f7520686176652070726f766964652077726f6e6720707260008201527f69636520616761696e73742074686520746f6b656e6964000000000000000000602082015250565b7f4552524f523a205468697320746f6b656e2068617320616c726561647920707560008201527f7263686173656400000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a205472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20417070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a205472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732313a20417070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a205472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a204e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a205472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a204f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20417070726f766520746f2063616c6c657200000000000000600082015250565b614d17816144cc565b8114614d2257600080fd5b50565b614d2e816144de565b8114614d3957600080fd5b50565b614d45816144ea565b8114614d5057600080fd5b50565b614d5c81614536565b8114614d6757600080fd5b5056fea2646970667358221220de43d24900457afedc60f57f11ed9375aeb09263c7c9d6d281bf7ee2452174ba64736f6c6343000806003368747470733a2f2f697066732e696f2f697066732f516d51736a5276737a576f504861437a754d54335a575835527344434c4745483639746f4c4c5067356d336a31742f

Deployed Bytecode

0x60806040526004361061021a5760003560e01c80636c66867411610123578063a22cb465116100ab578063e927fc5c1161006f578063e927fc5c146107e4578063e985e9c51461080f578063f0b7db4e1461084c578063f2fde38b14610877578063fcdf3ae2146108a05761021a565b8063a22cb465146106ff578063b88d4fde14610728578063c87b56dd14610751578063d43cc84f1461078e578063e612c0ad146107b95761021a565b8063866f6196116100f2578063866f61961461062c5780638da5cb5b1461065757806393cd22b81461068257806395d89b41146106ab578063a20e08ca146106d65761021a565b80636c6686741461057057806370a08231146105ad578063715018a6146105ea57806385f2aef2146106015761021a565b806323b872dd116101a65780633ad10ef6116101755780633ad10ef6146104795780633ad504c0146104a45780633dde3918146104e157806342842e0e1461050a5780636352211e146105335761021a565b806323b872dd146103ce57806326826f24146103f757806328bd718414610413578063311a04671461043c5761021a565b8063095ea7b3116101ed578063095ea7b3146102ed5780630b3546df1461031657806317199cc41461033f578063184bd3941461037c5780631872e9ef146103a55761021a565b806301ffc9a71461021f57806306fdde031461025c57806307336df114610287578063081812fc146102b0575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190613a25565b6108dd565b6040516102539190613f9d565b60405180910390f35b34801561026857600080fd5b506102716109bf565b60405161027e9190613fb8565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613951565b610a51565b005b3480156102bc57600080fd5b506102d760048036038101906102d29190613ac8565b610d8a565b6040516102e49190613f36565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190613911565b610e0f565b005b34801561032257600080fd5b5061033d600480360381019061033891906139ad565b610f27565b005b34801561034b57600080fd5b506103666004803603810190610361919061378e565b61107c565b6040516103739190613f9d565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e919061378e565b61109c565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613af5565b611175565b005b3480156103da57600080fd5b506103f560048036038101906103f091906137fb565b611218565b005b610411600480360381019061040c9190613ac8565b611278565b005b34801561041f57600080fd5b5061043a60048036038101906104359190613951565b611579565b005b34801561044857600080fd5b50610463600480360381019061045e919061378e565b6118b2565b6040516104709190613f9d565b60405180910390f35b34801561048557600080fd5b5061048e6118d2565b60405161049b9190613f36565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c6919061378e565b6118f8565b6040516104d89190613f9d565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061378e565b611918565b005b34801561051657600080fd5b50610531600480360381019061052c91906137fb565b611a08565b005b34801561053f57600080fd5b5061055a60048036038101906105559190613ac8565b611a28565b6040516105679190613f36565b60405180910390f35b34801561057c57600080fd5b506105976004803603810190610592919061378e565b611ada565b6040516105a49190613f9d565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061378e565b611afa565b6040516105e1919061427a565b60405180910390f35b3480156105f657600080fd5b506105ff611bb2565b005b34801561060d57600080fd5b50610616611d05565b604051610623919061427a565b60405180910390f35b34801561063857600080fd5b50610641611d0b565b60405161064e919061427a565b60405180910390f35b34801561066357600080fd5b5061066c611d11565b6040516106799190613f36565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a4919061378e565b611d3a565b005b3480156106b757600080fd5b506106c0611e2a565b6040516106cd9190613fb8565b60405180910390f35b3480156106e257600080fd5b506106fd60048036038101906106f89190613a7f565b611ebc565b005b34801561070b57600080fd5b50610726600480360381019061072191906138d1565b611f6b565b005b34801561073457600080fd5b5061074f600480360381019061074a919061384e565b6120ec565b005b34801561075d57600080fd5b5061077860048036038101906107739190613ac8565b61214e565b6040516107859190613fb8565b60405180910390f35b34801561079a57600080fd5b506107a36121f5565b6040516107b0919061427a565b60405180910390f35b3480156107c557600080fd5b506107ce6121fb565b6040516107db919061427a565b60405180910390f35b3480156107f057600080fd5b506107f9612201565b6040516108069190613f36565b60405180910390f35b34801561081b57600080fd5b50610836600480360381019061083191906137bb565b612227565b6040516108439190613f9d565b60405180910390f35b34801561085857600080fd5b506108616122bb565b60405161086e919061427a565b60405180910390f35b34801561088357600080fd5b5061089e6004803603810190610899919061378e565b6122c1565b005b3480156108ac57600080fd5b506108c760048036038101906108c2919061378e565b612483565b6040516108d49190613f9d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b857506109b7826124a3565b5b9050919050565b6060600180546109ce90614582565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa90614582565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b5050505050905090565b610a5961250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add90613fda565b60405180910390fd5b60005b8251811015610d85576001821415610b7257600060126000858481518110610b1457610b136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d72565b6002821415610bf257600060136000858481518110610b9457610b936146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d71565b6003821415610c7257600060146000858481518110610c1457610c136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d70565b6004821415610cf257600060156000858481518110610c9457610c936146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d6f565b6005821415610d6e57600060166000858481518110610d1457610d136146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b5b8080610d7d906145e5565b915050610ae9565b505050565b6000610d9582612515565b610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb9061401a565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e1a82611a28565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e829061415a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eaa61250d565b73ffffffffffffffffffffffffffffffffffffffff161480610ed95750610ed881610ed361250d565b612227565b5b610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906141ba565b60405180910390fd5b610f228383612581565b505050565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906140ba565b60405180910390fd5b8051825114610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee906140da565b60405180910390fd5b60005b825181101561107757611041828281518110611019576110186146ec565b5b6020026020010151848381518110611034576110336146ec565b5b602002602001015161263a565b611064838281518110611057576110566146ec565b5b6020026020010151612808565b808061106f906145e5565b915050610ffa565b505050565b60166020528060005260406000206000915054906101000a900460ff1681565b6110a461250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890613fda565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f8906140ba565b60405180910390fd5b61120b818361263a565b61121482612808565b5050565b61122961122361250d565b826128f3565b611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f9061419a565b60405180910390fd5b6112738383836129d1565b505050565b6010600082815260200190815260200160002060009054906101000a900460ff16156112d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061411a565b60405180910390fd5b6103e781111561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061405a565b60405180910390fd5b61132781612c2d565b3414611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906140fa565b60405180910390fd5b61137961137361250d565b8261263a565b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646058346113f0919061443e565b6113fa919061440d565b9081150290604051600060405180830381858888f19350505050158015611425573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600634611471919061443e565b61147b919061440d565b9081150290604051600060405180830381858888f193505050501580156114a6573d6000803e3d6000fd5b50600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646006346114f2919061443e565b6114fc919061440d565b9081150290604051600060405180830381858888f19350505050158015611527573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f611efc09913fa36c4426aee8b47fa356982a4793a490fda6913da8fb44401e368260405161156e919061427a565b60405180910390a250565b61158161250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590613fda565b60405180910390fd5b60005b82518110156118ad57600182141561169a5760016012600085848151811061163c5761163b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061189a565b600282141561171a576001601360008584815181106116bc576116bb6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611899565b600382141561179a5760016014600085848151811061173c5761173b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611898565b600482141561181a576001601560008584815181106117bc576117bb6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611897565b60058214156118965760016016600085848151811061183c5761183b6146ec565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b5b5b80806118a5906145e5565b915050611611565b505050565b60146020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60136020528060005260406000206000915054906101000a900460ff1681565b61192061250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613fda565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a23838383604051806020016040528060008152506120ec565b505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac89061423a565b60405180910390fd5b80915050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629061409a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611bba61250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613fda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5481565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d4261250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc690613fda565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060028054611e3990614582565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6590614582565b8015611eb25780601f10611e8757610100808354040283529160200191611eb2565b820191906000526020600020905b815481529060010190602001808311611e9557829003601f168201915b5050505050905090565b611ec461250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613fda565b60405180910390fd5b8060039080519060200190611f67929190613466565b5050565b611f7361250d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061425a565b60405180910390fd5b8060076000611fee61250d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661209b61250d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120e09190613f9d565b60405180910390a35050565b6120fd6120f761250d565b836128f3565b61213c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121339061419a565b60405180910390fd5b61214884848484613068565b50505050565b606061215982612515565b612198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218f9061417a565b60405180910390fd5b60006121a26130c4565b905060008151116121c257604051806020016040528060008152506121ed565b806121cc84613156565b6040516020016121dd929190613f07565b6040516020818303038152906040525b915050919050565b600d5481565b600f5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b6122c961250d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613fda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd906141fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60126020528060005260406000206000915054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125f483611a28565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190613ffa565b60405180910390fd5b6126b381612515565b156126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea9061407a565b60405180910390fd5b6126ff600083836132b7565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461274f91906143b7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b603281101561282e57600b6000815480929190612824906145e5565b91905055506128f0565b6032811015801561283f575060c881105b1561286157600c6000815480929190612857906145e5565b91905055506128ef565b60c88110158015612873575061019081105b1561289557600d600081548092919061288b906145e5565b91905055506128ee565b61019081101580156128a8575061028a81105b156128ca57600e60008154809291906128c0906145e5565b91905055506128ed565b61028a81106128ec57600f60008154809291906128e6906145e5565b91905055505b5b5b5b5b50565b60006128fe82612515565b61293d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129349061403a565b60405180910390fd5b600061294883611a28565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129b757508373ffffffffffffffffffffffffffffffffffffffff1661299f84610d8a565b73ffffffffffffffffffffffffffffffffffffffff16145b806129c857506129c78185612227565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129f182611a28565b73ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e9061421a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906141da565b60405180910390fd5b612ac28383836132b7565b612acd600082612581565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b1d9190614498565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b7491906143b7565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612c3882612808565b6032821015612d0457601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cf4576000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b674563918244f400009050613063565b60328210158015612d15575060c882105b15612ddd57601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dcd576000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b6729a2241af62c00009050613063565b60c88210158015612def575061019082105b15612eb757601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ea7576000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b670de0b6b3a76400009050613063565b6101908210158015612eca575061028a82105b15612f9257601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f82576000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b6706f05b59d3b200009050613063565b61028a821061305e57601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561304e576000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060009050613063565b67016345785d8a00009050613063565b600090505b919050565b6130738484846129d1565b61307f848484846132bc565b6130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b59061413a565b60405180910390fd5b50505050565b6060600380546130d390614582565b80601f01602080910402602001604051908101604052809291908181526020018280546130ff90614582565b801561314c5780601f106131215761010080835404028352916020019161314c565b820191906000526020600020905b81548152906001019060200180831161312f57829003601f168201915b5050505050905090565b6060600082141561319e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132b2565b600082905060005b600082146131d05780806131b9906145e5565b915050600a826131c9919061440d565b91506131a6565b60008167ffffffffffffffff8111156131ec576131eb61471b565b5b6040519080825280601f01601f19166020018201604052801561321e5781602001600182028036833780820191505090505b5090505b600085146132ab576001826132379190614498565b9150600a85613246919061462e565b603061325291906143b7565b60f81b818381518110613268576132676146ec565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a4919061440d565b9450613222565b8093505050505b919050565b505050565b60006132dd8473ffffffffffffffffffffffffffffffffffffffff16613453565b15613446578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261330661250d565b8786866040518563ffffffff1660e01b81526004016133289493929190613f51565b602060405180830381600087803b15801561334257600080fd5b505af192505050801561337357506040513d601f19601f820116820180604052508101906133709190613a52565b60015b6133f6573d80600081146133a3576040519150601f19603f3d011682016040523d82523d6000602084013e6133a8565b606091505b506000815114156133ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e59061413a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061344b565b600190505b949350505050565b600080823b905060008111915050919050565b82805461347290614582565b90600052602060002090601f01602090048101928261349457600085556134db565b82601f106134ad57805160ff19168380011785556134db565b828001600101855582156134db579182015b828111156134da5782518255916020019190600101906134bf565b5b5090506134e891906134ec565b5090565b5b808211156135055760008160009055506001016134ed565b5090565b600061351c613517846142ba565b614295565b9050808382526020820190508285602086028201111561353f5761353e61474f565b5b60005b8581101561356f5781613555888261366d565b845260208401935060208301925050600181019050613542565b5050509392505050565b600061358c613587846142e6565b614295565b905080838252602082019050828560208602820111156135af576135ae61474f565b5b60005b858110156135df57816135c58882613779565b8452602084019350602083019250506001810190506135b2565b5050509392505050565b60006135fc6135f784614312565b614295565b90508281526020810184848401111561361857613617614754565b5b613623848285614540565b509392505050565b600061363e61363984614343565b614295565b90508281526020810184848401111561365a57613659614754565b5b613665848285614540565b509392505050565b60008135905061367c81614d0e565b92915050565b600082601f8301126136975761369661474a565b5b81356136a7848260208601613509565b91505092915050565b600082601f8301126136c5576136c461474a565b5b81356136d5848260208601613579565b91505092915050565b6000813590506136ed81614d25565b92915050565b60008135905061370281614d3c565b92915050565b60008151905061371781614d3c565b92915050565b600082601f8301126137325761373161474a565b5b81356137428482602086016135e9565b91505092915050565b600082601f8301126137605761375f61474a565b5b813561377084826020860161362b565b91505092915050565b60008135905061378881614d53565b92915050565b6000602082840312156137a4576137a361475e565b5b60006137b28482850161366d565b91505092915050565b600080604083850312156137d2576137d161475e565b5b60006137e08582860161366d565b92505060206137f18582860161366d565b9150509250929050565b6000806000606084860312156138145761381361475e565b5b60006138228682870161366d565b93505060206138338682870161366d565b925050604061384486828701613779565b9150509250925092565b600080600080608085870312156138685761386761475e565b5b60006138768782880161366d565b94505060206138878782880161366d565b935050604061389887828801613779565b925050606085013567ffffffffffffffff8111156138b9576138b8614759565b5b6138c58782880161371d565b91505092959194509250565b600080604083850312156138e8576138e761475e565b5b60006138f68582860161366d565b9250506020613907858286016136de565b9150509250929050565b600080604083850312156139285761392761475e565b5b60006139368582860161366d565b925050602061394785828601613779565b9150509250929050565b600080604083850312156139685761396761475e565b5b600083013567ffffffffffffffff81111561398657613985614759565b5b61399285828601613682565b92505060206139a385828601613779565b9150509250929050565b600080604083850312156139c4576139c361475e565b5b600083013567ffffffffffffffff8111156139e2576139e1614759565b5b6139ee858286016136b0565b925050602083013567ffffffffffffffff811115613a0f57613a0e614759565b5b613a1b85828601613682565b9150509250929050565b600060208284031215613a3b57613a3a61475e565b5b6000613a49848285016136f3565b91505092915050565b600060208284031215613a6857613a6761475e565b5b6000613a7684828501613708565b91505092915050565b600060208284031215613a9557613a9461475e565b5b600082013567ffffffffffffffff811115613ab357613ab2614759565b5b613abf8482850161374b565b91505092915050565b600060208284031215613ade57613add61475e565b5b6000613aec84828501613779565b91505092915050565b60008060408385031215613b0c57613b0b61475e565b5b6000613b1a85828601613779565b9250506020613b2b8582860161366d565b9150509250929050565b613b3e816144cc565b82525050565b613b4d816144de565b82525050565b6000613b5e82614374565b613b68818561438a565b9350613b7881856020860161454f565b613b8181614763565b840191505092915050565b6000613b978261437f565b613ba1818561439b565b9350613bb181856020860161454f565b613bba81614763565b840191505092915050565b6000613bd08261437f565b613bda81856143ac565b9350613bea81856020860161454f565b80840191505092915050565b6000613c0360208361439b565b9150613c0e82614774565b602082019050919050565b6000613c2660208361439b565b9150613c318261479d565b602082019050919050565b6000613c49602c8361439b565b9150613c54826147c6565b604082019050919050565b6000613c6c602c8361439b565b9150613c7782614815565b604082019050919050565b6000613c8f60158361439b565b9150613c9a82614864565b602082019050919050565b6000613cb2601c8361439b565b9150613cbd8261488d565b602082019050919050565b6000613cd5602a8361439b565b9150613ce0826148b6565b604082019050919050565b6000613cf8601a8361439b565b9150613d0382614905565b602082019050919050565b6000613d1b601a8361439b565b9150613d268261492e565b602082019050919050565b6000613d3e60378361439b565b9150613d4982614957565b604082019050919050565b6000613d6160278361439b565b9150613d6c826149a6565b604082019050919050565b6000613d846005836143ac565b9150613d8f826149f5565b600582019050919050565b6000613da760328361439b565b9150613db282614a1e565b604082019050919050565b6000613dca60218361439b565b9150613dd582614a6d565b604082019050919050565b6000613ded602f8361439b565b9150613df882614abc565b604082019050919050565b6000613e1060318361439b565b9150613e1b82614b0b565b604082019050919050565b6000613e3360388361439b565b9150613e3e82614b5a565b604082019050919050565b6000613e5660248361439b565b9150613e6182614ba9565b604082019050919050565b6000613e7960268361439b565b9150613e8482614bf8565b604082019050919050565b6000613e9c60298361439b565b9150613ea782614c47565b604082019050919050565b6000613ebf60298361439b565b9150613eca82614c96565b604082019050919050565b6000613ee260198361439b565b9150613eed82614ce5565b602082019050919050565b613f0181614536565b82525050565b6000613f138285613bc5565b9150613f1f8284613bc5565b9150613f2a82613d77565b91508190509392505050565b6000602082019050613f4b6000830184613b35565b92915050565b6000608082019050613f666000830187613b35565b613f736020830186613b35565b613f806040830185613ef8565b8181036060830152613f928184613b53565b905095945050505050565b6000602082019050613fb26000830184613b44565b92915050565b60006020820190508181036000830152613fd28184613b8c565b905092915050565b60006020820190508181036000830152613ff381613bf6565b9050919050565b6000602082019050818103600083015261401381613c19565b9050919050565b6000602082019050818103600083015261403381613c3c565b9050919050565b6000602082019050818103600083015261405381613c5f565b9050919050565b6000602082019050818103600083015261407381613c82565b9050919050565b6000602082019050818103600083015261409381613ca5565b9050919050565b600060208201905081810360008301526140b381613cc8565b9050919050565b600060208201905081810360008301526140d381613ceb565b9050919050565b600060208201905081810360008301526140f381613d0e565b9050919050565b6000602082019050818103600083015261411381613d31565b9050919050565b6000602082019050818103600083015261413381613d54565b9050919050565b6000602082019050818103600083015261415381613d9a565b9050919050565b6000602082019050818103600083015261417381613dbd565b9050919050565b6000602082019050818103600083015261419381613de0565b9050919050565b600060208201905081810360008301526141b381613e03565b9050919050565b600060208201905081810360008301526141d381613e26565b9050919050565b600060208201905081810360008301526141f381613e49565b9050919050565b6000602082019050818103600083015261421381613e6c565b9050919050565b6000602082019050818103600083015261423381613e8f565b9050919050565b6000602082019050818103600083015261425381613eb2565b9050919050565b6000602082019050818103600083015261427381613ed5565b9050919050565b600060208201905061428f6000830184613ef8565b92915050565b600061429f6142b0565b90506142ab82826145b4565b919050565b6000604051905090565b600067ffffffffffffffff8211156142d5576142d461471b565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143015761430061471b565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561432d5761432c61471b565b5b61433682614763565b9050602081019050919050565b600067ffffffffffffffff82111561435e5761435d61471b565b5b61436782614763565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006143c282614536565b91506143cd83614536565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144025761440161465f565b5b828201905092915050565b600061441882614536565b915061442383614536565b9250826144335761443261468e565b5b828204905092915050565b600061444982614536565b915061445483614536565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448d5761448c61465f565b5b828202905092915050565b60006144a382614536565b91506144ae83614536565b9250828210156144c1576144c061465f565b5b828203905092915050565b60006144d782614516565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561456d578082015181840152602081019050614552565b8381111561457c576000848401525b50505050565b6000600282049050600182168061459a57607f821691505b602082108114156145ae576145ad6146bd565b5b50919050565b6145bd82614763565b810181811067ffffffffffffffff821117156145dc576145db61471b565b5b80604052505050565b60006145f082614536565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146235761462261465f565b5b600182019050919050565b600061463982614536565b915061464483614536565b9250826146545761465361468e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a204d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20417070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a204f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552524f523a204f6e6c7920393939206c696d69740000000000000000000000600082015250565b7f4552433732313a20546f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2042616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552524f523a20596f7520617265206e6f7420616c6c6f776564000000000000600082015250565b7f4552524f523a2057726f6e672061646472657373206f72206964000000000000600082015250565b7f4552524f523a20596f7520686176652070726f766964652077726f6e6720707260008201527f69636520616761696e73742074686520746f6b656e6964000000000000000000602082015250565b7f4552524f523a205468697320746f6b656e2068617320616c726561647920707560008201527f7263686173656400000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a205472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20417070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a205472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732313a20417070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a205472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a204e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a205472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a204f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20417070726f766520746f2063616c6c657200000000000000600082015250565b614d17816144cc565b8114614d2257600080fd5b50565b614d2e816144de565b8114614d3957600080fd5b50565b614d45816144ea565b8114614d5057600080fd5b50565b614d5c81614536565b8114614d6757600080fd5b5056fea2646970667358221220de43d24900457afedc60f57f11ed9375aeb09263c7c9d6d281bf7ee2452174ba64736f6c63430008060033

Deployed Bytecode Sourcemap

33335:5790:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19814:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20746:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36696:661;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22228:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21765:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35198:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33976:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35916:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35516:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23118:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34603:585;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36036:652;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33878:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33432:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33829:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35789:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23494:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20440:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33927:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20170:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32777:148;;;;;;;;;;;;;:::i;:::-;;33596:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33534;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32135:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35665:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20915:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39019:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22521:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23716:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21090:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33566:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33628:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33464:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22887:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33500:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33080:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33780:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19814:292;19916:4;19955:25;19940:40;;;:11;:40;;;;:105;;;;20012:33;19997:48;;;:11;:48;;;;19940:105;:158;;;;20062:36;20086:11;20062:23;:36::i;:::-;19940:158;19933:165;;19814:292;;;:::o;20746:100::-;20800:13;20833:5;20826:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20746:100;:::o;36696:661::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36812:9:::1;36808:542;36827:9;:16;36825:1;:18;36808:542;;;36886:1;36867:15;:20;36864:475;;;36934:5;36907:10;:24;36918:9;36928:1;36918:12;;;;;;;;:::i;:::-;;;;;;;;36907:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;36864:475;;;36982:1;36963:15;:20;36960:379;;;37030:5;37003:10;:24;37014:9;37024:1;37014:12;;;;;;;;:::i;:::-;;;;;;;;37003:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;36960:379;;;37078:1;37059:15;:20;37056:283;;;37126:5;37099:10;:24;37110:9;37120:1;37110:12;;;;;;;;:::i;:::-;;;;;;;;37099:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37056:283;;;37174:1;37155:15;:20;37152:187;;;37222:5;37195:10;:24;37206:9;37216:1;37206:12;;;;;;;;:::i;:::-;;;;;;;;37195:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37152:187;;;37270:1;37251:15;:20;37248:91;;;37318:5;37291:10;:24;37302:9;37312:1;37302:12;;;;;;;;:::i;:::-;;;;;;;;37291:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;37248:91;37152:187;37056:283;36960:379;36864:475;36845:3;;;;;:::i;:::-;;;;36808:542;;;;36696:661:::0;;:::o;22228:221::-;22304:7;22332:16;22340:7;22332;:16::i;:::-;22324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22417:15;:24;22433:7;22417:24;;;;;;;;;;;;;;;;;;;;;22410:31;;22228:221;;;:::o;21765:397::-;21846:13;21862:23;21877:7;21862:14;:23::i;:::-;21846:39;;21910:5;21904:11;;:2;:11;;;;21896:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21990:5;21974:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21999:37;22016:5;22023:12;:10;:12::i;:::-;21999:16;:37::i;:::-;21974:62;21966:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22133:21;22142:2;22146:7;22133:8;:21::i;:::-;21835:327;21765:397;;:::o;35198:304::-;34131:14;:26;34146:10;34131:26;;;;;;;;;;;;;;;;;;;;;;;;;34123:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35328:3:::1;:10;35313:4;:11;:25;35305:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35383:9;35379:116;35398:4;:11;35396:1;:13;35379:116;;;35430:21;35436:3;35440:1;35436:6;;;;;;;;:::i;:::-;;;;;;;;35443:4;35448:1;35443:7;;;;;;;;:::i;:::-;;;;;;;;35430:5;:21::i;:::-;35466:17;35475:4;35480:1;35475:7;;;;;;;;:::i;:::-;;;;;;;;35466:8;:17::i;:::-;35411:3;;;;;:::i;:::-;;;;35379:116;;;;35198:304:::0;;:::o;33976:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;35916:109::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36006:11:::1;35992;;:25;;;;;;;;;;;;;;;;;;35916:109:::0;:::o;35516:131::-;34131:14;:26;34146:10;34131:26;;;;;;;;;;;;;;;;;;;;;;;;;34123:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35599:14:::1;35605:3;35609;35599:5;:14::i;:::-;35624:13;35633:3;35624:8;:13::i;:::-;35516:131:::0;;:::o;23118:305::-;23279:41;23298:12;:10;:12::i;:::-;23312:7;23279:18;:41::i;:::-;23271:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23387:28;23397:4;23403:2;23407:7;23387:9;:28::i;:::-;23118:305;;;:::o;34603:585::-;34670:10;:15;34681:3;34670:15;;;;;;;;;;;;;;;;;;;;;34669:16;34661:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34754:3;34747;:10;;34739:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;34814:16;34826:3;34814:11;:16::i;:::-;34801:9;:29;34793:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;34910:23;34916:12;:10;:12::i;:::-;34929:3;34910:5;:23::i;:::-;34962:4;34944:10;:15;34955:3;34944:15;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;34987:11;;;;;;;;;;;34979:29;;:47;35022:3;35019:2;35009:9;:12;;;;:::i;:::-;:16;;;;:::i;:::-;34979:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35045:10;;;;;;;;;;;35037:28;;:45;35078:3;35076:1;35066:9;:11;;;;:::i;:::-;:15;;;;:::i;:::-;35037:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35101:14;;;;;;;;;;;35093:32;;:49;35138:3;35136:1;35126:9;:11;;;;:::i;:::-;:15;;;;:::i;:::-;35093:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35165:10;35160:20;;;35176:3;35160:20;;;;;;:::i;:::-;;;;;;;;34603:585;:::o;36036:652::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36148:9:::1;36144:537;36163:9;:16;36161:1;:18;36144:537;;;36222:1;36203:15;:20;36200:470;;;36270:4;36243:10;:24;36254:9;36264:1;36254:12;;;;;;;;:::i;:::-;;;;;;;;36243:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36200:470;;;36317:1;36298:15;:20;36295:375;;;36365:4;36338:10;:24;36349:9;36359:1;36349:12;;;;;;;;:::i;:::-;;;;;;;;36338:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36295:375;;;36412:1;36393:15;:20;36390:280;;;36460:4;36433:10;:24;36444:9;36454:1;36444:12;;;;;;;;:::i;:::-;;;;;;;;36433:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36390:280;;;36507:1;36488:15;:20;36485:185;;;36555:4;36528:10;:24;36539:9;36549:1;36539:12;;;;;;;;:::i;:::-;;;;;;;;36528:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36485:185;;;36602:1;36583:15;:20;36580:90;;;36650:4;36623:10;:24;36634:9;36644:1;36634:12;;;;;;;;:::i;:::-;;;;;;;;36623:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36580:90;36485:185;36390:280;36295:375;36200:470;36181:3;;;;;:::i;:::-;;;;36144:537;;;;36036:652:::0;;:::o;33878:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;33432:25::-;;;;;;;;;;;;;:::o;33829:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;35789:116::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35892:5:::1;35865:14;:24;35880:8;35865:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;35789:116:::0;:::o;23494:151::-;23598:39;23615:4;23621:2;23625:7;23598:39;;;;;;;;;;;;:16;:39::i;:::-;23494:151;;;:::o;20440:239::-;20512:7;20532:13;20548:7;:16;20556:7;20548:16;;;;;;;;;;;;;;;;;;;;;20532:32;;20600:1;20583:19;;:5;:19;;;;20575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20666:5;20659:12;;;20440:239;;;:::o;33927:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20170:208::-;20242:7;20287:1;20270:19;;:5;:19;;;;20262:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20354:9;:16;20364:5;20354:16;;;;;;;;;;;;;;;;20347:23;;20170:208;;;:::o;32777:148::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32884:1:::1;32847:40;;32868:6;::::0;::::1;;;;;;;;32847:40;;;;;;;;;;;;32915:1;32898:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;32777:148::o:0;33596:25::-;;;;:::o;33534:::-;;;;:::o;32135:79::-;32173:7;32200:6;;;;;;;;;;;32193:13;;32135:79;:::o;35665:112::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35765:4:::1;35738:14;:24;35753:8;35738:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;35665:112:::0;:::o;20915:104::-;20971:13;21004:7;20997:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20915:104;:::o;39019:97::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39101:7:::1;39094:4;:14;;;;;;;;;;;;:::i;:::-;;39019:97:::0;:::o;22521:295::-;22636:12;:10;:12::i;:::-;22624:24;;:8;:24;;;;22616:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22736:8;22691:18;:32;22710:12;:10;:12::i;:::-;22691:32;;;;;;;;;;;;;;;:42;22724:8;22691:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22789:8;22760:48;;22775:12;:10;:12::i;:::-;22760:48;;;22799:8;22760:48;;;;;;:::i;:::-;;;;;;;;22521:295;;:::o;23716:285::-;23848:41;23867:12;:10;:12::i;:::-;23881:7;23848:18;:41::i;:::-;23840:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23954:39;23968:4;23974:2;23978:7;23987:5;23954:13;:39::i;:::-;23716:285;;;;:::o;21090:380::-;21164:13;21198:17;21206:8;21198:7;:17::i;:::-;21190:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21280:17;21300:10;:8;:10::i;:::-;21280:30;;21361:1;21347:3;21341:17;:21;:121;;;;;;;;;;;;;;;;;21406:3;21411:19;:8;:17;:19::i;:::-;21389:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21341:121;21321:141;;;21090:380;;;:::o;33566:23::-;;;;:::o;33628:26::-;;;;:::o;33464:29::-;;;;;;;;;;;;;:::o;22887:164::-;22984:4;23008:18;:25;23027:5;23008:25;;;;;;;;;;;;;;;:35;23034:8;23008:35;;;;;;;;;;;;;;;;;;;;;;;;;23001:42;;22887:164;;;;:::o;33500:26::-;;;;:::o;33080:244::-;32357:12;:10;:12::i;:::-;32347:22;;:6;;;;;;;;;;:22;;;32339:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33189:1:::1;33169:22;;:8;:22;;;;33161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33279:8;33250:38;;33271:6;::::0;::::1;;;;;;;;33250:38;;;;;;;;;;;;33308:8;33299:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;33080:244:::0;:::o;33780:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;1515:157::-;1600:4;1639:25;1624:40;;;:11;:40;;;;1617:47;;1515:157;;;:::o;16215:98::-;16268:7;16295:10;16288:17;;16215:98;:::o;25468:127::-;25533:4;25585:1;25557:30;;:7;:16;25565:7;25557:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25550:37;;25468:127;;;:::o;29345:174::-;29447:2;29420:15;:24;29436:7;29420:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29503:7;29499:2;29465:46;;29474:23;29489:7;29474:14;:23::i;:::-;29465:46;;;;;;;;;;;;29345:174;;:::o;27375:382::-;27469:1;27455:16;;:2;:16;;;;27447:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27528:16;27536:7;27528;:16::i;:::-;27527:17;27519:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27590:45;27619:1;27623:2;27627:7;27590:20;:45::i;:::-;27665:1;27648:9;:13;27658:2;27648:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27696:2;27677:7;:16;27685:7;27677:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27741:7;27737:2;27716:33;;27733:1;27716:33;;;;;;;;;;;;27375:382;;:::o;38570:441::-;38641:2;38630:8;:13;38626:377;;;38658:7;;:9;;;;;;;;;:::i;:::-;;;;;;38626:377;;;38711:2;38699:8;:14;;:32;;;;;38728:3;38717:8;:14;38699:32;38695:308;;;38746:5;;:7;;;;;;;;;:::i;:::-;;;;;;38695:308;;;38797:3;38785:8;:15;;:33;;;;;38815:3;38804:8;:14;38785:33;38781:222;;;38833:2;;:4;;;;;;;;;:::i;:::-;;;;;;38781:222;;;38880:3;38868:8;:15;;:33;;;;;38898:3;38887:8;:14;38868:33;38864:139;;;38916:4;;:6;;;;;;;;;:::i;:::-;;;;;;38864:139;;;38966:3;38954:8;:15;38950:53;;38984:5;;:7;;;;;;;;;:::i;:::-;;;;;;38950:53;38864:139;38781:222;38695:308;38626:377;38570:441;:::o;25762:348::-;25855:4;25880:16;25888:7;25880;:16::i;:::-;25872:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25956:13;25972:23;25987:7;25972:14;:23::i;:::-;25956:39;;26025:5;26014:16;;:7;:16;;;:51;;;;26058:7;26034:31;;:20;26046:7;26034:11;:20::i;:::-;:31;;;26014:51;:87;;;;26069:32;26086:5;26093:7;26069:16;:32::i;:::-;26014:87;26006:96;;;25762:348;;;;:::o;28683:544::-;28808:4;28781:31;;:23;28796:7;28781:14;:23::i;:::-;:31;;;28773:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28891:1;28877:16;;:2;:16;;;;28869:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28947:39;28968:4;28974:2;28978:7;28947:20;:39::i;:::-;29051:29;29068:1;29072:7;29051:8;:29::i;:::-;29112:1;29093:9;:15;29103:4;29093:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29141:1;29124:9;:13;29134:2;29124:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29172:2;29153:7;:16;29161:7;29153:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29211:7;29207:2;29192:27;;29201:4;29192:27;;;;;;;;;;;;28683:544;;;:::o;37365:1197::-;37421:7;37440:18;37449:8;37440;:18::i;:::-;37484:2;37473:8;:13;37469:1066;;;37506:10;:22;37517:10;37506:22;;;;;;;;;;;;;;;;;;;;;;;;;37503:116;;;37573:5;37548:10;:22;37559:10;37548:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37602:1;37595:8;;;;37503:116;37638:7;37631:14;;;;37469:1066;37691:2;37679:8;:14;;:32;;;;;37708:3;37697:8;:14;37679:32;37675:860;;;37731:10;:22;37742:10;37731:22;;;;;;;;;;;;;;;;;;;;;;;;;37728:118;;;37798:5;37773:10;:22;37784:10;37773:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37829:1;37822:8;;;;37728:118;37865:7;37858:14;;;;37675:860;37916:3;37904:8;:15;;:33;;;;;37934:3;37923:8;:14;37904:33;37900:635;;;37957:10;:22;37968:10;37957:22;;;;;;;;;;;;;;;;;;;;;;;;;37954:114;;;38022:5;37997:10;:22;38008:10;37997:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38051:1;38044:8;;;;37954:114;38087:7;38080:14;;;;37900:635;38137:3;38125:8;:15;;:33;;;;;38155:3;38144:8;:14;38125:33;38121:414;;;38178:10;:22;38189:10;38178:22;;;;;;;;;;;;;;;;;;;;;;;;;38175:118;;;38245:5;38220:10;:22;38231:10;38220:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38276:1;38269:8;;;;38175:118;38312:9;38305:16;;;;38121:414;38365:3;38353:8;:15;38349:186;;38386:10;:22;38397:10;38386:22;;;;;;;;;;;;;;;;;;;;;;;;;38383:112;;;38451:5;38426:10;:22;38437:10;38426:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;38480:1;38473:8;;;;38383:112;38514:9;38507:16;;;;38349:186;38553:1;38546:8;;37365:1197;;;;:::o;24883:272::-;24997:28;25007:4;25013:2;25017:7;24997:9;:28::i;:::-;25044:48;25067:4;25073:2;25077:7;25086:5;25044:22;:48::i;:::-;25036:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24883:272;;;;:::o;21607:96::-;21658:13;21691:4;21684:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21607:96;:::o;16787:723::-;16843:13;17073:1;17064:5;:10;17060:53;;;17091:10;;;;;;;;;;;;;;;;;;;;;17060:53;17123:12;17138:5;17123:20;;17154:14;17179:78;17194:1;17186:4;:9;17179:78;;17212:8;;;;;:::i;:::-;;;;17243:2;17235:10;;;;;:::i;:::-;;;17179:78;;;17267:19;17299:6;17289:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17267:39;;17317:154;17333:1;17324:5;:10;17317:154;;17361:1;17351:11;;;;;:::i;:::-;;;17428:2;17420:5;:10;;;;:::i;:::-;17407:2;:24;;;;:::i;:::-;17394:39;;17377:6;17384;17377:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17457:2;17448:11;;;;;:::i;:::-;;;17317:154;;;17495:6;17481:21;;;;;16787:723;;;;:::o;31540:93::-;;;;:::o;30084:843::-;30205:4;30231:15;:2;:13;;;:15::i;:::-;30227:693;;;30283:2;30267:36;;;30304:12;:10;:12::i;:::-;30318:4;30324:7;30333:5;30267:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30263:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30530:1;30513:6;:13;:18;30509:341;;;30556:60;;;;;;;;;;:::i;:::-;;;;;;;;30509:341;30800:6;30794:13;30785:6;30781:2;30777:15;30770:38;30263:602;30400:45;;;30390:55;;;:6;:55;;;;30383:62;;;;;30227:693;30904:4;30897:11;;30084:843;;;;;;;:::o;8415:422::-;8475:4;8683:12;8794:7;8782:20;8774:28;;8828:1;8821:4;:8;8814:15;;;8415: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:2;;;404:79;;:::i;:::-;350:2;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;;;;;;;:::o;769:722::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:2;;;1149:79;;:::i;:::-;1095:2;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:2;;;1770:79;;:::i;:::-;1739:2;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:2;;;2188:79;;:::i;:::-;2157:2;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2383:87;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:2;;2621:79;;:::i;:::-;2580:2;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;;;;;:::o;2886:370::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:2;;3014:79;;:::i;:::-;2973:2;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3311:84;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3452:86;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3606:79;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:2;;3816:79;;:::i;:::-;3775:2;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:2;;4175:79;;:::i;:::-;4134:2;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4460:87;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:2;;;4667:79;;:::i;:::-;4629:2;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4619:263;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:2;;;5019:79;;:::i;:::-;4981:2;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4971:391;;;;;:::o;5368:619::-;5445:6;5453;5461;5510:2;5498:9;5489:7;5485:23;5481:32;5478:2;;;5516:79;;:::i;:::-;5478:2;5636:1;5661:53;5706:7;5697:6;5686:9;5682:22;5661:53;:::i;:::-;5651:63;;5607:117;5763:2;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5734:118;5891:2;5917:53;5962:7;5953:6;5942:9;5938:22;5917:53;:::i;:::-;5907:63;;5862:118;5468:519;;;;;:::o;5993:943::-;6088:6;6096;6104;6112;6161:3;6149:9;6140:7;6136:23;6132:33;6129:2;;;6168:79;;:::i;:::-;6129:2;6288:1;6313:53;6358:7;6349:6;6338:9;6334:22;6313:53;:::i;:::-;6303:63;;6259:117;6415:2;6441:53;6486:7;6477:6;6466:9;6462:22;6441:53;:::i;:::-;6431:63;;6386:118;6543:2;6569:53;6614:7;6605:6;6594:9;6590:22;6569:53;:::i;:::-;6559:63;;6514:118;6699:2;6688:9;6684:18;6671:32;6730:18;6722:6;6719:30;6716:2;;;6752:79;;:::i;:::-;6716:2;6857:62;6911:7;6902:6;6891:9;6887:22;6857:62;:::i;:::-;6847:72;;6642:287;6119:817;;;;;;;:::o;6942:468::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:2;;;7070:79;;:::i;:::-;7032:2;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:50;7385:7;7376:6;7365:9;7361:22;7343:50;:::i;:::-;7333:60;;7288:115;7022:388;;;;;:::o;7416:474::-;7484:6;7492;7541:2;7529:9;7520:7;7516:23;7512:32;7509:2;;;7547:79;;:::i;:::-;7509:2;7667:1;7692:53;7737:7;7728:6;7717:9;7713:22;7692:53;:::i;:::-;7682:63;;7638:117;7794:2;7820:53;7865:7;7856:6;7845:9;7841:22;7820:53;:::i;:::-;7810:63;;7765:118;7499:391;;;;;:::o;7896:684::-;7989:6;7997;8046:2;8034:9;8025:7;8021:23;8017:32;8014:2;;;8052:79;;:::i;:::-;8014:2;8200:1;8189:9;8185:17;8172:31;8230:18;8222:6;8219:30;8216:2;;;8252:79;;:::i;:::-;8216:2;8357:78;8427:7;8418:6;8407:9;8403:22;8357:78;:::i;:::-;8347:88;;8143:302;8484:2;8510:53;8555:7;8546:6;8535:9;8531:22;8510:53;:::i;:::-;8500:63;;8455:118;8004:576;;;;;:::o;8586:894::-;8704:6;8712;8761:2;8749:9;8740:7;8736:23;8732:32;8729:2;;;8767:79;;:::i;:::-;8729:2;8915:1;8904:9;8900:17;8887:31;8945:18;8937:6;8934:30;8931:2;;;8967:79;;:::i;:::-;8931:2;9072:78;9142:7;9133:6;9122:9;9118:22;9072:78;:::i;:::-;9062:88;;8858:302;9227:2;9216:9;9212:18;9199:32;9258:18;9250:6;9247:30;9244:2;;;9280:79;;:::i;:::-;9244:2;9385:78;9455:7;9446:6;9435:9;9431:22;9385:78;:::i;:::-;9375:88;;9170:303;8719:761;;;;;:::o;9486:327::-;9544:6;9593:2;9581:9;9572:7;9568:23;9564:32;9561:2;;;9599:79;;:::i;:::-;9561:2;9719:1;9744:52;9788:7;9779:6;9768:9;9764:22;9744:52;:::i;:::-;9734:62;;9690:116;9551:262;;;;:::o;9819:349::-;9888:6;9937:2;9925:9;9916:7;9912:23;9908:32;9905:2;;;9943:79;;:::i;:::-;9905:2;10063:1;10088:63;10143:7;10134:6;10123:9;10119:22;10088:63;:::i;:::-;10078:73;;10034:127;9895:273;;;;:::o;10174:509::-;10243:6;10292:2;10280:9;10271:7;10267:23;10263:32;10260:2;;;10298:79;;:::i;:::-;10260:2;10446:1;10435:9;10431:17;10418:31;10476:18;10468:6;10465:30;10462:2;;;10498:79;;:::i;:::-;10462:2;10603:63;10658:7;10649:6;10638:9;10634:22;10603:63;:::i;:::-;10593:73;;10389:287;10250:433;;;;:::o;10689:329::-;10748:6;10797:2;10785:9;10776:7;10772:23;10768:32;10765:2;;;10803:79;;:::i;:::-;10765:2;10923:1;10948:53;10993:7;10984:6;10973:9;10969:22;10948:53;:::i;:::-;10938:63;;10894:117;10755:263;;;;:::o;11024:474::-;11092:6;11100;11149:2;11137:9;11128:7;11124:23;11120:32;11117:2;;;11155:79;;:::i;:::-;11117:2;11275:1;11300:53;11345:7;11336:6;11325:9;11321:22;11300:53;:::i;:::-;11290:63;;11246:117;11402:2;11428:53;11473:7;11464:6;11453:9;11449:22;11428:53;:::i;:::-;11418:63;;11373:118;11107:391;;;;;:::o;11504:118::-;11591:24;11609:5;11591:24;:::i;:::-;11586:3;11579:37;11569:53;;:::o;11628:109::-;11709:21;11724:5;11709:21;:::i;:::-;11704:3;11697:34;11687:50;;:::o;11743:360::-;11829:3;11857:38;11889:5;11857:38;:::i;:::-;11911:70;11974:6;11969:3;11911:70;:::i;:::-;11904:77;;11990:52;12035:6;12030:3;12023:4;12016:5;12012:16;11990:52;:::i;:::-;12067:29;12089:6;12067:29;:::i;:::-;12062:3;12058:39;12051:46;;11833:270;;;;;:::o;12109:364::-;12197:3;12225:39;12258:5;12225:39;:::i;:::-;12280:71;12344:6;12339:3;12280:71;:::i;:::-;12273:78;;12360:52;12405:6;12400:3;12393:4;12386:5;12382:16;12360:52;:::i;:::-;12437:29;12459:6;12437:29;:::i;:::-;12432:3;12428:39;12421:46;;12201:272;;;;;:::o;12479:377::-;12585:3;12613:39;12646:5;12613:39;:::i;:::-;12668:89;12750:6;12745:3;12668:89;:::i;:::-;12661:96;;12766:52;12811:6;12806:3;12799:4;12792:5;12788:16;12766:52;:::i;:::-;12843:6;12838:3;12834:16;12827:23;;12589:267;;;;;:::o;12862:366::-;13004:3;13025:67;13089:2;13084:3;13025:67;:::i;:::-;13018:74;;13101:93;13190:3;13101:93;:::i;:::-;13219:2;13214:3;13210:12;13203:19;;13008:220;;;:::o;13234:366::-;13376:3;13397:67;13461:2;13456:3;13397:67;:::i;:::-;13390:74;;13473:93;13562:3;13473:93;:::i;:::-;13591:2;13586:3;13582:12;13575:19;;13380:220;;;:::o;13606:366::-;13748:3;13769:67;13833:2;13828:3;13769:67;:::i;:::-;13762:74;;13845:93;13934:3;13845:93;:::i;:::-;13963:2;13958:3;13954:12;13947:19;;13752:220;;;:::o;13978:366::-;14120:3;14141:67;14205:2;14200:3;14141:67;:::i;:::-;14134:74;;14217:93;14306:3;14217:93;:::i;:::-;14335:2;14330:3;14326:12;14319:19;;14124:220;;;:::o;14350:366::-;14492:3;14513:67;14577:2;14572:3;14513:67;:::i;:::-;14506:74;;14589:93;14678:3;14589:93;:::i;:::-;14707:2;14702:3;14698:12;14691:19;;14496:220;;;:::o;14722:366::-;14864:3;14885:67;14949:2;14944:3;14885:67;:::i;:::-;14878:74;;14961:93;15050:3;14961:93;:::i;:::-;15079:2;15074:3;15070:12;15063:19;;14868:220;;;:::o;15094:366::-;15236:3;15257:67;15321:2;15316:3;15257:67;:::i;:::-;15250:74;;15333:93;15422:3;15333:93;:::i;:::-;15451:2;15446:3;15442:12;15435:19;;15240:220;;;:::o;15466:366::-;15608:3;15629:67;15693:2;15688:3;15629:67;:::i;:::-;15622:74;;15705:93;15794:3;15705:93;:::i;:::-;15823:2;15818:3;15814:12;15807:19;;15612:220;;;:::o;15838:366::-;15980:3;16001:67;16065:2;16060:3;16001:67;:::i;:::-;15994:74;;16077:93;16166:3;16077:93;:::i;:::-;16195:2;16190:3;16186:12;16179:19;;15984:220;;;:::o;16210:366::-;16352:3;16373:67;16437:2;16432:3;16373:67;:::i;:::-;16366:74;;16449:93;16538:3;16449:93;:::i;:::-;16567:2;16562:3;16558:12;16551:19;;16356:220;;;:::o;16582:366::-;16724:3;16745:67;16809:2;16804:3;16745:67;:::i;:::-;16738:74;;16821:93;16910:3;16821:93;:::i;:::-;16939:2;16934:3;16930:12;16923:19;;16728:220;;;:::o;16954:400::-;17114:3;17135:84;17217:1;17212:3;17135:84;:::i;:::-;17128:91;;17228:93;17317:3;17228:93;:::i;:::-;17346:1;17341:3;17337:11;17330:18;;17118:236;;;:::o;17360:366::-;17502:3;17523:67;17587:2;17582:3;17523:67;:::i;:::-;17516:74;;17599:93;17688:3;17599:93;:::i;:::-;17717:2;17712:3;17708:12;17701:19;;17506:220;;;:::o;17732:366::-;17874:3;17895:67;17959:2;17954:3;17895:67;:::i;:::-;17888:74;;17971:93;18060:3;17971:93;:::i;:::-;18089:2;18084:3;18080:12;18073:19;;17878:220;;;:::o;18104:366::-;18246:3;18267:67;18331:2;18326:3;18267:67;:::i;:::-;18260:74;;18343:93;18432:3;18343:93;:::i;:::-;18461:2;18456:3;18452:12;18445:19;;18250:220;;;:::o;18476:366::-;18618:3;18639:67;18703:2;18698:3;18639:67;:::i;:::-;18632:74;;18715:93;18804:3;18715:93;:::i;:::-;18833:2;18828:3;18824:12;18817:19;;18622:220;;;:::o;18848:366::-;18990:3;19011:67;19075:2;19070:3;19011:67;:::i;:::-;19004:74;;19087:93;19176:3;19087:93;:::i;:::-;19205:2;19200:3;19196:12;19189:19;;18994:220;;;:::o;19220:366::-;19362:3;19383:67;19447:2;19442:3;19383:67;:::i;:::-;19376:74;;19459:93;19548:3;19459:93;:::i;:::-;19577:2;19572:3;19568:12;19561:19;;19366:220;;;:::o;19592:366::-;19734:3;19755:67;19819:2;19814:3;19755:67;:::i;:::-;19748:74;;19831:93;19920:3;19831:93;:::i;:::-;19949:2;19944:3;19940:12;19933:19;;19738:220;;;:::o;19964:366::-;20106:3;20127:67;20191:2;20186:3;20127:67;:::i;:::-;20120:74;;20203:93;20292:3;20203:93;:::i;:::-;20321:2;20316:3;20312:12;20305:19;;20110:220;;;:::o;20336:366::-;20478:3;20499:67;20563:2;20558:3;20499:67;:::i;:::-;20492:74;;20575:93;20664:3;20575:93;:::i;:::-;20693:2;20688:3;20684:12;20677:19;;20482:220;;;:::o;20708:366::-;20850:3;20871:67;20935:2;20930:3;20871:67;:::i;:::-;20864:74;;20947:93;21036:3;20947:93;:::i;:::-;21065:2;21060:3;21056:12;21049:19;;20854:220;;;:::o;21080:118::-;21167:24;21185:5;21167:24;:::i;:::-;21162:3;21155:37;21145:53;;:::o;21204:701::-;21485:3;21507:95;21598:3;21589:6;21507:95;:::i;:::-;21500:102;;21619:95;21710:3;21701:6;21619:95;:::i;:::-;21612:102;;21731:148;21875:3;21731:148;:::i;:::-;21724:155;;21896:3;21889:10;;21489:416;;;;;:::o;21911:222::-;22004:4;22042:2;22031:9;22027:18;22019:26;;22055:71;22123:1;22112:9;22108:17;22099:6;22055:71;:::i;:::-;22009:124;;;;:::o;22139:640::-;22334:4;22372:3;22361:9;22357:19;22349:27;;22386:71;22454:1;22443:9;22439:17;22430:6;22386:71;:::i;:::-;22467:72;22535:2;22524:9;22520:18;22511:6;22467:72;:::i;:::-;22549;22617:2;22606:9;22602:18;22593:6;22549:72;:::i;:::-;22668:9;22662:4;22658:20;22653:2;22642:9;22638:18;22631:48;22696:76;22767:4;22758:6;22696:76;:::i;:::-;22688:84;;22339:440;;;;;;;:::o;22785:210::-;22872:4;22910:2;22899:9;22895:18;22887:26;;22923:65;22985:1;22974:9;22970:17;22961:6;22923:65;:::i;:::-;22877:118;;;;:::o;23001:313::-;23114:4;23152:2;23141:9;23137:18;23129:26;;23201:9;23195:4;23191:20;23187:1;23176:9;23172:17;23165:47;23229:78;23302:4;23293:6;23229:78;:::i;:::-;23221:86;;23119:195;;;;:::o;23320:419::-;23486:4;23524:2;23513:9;23509:18;23501:26;;23573:9;23567:4;23563:20;23559:1;23548:9;23544:17;23537:47;23601:131;23727:4;23601:131;:::i;:::-;23593:139;;23491:248;;;:::o;23745:419::-;23911:4;23949:2;23938:9;23934:18;23926:26;;23998:9;23992:4;23988:20;23984:1;23973:9;23969:17;23962:47;24026:131;24152:4;24026:131;:::i;:::-;24018:139;;23916:248;;;:::o;24170:419::-;24336:4;24374:2;24363:9;24359:18;24351:26;;24423:9;24417:4;24413:20;24409:1;24398:9;24394:17;24387:47;24451:131;24577:4;24451:131;:::i;:::-;24443:139;;24341:248;;;:::o;24595:419::-;24761:4;24799:2;24788:9;24784:18;24776:26;;24848:9;24842:4;24838:20;24834:1;24823:9;24819:17;24812:47;24876:131;25002:4;24876:131;:::i;:::-;24868:139;;24766:248;;;:::o;25020:419::-;25186:4;25224:2;25213:9;25209:18;25201:26;;25273:9;25267:4;25263:20;25259:1;25248:9;25244:17;25237:47;25301:131;25427:4;25301:131;:::i;:::-;25293:139;;25191:248;;;:::o;25445:419::-;25611:4;25649:2;25638:9;25634:18;25626:26;;25698:9;25692:4;25688:20;25684:1;25673:9;25669:17;25662:47;25726:131;25852:4;25726:131;:::i;:::-;25718:139;;25616:248;;;:::o;25870:419::-;26036:4;26074:2;26063:9;26059:18;26051:26;;26123:9;26117:4;26113:20;26109:1;26098:9;26094:17;26087:47;26151:131;26277:4;26151:131;:::i;:::-;26143:139;;26041:248;;;:::o;26295:419::-;26461:4;26499:2;26488:9;26484:18;26476:26;;26548:9;26542:4;26538:20;26534:1;26523:9;26519:17;26512:47;26576:131;26702:4;26576:131;:::i;:::-;26568:139;;26466:248;;;:::o;26720:419::-;26886:4;26924:2;26913:9;26909:18;26901:26;;26973:9;26967:4;26963:20;26959:1;26948:9;26944:17;26937:47;27001:131;27127:4;27001:131;:::i;:::-;26993:139;;26891:248;;;:::o;27145:419::-;27311:4;27349:2;27338:9;27334:18;27326:26;;27398:9;27392:4;27388:20;27384:1;27373:9;27369:17;27362:47;27426:131;27552:4;27426:131;:::i;:::-;27418:139;;27316:248;;;:::o;27570:419::-;27736:4;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:131;27977:4;27851:131;:::i;:::-;27843:139;;27741:248;;;:::o;27995:419::-;28161:4;28199:2;28188:9;28184:18;28176:26;;28248:9;28242:4;28238:20;28234:1;28223:9;28219:17;28212:47;28276:131;28402:4;28276:131;:::i;:::-;28268:139;;28166:248;;;:::o;28420:419::-;28586:4;28624:2;28613:9;28609:18;28601:26;;28673:9;28667:4;28663:20;28659:1;28648:9;28644:17;28637:47;28701:131;28827:4;28701:131;:::i;:::-;28693:139;;28591:248;;;:::o;28845:419::-;29011:4;29049:2;29038:9;29034:18;29026:26;;29098:9;29092:4;29088:20;29084:1;29073:9;29069:17;29062:47;29126:131;29252:4;29126:131;:::i;:::-;29118:139;;29016:248;;;:::o;29270:419::-;29436:4;29474:2;29463:9;29459:18;29451:26;;29523:9;29517:4;29513:20;29509:1;29498:9;29494:17;29487:47;29551:131;29677:4;29551:131;:::i;:::-;29543:139;;29441:248;;;:::o;29695:419::-;29861:4;29899:2;29888:9;29884:18;29876:26;;29948:9;29942:4;29938:20;29934:1;29923:9;29919:17;29912:47;29976:131;30102:4;29976:131;:::i;:::-;29968:139;;29866:248;;;:::o;30120:419::-;30286:4;30324:2;30313:9;30309:18;30301:26;;30373:9;30367:4;30363:20;30359:1;30348:9;30344:17;30337:47;30401:131;30527:4;30401:131;:::i;:::-;30393:139;;30291:248;;;:::o;30545:419::-;30711:4;30749:2;30738:9;30734:18;30726:26;;30798:9;30792:4;30788:20;30784:1;30773:9;30769:17;30762:47;30826:131;30952:4;30826:131;:::i;:::-;30818:139;;30716:248;;;:::o;30970:419::-;31136:4;31174:2;31163:9;31159:18;31151:26;;31223:9;31217:4;31213:20;31209:1;31198:9;31194:17;31187:47;31251:131;31377:4;31251:131;:::i;:::-;31243:139;;31141:248;;;:::o;31395:419::-;31561:4;31599:2;31588:9;31584:18;31576:26;;31648:9;31642:4;31638:20;31634:1;31623:9;31619:17;31612:47;31676:131;31802:4;31676:131;:::i;:::-;31668:139;;31566:248;;;:::o;31820:419::-;31986:4;32024:2;32013:9;32009:18;32001:26;;32073:9;32067:4;32063:20;32059:1;32048:9;32044:17;32037:47;32101:131;32227:4;32101:131;:::i;:::-;32093:139;;31991:248;;;:::o;32245:222::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32389:71;32457:1;32446:9;32442:17;32433:6;32389:71;:::i;:::-;32343:124;;;;:::o;32473:129::-;32507:6;32534:20;;:::i;:::-;32524:30;;32563:33;32591:4;32583:6;32563:33;:::i;:::-;32514:88;;;:::o;32608:75::-;32641:6;32674:2;32668:9;32658:19;;32648:35;:::o;32689:311::-;32766:4;32856:18;32848:6;32845:30;32842:2;;;32878:18;;:::i;:::-;32842:2;32928:4;32920:6;32916:17;32908:25;;32988:4;32982;32978:15;32970:23;;32771:229;;;:::o;33006:311::-;33083:4;33173:18;33165:6;33162:30;33159:2;;;33195:18;;:::i;:::-;33159:2;33245:4;33237:6;33233:17;33225:25;;33305:4;33299;33295:15;33287:23;;33088:229;;;:::o;33323:307::-;33384:4;33474:18;33466:6;33463:30;33460:2;;;33496:18;;:::i;:::-;33460:2;33534:29;33556:6;33534:29;:::i;:::-;33526:37;;33618:4;33612;33608:15;33600:23;;33389:241;;;:::o;33636:308::-;33698:4;33788:18;33780:6;33777:30;33774:2;;;33810:18;;:::i;:::-;33774:2;33848:29;33870:6;33848:29;:::i;:::-;33840:37;;33932:4;33926;33922:15;33914:23;;33703:241;;;:::o;33950:98::-;34001:6;34035:5;34029:12;34019:22;;34008:40;;;:::o;34054:99::-;34106:6;34140:5;34134:12;34124:22;;34113:40;;;:::o;34159:168::-;34242:11;34276:6;34271:3;34264:19;34316:4;34311:3;34307:14;34292:29;;34254:73;;;;:::o;34333:169::-;34417:11;34451:6;34446:3;34439:19;34491:4;34486:3;34482:14;34467:29;;34429:73;;;;:::o;34508:148::-;34610:11;34647:3;34632:18;;34622:34;;;;:::o;34662:305::-;34702:3;34721:20;34739:1;34721:20;:::i;:::-;34716:25;;34755:20;34773:1;34755:20;:::i;:::-;34750:25;;34909:1;34841:66;34837:74;34834:1;34831:81;34828:2;;;34915:18;;:::i;:::-;34828:2;34959:1;34956;34952:9;34945:16;;34706:261;;;;:::o;34973:185::-;35013:1;35030:20;35048:1;35030:20;:::i;:::-;35025:25;;35064:20;35082:1;35064:20;:::i;:::-;35059:25;;35103:1;35093:2;;35108:18;;:::i;:::-;35093:2;35150:1;35147;35143:9;35138:14;;35015:143;;;;:::o;35164:348::-;35204:7;35227:20;35245:1;35227:20;:::i;:::-;35222:25;;35261:20;35279:1;35261:20;:::i;:::-;35256:25;;35449:1;35381:66;35377:74;35374:1;35371:81;35366:1;35359:9;35352:17;35348:105;35345:2;;;35456:18;;:::i;:::-;35345:2;35504:1;35501;35497:9;35486:20;;35212:300;;;;:::o;35518:191::-;35558:4;35578:20;35596:1;35578:20;:::i;:::-;35573:25;;35612:20;35630:1;35612:20;:::i;:::-;35607:25;;35651:1;35648;35645:8;35642:2;;;35656:18;;:::i;:::-;35642:2;35701:1;35698;35694:9;35686:17;;35563:146;;;;:::o;35715:96::-;35752:7;35781:24;35799:5;35781:24;:::i;:::-;35770:35;;35760:51;;;:::o;35817:90::-;35851:7;35894:5;35887:13;35880:21;35869:32;;35859:48;;;:::o;35913:149::-;35949:7;35989:66;35982:5;35978:78;35967:89;;35957:105;;;:::o;36068:126::-;36105:7;36145:42;36138:5;36134:54;36123:65;;36113:81;;;:::o;36200:77::-;36237:7;36266:5;36255:16;;36245:32;;;:::o;36283:154::-;36367:6;36362:3;36357;36344:30;36429:1;36420:6;36415:3;36411:16;36404:27;36334:103;;;:::o;36443:307::-;36511:1;36521:113;36535:6;36532:1;36529:13;36521:113;;;36620:1;36615:3;36611:11;36605:18;36601:1;36596:3;36592:11;36585:39;36557:2;36554:1;36550:10;36545:15;;36521:113;;;36652:6;36649:1;36646:13;36643:2;;;36732:1;36723:6;36718:3;36714:16;36707:27;36643:2;36492:258;;;;:::o;36756:320::-;36800:6;36837:1;36831:4;36827:12;36817:22;;36884:1;36878:4;36874:12;36905:18;36895:2;;36961:4;36953:6;36949:17;36939:27;;36895:2;37023;37015:6;37012:14;36992:18;36989:38;36986:2;;;37042:18;;:::i;:::-;36986:2;36807:269;;;;:::o;37082:281::-;37165:27;37187:4;37165:27;:::i;:::-;37157:6;37153:40;37295:6;37283:10;37280:22;37259:18;37247:10;37244:34;37241:62;37238:2;;;37306:18;;:::i;:::-;37238:2;37346:10;37342:2;37335:22;37125:238;;;:::o;37369:233::-;37408:3;37431:24;37449:5;37431:24;:::i;:::-;37422:33;;37477:66;37470:5;37467:77;37464:2;;;37547:18;;:::i;:::-;37464:2;37594:1;37587:5;37583:13;37576:20;;37412:190;;;:::o;37608:176::-;37640:1;37657:20;37675:1;37657:20;:::i;:::-;37652:25;;37691:20;37709:1;37691:20;:::i;:::-;37686:25;;37730:1;37720:2;;37735:18;;:::i;:::-;37720:2;37776:1;37773;37769:9;37764:14;;37642:142;;;;:::o;37790:180::-;37838:77;37835:1;37828:88;37935:4;37932:1;37925:15;37959:4;37956:1;37949:15;37976:180;38024:77;38021:1;38014:88;38121:4;38118:1;38111:15;38145:4;38142:1;38135:15;38162:180;38210:77;38207:1;38200:88;38307:4;38304:1;38297:15;38331:4;38328:1;38321:15;38348:180;38396:77;38393:1;38386:88;38493:4;38490:1;38483:15;38517:4;38514:1;38507:15;38534:180;38582:77;38579:1;38572:88;38679:4;38676:1;38669:15;38703:4;38700:1;38693:15;38720:117;38829:1;38826;38819:12;38843:117;38952:1;38949;38942:12;38966:117;39075:1;39072;39065:12;39089:117;39198:1;39195;39188:12;39212:117;39321:1;39318;39311:12;39335:102;39376:6;39427:2;39423:7;39418:2;39411:5;39407:14;39403:28;39393:38;;39383:54;;;:::o;39443:182::-;39583:34;39579:1;39571:6;39567:14;39560:58;39549:76;:::o;39631:182::-;39771:34;39767:1;39759:6;39755:14;39748:58;39737:76;:::o;39819:231::-;39959:34;39955:1;39947:6;39943:14;39936:58;40028:14;40023:2;40015:6;40011:15;40004:39;39925:125;:::o;40056:231::-;40196:34;40192:1;40184:6;40180:14;40173:58;40265:14;40260:2;40252:6;40248:15;40241:39;40162:125;:::o;40293:171::-;40433:23;40429:1;40421:6;40417:14;40410:47;40399:65;:::o;40470:178::-;40610:30;40606:1;40598:6;40594:14;40587:54;40576:72;:::o;40654:229::-;40794:34;40790:1;40782:6;40778:14;40771:58;40863:12;40858:2;40850:6;40846:15;40839:37;40760:123;:::o;40889:176::-;41029:28;41025:1;41017:6;41013:14;41006:52;40995:70;:::o;41071:176::-;41211:28;41207:1;41199:6;41195:14;41188:52;41177:70;:::o;41253:242::-;41393:34;41389:1;41381:6;41377:14;41370:58;41462:25;41457:2;41449:6;41445:15;41438:50;41359:136;:::o;41501:226::-;41641:34;41637:1;41629:6;41625:14;41618:58;41710:9;41705:2;41697:6;41693:15;41686:34;41607:120;:::o;41733:155::-;41873:7;41869:1;41861:6;41857:14;41850:31;41839:49;:::o;41894:237::-;42034:34;42030:1;42022:6;42018:14;42011:58;42103:20;42098:2;42090:6;42086:15;42079:45;42000:131;:::o;42137:220::-;42277:34;42273:1;42265:6;42261:14;42254:58;42346:3;42341:2;42333:6;42329:15;42322:28;42243:114;:::o;42363:234::-;42503:34;42499:1;42491:6;42487:14;42480:58;42572:17;42567:2;42559:6;42555:15;42548:42;42469:128;:::o;42603:236::-;42743:34;42739:1;42731:6;42727:14;42720:58;42812:19;42807:2;42799:6;42795:15;42788:44;42709:130;:::o;42845:243::-;42985:34;42981:1;42973:6;42969:14;42962:58;43054:26;43049:2;43041:6;43037:15;43030:51;42951:137;:::o;43094:223::-;43234:34;43230:1;43222:6;43218:14;43211:58;43303:6;43298:2;43290:6;43286:15;43279:31;43200:117;:::o;43323:225::-;43463:34;43459:1;43451:6;43447:14;43440:58;43532:8;43527:2;43519:6;43515:15;43508:33;43429:119;:::o;43554:228::-;43694:34;43690:1;43682:6;43678:14;43671:58;43763:11;43758:2;43750:6;43746:15;43739:36;43660:122;:::o;43788:228::-;43928:34;43924:1;43916:6;43912:14;43905:58;43997:11;43992:2;43984:6;43980:15;43973:36;43894:122;:::o;44022:175::-;44162:27;44158:1;44150:6;44146:14;44139:51;44128:69;:::o;44203:122::-;44276:24;44294:5;44276:24;:::i;:::-;44269:5;44266:35;44256:2;;44315:1;44312;44305:12;44256:2;44246:79;:::o;44331:116::-;44401:21;44416:5;44401:21;:::i;:::-;44394:5;44391:32;44381:2;;44437:1;44434;44427:12;44381:2;44371:76;:::o;44453:120::-;44525:23;44542:5;44525:23;:::i;:::-;44518:5;44515:34;44505:2;;44563:1;44560;44553:12;44505:2;44495:78;:::o;44579:122::-;44652:24;44670:5;44652:24;:::i;:::-;44645:5;44642:35;44632:2;;44691:1;44688;44681:12;44632:2;44622:79;:::o

Swarm Source

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