ETH Price: $2,390.55 (-0.98%)
Gas: 1.41 Gwei

Token

EthBananasChips (EBCD)
 

Overview

Max Total Supply

1,015 EBCD

Holders

330

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 EBCD
0x2D9980158a910219550027aDC0b001B347869A06
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:
EthBananaChips

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.5.0 https://hardhat.org
 
// File contracts/utils/introspection/IERC165.sol
 
// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.0;
 
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
 
// File contracts/token/ERC721/IERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
 
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
 
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
 
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
 
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;
 
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
 
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
 
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;
 
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
 
    /**
      * @dev Safely transfers `tokenId` token from `from` to `to`.
      *
      * Requirements:
      *
      * - `from` cannot be the zero address.
      * - `to` cannot be the zero address.
      * - `tokenId` token must exist and be owned by `from`.
      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
      *
      * Emits a {Transfer} event.
      */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}
 
 
// File contracts/token/ERC721/IERC721Receiver.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
 
 
// File contracts/token/ERC721/extensions/IERC721Metadata.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
 
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
 
 
// File contracts/utils/Address.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
 
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
 
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
 
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
 
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
 
// File contracts/utils/Context.sol
 
 
 
pragma solidity ^0.8.0;
 
/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
 
// File contracts/utils/Strings.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
 
}
 
 
// File contracts/utils/introspection/ERC165.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
 
 
// File contracts/token/ERC721/ERC721.sol
 
 
 
pragma solidity ^0.8.0;
 
 
 
 
 
 
 
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
 
    // Token name
    string private _name;
 
    // Token symbol
    string private _symbol;
 
    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;
 
    // Mapping owner address to token count
    mapping (address => uint256) private _balances;
 
    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;
 
    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;
 
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }
 
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
 
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
 
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
 
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }
 
    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
 
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");
 
        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );
 
        _approve(to, tokenId);
    }
 
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
 
        return _tokenApprovals[tokenId];
    }
 
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
 
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
 
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
 
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
 
        _transfer(from, to, tokenId);
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
 
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
 
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
 
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
 
    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
 
    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
 
    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
 
        _beforeTokenTransfer(address(0), to, tokenId);
 
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(address(0), to, tokenId);
    }
 
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
 
        _beforeTokenTransfer(owner, address(0), tokenId);
 
        // Clear approvals
        _approve(address(0), tokenId);
 
        _balances[owner] -= 1;
        delete _owners[tokenId];
 
        emit Transfer(owner, address(0), tokenId);
    }
 
    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
 
        _beforeTokenTransfer(from, to, tokenId);
 
        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
 
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
 
        emit Transfer(from, to, tokenId);
    }
 
    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
 
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
 
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}
 
 
// File contracts/token/ERC721/extensions/ERC721URIStorage.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
 
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
 
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
 
        return super.tokenURI(tokenId);
    }
 
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
 
    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);
 
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
 
 
// File contracts/access/Ownable.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
pragma solidity ^0.8.0;
 
 
 
contract EthBananaChips is ERC721URIStorage, Ownable{

    event MintBananachip (address indexed minter, uint256 startWith, uint256 times);
   
    
    uint256 public totalBananachip;
    uint256 public totalCount = 5000; //bruhTotal
    uint256 public presaleMax = 100; 
    uint256 public maxBatch = 30; // bruhBatch
    uint256 public price = 50000000000000000; // 0.06 eth
    string public baseURI;
    bool public started;
    bool public whiteListStart;
    mapping(address => uint256) whiteListMintCount;
    uint addressRegistryCount;
    
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    }
    
    modifier canWhitelistMint() {
        require(whiteListStart, "Hang on boys, youll get in soon");
        _; 
    }

    modifier mintEnabled() {
        require(started, "not started");
        _;
    }
 
    function totalSupply() public view virtual returns (uint256) {
        return totalBananachip;
       
    }
 
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
 
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }
 
    function changePrice(uint256 _newPrice) public onlyOwner {
        price = _newPrice;
    }
    
 
    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }
 
    function setNormalStart(bool _start) public onlyOwner {
        started = _start;
    }
    
    function setWhiteListStart(bool _start) public onlyOwner {
        whiteListStart = _start;
    }
    
    function getWhitelistMintAmount(address _addr) public view virtual returns (uint256) {
        return whiteListMintCount[_addr];
    }
 
    function MintBananachips(uint256 _times) payable public mintEnabled {
       
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalBananachip + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintBananachip(_msgSender(), totalBananachip+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalBananachip++);
        }
    } 
    
    function adminMint(uint256 _times) payable public onlyOwner {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalBananachip + _times <= totalCount, "too much");
        require(msg.value == _times * price, "value error");
        payable(owner()).transfer(msg.value);
        emit MintBananachip(_msgSender(), totalBananachip+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalBananachip++);
        }
    }
    
    
    function whitelistMint(uint _times) payable public canWhitelistMint {
        if (whiteListMintCount[msg.sender]==0)  {
            whiteListMintCount[msg.sender] = 4;
        }
        require(whiteListMintCount[msg.sender] - _times >= 1, "Over mint limit for address.");
        require(totalBananachip + _times <= presaleMax, "Mint amount will exceed total presale amount.");
        require(msg.value == _times * price, "Incorrect transaction value.");
        payable(owner()).transfer(msg.value);
        whiteListMintCount[_msgSender()] -= _times;
        emit MintBananachip(_msgSender(), totalBananachip+1, _times);
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalBananachip++);
        }
    }
    
    
    function adminMintGiveaways(address _addr) public onlyOwner {
        require(totalBananachip + 1 <= totalCount, "Mint amount will exceed total collection amount.");
        emit MintBananachip(_addr, totalBananachip+1, 1);
        _mint(_addr, 1 + totalBananachip++);
    } 
    
    
    
    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"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":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintBananachip","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"MintBananachips","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintGiveaways","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","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":"_addr","type":"address"}],"name":"getWhitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setWhiteListStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBananachip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526113886009556064600a55601e600b5566b1a2bc2ec50000600c553480156200002c57600080fd5b5060405162004a7938038062004a79833981810160405281019062000052919062000285565b828281600090805190602001906200006c92919062000163565b5080600190805190602001906200008592919062000163565b50505060006200009a6200015b60201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600d90805190602001906200015192919062000163565b5050505062000457565b600033905090565b8280546200017190620003c3565b90600052602060002090601f016020900481019282620001955760008555620001e1565b82601f10620001b057805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e0578251825591602001919060010190620001c3565b5b509050620001f09190620001f4565b5090565b5b808211156200020f576000816000905550600101620001f5565b5090565b60006200022a62000224846200035a565b62000326565b9050828152602081018484840111156200024357600080fd5b620002508482856200038d565b509392505050565b600082601f8301126200026a57600080fd5b81516200027c84826020860162000213565b91505092915050565b6000806000606084860312156200029b57600080fd5b600084015167ffffffffffffffff811115620002b657600080fd5b620002c48682870162000258565b935050602084015167ffffffffffffffff811115620002e257600080fd5b620002f08682870162000258565b925050604084015167ffffffffffffffff8111156200030e57600080fd5b6200031c8682870162000258565b9150509250925092565b6000604051905081810181811067ffffffffffffffff8211171562000350576200034f62000428565b5b8060405250919050565b600067ffffffffffffffff82111562000378576200037762000428565b5b601f19601f8301169050602081019050919050565b60005b83811015620003ad57808201518184015260208101905062000390565b83811115620003bd576000848401525b50505050565b60006002820490506001821680620003dc57607f821691505b60208210811415620003f357620003f2620003f9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61461280620004676000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c1f261231161006f578063c1f2612314610725578063c87b56dd14610741578063e985e9c51461077e578063f2fde38b146107bb578063f34acb7c146107e457610204565b8063a22cb4651461067f578063a2b40d19146106a8578063b88d4fde146106d1578063bc277dd5146106fa57610204565b80638da5cb5b116100e75780638da5cb5b14610598578063917bb57f146105c357806395d89b41146105ec5780639afdf2f314610617578063a035b1fe1461065457610204565b8063715018a61461051e5780637a4af6e014610535578063868ff4a21461055157806388eae7051461056d57610204565b806334eafb111161019b5780635f4f603d1161016a5780635f4f603d146104255780636352211e1461044e57806367765b871461048b5780636c0360eb146104b657806370a08231146104e157610204565b806334eafb111461037f5780633c49a8a9146103aa57806342842e0e146103d357806355f804b3146103fc57610204565b8063162094c4116101d7578063162094c4146102d757806318160ddd146103005780631f2698ab1461032b57806323b872dd1461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906131b2565b61080f565b60405161023d9190613d4c565b60405180910390f35b34801561025257600080fd5b5061025b6108f1565b6040516102689190613d67565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613245565b610983565b6040516102a59190613ce5565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061314d565b610a08565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061326e565b610b20565b005b34801561030c57600080fd5b50610315610baa565b60405161032291906140e9565b60405180910390f35b34801561033757600080fd5b50610340610bb4565b60405161034d9190613d4c565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613047565b610bc7565b005b34801561038b57600080fd5b50610394610c27565b6040516103a191906140e9565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612fe2565b610c2d565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613047565b610d8a565b005b34801561040857600080fd5b50610423600480360381019061041e9190613204565b610daa565b005b34801561043157600080fd5b5061044c60048036038101906104479190613189565b610e40565b005b34801561045a57600080fd5b5061047560048036038101906104709190613245565b610ed9565b6040516104829190613ce5565b60405180910390f35b34801561049757600080fd5b506104a0610f8b565b6040516104ad91906140e9565b60405180910390f35b3480156104c257600080fd5b506104cb610f91565b6040516104d89190613d67565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190612fe2565b61101f565b60405161051591906140e9565b60405180910390f35b34801561052a57600080fd5b506105336110d7565b005b61054f600480360381019061054a9190613245565b611214565b005b61056b60048036038101906105669190613245565b61145d565b005b34801561057957600080fd5b506105826117ce565b60405161058f9190613d4c565b60405180910390f35b3480156105a457600080fd5b506105ad6117e1565b6040516105ba9190613ce5565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613189565b61180b565b005b3480156105f857600080fd5b506106016118a4565b60405161060e9190613d67565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190612fe2565b611936565b60405161064b91906140e9565b60405180910390f35b34801561066057600080fd5b5061066961197f565b60405161067691906140e9565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613111565b611985565b005b3480156106b457600080fd5b506106cf60048036038101906106ca9190613245565b611b06565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190613096565b611b8c565b005b34801561070657600080fd5b5061070f611bee565b60405161071c91906140e9565b60405180910390f35b61073f600480360381019061073a9190613245565b611bf4565b005b34801561074d57600080fd5b5061076860048036038101906107639190613245565b611e6a565b6040516107759190613d67565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061300b565b611fbc565b6040516107b29190613d4c565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612fe2565b612050565b005b3480156107f057600080fd5b506107f96121fc565b60405161080691906140e9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ea57506108e982612202565b5b9050919050565b60606000805461090090614407565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90614407565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b600061098e8261226c565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490613fa9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1382610ed9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90614029565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa36122d8565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc6122d8565b611fbc565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613ec9565b60405180910390fd5b610b1b83836122e0565b505050565b610b286122d8565b73ffffffffffffffffffffffffffffffffffffffff16610b466117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613fc9565b60405180910390fd5b610ba68282612399565b5050565b6000600854905090565b600e60009054906101000a900460ff1681565b610bd8610bd26122d8565b8261240d565b610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90614049565b60405180910390fd5b610c228383836124eb565b505050565b60095481565b610c356122d8565b73ffffffffffffffffffffffffffffffffffffffff16610c536117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090613fc9565b60405180910390fd5b6009546001600854610cbb919061422a565b1115610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614069565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854610d43919061422a565b6001604051610d53929190614104565b60405180910390a2610d878160086000815480929190610d7290614439565b919050556001610d82919061422a565b612747565b50565b610da583838360405180602001604052806000815250611b8c565b505050565b610db26122d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd06117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613fc9565b60405180910390fd5b80600d9080519060200190610e3c929190612e06565b5050565b610e486122d8565b73ffffffffffffffffffffffffffffffffffffffff16610e666117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613fc9565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613f09565b60405180910390fd5b80915050919050565b600b5481565b600d8054610f9e90614407565b80601f0160208091040260200160405190810160405280929190818152602001828054610fca90614407565b80156110175780601f10610fec57610100808354040283529160200191611017565b820191906000526020600020905b815481529060010190602001808311610ffa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613ee9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df6122d8565b73ffffffffffffffffffffffffffffffffffffffff166110fd6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900460ff16611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614089565b60405180910390fd5b6000811180156112755750600b548111155b6112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613e09565b60405180910390fd5b600954816008546112c5919061422a565b1115611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613d89565b60405180910390fd5b600c548161131491906142b1565b3414611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c906140c9565b60405180910390fd5b61135d6117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156113a2573d6000803e3d6000fd5b506113ab6122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b4984260016008546113f1919061422a565b8360405161140092919061412d565b60405180910390a260005b818110156114595761144661141e6122d8565b6008600081548092919061143190614439565b919050556001611441919061422a565b612747565b808061145190614439565b91505061140b565b5050565b600e60019054906101000a900460ff166114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906140a9565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561153a576004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611587919061430b565b10156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613e69565b60405180910390fd5b600a54816008546115d9919061422a565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613ea9565b60405180910390fd5b600c548161162891906142b1565b3414611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613f49565b60405180910390fd5b6116716117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156116b6573d6000803e3d6000fd5b5080600f60006116c46122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170d919061430b565b9250508190555061171c6122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854611762919061422a565b8360405161177192919061412d565b60405180910390a260005b818110156117ca576117b761178f6122d8565b600860008154809291906117a290614439565b9190505560016117b2919061422a565b612747565b80806117c290614439565b91505061177c565b5050565b600e60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118136122d8565b73ffffffffffffffffffffffffffffffffffffffff166118316117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90613fc9565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600180546118b390614407565b80601f01602080910402602001604051908101604052809291908181526020018280546118df90614407565b801561192c5780601f106119015761010080835404028352916020019161192c565b820191906000526020600020905b81548152906001019060200180831161190f57829003601f168201915b5050505050905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b61198d6122d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613e49565b60405180910390fd5b8060056000611a086122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ab56122d8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611afa9190613d4c565b60405180910390a35050565b611b0e6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611b2c6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613fc9565b60405180910390fd5b80600c8190555050565b611b9d611b976122d8565b8361240d565b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390614049565b60405180910390fd5b611be884848484612915565b50505050565b60085481565b611bfc6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611c1a6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613fc9565b60405180910390fd5b600081118015611c825750600b548111155b611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613e09565b60405180910390fd5b60095481600854611cd2919061422a565b1115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90613d89565b60405180910390fd5b600c5481611d2191906142b1565b3414611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d59906140c9565b60405180910390fd5b611d6a6117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611daf573d6000803e3d6000fd5b50611db86122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854611dfe919061422a565b83604051611e0d92919061412d565b60405180910390a260005b81811015611e6657611e53611e2b6122d8565b60086000815480929190611e3e90614439565b919050556001611e4e919061422a565b612747565b8080611e5e90614439565b915050611e18565b5050565b6060611e758261226c565b611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613f89565b60405180910390fd5b6000600660008481526020019081526020016000208054611ed490614407565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090614407565b8015611f4d5780601f10611f2257610100808354040283529160200191611f4d565b820191906000526020600020905b815481529060010190602001808311611f3057829003601f168201915b505050505090506000611f5e612971565b9050600081511415611f74578192505050611fb7565b600082511115611fa9578082604051602001611f91929190613cc1565b60405160208183030381529060405292505050611fb7565b611fb284612a03565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120586122d8565b73ffffffffffffffffffffffffffffffffffffffff166120766117e1565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213390613dc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661235383610ed9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6123a28261226c565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613f29565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612408929190612e06565b505050565b60006124188261226c565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e90613e89565b60405180910390fd5b600061246283610ed9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124d157508373ffffffffffffffffffffffffffffffffffffffff166124b984610983565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e257506124e18185611fbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661250b82610ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890613fe9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c890613e29565b60405180910390fd5b6125dc838383612aaa565b6125e76000826122e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612637919061430b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268e919061422a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90613f69565b60405180910390fd5b6127c08161226c565b15612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613de9565b60405180910390fd5b61280c60008383612aaa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285c919061422a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6129208484846124eb565b61292c84848484612aaf565b61296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290613da9565b60405180910390fd5b50505050565b6060600d805461298090614407565b80601f01602080910402602001604051908101604052809291908181526020018280546129ac90614407565b80156129f95780601f106129ce576101008083540402835291602001916129f9565b820191906000526020600020905b8154815290600101906020018083116129dc57829003601f168201915b5050505050905090565b6060612a0e8261226c565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490614009565b60405180910390fd5b6000612a57612971565b90506000815111612a775760405180602001604052806000815250612aa2565b80612a8184612c46565b604051602001612a92929190613cc1565b6040516020818303038152906040525b915050919050565b505050565b6000612ad08473ffffffffffffffffffffffffffffffffffffffff16612df3565b15612c39578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af96122d8565b8786866040518563ffffffff1660e01b8152600401612b1b9493929190613d00565b602060405180830381600087803b158015612b3557600080fd5b505af1925050508015612b6657506040513d601f19601f82011682018060405250810190612b6391906131db565b60015b612be9573d8060008114612b96576040519150601f19603f3d011682016040523d82523d6000602084013e612b9b565b606091505b50600081511415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890613da9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3e565b600190505b949350505050565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612cc0578080612ca990614439565b915050600a82612cb99190614280565b9150612c96565b60008167ffffffffffffffff811115612d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d345781602001600182028036833780820191505090505b5090505b60008514612de757600182612d4d919061430b565b9150600a85612d5c9190614482565b6030612d68919061422a565b60f81b818381518110612da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de09190614280565b9450612d38565b8093505050505b919050565b600080823b905060008111915050919050565b828054612e1290614407565b90600052602060002090601f016020900481019282612e345760008555612e7b565b82601f10612e4d57805160ff1916838001178555612e7b565b82800160010185558215612e7b579182015b82811115612e7a578251825591602001919060010190612e5f565b5b509050612e889190612e8c565b5090565b5b80821115612ea5576000816000905550600101612e8d565b5090565b6000612ebc612eb784614187565b614156565b905082815260208101848484011115612ed457600080fd5b612edf8482856143c5565b509392505050565b6000612efa612ef5846141b7565b614156565b905082815260208101848484011115612f1257600080fd5b612f1d8482856143c5565b509392505050565b600081359050612f3481614580565b92915050565b600081359050612f4981614597565b92915050565b600081359050612f5e816145ae565b92915050565b600081519050612f73816145ae565b92915050565b600082601f830112612f8a57600080fd5b8135612f9a848260208601612ea9565b91505092915050565b600082601f830112612fb457600080fd5b8135612fc4848260208601612ee7565b91505092915050565b600081359050612fdc816145c5565b92915050565b600060208284031215612ff457600080fd5b600061300284828501612f25565b91505092915050565b6000806040838503121561301e57600080fd5b600061302c85828601612f25565b925050602061303d85828601612f25565b9150509250929050565b60008060006060848603121561305c57600080fd5b600061306a86828701612f25565b935050602061307b86828701612f25565b925050604061308c86828701612fcd565b9150509250925092565b600080600080608085870312156130ac57600080fd5b60006130ba87828801612f25565b94505060206130cb87828801612f25565b93505060406130dc87828801612fcd565b925050606085013567ffffffffffffffff8111156130f957600080fd5b61310587828801612f79565b91505092959194509250565b6000806040838503121561312457600080fd5b600061313285828601612f25565b925050602061314385828601612f3a565b9150509250929050565b6000806040838503121561316057600080fd5b600061316e85828601612f25565b925050602061317f85828601612fcd565b9150509250929050565b60006020828403121561319b57600080fd5b60006131a984828501612f3a565b91505092915050565b6000602082840312156131c457600080fd5b60006131d284828501612f4f565b91505092915050565b6000602082840312156131ed57600080fd5b60006131fb84828501612f64565b91505092915050565b60006020828403121561321657600080fd5b600082013567ffffffffffffffff81111561323057600080fd5b61323c84828501612fa3565b91505092915050565b60006020828403121561325757600080fd5b600061326584828501612fcd565b91505092915050565b6000806040838503121561328157600080fd5b600061328f85828601612fcd565b925050602083013567ffffffffffffffff8111156132ac57600080fd5b6132b885828601612fa3565b9150509250929050565b6132cb8161433f565b82525050565b6132da81614351565b82525050565b60006132eb826141e7565b6132f581856141fd565b93506133058185602086016143d4565b61330e8161456f565b840191505092915050565b613322816143b3565b82525050565b6000613333826141f2565b61333d818561420e565b935061334d8185602086016143d4565b6133568161456f565b840191505092915050565b600061336c826141f2565b613376818561421f565b93506133868185602086016143d4565b80840191505092915050565b600061339f60088361420e565b91507f746f6f206d7563680000000000000000000000000000000000000000000000006000830152602082019050919050565b60006133df60328361420e565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061344560268361420e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134ab601c8361420e565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006134eb60118361420e565b91507f6d696e742077726f6e67206e756d6265720000000000000000000000000000006000830152602082019050919050565b600061352b60248361420e565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061359160198361420e565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006135d1601c8361420e565b91507f4f766572206d696e74206c696d697420666f7220616464726573732e000000006000830152602082019050919050565b6000613611602c8361420e565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613677602d8361420e565b91507f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20707260008301527f6573616c6520616d6f756e742e000000000000000000000000000000000000006020830152604082019050919050565b60006136dd60388361420e565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613743602a8361420e565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006137a960298361420e565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061380f602e8361420e565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b6000613875601c8361420e565b91507f496e636f7272656374207472616e73616374696f6e2076616c75652e000000006000830152602082019050919050565b60006138b560208361420e565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006138f560318361420e565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b600061395b602c8361420e565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139c160208361420e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a0160298361420e565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a67602f8361420e565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613acd60218361420e565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b3360318361420e565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613b9960308361420e565b91507f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008301527f6c6c656374696f6e20616d6f756e742e000000000000000000000000000000006020830152604082019050919050565b6000613bff600b8361420e565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b6000613c3f601f8361420e565b91507f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e006000830152602082019050919050565b6000613c7f600b8361420e565b91507f76616c7565206572726f720000000000000000000000000000000000000000006000830152602082019050919050565b613cbb816143a9565b82525050565b6000613ccd8285613361565b9150613cd98284613361565b91508190509392505050565b6000602082019050613cfa60008301846132c2565b92915050565b6000608082019050613d1560008301876132c2565b613d2260208301866132c2565b613d2f6040830185613cb2565b8181036060830152613d4181846132e0565b905095945050505050565b6000602082019050613d6160008301846132d1565b92915050565b60006020820190508181036000830152613d818184613328565b905092915050565b60006020820190508181036000830152613da281613392565b9050919050565b60006020820190508181036000830152613dc2816133d2565b9050919050565b60006020820190508181036000830152613de281613438565b9050919050565b60006020820190508181036000830152613e028161349e565b9050919050565b60006020820190508181036000830152613e22816134de565b9050919050565b60006020820190508181036000830152613e428161351e565b9050919050565b60006020820190508181036000830152613e6281613584565b9050919050565b60006020820190508181036000830152613e82816135c4565b9050919050565b60006020820190508181036000830152613ea281613604565b9050919050565b60006020820190508181036000830152613ec28161366a565b9050919050565b60006020820190508181036000830152613ee2816136d0565b9050919050565b60006020820190508181036000830152613f0281613736565b9050919050565b60006020820190508181036000830152613f228161379c565b9050919050565b60006020820190508181036000830152613f4281613802565b9050919050565b60006020820190508181036000830152613f6281613868565b9050919050565b60006020820190508181036000830152613f82816138a8565b9050919050565b60006020820190508181036000830152613fa2816138e8565b9050919050565b60006020820190508181036000830152613fc28161394e565b9050919050565b60006020820190508181036000830152613fe2816139b4565b9050919050565b60006020820190508181036000830152614002816139f4565b9050919050565b6000602082019050818103600083015261402281613a5a565b9050919050565b6000602082019050818103600083015261404281613ac0565b9050919050565b6000602082019050818103600083015261406281613b26565b9050919050565b6000602082019050818103600083015261408281613b8c565b9050919050565b600060208201905081810360008301526140a281613bf2565b9050919050565b600060208201905081810360008301526140c281613c32565b9050919050565b600060208201905081810360008301526140e281613c72565b9050919050565b60006020820190506140fe6000830184613cb2565b92915050565b60006040820190506141196000830185613cb2565b6141266020830184613319565b9392505050565b60006040820190506141426000830185613cb2565b61414f6020830184613cb2565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561417d5761417c614540565b5b8060405250919050565b600067ffffffffffffffff8211156141a2576141a1614540565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156141d2576141d1614540565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614235826143a9565b9150614240836143a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614275576142746144b3565b5b828201905092915050565b600061428b826143a9565b9150614296836143a9565b9250826142a6576142a56144e2565b5b828204905092915050565b60006142bc826143a9565b91506142c7836143a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614300576142ff6144b3565b5b828202905092915050565b6000614316826143a9565b9150614321836143a9565b925082821015614334576143336144b3565b5b828203905092915050565b600061434a82614389565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006143be826143a9565b9050919050565b82818337600083830152505050565b60005b838110156143f25780820151818401526020810190506143d7565b83811115614401576000848401525b50505050565b6000600282049050600182168061441f57607f821691505b6020821081141561443357614432614511565b5b50919050565b6000614444826143a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614477576144766144b3565b5b600182019050919050565b600061448d826143a9565b9150614498836143a9565b9250826144a8576144a76144e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145898161433f565b811461459457600080fd5b50565b6145a081614351565b81146145ab57600080fd5b50565b6145b78161435d565b81146145c257600080fd5b50565b6145ce816143a9565b81146145d957600080fd5b5056fea264697066735822122053740536dec2e77a6ac33c8d351af5763d825d5de02bed2f126f2382de3bc4e764736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f45746842616e616e617343686970730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445424344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063715018a611610118578063a22cb465116100a0578063c1f261231161006f578063c1f2612314610725578063c87b56dd14610741578063e985e9c51461077e578063f2fde38b146107bb578063f34acb7c146107e457610204565b8063a22cb4651461067f578063a2b40d19146106a8578063b88d4fde146106d1578063bc277dd5146106fa57610204565b80638da5cb5b116100e75780638da5cb5b14610598578063917bb57f146105c357806395d89b41146105ec5780639afdf2f314610617578063a035b1fe1461065457610204565b8063715018a61461051e5780637a4af6e014610535578063868ff4a21461055157806388eae7051461056d57610204565b806334eafb111161019b5780635f4f603d1161016a5780635f4f603d146104255780636352211e1461044e57806367765b871461048b5780636c0360eb146104b657806370a08231146104e157610204565b806334eafb111461037f5780633c49a8a9146103aa57806342842e0e146103d357806355f804b3146103fc57610204565b8063162094c4116101d7578063162094c4146102d757806318160ddd146103005780631f2698ab1461032b57806323b872dd1461035657610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906131b2565b61080f565b60405161023d9190613d4c565b60405180910390f35b34801561025257600080fd5b5061025b6108f1565b6040516102689190613d67565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613245565b610983565b6040516102a59190613ce5565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061314d565b610a08565b005b3480156102e357600080fd5b506102fe60048036038101906102f9919061326e565b610b20565b005b34801561030c57600080fd5b50610315610baa565b60405161032291906140e9565b60405180910390f35b34801561033757600080fd5b50610340610bb4565b60405161034d9190613d4c565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190613047565b610bc7565b005b34801561038b57600080fd5b50610394610c27565b6040516103a191906140e9565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612fe2565b610c2d565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190613047565b610d8a565b005b34801561040857600080fd5b50610423600480360381019061041e9190613204565b610daa565b005b34801561043157600080fd5b5061044c60048036038101906104479190613189565b610e40565b005b34801561045a57600080fd5b5061047560048036038101906104709190613245565b610ed9565b6040516104829190613ce5565b60405180910390f35b34801561049757600080fd5b506104a0610f8b565b6040516104ad91906140e9565b60405180910390f35b3480156104c257600080fd5b506104cb610f91565b6040516104d89190613d67565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190612fe2565b61101f565b60405161051591906140e9565b60405180910390f35b34801561052a57600080fd5b506105336110d7565b005b61054f600480360381019061054a9190613245565b611214565b005b61056b60048036038101906105669190613245565b61145d565b005b34801561057957600080fd5b506105826117ce565b60405161058f9190613d4c565b60405180910390f35b3480156105a457600080fd5b506105ad6117e1565b6040516105ba9190613ce5565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190613189565b61180b565b005b3480156105f857600080fd5b506106016118a4565b60405161060e9190613d67565b60405180910390f35b34801561062357600080fd5b5061063e60048036038101906106399190612fe2565b611936565b60405161064b91906140e9565b60405180910390f35b34801561066057600080fd5b5061066961197f565b60405161067691906140e9565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613111565b611985565b005b3480156106b457600080fd5b506106cf60048036038101906106ca9190613245565b611b06565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190613096565b611b8c565b005b34801561070657600080fd5b5061070f611bee565b60405161071c91906140e9565b60405180910390f35b61073f600480360381019061073a9190613245565b611bf4565b005b34801561074d57600080fd5b5061076860048036038101906107639190613245565b611e6a565b6040516107759190613d67565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061300b565b611fbc565b6040516107b29190613d4c565b60405180910390f35b3480156107c757600080fd5b506107e260048036038101906107dd9190612fe2565b612050565b005b3480156107f057600080fd5b506107f96121fc565b60405161080691906140e9565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108da57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108ea57506108e982612202565b5b9050919050565b60606000805461090090614407565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90614407565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b600061098e8261226c565b6109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490613fa9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a1382610ed9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90614029565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa36122d8565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc6122d8565b611fbc565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613ec9565b60405180910390fd5b610b1b83836122e0565b505050565b610b286122d8565b73ffffffffffffffffffffffffffffffffffffffff16610b466117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613fc9565b60405180910390fd5b610ba68282612399565b5050565b6000600854905090565b600e60009054906101000a900460ff1681565b610bd8610bd26122d8565b8261240d565b610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90614049565b60405180910390fd5b610c228383836124eb565b505050565b60095481565b610c356122d8565b73ffffffffffffffffffffffffffffffffffffffff16610c536117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090613fc9565b60405180910390fd5b6009546001600854610cbb919061422a565b1115610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614069565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854610d43919061422a565b6001604051610d53929190614104565b60405180910390a2610d878160086000815480929190610d7290614439565b919050556001610d82919061422a565b612747565b50565b610da583838360405180602001604052806000815250611b8c565b505050565b610db26122d8565b73ffffffffffffffffffffffffffffffffffffffff16610dd06117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613fc9565b60405180910390fd5b80600d9080519060200190610e3c929190612e06565b5050565b610e486122d8565b73ffffffffffffffffffffffffffffffffffffffff16610e666117e1565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613fc9565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613f09565b60405180910390fd5b80915050919050565b600b5481565b600d8054610f9e90614407565b80601f0160208091040260200160405190810160405280929190818152602001828054610fca90614407565b80156110175780601f10610fec57610100808354040283529160200191611017565b820191906000526020600020905b815481529060010190602001808311610ffa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108790613ee9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df6122d8565b73ffffffffffffffffffffffffffffffffffffffff166110fd6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900460ff16611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90614089565b60405180910390fd5b6000811180156112755750600b548111155b6112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613e09565b60405180910390fd5b600954816008546112c5919061422a565b1115611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90613d89565b60405180910390fd5b600c548161131491906142b1565b3414611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c906140c9565b60405180910390fd5b61135d6117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156113a2573d6000803e3d6000fd5b506113ab6122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b4984260016008546113f1919061422a565b8360405161140092919061412d565b60405180910390a260005b818110156114595761144661141e6122d8565b6008600081548092919061143190614439565b919050556001611441919061422a565b612747565b808061145190614439565b91505061140b565b5050565b600e60019054906101000a900460ff166114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906140a9565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561153a576004600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600181600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611587919061430b565b10156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90613e69565b60405180910390fd5b600a54816008546115d9919061422a565b111561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613ea9565b60405180910390fd5b600c548161162891906142b1565b3414611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613f49565b60405180910390fd5b6116716117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156116b6573d6000803e3d6000fd5b5080600f60006116c46122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461170d919061430b565b9250508190555061171c6122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854611762919061422a565b8360405161177192919061412d565b60405180910390a260005b818110156117ca576117b761178f6122d8565b600860008154809291906117a290614439565b9190505560016117b2919061422a565b612747565b80806117c290614439565b91505061177c565b5050565b600e60019054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118136122d8565b73ffffffffffffffffffffffffffffffffffffffff166118316117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90613fc9565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600180546118b390614407565b80601f01602080910402602001604051908101604052809291908181526020018280546118df90614407565b801561192c5780601f106119015761010080835404028352916020019161192c565b820191906000526020600020905b81548152906001019060200180831161190f57829003601f168201915b5050505050905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c5481565b61198d6122d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613e49565b60405180910390fd5b8060056000611a086122d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ab56122d8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611afa9190613d4c565b60405180910390a35050565b611b0e6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611b2c6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613fc9565b60405180910390fd5b80600c8190555050565b611b9d611b976122d8565b8361240d565b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390614049565b60405180910390fd5b611be884848484612915565b50505050565b60085481565b611bfc6122d8565b73ffffffffffffffffffffffffffffffffffffffff16611c1a6117e1565b73ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613fc9565b60405180910390fd5b600081118015611c825750600b548111155b611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb890613e09565b60405180910390fd5b60095481600854611cd2919061422a565b1115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90613d89565b60405180910390fd5b600c5481611d2191906142b1565b3414611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d59906140c9565b60405180910390fd5b611d6a6117e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611daf573d6000803e3d6000fd5b50611db86122d8565b73ffffffffffffffffffffffffffffffffffffffff167fecde07c85eabd56315b211ecd34c80794c59e7bf03e3d3dfb8edb229f5b498426001600854611dfe919061422a565b83604051611e0d92919061412d565b60405180910390a260005b81811015611e6657611e53611e2b6122d8565b60086000815480929190611e3e90614439565b919050556001611e4e919061422a565b612747565b8080611e5e90614439565b915050611e18565b5050565b6060611e758261226c565b611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90613f89565b60405180910390fd5b6000600660008481526020019081526020016000208054611ed490614407565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0090614407565b8015611f4d5780601f10611f2257610100808354040283529160200191611f4d565b820191906000526020600020905b815481529060010190602001808311611f3057829003601f168201915b505050505090506000611f5e612971565b9050600081511415611f74578192505050611fb7565b600082511115611fa9578082604051602001611f91929190613cc1565b60405160208183030381529060405292505050611fb7565b611fb284612a03565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120586122d8565b73ffffffffffffffffffffffffffffffffffffffff166120766117e1565b73ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213390613dc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661235383610ed9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6123a28261226c565b6123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890613f29565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612408929190612e06565b505050565b60006124188261226c565b612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e90613e89565b60405180910390fd5b600061246283610ed9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124d157508373ffffffffffffffffffffffffffffffffffffffff166124b984610983565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e257506124e18185611fbc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661250b82610ed9565b73ffffffffffffffffffffffffffffffffffffffff1614612561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255890613fe9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c890613e29565b60405180910390fd5b6125dc838383612aaa565b6125e76000826122e0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612637919061430b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461268e919061422a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90613f69565b60405180910390fd5b6127c08161226c565b15612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613de9565b60405180910390fd5b61280c60008383612aaa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461285c919061422a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6129208484846124eb565b61292c84848484612aaf565b61296b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296290613da9565b60405180910390fd5b50505050565b6060600d805461298090614407565b80601f01602080910402602001604051908101604052809291908181526020018280546129ac90614407565b80156129f95780601f106129ce576101008083540402835291602001916129f9565b820191906000526020600020905b8154815290600101906020018083116129dc57829003601f168201915b5050505050905090565b6060612a0e8261226c565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490614009565b60405180910390fd5b6000612a57612971565b90506000815111612a775760405180602001604052806000815250612aa2565b80612a8184612c46565b604051602001612a92929190613cc1565b6040516020818303038152906040525b915050919050565b505050565b6000612ad08473ffffffffffffffffffffffffffffffffffffffff16612df3565b15612c39578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612af96122d8565b8786866040518563ffffffff1660e01b8152600401612b1b9493929190613d00565b602060405180830381600087803b158015612b3557600080fd5b505af1925050508015612b6657506040513d601f19601f82011682018060405250810190612b6391906131db565b60015b612be9573d8060008114612b96576040519150601f19603f3d011682016040523d82523d6000602084013e612b9b565b606091505b50600081511415612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890613da9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c3e565b600190505b949350505050565b60606000821415612c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612cc0578080612ca990614439565b915050600a82612cb99190614280565b9150612c96565b60008167ffffffffffffffff811115612d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612d345781602001600182028036833780820191505090505b5090505b60008514612de757600182612d4d919061430b565b9150600a85612d5c9190614482565b6030612d68919061422a565b60f81b818381518110612da4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de09190614280565b9450612d38565b8093505050505b919050565b600080823b905060008111915050919050565b828054612e1290614407565b90600052602060002090601f016020900481019282612e345760008555612e7b565b82601f10612e4d57805160ff1916838001178555612e7b565b82800160010185558215612e7b579182015b82811115612e7a578251825591602001919060010190612e5f565b5b509050612e889190612e8c565b5090565b5b80821115612ea5576000816000905550600101612e8d565b5090565b6000612ebc612eb784614187565b614156565b905082815260208101848484011115612ed457600080fd5b612edf8482856143c5565b509392505050565b6000612efa612ef5846141b7565b614156565b905082815260208101848484011115612f1257600080fd5b612f1d8482856143c5565b509392505050565b600081359050612f3481614580565b92915050565b600081359050612f4981614597565b92915050565b600081359050612f5e816145ae565b92915050565b600081519050612f73816145ae565b92915050565b600082601f830112612f8a57600080fd5b8135612f9a848260208601612ea9565b91505092915050565b600082601f830112612fb457600080fd5b8135612fc4848260208601612ee7565b91505092915050565b600081359050612fdc816145c5565b92915050565b600060208284031215612ff457600080fd5b600061300284828501612f25565b91505092915050565b6000806040838503121561301e57600080fd5b600061302c85828601612f25565b925050602061303d85828601612f25565b9150509250929050565b60008060006060848603121561305c57600080fd5b600061306a86828701612f25565b935050602061307b86828701612f25565b925050604061308c86828701612fcd565b9150509250925092565b600080600080608085870312156130ac57600080fd5b60006130ba87828801612f25565b94505060206130cb87828801612f25565b93505060406130dc87828801612fcd565b925050606085013567ffffffffffffffff8111156130f957600080fd5b61310587828801612f79565b91505092959194509250565b6000806040838503121561312457600080fd5b600061313285828601612f25565b925050602061314385828601612f3a565b9150509250929050565b6000806040838503121561316057600080fd5b600061316e85828601612f25565b925050602061317f85828601612fcd565b9150509250929050565b60006020828403121561319b57600080fd5b60006131a984828501612f3a565b91505092915050565b6000602082840312156131c457600080fd5b60006131d284828501612f4f565b91505092915050565b6000602082840312156131ed57600080fd5b60006131fb84828501612f64565b91505092915050565b60006020828403121561321657600080fd5b600082013567ffffffffffffffff81111561323057600080fd5b61323c84828501612fa3565b91505092915050565b60006020828403121561325757600080fd5b600061326584828501612fcd565b91505092915050565b6000806040838503121561328157600080fd5b600061328f85828601612fcd565b925050602083013567ffffffffffffffff8111156132ac57600080fd5b6132b885828601612fa3565b9150509250929050565b6132cb8161433f565b82525050565b6132da81614351565b82525050565b60006132eb826141e7565b6132f581856141fd565b93506133058185602086016143d4565b61330e8161456f565b840191505092915050565b613322816143b3565b82525050565b6000613333826141f2565b61333d818561420e565b935061334d8185602086016143d4565b6133568161456f565b840191505092915050565b600061336c826141f2565b613376818561421f565b93506133868185602086016143d4565b80840191505092915050565b600061339f60088361420e565b91507f746f6f206d7563680000000000000000000000000000000000000000000000006000830152602082019050919050565b60006133df60328361420e565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061344560268361420e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134ab601c8361420e565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006134eb60118361420e565b91507f6d696e742077726f6e67206e756d6265720000000000000000000000000000006000830152602082019050919050565b600061352b60248361420e565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061359160198361420e565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006135d1601c8361420e565b91507f4f766572206d696e74206c696d697420666f7220616464726573732e000000006000830152602082019050919050565b6000613611602c8361420e565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613677602d8361420e565b91507f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20707260008301527f6573616c6520616d6f756e742e000000000000000000000000000000000000006020830152604082019050919050565b60006136dd60388361420e565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613743602a8361420e565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006137a960298361420e565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061380f602e8361420e565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b6000613875601c8361420e565b91507f496e636f7272656374207472616e73616374696f6e2076616c75652e000000006000830152602082019050919050565b60006138b560208361420e565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006138f560318361420e565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b600061395b602c8361420e565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139c160208361420e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a0160298361420e565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a67602f8361420e565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613acd60218361420e565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b3360318361420e565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613b9960308361420e565b91507f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008301527f6c6c656374696f6e20616d6f756e742e000000000000000000000000000000006020830152604082019050919050565b6000613bff600b8361420e565b91507f6e6f7420737461727465640000000000000000000000000000000000000000006000830152602082019050919050565b6000613c3f601f8361420e565b91507f48616e67206f6e20626f79732c20796f756c6c2067657420696e20736f6f6e006000830152602082019050919050565b6000613c7f600b8361420e565b91507f76616c7565206572726f720000000000000000000000000000000000000000006000830152602082019050919050565b613cbb816143a9565b82525050565b6000613ccd8285613361565b9150613cd98284613361565b91508190509392505050565b6000602082019050613cfa60008301846132c2565b92915050565b6000608082019050613d1560008301876132c2565b613d2260208301866132c2565b613d2f6040830185613cb2565b8181036060830152613d4181846132e0565b905095945050505050565b6000602082019050613d6160008301846132d1565b92915050565b60006020820190508181036000830152613d818184613328565b905092915050565b60006020820190508181036000830152613da281613392565b9050919050565b60006020820190508181036000830152613dc2816133d2565b9050919050565b60006020820190508181036000830152613de281613438565b9050919050565b60006020820190508181036000830152613e028161349e565b9050919050565b60006020820190508181036000830152613e22816134de565b9050919050565b60006020820190508181036000830152613e428161351e565b9050919050565b60006020820190508181036000830152613e6281613584565b9050919050565b60006020820190508181036000830152613e82816135c4565b9050919050565b60006020820190508181036000830152613ea281613604565b9050919050565b60006020820190508181036000830152613ec28161366a565b9050919050565b60006020820190508181036000830152613ee2816136d0565b9050919050565b60006020820190508181036000830152613f0281613736565b9050919050565b60006020820190508181036000830152613f228161379c565b9050919050565b60006020820190508181036000830152613f4281613802565b9050919050565b60006020820190508181036000830152613f6281613868565b9050919050565b60006020820190508181036000830152613f82816138a8565b9050919050565b60006020820190508181036000830152613fa2816138e8565b9050919050565b60006020820190508181036000830152613fc28161394e565b9050919050565b60006020820190508181036000830152613fe2816139b4565b9050919050565b60006020820190508181036000830152614002816139f4565b9050919050565b6000602082019050818103600083015261402281613a5a565b9050919050565b6000602082019050818103600083015261404281613ac0565b9050919050565b6000602082019050818103600083015261406281613b26565b9050919050565b6000602082019050818103600083015261408281613b8c565b9050919050565b600060208201905081810360008301526140a281613bf2565b9050919050565b600060208201905081810360008301526140c281613c32565b9050919050565b600060208201905081810360008301526140e281613c72565b9050919050565b60006020820190506140fe6000830184613cb2565b92915050565b60006040820190506141196000830185613cb2565b6141266020830184613319565b9392505050565b60006040820190506141426000830185613cb2565b61414f6020830184613cb2565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561417d5761417c614540565b5b8060405250919050565b600067ffffffffffffffff8211156141a2576141a1614540565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156141d2576141d1614540565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614235826143a9565b9150614240836143a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614275576142746144b3565b5b828201905092915050565b600061428b826143a9565b9150614296836143a9565b9250826142a6576142a56144e2565b5b828204905092915050565b60006142bc826143a9565b91506142c7836143a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614300576142ff6144b3565b5b828202905092915050565b6000614316826143a9565b9150614321836143a9565b925082821015614334576143336144b3565b5b828203905092915050565b600061434a82614389565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006143be826143a9565b9050919050565b82818337600083830152505050565b60005b838110156143f25780820151818401526020810190506143d7565b83811115614401576000848401525b50505050565b6000600282049050600182168061441f57607f821691505b6020821081141561443357614432614511565b5b50919050565b6000614444826143a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614477576144766144b3565b5b600182019050919050565b600061448d826143a9565b9150614498836143a9565b9250826144a8576144a76144e2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145898161433f565b811461459457600080fd5b50565b6145a081614351565b81146145ab57600080fd5b50565b6145b78161435d565b81146145c257600080fd5b50565b6145ce816143a9565b81146145d957600080fd5b5056fea264697066735822122053740536dec2e77a6ac33c8d351af5763d825d5de02bed2f126f2382de3bc4e764736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f45746842616e616e617343686970730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000445424344000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): EthBananasChips
Arg [1] : symbol_ (string): EBCD
Arg [2] : baseURI_ (string):

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 45746842616e616e617343686970730000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4542434400000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36744:4021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20636:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21571:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23039:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22573:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38135:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37686:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37164:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23934:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36939:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40453:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24312:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37922:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38378:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21264:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37029:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37136:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20993:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36148:148;;;;;;;;;;;;;:::i;:::-;;38634:518;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39684:751;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37190:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35495:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38277:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38489:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37077:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23334:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38027:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24535:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39165:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32905:682;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23702:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36452:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36990:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20636:292;20738:4;20777:25;20762:40;;;:11;:40;;;;:105;;;;20834:33;20819:48;;;:11;:48;;;;20762:105;:158;;;;20884:36;20908:11;20884:23;:36::i;:::-;20762:158;20755:165;;20636:292;;;:::o;21571:100::-;21625:13;21658:5;21651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21571:100;:::o;23039:222::-;23115:7;23143:16;23151:7;23143;:16::i;:::-;23135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23229:15;:24;23245:7;23229:24;;;;;;;;;;;;;;;;;;;;;23222:31;;23039:222;;;:::o;22573:399::-;22654:13;22670:23;22685:7;22670:14;:23::i;:::-;22654:39;;22718:5;22712:11;;:2;:11;;;;22704:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22799:5;22783:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22808:37;22825:5;22832:12;:10;:12::i;:::-;22808:16;:37::i;:::-;22783:62;22775:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22943:21;22952:2;22956:7;22943:8;:21::i;:::-;22573:399;;;:::o;38135:133::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38227:33:::1;38240:8;38250:9;38227:12;:33::i;:::-;38135:133:::0;;:::o;37686:111::-;37738:7;37765:15;;37758:22;;37686:111;:::o;37164:19::-;;;;;;;;;;;;;:::o;23934:306::-;24095:41;24114:12;:10;:12::i;:::-;24128:7;24095:18;:41::i;:::-;24087:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24204:28;24214:4;24220:2;24224:7;24204:9;:28::i;:::-;23934:306;;;:::o;36939:32::-;;;;:::o;40453:278::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40555:10:::1;;40550:1;40532:15;;:19;;;;:::i;:::-;:33;;40524:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;40649:5;40634:43;;;40672:1;40656:15;;:17;;;;:::i;:::-;40675:1;40634:43;;;;;;;:::i;:::-;;;;;;;;40688:35;40694:5;40705:15;;:17;;;;;;;;;:::i;:::-;;;;;40701:1;:21;;;;:::i;:::-;40688:5;:35::i;:::-;40453:278:::0;:::o;24312:151::-;24416:39;24433:4;24439:2;24443:7;24416:39;;;;;;;;;;;;:16;:39::i;:::-;24312:151;;;:::o;37922:96::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38003:7:::1;37993;:17;;;;;;;;;;;;:::i;:::-;;37922:96:::0;:::o;38378:99::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38463:6:::1;38446:14;;:23;;;;;;;;;;;;;;;;;;38378:99:::0;:::o;21264:239::-;21336:7;21356:13;21372:7;:16;21380:7;21372:16;;;;;;;;;;;;;;;;;;;;;21356:32;;21424:1;21407:19;;:5;:19;;;;21399:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21490:5;21483:12;;;21264:239;;;:::o;37029:28::-;;;;:::o;37136:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20993:208::-;21065:7;21110:1;21093:19;;:5;:19;;;;21085:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21177:9;:16;21187:5;21177:16;;;;;;;;;;;;;;;;21170:23;;20993:208;;;:::o;36148:148::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36255:1:::1;36218:40;;36239:6;;;;;;;;;;;36218:40;;;;;;;;;;;;36286:1;36269:6;;:19;;;;;;;;;;;;;;;;;;36148:148::o:0;38634:518::-;37634:7;;;;;;;;;;;37626:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;38738:1:::1;38730:6;:9;:31;;;;;38753:8;;38743:6;:18;;38730:31;38722:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38830:10;;38820:6;38802:15;;:24;;;;:::i;:::-;:38;;38794:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;38894:5;;38885:6;:14;;;;:::i;:::-;38872:9;:27;38864:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38934:7;:5;:7::i;:::-;38926:25;;:36;38952:9;38926:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38993:12;:10;:12::i;:::-;38978:55;;;39023:1;39007:15;;:17;;;;:::i;:::-;39026:6;38978:55;;;;;;;:::i;:::-;;;;;;;;39048:9;39044:101;39064:6;39061:1;:9;39044:101;;;39091:42;39097:12;:10;:12::i;:::-;39115:15;;:17;;;;;;;;;:::i;:::-;;;;;39111:1;:21;;;;:::i;:::-;39091:5;:42::i;:::-;39072:3;;;;;:::i;:::-;;;;39044:101;;;;38634:518:::0;:::o;39684:751::-;37513:14;;;;;;;;;;;37505:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39799:1:::1;39767:18;:30;39786:10;39767:30;;;;;;;;;;;;;;;;:33;39763:101;;;39851:1;39818:18;:30;39837:10;39818:30;;;;;;;;;;;;;;;:34;;;;39763:101;39925:1;39915:6;39882:18;:30;39901:10;39882:30;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:44;;39874:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40006:10;;39996:6;39978:15;;:24;;;;:::i;:::-;:38;;39970:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40107:5;;40098:6;:14;;;;:::i;:::-;40085:9;:27;40077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40164:7;:5;:7::i;:::-;40156:25;;:36;40182:9;40156:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40239:6;40203:18;:32;40222:12;:10;:12::i;:::-;40203:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;40276:12;:10;:12::i;:::-;40261:55;;;40306:1;40290:15;;:17;;;;:::i;:::-;40309:6;40261:55;;;;;;;:::i;:::-;;;;;;;;40331:9;40327:101;40347:6;40344:1;:9;40327:101;;;40374:42;40380:12;:10;:12::i;:::-;40398:15;;:17;;;;;;;;;:::i;:::-;;;;;40394:1;:21;;;;:::i;:::-;40374:5;:42::i;:::-;40355:3;;;;;:::i;:::-;;;;40327:101;;;;39684:751:::0;:::o;37190:26::-;;;;;;;;;;;;;:::o;35495:87::-;35541:7;35568:6;;;;;;;;;;;35561:13;;35495:87;:::o;38277:89::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38352:6:::1;38342:7;;:16;;;;;;;;;;;;;;;;;;38277:89:::0;:::o;21741:104::-;21797:13;21830:7;21823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21741:104;:::o;38489:136::-;38565:7;38592:18;:25;38611:5;38592:25;;;;;;;;;;;;;;;;38585:32;;38489:136;;;:::o;37077:40::-;;;;:::o;23334:296::-;23449:12;:10;:12::i;:::-;23437:24;;:8;:24;;;;23429:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23550:8;23505:18;:32;23524:12;:10;:12::i;:::-;23505:32;;;;;;;;;;;;;;;:42;23538:8;23505:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23603:8;23574:48;;23589:12;:10;:12::i;:::-;23574:48;;;23613:8;23574:48;;;;;;:::i;:::-;;;;;;;;23334:296;;:::o;38027:93::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38103:9:::1;38095:5;:17;;;;38027:93:::0;:::o;24535:285::-;24667:41;24686:12;:10;:12::i;:::-;24700:7;24667:18;:41::i;:::-;24659:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:39;24787:4;24793:2;24797:7;24806:5;24773:13;:39::i;:::-;24535:285;;;;:::o;36902:30::-;;;;:::o;39165:501::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39252:1:::1;39244:6;:9;:31;;;;;39267:8;;39257:6;:18;;39244:31;39236:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39344:10;;39334:6;39316:15;;:24;;;;:::i;:::-;:38;;39308:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39408:5;;39399:6;:14;;;;:::i;:::-;39386:9;:27;39378:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39448:7;:5;:7::i;:::-;39440:25;;:36;39466:9;39440:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39507:12;:10;:12::i;:::-;39492:55;;;39537:1;39521:15;;:17;;;;:::i;:::-;39540:6;39492:55;;;;;;;:::i;:::-;;;;;;;;39562:9;39558:101;39578:6;39575:1;:9;39558:101;;;39605:42;39611:12;:10;:12::i;:::-;39629:15;;:17;;;;;;;;;:::i;:::-;;;;;39625:1;:21;;;;:::i;:::-;39605:5;:42::i;:::-;39586:3;;;;;:::i;:::-;;;;39558:101;;;;39165:501:::0;:::o;32905:682::-;32978:13;33012:16;33020:7;33012;:16::i;:::-;33004:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33096:23;33122:10;:19;33133:7;33122:19;;;;;;;;;;;33096:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33152:18;33173:10;:8;:10::i;:::-;33152:31;;33282:1;33266:4;33260:18;:23;33256:72;;;33307:9;33300:16;;;;;;33256:72;33458:1;33438:9;33432:23;:27;33428:108;;;33507:4;33513:9;33490:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33476:48;;;;;;33428:108;33556:23;33571:7;33556:14;:23::i;:::-;33549:30;;;;32905:682;;;;:::o;23702:164::-;23799:4;23823:18;:25;23842:5;23823:25;;;;;;;;;;;;;;;:35;23849:8;23823:35;;;;;;;;;;;;;;;;;;;;;;;;;23816:42;;23702:164;;;;:::o;36452:244::-;35727:12;:10;:12::i;:::-;35716:23;;:7;:5;:7::i;:::-;:23;;;35708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36561:1:::1;36541:22;;:8;:22;;;;36533:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36651:8;36622:38;;36643:6;;;;;;;;;;;36622:38;;;;;;;;;;;;36680:8;36671:6;;:17;;;;;;;;;;;;;;;;;;36452:244:::0;:::o;36990:31::-;;;;:::o;19129:157::-;19214:4;19253:25;19238:40;;;:11;:40;;;;19231:47;;19129:157;;;:::o;26289:127::-;26354:4;26406:1;26378:30;;:7;:16;26386:7;26378:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26371:37;;26289:127;;;:::o;15929:98::-;15982:7;16009:10;16002:17;;15929:98;:::o;30184:174::-;30286:2;30259:15;:24;30275:7;30259:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30342:7;30338:2;30304:46;;30313:23;30328:7;30313:14;:23::i;:::-;30304:46;;;;;;;;;;;;30184:174;;:::o;33744:217::-;33844:16;33852:7;33844;:16::i;:::-;33836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33944:9;33922:10;:19;33933:7;33922:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33744:217;;:::o;26584:348::-;26677:4;26702:16;26710:7;26702;:16::i;:::-;26694:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:13;26794:23;26809:7;26794:14;:23::i;:::-;26778:39;;26847:5;26836:16;;:7;:16;;;:51;;;;26880:7;26856:31;;:20;26868:7;26856:11;:20::i;:::-;:31;;;26836:51;:87;;;;26891:32;26908:5;26915:7;26891:16;:32::i;:::-;26836:87;26828:96;;;26584:348;;;;:::o;29517:548::-;29642:4;29615:31;;:23;29630:7;29615:14;:23::i;:::-;:31;;;29607:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29725:1;29711:16;;:2;:16;;;;29703:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29782:39;29803:4;29809:2;29813:7;29782:20;:39::i;:::-;29887:29;29904:1;29908:7;29887:8;:29::i;:::-;29949:1;29930:9;:15;29940:4;29930:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29978:1;29961:9;:13;29971:2;29961:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30009:2;29990:7;:16;29998:7;29990:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30049:7;30045:2;30030:27;;30039:4;30030:27;;;;;;;;;;;;29517:548;;;:::o;28200:385::-;28294:1;28280:16;;:2;:16;;;;28272:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28353:16;28361:7;28353;:16::i;:::-;28352:17;28344:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28416:45;28445:1;28449:2;28453:7;28416:20;:45::i;:::-;28492:1;28475:9;:13;28485:2;28475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28523:2;28504:7;:16;28512:7;28504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28569:7;28565:2;28544:33;;28561:1;28544:33;;;;;;;;;;;;28200:385;;:::o;25703:272::-;25817:28;25827:4;25833:2;25837:7;25817:9;:28::i;:::-;25864:48;25887:4;25893:2;25897:7;25906:5;25864:22;:48::i;:::-;25856:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:272;;;;:::o;37806:107::-;37866:13;37898:7;37891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37806:107;:::o;21917:361::-;21990:13;22024:16;22032:7;22024;:16::i;:::-;22016:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22106:21;22130:10;:8;:10::i;:::-;22106:34;;22182:1;22164:7;22158:21;:25;:112;;;;;;;;;;;;;;;;;22223:7;22232:18;:7;:16;:18::i;:::-;22206:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22158:112;22151:119;;;21917:361;;;:::o;32381:93::-;;;;:::o;30924:843::-;31045:4;31071:15;:2;:13;;;:15::i;:::-;31067:693;;;31123:2;31107:36;;;31144:12;:10;:12::i;:::-;31158:4;31164:7;31173:5;31107:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31103:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31370:1;31353:6;:13;:18;31349:341;;;31396:60;;;;;;;;;;:::i;:::-;;;;;;;;31349:341;31640:6;31634:13;31625:6;31621:2;31617:15;31610:38;31103:602;31240:45;;;31230:55;;;:6;:55;;;;31223:62;;;;;31067:693;31744:4;31737:11;;30924:843;;;;;;;:::o;16579:724::-;16635:13;16866:1;16857:5;:10;16853:53;;;16884:10;;;;;;;;;;;;;;;;;;;;;16853:53;16916:12;16931:5;16916:20;;16947:14;16972:78;16987:1;16979:4;:9;16972:78;;17005:8;;;;;:::i;:::-;;;;17036:2;17028:10;;;;;:::i;:::-;;;16972:78;;;17060:19;17092:6;17082:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17060:39;;17110:154;17126:1;17117:5;:10;17110:154;;17154:1;17144:11;;;;;:::i;:::-;;;17221:2;17213:5;:10;;;;:::i;:::-;17200:2;:24;;;;:::i;:::-;17187:39;;17170:6;17177;17170:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17250:2;17241:11;;;;;:::i;:::-;;;17110:154;;;17288:6;17274:21;;;;;16579:724;;;;:::o;8037:423::-;8097:4;8306:12;8417:7;8405:20;8397:28;;8451:1;8444:4;:8;8437:15;;;8037:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:520::-;;;6481:2;6469:9;6460:7;6456:23;6452:32;6449:2;;;6497:1;6494;6487:12;6449:2;6540:1;6565:53;6610:7;6601:6;6590:9;6586:22;6565:53;:::i;:::-;6555:63;;6511:117;6695:2;6684:9;6680:18;6667:32;6726:18;6718:6;6715:30;6712:2;;;6758:1;6755;6748:12;6712:2;6786:63;6841:7;6832:6;6821:9;6817:22;6786:63;:::i;:::-;6776:73;;6638:221;6439:427;;;;;:::o;6872:118::-;6959:24;6977:5;6959:24;:::i;:::-;6954:3;6947:37;6937:53;;:::o;6996:109::-;7077:21;7092:5;7077:21;:::i;:::-;7072:3;7065:34;7055:50;;:::o;7111:360::-;;7225:38;7257:5;7225:38;:::i;:::-;7279:70;7342:6;7337:3;7279:70;:::i;:::-;7272:77;;7358:52;7403:6;7398:3;7391:4;7384:5;7380:16;7358:52;:::i;:::-;7435:29;7457:6;7435:29;:::i;:::-;7430:3;7426:39;7419:46;;7201:270;;;;;:::o;7477:147::-;7572:45;7611:5;7572:45;:::i;:::-;7567:3;7560:58;7550:74;;:::o;7630:364::-;;7746:39;7779:5;7746:39;:::i;:::-;7801:71;7865:6;7860:3;7801:71;:::i;:::-;7794:78;;7881:52;7926:6;7921:3;7914:4;7907:5;7903:16;7881:52;:::i;:::-;7958:29;7980:6;7958:29;:::i;:::-;7953:3;7949:39;7942:46;;7722:272;;;;;:::o;8000:377::-;;8134:39;8167:5;8134:39;:::i;:::-;8189:89;8271:6;8266:3;8189:89;:::i;:::-;8182:96;;8287:52;8332:6;8327:3;8320:4;8313:5;8309:16;8287:52;:::i;:::-;8364:6;8359:3;8355:16;8348:23;;8110:267;;;;;:::o;8383:305::-;;8546:66;8610:1;8605:3;8546:66;:::i;:::-;8539:73;;8642:10;8638:1;8633:3;8629:11;8622:31;8679:2;8674:3;8670:12;8663:19;;8529:159;;;:::o;8694:382::-;;8857:67;8921:2;8916:3;8857:67;:::i;:::-;8850:74;;8954:34;8950:1;8945:3;8941:11;8934:55;9020:20;9015:2;9010:3;9006:12;8999:42;9067:2;9062:3;9058:12;9051:19;;8840:236;;;:::o;9082:370::-;;9245:67;9309:2;9304:3;9245:67;:::i;:::-;9238:74;;9342:34;9338:1;9333:3;9329:11;9322:55;9408:8;9403:2;9398:3;9394:12;9387:30;9443:2;9438:3;9434:12;9427:19;;9228:224;;;:::o;9458:326::-;;9621:67;9685:2;9680:3;9621:67;:::i;:::-;9614:74;;9718:30;9714:1;9709:3;9705:11;9698:51;9775:2;9770:3;9766:12;9759:19;;9604:180;;;:::o;9790:315::-;;9953:67;10017:2;10012:3;9953:67;:::i;:::-;9946:74;;10050:19;10046:1;10041:3;10037:11;10030:40;10096:2;10091:3;10087:12;10080:19;;9936:169;;;:::o;10111:368::-;;10274:67;10338:2;10333:3;10274:67;:::i;:::-;10267:74;;10371:34;10367:1;10362:3;10358:11;10351:55;10437:6;10432:2;10427:3;10423:12;10416:28;10470:2;10465:3;10461:12;10454:19;;10257:222;;;:::o;10485:323::-;;10648:67;10712:2;10707:3;10648:67;:::i;:::-;10641:74;;10745:27;10741:1;10736:3;10732:11;10725:48;10799:2;10794:3;10790:12;10783:19;;10631:177;;;:::o;10814:326::-;;10977:67;11041:2;11036:3;10977:67;:::i;:::-;10970:74;;11074:30;11070:1;11065:3;11061:11;11054:51;11131:2;11126:3;11122:12;11115:19;;10960:180;;;:::o;11146:376::-;;11309:67;11373:2;11368:3;11309:67;:::i;:::-;11302:74;;11406:34;11402:1;11397:3;11393:11;11386:55;11472:14;11467:2;11462:3;11458:12;11451:36;11513:2;11508:3;11504:12;11497:19;;11292:230;;;:::o;11528:377::-;;11691:67;11755:2;11750:3;11691:67;:::i;:::-;11684:74;;11788:34;11784:1;11779:3;11775:11;11768:55;11854:15;11849:2;11844:3;11840:12;11833:37;11896:2;11891:3;11887:12;11880:19;;11674:231;;;:::o;11911:388::-;;12074:67;12138:2;12133:3;12074:67;:::i;:::-;12067:74;;12171:34;12167:1;12162:3;12158:11;12151:55;12237:26;12232:2;12227:3;12223:12;12216:48;12290:2;12285:3;12281:12;12274:19;;12057:242;;;:::o;12305:374::-;;12468:67;12532:2;12527:3;12468:67;:::i;:::-;12461:74;;12565:34;12561:1;12556:3;12552:11;12545:55;12631:12;12626:2;12621:3;12617:12;12610:34;12670:2;12665:3;12661:12;12654:19;;12451:228;;;:::o;12685:373::-;;12848:67;12912:2;12907:3;12848:67;:::i;:::-;12841:74;;12945:34;12941:1;12936:3;12932:11;12925:55;13011:11;13006:2;13001:3;12997:12;12990:33;13049:2;13044:3;13040:12;13033:19;;12831:227;;;:::o;13064:378::-;;13227:67;13291:2;13286:3;13227:67;:::i;:::-;13220:74;;13324:34;13320:1;13315:3;13311:11;13304:55;13390:16;13385:2;13380:3;13376:12;13369:38;13433:2;13428:3;13424:12;13417:19;;13210:232;;;:::o;13448:326::-;;13611:67;13675:2;13670:3;13611:67;:::i;:::-;13604:74;;13708:30;13704:1;13699:3;13695:11;13688:51;13765:2;13760:3;13756:12;13749:19;;13594:180;;;:::o;13780:330::-;;13943:67;14007:2;14002:3;13943:67;:::i;:::-;13936:74;;14040:34;14036:1;14031:3;14027:11;14020:55;14101:2;14096:3;14092:12;14085:19;;13926:184;;;:::o;14116:381::-;;14279:67;14343:2;14338:3;14279:67;:::i;:::-;14272:74;;14376:34;14372:1;14367:3;14363:11;14356:55;14442:19;14437:2;14432:3;14428:12;14421:41;14488:2;14483:3;14479:12;14472:19;;14262:235;;;:::o;14503:376::-;;14666:67;14730:2;14725:3;14666:67;:::i;:::-;14659:74;;14763:34;14759:1;14754:3;14750:11;14743:55;14829:14;14824:2;14819:3;14815:12;14808:36;14870:2;14865:3;14861:12;14854:19;;14649:230;;;:::o;14885:330::-;;15048:67;15112:2;15107:3;15048:67;:::i;:::-;15041:74;;15145:34;15141:1;15136:3;15132:11;15125:55;15206:2;15201:3;15197:12;15190:19;;15031:184;;;:::o;15221:373::-;;15384:67;15448:2;15443:3;15384:67;:::i;:::-;15377:74;;15481:34;15477:1;15472:3;15468:11;15461:55;15547:11;15542:2;15537:3;15533:12;15526:33;15585:2;15580:3;15576:12;15569:19;;15367:227;;;:::o;15600:379::-;;15763:67;15827:2;15822:3;15763:67;:::i;:::-;15756:74;;15860:34;15856:1;15851:3;15847:11;15840:55;15926:17;15921:2;15916:3;15912:12;15905:39;15970:2;15965:3;15961:12;15954:19;;15746:233;;;:::o;15985:365::-;;16148:67;16212:2;16207:3;16148:67;:::i;:::-;16141:74;;16245:34;16241:1;16236:3;16232:11;16225:55;16311:3;16306:2;16301:3;16297:12;16290:25;16341:2;16336:3;16332:12;16325:19;;16131:219;;;:::o;16356:381::-;;16519:67;16583:2;16578:3;16519:67;:::i;:::-;16512:74;;16616:34;16612:1;16607:3;16603:11;16596:55;16682:19;16677:2;16672:3;16668:12;16661:41;16728:2;16723:3;16719:12;16712:19;;16502:235;;;:::o;16743:380::-;;16906:67;16970:2;16965:3;16906:67;:::i;:::-;16899:74;;17003:34;16999:1;16994:3;16990:11;16983:55;17069:18;17064:2;17059:3;17055:12;17048:40;17114:2;17109:3;17105:12;17098:19;;16889:234;;;:::o;17129:309::-;;17292:67;17356:2;17351:3;17292:67;:::i;:::-;17285:74;;17389:13;17385:1;17380:3;17376:11;17369:34;17429:2;17424:3;17420:12;17413:19;;17275:163;;;:::o;17444:329::-;;17607:67;17671:2;17666:3;17607:67;:::i;:::-;17600:74;;17704:33;17700:1;17695:3;17691:11;17684:54;17764:2;17759:3;17755:12;17748:19;;17590:183;;;:::o;17779:309::-;;17942:67;18006:2;18001:3;17942:67;:::i;:::-;17935:74;;18039:13;18035:1;18030:3;18026:11;18019:34;18079:2;18074:3;18070:12;18063:19;;17925:163;;;:::o;18094:118::-;18181:24;18199:5;18181:24;:::i;:::-;18176:3;18169:37;18159:53;;:::o;18218:435::-;;18420:95;18511:3;18502:6;18420:95;:::i;:::-;18413:102;;18532:95;18623:3;18614:6;18532:95;:::i;:::-;18525:102;;18644:3;18637:10;;18402:251;;;;;:::o;18659:222::-;;18790:2;18779:9;18775:18;18767:26;;18803:71;18871:1;18860:9;18856:17;18847:6;18803:71;:::i;:::-;18757:124;;;;:::o;18887:640::-;;19120:3;19109:9;19105:19;19097:27;;19134:71;19202:1;19191:9;19187:17;19178:6;19134:71;:::i;:::-;19215:72;19283:2;19272:9;19268:18;19259:6;19215:72;:::i;:::-;19297;19365:2;19354:9;19350:18;19341:6;19297:72;:::i;:::-;19416:9;19410:4;19406:20;19401:2;19390:9;19386:18;19379:48;19444:76;19515:4;19506:6;19444:76;:::i;:::-;19436:84;;19087:440;;;;;;;:::o;19533:210::-;;19658:2;19647:9;19643:18;19635:26;;19671:65;19733:1;19722:9;19718:17;19709:6;19671:65;:::i;:::-;19625:118;;;;:::o;19749:313::-;;19900:2;19889:9;19885:18;19877:26;;19949:9;19943:4;19939:20;19935:1;19924:9;19920:17;19913:47;19977:78;20050:4;20041:6;19977:78;:::i;:::-;19969:86;;19867:195;;;;:::o;20068:419::-;;20272:2;20261:9;20257:18;20249:26;;20321:9;20315:4;20311:20;20307:1;20296:9;20292:17;20285:47;20349:131;20475:4;20349:131;:::i;:::-;20341:139;;20239:248;;;:::o;20493:419::-;;20697:2;20686:9;20682:18;20674:26;;20746:9;20740:4;20736:20;20732:1;20721:9;20717:17;20710:47;20774:131;20900:4;20774:131;:::i;:::-;20766:139;;20664:248;;;:::o;20918:419::-;;21122:2;21111:9;21107:18;21099:26;;21171:9;21165:4;21161:20;21157:1;21146:9;21142:17;21135:47;21199:131;21325:4;21199:131;:::i;:::-;21191:139;;21089:248;;;:::o;21343:419::-;;21547:2;21536:9;21532:18;21524:26;;21596:9;21590:4;21586:20;21582:1;21571:9;21567:17;21560:47;21624:131;21750:4;21624:131;:::i;:::-;21616:139;;21514:248;;;:::o;21768:419::-;;21972:2;21961:9;21957:18;21949:26;;22021:9;22015:4;22011:20;22007:1;21996:9;21992:17;21985:47;22049:131;22175:4;22049:131;:::i;:::-;22041:139;;21939:248;;;:::o;22193:419::-;;22397:2;22386:9;22382:18;22374:26;;22446:9;22440:4;22436:20;22432:1;22421:9;22417:17;22410:47;22474:131;22600:4;22474:131;:::i;:::-;22466:139;;22364:248;;;:::o;22618:419::-;;22822:2;22811:9;22807:18;22799:26;;22871:9;22865:4;22861:20;22857:1;22846:9;22842:17;22835:47;22899:131;23025:4;22899:131;:::i;:::-;22891:139;;22789:248;;;:::o;23043:419::-;;23247:2;23236:9;23232:18;23224:26;;23296:9;23290:4;23286:20;23282:1;23271:9;23267:17;23260:47;23324:131;23450:4;23324:131;:::i;:::-;23316:139;;23214:248;;;:::o;23468:419::-;;23672:2;23661:9;23657:18;23649:26;;23721:9;23715:4;23711:20;23707:1;23696:9;23692:17;23685:47;23749:131;23875:4;23749:131;:::i;:::-;23741:139;;23639:248;;;:::o;23893:419::-;;24097:2;24086:9;24082:18;24074:26;;24146:9;24140:4;24136:20;24132:1;24121:9;24117:17;24110:47;24174:131;24300:4;24174:131;:::i;:::-;24166:139;;24064:248;;;:::o;24318:419::-;;24522:2;24511:9;24507:18;24499:26;;24571:9;24565:4;24561:20;24557:1;24546:9;24542:17;24535:47;24599:131;24725:4;24599:131;:::i;:::-;24591:139;;24489:248;;;:::o;24743:419::-;;24947:2;24936:9;24932:18;24924:26;;24996:9;24990:4;24986:20;24982:1;24971:9;24967:17;24960:47;25024:131;25150:4;25024:131;:::i;:::-;25016:139;;24914:248;;;:::o;25168:419::-;;25372:2;25361:9;25357:18;25349:26;;25421:9;25415:4;25411:20;25407:1;25396:9;25392:17;25385:47;25449:131;25575:4;25449:131;:::i;:::-;25441:139;;25339:248;;;:::o;25593:419::-;;25797:2;25786:9;25782:18;25774:26;;25846:9;25840:4;25836:20;25832:1;25821:9;25817:17;25810:47;25874:131;26000:4;25874:131;:::i;:::-;25866:139;;25764:248;;;:::o;26018:419::-;;26222:2;26211:9;26207:18;26199:26;;26271:9;26265:4;26261:20;26257:1;26246:9;26242:17;26235:47;26299:131;26425:4;26299:131;:::i;:::-;26291:139;;26189:248;;;:::o;26443:419::-;;26647:2;26636:9;26632:18;26624:26;;26696:9;26690:4;26686:20;26682:1;26671:9;26667:17;26660:47;26724:131;26850:4;26724:131;:::i;:::-;26716:139;;26614:248;;;:::o;26868:419::-;;27072:2;27061:9;27057:18;27049:26;;27121:9;27115:4;27111:20;27107:1;27096:9;27092:17;27085:47;27149:131;27275:4;27149:131;:::i;:::-;27141:139;;27039:248;;;:::o;27293:419::-;;27497:2;27486:9;27482:18;27474:26;;27546:9;27540:4;27536:20;27532:1;27521:9;27517:17;27510:47;27574:131;27700:4;27574:131;:::i;:::-;27566:139;;27464:248;;;:::o;27718:419::-;;27922:2;27911:9;27907:18;27899:26;;27971:9;27965:4;27961:20;27957:1;27946:9;27942:17;27935:47;27999:131;28125:4;27999:131;:::i;:::-;27991:139;;27889:248;;;:::o;28143:419::-;;28347:2;28336:9;28332:18;28324:26;;28396:9;28390:4;28386:20;28382:1;28371:9;28367:17;28360:47;28424:131;28550:4;28424:131;:::i;:::-;28416:139;;28314:248;;;:::o;28568:419::-;;28772:2;28761:9;28757:18;28749:26;;28821:9;28815:4;28811:20;28807:1;28796:9;28792:17;28785:47;28849:131;28975:4;28849:131;:::i;:::-;28841:139;;28739:248;;;:::o;28993:419::-;;29197:2;29186:9;29182:18;29174:26;;29246:9;29240:4;29236:20;29232:1;29221:9;29217:17;29210:47;29274:131;29400:4;29274:131;:::i;:::-;29266:139;;29164:248;;;:::o;29418:419::-;;29622:2;29611:9;29607:18;29599:26;;29671:9;29665:4;29661:20;29657:1;29646:9;29642:17;29635:47;29699:131;29825:4;29699:131;:::i;:::-;29691:139;;29589:248;;;:::o;29843:419::-;;30047:2;30036:9;30032:18;30024:26;;30096:9;30090:4;30086:20;30082:1;30071:9;30067:17;30060:47;30124:131;30250:4;30124:131;:::i;:::-;30116:139;;30014:248;;;:::o;30268:419::-;;30472:2;30461:9;30457:18;30449:26;;30521:9;30515:4;30511:20;30507:1;30496:9;30492:17;30485:47;30549:131;30675:4;30549:131;:::i;:::-;30541:139;;30439:248;;;:::o;30693:419::-;;30897:2;30886:9;30882:18;30874:26;;30946:9;30940:4;30936:20;30932:1;30921:9;30917:17;30910:47;30974:131;31100:4;30974:131;:::i;:::-;30966:139;;30864:248;;;:::o;31118:419::-;;31322:2;31311:9;31307:18;31299:26;;31371:9;31365:4;31361:20;31357:1;31346:9;31342:17;31335:47;31399:131;31525:4;31399:131;:::i;:::-;31391:139;;31289:248;;;:::o;31543:222::-;;31674:2;31663:9;31659:18;31651:26;;31687:71;31755:1;31744:9;31740:17;31731:6;31687:71;:::i;:::-;31641:124;;;;:::o;31771:348::-;;31938:2;31927:9;31923:18;31915:26;;31951:71;32019:1;32008:9;32004:17;31995:6;31951:71;:::i;:::-;32032:80;32108:2;32097:9;32093:18;32084:6;32032:80;:::i;:::-;31905:214;;;;;:::o;32125:332::-;;32284:2;32273:9;32269:18;32261:26;;32297:71;32365:1;32354:9;32350:17;32341:6;32297:71;:::i;:::-;32378:72;32446:2;32435:9;32431:18;32422:6;32378:72;:::i;:::-;32251:206;;;;;:::o;32463:283::-;;32529:2;32523:9;32513:19;;32571:4;32563:6;32559:17;32678:6;32666:10;32663:22;32642:18;32630:10;32627:34;32624:62;32621:2;;;32689:18;;:::i;:::-;32621:2;32729:10;32725:2;32718:22;32503:243;;;;:::o;32752:331::-;;32903:18;32895:6;32892:30;32889:2;;;32925:18;;:::i;:::-;32889:2;33010:4;33006:9;32999:4;32991:6;32987:17;32983:33;32975:41;;33071:4;33065;33061:15;33053:23;;32818:265;;;:::o;33089:332::-;;33241:18;33233:6;33230:30;33227:2;;;33263:18;;:::i;:::-;33227:2;33348:4;33344:9;33337:4;33329:6;33325:17;33321:33;33313:41;;33409:4;33403;33399:15;33391:23;;33156:265;;;:::o;33427:98::-;;33512:5;33506:12;33496:22;;33485:40;;;:::o;33531:99::-;;33617:5;33611:12;33601:22;;33590:40;;;:::o;33636:168::-;;33753:6;33748:3;33741:19;33793:4;33788:3;33784:14;33769:29;;33731:73;;;;:::o;33810:169::-;;33928:6;33923:3;33916:19;33968:4;33963:3;33959:14;33944:29;;33906:73;;;;:::o;33985:148::-;;34124:3;34109:18;;34099:34;;;;:::o;34139:305::-;;34198:20;34216:1;34198:20;:::i;:::-;34193:25;;34232:20;34250:1;34232:20;:::i;:::-;34227:25;;34386:1;34318:66;34314:74;34311:1;34308:81;34305:2;;;34392:18;;:::i;:::-;34305:2;34436:1;34433;34429:9;34422:16;;34183:261;;;;:::o;34450:185::-;;34507:20;34525:1;34507:20;:::i;:::-;34502:25;;34541:20;34559:1;34541:20;:::i;:::-;34536:25;;34580:1;34570:2;;34585:18;;:::i;:::-;34570:2;34627:1;34624;34620:9;34615:14;;34492:143;;;;:::o;34641:348::-;;34704:20;34722:1;34704:20;:::i;:::-;34699:25;;34738:20;34756:1;34738:20;:::i;:::-;34733:25;;34926:1;34858:66;34854:74;34851:1;34848:81;34843:1;34836:9;34829:17;34825:105;34822:2;;;34933:18;;:::i;:::-;34822:2;34981:1;34978;34974:9;34963:20;;34689:300;;;;:::o;34995:191::-;;35055:20;35073:1;35055:20;:::i;:::-;35050:25;;35089:20;35107:1;35089:20;:::i;:::-;35084:25;;35128:1;35125;35122:8;35119:2;;;35133:18;;:::i;:::-;35119:2;35178:1;35175;35171:9;35163:17;;35040:146;;;;:::o;35192:96::-;;35258:24;35276:5;35258:24;:::i;:::-;35247:35;;35237:51;;;:::o;35294:90::-;;35371:5;35364:13;35357:21;35346:32;;35336:48;;;:::o;35390:149::-;;35466:66;35459:5;35455:78;35444:89;;35434:105;;;:::o;35545:126::-;;35622:42;35615:5;35611:54;35600:65;;35590:81;;;:::o;35677:77::-;;35743:5;35732:16;;35722:32;;;:::o;35760:121::-;;35851:24;35869:5;35851:24;:::i;:::-;35838:37;;35828:53;;;:::o;35887:154::-;35971:6;35966:3;35961;35948:30;36033:1;36024:6;36019:3;36015:16;36008:27;35938:103;;;:::o;36047:307::-;36115:1;36125:113;36139:6;36136:1;36133:13;36125:113;;;36224:1;36219:3;36215:11;36209:18;36205:1;36200:3;36196:11;36189:39;36161:2;36158:1;36154:10;36149:15;;36125:113;;;36256:6;36253:1;36250:13;36247:2;;;36336:1;36327:6;36322:3;36318:16;36311:27;36247:2;36096:258;;;;:::o;36360:320::-;;36441:1;36435:4;36431:12;36421:22;;36488:1;36482:4;36478:12;36509:18;36499:2;;36565:4;36557:6;36553:17;36543:27;;36499:2;36627;36619:6;36616:14;36596:18;36593:38;36590:2;;;36646:18;;:::i;:::-;36590:2;36411:269;;;;:::o;36686:233::-;;36748:24;36766:5;36748:24;:::i;:::-;36739:33;;36794:66;36787:5;36784:77;36781:2;;;36864:18;;:::i;:::-;36781:2;36911:1;36904:5;36900:13;36893:20;;36729:190;;;:::o;36925:176::-;;36974:20;36992:1;36974:20;:::i;:::-;36969:25;;37008:20;37026:1;37008:20;:::i;:::-;37003:25;;37047:1;37037:2;;37052:18;;:::i;:::-;37037:2;37093:1;37090;37086:9;37081:14;;36959:142;;;;:::o;37107:180::-;37155:77;37152:1;37145:88;37252:4;37249:1;37242:15;37276:4;37273:1;37266:15;37293:180;37341:77;37338:1;37331:88;37438:4;37435:1;37428:15;37462:4;37459:1;37452:15;37479:180;37527:77;37524:1;37517:88;37624:4;37621:1;37614:15;37648:4;37645:1;37638:15;37665:180;37713:77;37710:1;37703:88;37810:4;37807:1;37800:15;37834:4;37831:1;37824:15;37851:102;;37943:2;37939:7;37934:2;37927:5;37923:14;37919:28;37909:38;;37899:54;;;:::o;37959:122::-;38032:24;38050:5;38032:24;:::i;:::-;38025:5;38022:35;38012:2;;38071:1;38068;38061:12;38012:2;38002:79;:::o;38087:116::-;38157:21;38172:5;38157:21;:::i;:::-;38150:5;38147:32;38137:2;;38193:1;38190;38183:12;38137:2;38127:76;:::o;38209:120::-;38281:23;38298:5;38281:23;:::i;:::-;38274:5;38271:34;38261:2;;38319:1;38316;38309:12;38261:2;38251:78;:::o;38335:122::-;38408:24;38426:5;38408:24;:::i;:::-;38401:5;38398:35;38388:2;;38447:1;38444;38437:12;38388:2;38378:79;:::o

Swarm Source

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