ETH Price: $3,366.86 (+2.81%)
Gas: 5 Gwei

Token

Roughneck Rabbits (RNR)
 

Overview

Max Total Supply

376 RNR

Holders

153

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
treythawk.eth
Balance
2 RNR
0x63a6f6de59600f7a931782c5997da88c3caa2c46
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:
roughnecks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
==========================================================
 _____                   _       _   _           _        
|  __ \                 | |     | \ | |         | |       
| |__) |___  _   _  __ _| |__   |  \| | ___  ___| | _____ 
|  _  // _ \| | | |/ _` | '_ \  | . ` |/ _ \/ __| |/ / __|
| | \ \ (_) | |_| | (_| | | | | | |\  |  __/ (__|   <\__ \
|_|  \_\___/ \__,_|\__, |_| |_| |_| \_|\___|\___|_|\_\___/
                    __/ |                                 
                   |___/                                  
===========================================================

 *Submitted for verification at Etherscan.io on 2021-09-22
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-21
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
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);
}
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);
}
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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
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;
    }
}
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;
}
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);
}
pragma solidity ^0.8.0;


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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


pragma solidity ^0.8.0;


contract roughnecks is Ownable, ERC721 {
    
    uint constant tokenPrice = 0.05 ether;
    uint constant maxSupply = 10000;
    uint public reserved = 300;
    uint public totalSupply = 0;

    bool public public_sale_status = false;

    string public baseURI;
    
    uint public maxPerTransaction = 5;  //Max Limit for Sale
    uint public maxPerWallet = 5; //Max Limit
  
         
    constructor() ERC721("Roughneck Rabbits", "RNR "){}

   function buy(uint _count) public payable{
       require(public_sale_status == true, "Sale is Paused.");
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction 5");
         require(balanceOf(msg.sender) + _count<= maxPerWallet, "5 tokens per wallet allowed");
        require(totalSupply + _count <= maxSupply - reserved, "Not enough tokens left");
        require(msg.value >= tokenPrice * _count, "incorrect ether amount");
        
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }

    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(_wallets.length <= reserved, "not enough reserved tokens left");
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
        reserved = reserved - _wallets.length;
    }
    
    
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
  
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
      function withdraw() external onlyOwner {
         uint _balance = address(this).balance;
        payable(owner()).transfer(_balance * 44 / 100);//owner wallet
        payable(0xB1C895be0a639C6aF6802B3f6fc85a0D774973F2).transfer(_balance * 44 / 100); //owner
        payable(0xcef16Ef1CA3d6dDA38a642dB5e115D68FAFEE0b2).transfer(_balance * 1 / 100); //RNR Advertising 
        payable(0x5776AD2207fE2F920eDAc4ec723Ee90c0F9E03EA).transfer(_balance * 2 / 100); //zachologylol
        payable(0xc22CA93835152cC5E5019F59A5a43AddF491be9D).transfer(_balance * 2 / 100); //TimBaresko
        payable(0xec1A69AC84669527CDD3DF796ab31D6ff5b4174d).transfer(_balance * 2 / 100); //NewggGiveaways
        payable(0x162df70199ccB37719B081B4BCc77802DEd1b5E8).transfer(_balance * 2 / 100); //Elikrypt 
        payable(0xcF16aFC07951ea661E71a57cFf6348D0D747fA2A).transfer(_balance * 2 / 100); //OvoOnoMusic1 
        payable(0xd4da5B793140B205a75609E564F590F05580921D).transfer(_balance * 1 / 100); //SolanaApeMan 

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","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":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":"_wallets","type":"address[]"}],"name":"sendGifts","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":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261012c60075560006008556000600960006101000a81548160ff0219169083151502179055506005600b556005600c553480156200004157600080fd5b506040518060400160405280601181526020017f526f7567686e65636b20526162626974730000000000000000000000000000008152506040518060400160405280600481526020017f524e522000000000000000000000000000000000000000000000000000000000815250620000ce620000c26200010860201b60201c565b6200011060201b60201c565b8160019080519060200190620000e6929190620001d4565b508060029080519060200190620000ff929190620001d4565b505050620002e9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e29062000284565b90600052602060002090601f01602090048101928262000206576000855562000252565b82601f106200022157805160ff191683800117855562000252565b8280016001018555821562000252579182015b828111156200025157825182559160200191906001019062000234565b5b50905062000261919062000265565b5090565b5b808211156200028057600081600090555060010162000266565b5090565b600060028204905060018216806200029d57607f821691505b60208210811415620002b457620002b3620002ba565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613f4480620002f96000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec578063a22cb4651161008a578063d96a094a11610064578063d96a094a146105a0578063e985e9c5146105bc578063f2fde38b146105f9578063fe60d12c146106225761019c565b8063a22cb46514610511578063b88d4fde1461053a578063c87b56dd146105635761019c565b80638da5cb5b116100c65780638da5cb5b1461046757806395d89b411461049257806395ea5e67146104bd578063a0bcfc7f146104e85761019c565b806370a08231146103ea578063715018a6146104275780637c8255db1461043e5761019c565b806323b872dd11610159578063453c231011610133578063453c23101461032c5780634b980d67146103575780636352211e146103825780636c0360eb146103bf5761019c565b806323b872dd146102c35780633ccfd60b146102ec57806342842e0e146103035761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f5780631cef37e41461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b94565b61064d565b6040516101d59190613107565b60405180910390f35b3480156101ea57600080fd5b506101f361072f565b6040516102009190613122565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c37565b6107c1565b60405161023d91906130a0565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ade565b610846565b005b34801561027b57600080fd5b5061028461095e565b6040516102919190613444565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612b67565b610964565b005b3480156102cf57600080fd5b506102ea60048036038101906102e591906129c8565b6109fd565b005b3480156102f857600080fd5b50610301610a5d565b005b34801561030f57600080fd5b5061032a600480360381019061032591906129c8565b610edf565b005b34801561033857600080fd5b50610341610eff565b60405161034e9190613444565b60405180910390f35b34801561036357600080fd5b5061036c610f05565b6040516103799190613444565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612c37565b610f0b565b6040516103b691906130a0565b60405180910390f35b3480156103cb57600080fd5b506103d4610fbd565b6040516103e19190613122565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c919061295b565b61104b565b60405161041e9190613444565b60405180910390f35b34801561043357600080fd5b5061043c611103565b005b34801561044a57600080fd5b5061046560048036038101906104609190612b1e565b61118b565b005b34801561047357600080fd5b5061047c61132f565b60405161048991906130a0565b60405180910390f35b34801561049e57600080fd5b506104a7611358565b6040516104b49190613122565b60405180910390f35b3480156104c957600080fd5b506104d26113ea565b6040516104df9190613107565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612bee565b6113fd565b005b34801561051d57600080fd5b5061053860048036038101906105339190612a9e565b611493565b005b34801561054657600080fd5b50610561600480360381019061055c9190612a1b565b611614565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612c37565b611676565b6040516105979190613122565b60405180910390f35b6105ba60048036038101906105b59190612c37565b61171d565b005b3480156105c857600080fd5b506105e360048036038101906105de9190612988565b611965565b6040516105f09190613107565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b919061295b565b6119f9565b005b34801561062e57600080fd5b50610637611af1565b6040516106449190613444565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610728575061072782611af7565b5b9050919050565b60606001805461073e90613720565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90613720565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b60006107cc82611b61565b61080b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610802906132c4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085182610f0b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613364565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e1611bcd565b73ffffffffffffffffffffffffffffffffffffffff161480610910575061090f8161090a611bcd565b611965565b5b61094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613224565b60405180910390fd5b6109598383611bd5565b505050565b60085481565b61096c611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661098a61132f565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906132e4565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b610a0e610a08611bcd565b82611c8e565b610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490613384565b60405180910390fd5b610a58838383611d6c565b505050565b610a65611bcd565b73ffffffffffffffffffffffffffffffffffffffff16610a8361132f565b73ffffffffffffffffffffffffffffffffffffffff1614610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad0906132e4565b60405180910390fd5b6000479050610ae661132f565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064602c84610b0e91906135dc565b610b1891906135ab565b9081150290604051600060405180830381858888f19350505050158015610b43573d6000803e3d6000fd5b5073b1c895be0a639c6af6802b3f6fc85a0d774973f273ffffffffffffffffffffffffffffffffffffffff166108fc6064602c84610b8191906135dc565b610b8b91906135ab565b9081150290604051600060405180830381858888f19350505050158015610bb6573d6000803e3d6000fd5b5073cef16ef1ca3d6dda38a642db5e115d68fafee0b273ffffffffffffffffffffffffffffffffffffffff166108fc6064600184610bf491906135dc565b610bfe91906135ab565b9081150290604051600060405180830381858888f19350505050158015610c29573d6000803e3d6000fd5b50735776ad2207fe2f920edac4ec723ee90c0f9e03ea73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610c6791906135dc565b610c7191906135ab565b9081150290604051600060405180830381858888f19350505050158015610c9c573d6000803e3d6000fd5b5073c22ca93835152cc5e5019f59a5a43addf491be9d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610cda91906135dc565b610ce491906135ab565b9081150290604051600060405180830381858888f19350505050158015610d0f573d6000803e3d6000fd5b5073ec1a69ac84669527cdd3df796ab31d6ff5b4174d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610d4d91906135dc565b610d5791906135ab565b9081150290604051600060405180830381858888f19350505050158015610d82573d6000803e3d6000fd5b5073162df70199ccb37719b081b4bcc77802ded1b5e873ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610dc091906135dc565b610dca91906135ab565b9081150290604051600060405180830381858888f19350505050158015610df5573d6000803e3d6000fd5b5073cf16afc07951ea661e71a57cff6348d0d747fa2a73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610e3391906135dc565b610e3d91906135ab565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b5073d4da5b793140b205a75609e564f590f05580921d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600184610ea691906135dc565b610eb091906135ab565b9081150290604051600060405180830381858888f19350505050158015610edb573d6000803e3d6000fd5b5050565b610efa83838360405180602001604052806000815250611614565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613264565b60405180910390fd5b80915050919050565b600a8054610fca90613720565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff690613720565b80156110435780601f1061101857610100808354040283529160200191611043565b820191906000526020600020905b81548152906001019060200180831161102657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613244565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110b611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661112961132f565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906132e4565b60405180910390fd5b6111896000611fc8565b565b611193611bcd565b73ffffffffffffffffffffffffffffffffffffffff166111b161132f565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906132e4565b60405180910390fd5b6007548151111561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124490613304565b60405180910390fd5b612710815160085461125f9190613555565b11156112a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611297906133e4565b60405180910390fd5b60005b81518110156112fc576112e98282815181106112c2576112c161388a565b5b60200260200101518260016008546112da9190613555565b6112e49190613555565b61208c565b80806112f490613783565b9150506112a3565b508051600860008282546113109190613555565b9250508190555080516007546113269190613636565b60078190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461136790613720565b80601f016020809104026020016040519081016040528092919081815260200182805461139390613720565b80156113e05780601f106113b5576101008083540402835291602001916113e0565b820191906000526020600020905b8154815290600101906020018083116113c357829003601f168201915b5050505050905090565b600960009054906101000a900460ff1681565b611405611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661142361132f565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906132e4565b60405180910390fd5b80600a908051906020019061148f9291906126d1565b5050565b61149b611bcd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906131c4565b60405180910390fd5b8060066000611516611bcd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115c3611bcd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116089190613107565b60405180910390a35050565b61162561161f611bcd565b83611c8e565b611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90613384565b60405180910390fd5b611670848484846120aa565b50505050565b606061168182611b61565b6116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613344565b60405180910390fd5b60006116ca612106565b905060008151116116ea5760405180602001604052806000815250611715565b806116f484612198565b60405160200161170592919061307c565b6040516020818303038152906040525b915050919050565b60011515600960009054906101000a900460ff16151514611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613404565b60405180910390fd5b600081116117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad906133a4565b60405180910390fd5b600b548111156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613424565b60405180910390fd5b600c54816118083361104b565b6118129190613555565b1115611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906133c4565b60405180910390fd5b6007546127106118639190613636565b816008546118719190613555565b11156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613284565b60405180910390fd5b8066b1a2bc2ec500006118c591906135dc565b341015611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613204565b60405180910390fd5b60005b8181101561194857611935338260016008546119269190613555565b6119309190613555565b61208c565b808061194090613783565b91505061190a565b50806008600082825461195b9190613555565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a01611bcd565b73ffffffffffffffffffffffffffffffffffffffff16611a1f61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c906132e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613164565b60405180910390fd5b611aee81611fc8565b50565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c4883610f0b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c9982611b61565b611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf906131e4565b60405180910390fd5b6000611ce383610f0b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d5257508373ffffffffffffffffffffffffffffffffffffffff16611d3a846107c1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d635750611d628185611965565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8c82610f0b565b73ffffffffffffffffffffffffffffffffffffffff1614611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990613324565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e49906131a4565b60405180910390fd5b611e5d8383836122f9565b611e68600082611bd5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb89190613636565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0f9190613555565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120a68282604051806020016040528060008152506122fe565b5050565b6120b5848484611d6c565b6120c184848484612359565b612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790613144565b60405180910390fd5b50505050565b6060600a805461211590613720565b80601f016020809104026020016040519081016040528092919081815260200182805461214190613720565b801561218e5780601f106121635761010080835404028352916020019161218e565b820191906000526020600020905b81548152906001019060200180831161217157829003601f168201915b5050505050905090565b606060008214156121e0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122f4565b600082905060005b600082146122125780806121fb90613783565b915050600a8261220b91906135ab565b91506121e8565b60008167ffffffffffffffff81111561222e5761222d6138b9565b5b6040519080825280601f01601f1916602001820160405280156122605781602001600182028036833780820191505090505b5090505b600085146122ed576001826122799190613636565b9150600a8561228891906137cc565b60306122949190613555565b60f81b8183815181106122aa576122a961388a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122e691906135ab565b9450612264565b8093505050505b919050565b505050565b61230883836124f0565b6123156000848484612359565b612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613144565b60405180910390fd5b505050565b600061237a8473ffffffffffffffffffffffffffffffffffffffff166126be565b156124e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123a3611bcd565b8786866040518563ffffffff1660e01b81526004016123c594939291906130bb565b602060405180830381600087803b1580156123df57600080fd5b505af192505050801561241057506040513d601f19601f8201168201806040525081019061240d9190612bc1565b60015b612493573d8060008114612440576040519150601f19603f3d011682016040523d82523d6000602084013e612445565b606091505b5060008151141561248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248290613144565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124e8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612557906132a4565b60405180910390fd5b61256981611b61565b156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090613184565b60405180910390fd5b6125b5600083836122f9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126059190613555565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546126dd90613720565b90600052602060002090601f0160209004810192826126ff5760008555612746565b82601f1061271857805160ff1916838001178555612746565b82800160010185558215612746579182015b8281111561274557825182559160200191906001019061272a565b5b5090506127539190612757565b5090565b5b80821115612770576000816000905550600101612758565b5090565b600061278761278284613484565b61345f565b905080838252602082019050828560208602820111156127aa576127a96138ed565b5b60005b858110156127da57816127c08882612868565b8452602084019350602083019250506001810190506127ad565b5050509392505050565b60006127f76127f2846134b0565b61345f565b905082815260208101848484011115612813576128126138f2565b5b61281e8482856136de565b509392505050565b6000612839612834846134e1565b61345f565b905082815260208101848484011115612855576128546138f2565b5b6128608482856136de565b509392505050565b60008135905061287781613eb2565b92915050565b600082601f830112612892576128916138e8565b5b81356128a2848260208601612774565b91505092915050565b6000813590506128ba81613ec9565b92915050565b6000813590506128cf81613ee0565b92915050565b6000815190506128e481613ee0565b92915050565b600082601f8301126128ff576128fe6138e8565b5b813561290f8482602086016127e4565b91505092915050565b600082601f83011261292d5761292c6138e8565b5b813561293d848260208601612826565b91505092915050565b60008135905061295581613ef7565b92915050565b600060208284031215612971576129706138fc565b5b600061297f84828501612868565b91505092915050565b6000806040838503121561299f5761299e6138fc565b5b60006129ad85828601612868565b92505060206129be85828601612868565b9150509250929050565b6000806000606084860312156129e1576129e06138fc565b5b60006129ef86828701612868565b9350506020612a0086828701612868565b9250506040612a1186828701612946565b9150509250925092565b60008060008060808587031215612a3557612a346138fc565b5b6000612a4387828801612868565b9450506020612a5487828801612868565b9350506040612a6587828801612946565b925050606085013567ffffffffffffffff811115612a8657612a856138f7565b5b612a92878288016128ea565b91505092959194509250565b60008060408385031215612ab557612ab46138fc565b5b6000612ac385828601612868565b9250506020612ad4858286016128ab565b9150509250929050565b60008060408385031215612af557612af46138fc565b5b6000612b0385828601612868565b9250506020612b1485828601612946565b9150509250929050565b600060208284031215612b3457612b336138fc565b5b600082013567ffffffffffffffff811115612b5257612b516138f7565b5b612b5e8482850161287d565b91505092915050565b600060208284031215612b7d57612b7c6138fc565b5b6000612b8b848285016128ab565b91505092915050565b600060208284031215612baa57612ba96138fc565b5b6000612bb8848285016128c0565b91505092915050565b600060208284031215612bd757612bd66138fc565b5b6000612be5848285016128d5565b91505092915050565b600060208284031215612c0457612c036138fc565b5b600082013567ffffffffffffffff811115612c2257612c216138f7565b5b612c2e84828501612918565b91505092915050565b600060208284031215612c4d57612c4c6138fc565b5b6000612c5b84828501612946565b91505092915050565b612c6d8161366a565b82525050565b612c7c8161367c565b82525050565b6000612c8d82613512565b612c978185613528565b9350612ca78185602086016136ed565b612cb081613901565b840191505092915050565b6000612cc68261351d565b612cd08185613539565b9350612ce08185602086016136ed565b612ce981613901565b840191505092915050565b6000612cff8261351d565b612d09818561354a565b9350612d198185602086016136ed565b80840191505092915050565b6000612d32603283613539565b9150612d3d82613912565b604082019050919050565b6000612d55602683613539565b9150612d6082613961565b604082019050919050565b6000612d78601c83613539565b9150612d83826139b0565b602082019050919050565b6000612d9b602483613539565b9150612da6826139d9565b604082019050919050565b6000612dbe601983613539565b9150612dc982613a28565b602082019050919050565b6000612de1602c83613539565b9150612dec82613a51565b604082019050919050565b6000612e04601683613539565b9150612e0f82613aa0565b602082019050919050565b6000612e27603883613539565b9150612e3282613ac9565b604082019050919050565b6000612e4a602a83613539565b9150612e5582613b18565b604082019050919050565b6000612e6d602983613539565b9150612e7882613b67565b604082019050919050565b6000612e90601683613539565b9150612e9b82613bb6565b602082019050919050565b6000612eb3602083613539565b9150612ebe82613bdf565b602082019050919050565b6000612ed6602c83613539565b9150612ee182613c08565b604082019050919050565b6000612ef9602083613539565b9150612f0482613c57565b602082019050919050565b6000612f1c601f83613539565b9150612f2782613c80565b602082019050919050565b6000612f3f602983613539565b9150612f4a82613ca9565b604082019050919050565b6000612f62602f83613539565b9150612f6d82613cf8565b604082019050919050565b6000612f85602183613539565b9150612f9082613d47565b604082019050919050565b6000612fa8603183613539565b9150612fb382613d96565b604082019050919050565b6000612fcb601783613539565b9150612fd682613de5565b602082019050919050565b6000612fee601b83613539565b9150612ff982613e0e565b602082019050919050565b6000613011601683613539565b915061301c82613e37565b602082019050919050565b6000613034600f83613539565b915061303f82613e60565b602082019050919050565b6000613057601583613539565b915061306282613e89565b602082019050919050565b613076816136d4565b82525050565b60006130888285612cf4565b91506130948284612cf4565b91508190509392505050565b60006020820190506130b56000830184612c64565b92915050565b60006080820190506130d06000830187612c64565b6130dd6020830186612c64565b6130ea604083018561306d565b81810360608301526130fc8184612c82565b905095945050505050565b600060208201905061311c6000830184612c73565b92915050565b6000602082019050818103600083015261313c8184612cbb565b905092915050565b6000602082019050818103600083015261315d81612d25565b9050919050565b6000602082019050818103600083015261317d81612d48565b9050919050565b6000602082019050818103600083015261319d81612d6b565b9050919050565b600060208201905081810360008301526131bd81612d8e565b9050919050565b600060208201905081810360008301526131dd81612db1565b9050919050565b600060208201905081810360008301526131fd81612dd4565b9050919050565b6000602082019050818103600083015261321d81612df7565b9050919050565b6000602082019050818103600083015261323d81612e1a565b9050919050565b6000602082019050818103600083015261325d81612e3d565b9050919050565b6000602082019050818103600083015261327d81612e60565b9050919050565b6000602082019050818103600083015261329d81612e83565b9050919050565b600060208201905081810360008301526132bd81612ea6565b9050919050565b600060208201905081810360008301526132dd81612ec9565b9050919050565b600060208201905081810360008301526132fd81612eec565b9050919050565b6000602082019050818103600083015261331d81612f0f565b9050919050565b6000602082019050818103600083015261333d81612f32565b9050919050565b6000602082019050818103600083015261335d81612f55565b9050919050565b6000602082019050818103600083015261337d81612f78565b9050919050565b6000602082019050818103600083015261339d81612f9b565b9050919050565b600060208201905081810360008301526133bd81612fbe565b9050919050565b600060208201905081810360008301526133dd81612fe1565b9050919050565b600060208201905081810360008301526133fd81613004565b9050919050565b6000602082019050818103600083015261341d81613027565b9050919050565b6000602082019050818103600083015261343d8161304a565b9050919050565b6000602082019050613459600083018461306d565b92915050565b600061346961347a565b90506134758282613752565b919050565b6000604051905090565b600067ffffffffffffffff82111561349f5761349e6138b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134cb576134ca6138b9565b5b6134d482613901565b9050602081019050919050565b600067ffffffffffffffff8211156134fc576134fb6138b9565b5b61350582613901565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613560826136d4565b915061356b836136d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135a05761359f6137fd565b5b828201905092915050565b60006135b6826136d4565b91506135c1836136d4565b9250826135d1576135d061382c565b5b828204905092915050565b60006135e7826136d4565b91506135f2836136d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362b5761362a6137fd565b5b828202905092915050565b6000613641826136d4565b915061364c836136d4565b92508282101561365f5761365e6137fd565b5b828203905092915050565b6000613675826136b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561370b5780820151818401526020810190506136f0565b8381111561371a576000848401525b50505050565b6000600282049050600182168061373857607f821691505b6020821081141561374c5761374b61385b565b5b50919050565b61375b82613901565b810181811067ffffffffffffffff8211171561377a576137796138b9565b5b80604052505050565b600061378e826136d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137c1576137c06137fd565b5b600182019050919050565b60006137d7826136d4565b91506137e2836136d4565b9250826137f2576137f161382c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420656e6f75676820726573657276656420746f6b656e73206c65667400600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f3520746f6b656e73207065722077616c6c657420616c6c6f7765640000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20350000000000000000000000600082015250565b613ebb8161366a565b8114613ec657600080fd5b50565b613ed28161367c565b8114613edd57600080fd5b50565b613ee981613688565b8114613ef457600080fd5b50565b613f00816136d4565b8114613f0b57600080fd5b5056fea2646970667358221220dc0db8996d19305e0d57ea78e7301a810eb48c1dd4f8b493487196f36852da0764736f6c63430008070033

Deployed Bytecode

0x60806040526004361061019c5760003560e01c806370a08231116100ec578063a22cb4651161008a578063d96a094a11610064578063d96a094a146105a0578063e985e9c5146105bc578063f2fde38b146105f9578063fe60d12c146106225761019c565b8063a22cb46514610511578063b88d4fde1461053a578063c87b56dd146105635761019c565b80638da5cb5b116100c65780638da5cb5b1461046757806395d89b411461049257806395ea5e67146104bd578063a0bcfc7f146104e85761019c565b806370a08231146103ea578063715018a6146104275780637c8255db1461043e5761019c565b806323b872dd11610159578063453c231011610133578063453c23101461032c5780634b980d67146103575780636352211e146103825780636c0360eb146103bf5761019c565b806323b872dd146102c35780633ccfd60b146102ec57806342842e0e146103035761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f5780631cef37e41461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b94565b61064d565b6040516101d59190613107565b60405180910390f35b3480156101ea57600080fd5b506101f361072f565b6040516102009190613122565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c37565b6107c1565b60405161023d91906130a0565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612ade565b610846565b005b34801561027b57600080fd5b5061028461095e565b6040516102919190613444565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612b67565b610964565b005b3480156102cf57600080fd5b506102ea60048036038101906102e591906129c8565b6109fd565b005b3480156102f857600080fd5b50610301610a5d565b005b34801561030f57600080fd5b5061032a600480360381019061032591906129c8565b610edf565b005b34801561033857600080fd5b50610341610eff565b60405161034e9190613444565b60405180910390f35b34801561036357600080fd5b5061036c610f05565b6040516103799190613444565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612c37565b610f0b565b6040516103b691906130a0565b60405180910390f35b3480156103cb57600080fd5b506103d4610fbd565b6040516103e19190613122565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c919061295b565b61104b565b60405161041e9190613444565b60405180910390f35b34801561043357600080fd5b5061043c611103565b005b34801561044a57600080fd5b5061046560048036038101906104609190612b1e565b61118b565b005b34801561047357600080fd5b5061047c61132f565b60405161048991906130a0565b60405180910390f35b34801561049e57600080fd5b506104a7611358565b6040516104b49190613122565b60405180910390f35b3480156104c957600080fd5b506104d26113ea565b6040516104df9190613107565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190612bee565b6113fd565b005b34801561051d57600080fd5b5061053860048036038101906105339190612a9e565b611493565b005b34801561054657600080fd5b50610561600480360381019061055c9190612a1b565b611614565b005b34801561056f57600080fd5b5061058a60048036038101906105859190612c37565b611676565b6040516105979190613122565b60405180910390f35b6105ba60048036038101906105b59190612c37565b61171d565b005b3480156105c857600080fd5b506105e360048036038101906105de9190612988565b611965565b6040516105f09190613107565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b919061295b565b6119f9565b005b34801561062e57600080fd5b50610637611af1565b6040516106449190613444565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610728575061072782611af7565b5b9050919050565b60606001805461073e90613720565b80601f016020809104026020016040519081016040528092919081815260200182805461076a90613720565b80156107b75780601f1061078c576101008083540402835291602001916107b7565b820191906000526020600020905b81548152906001019060200180831161079a57829003601f168201915b5050505050905090565b60006107cc82611b61565b61080b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610802906132c4565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085182610f0b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990613364565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e1611bcd565b73ffffffffffffffffffffffffffffffffffffffff161480610910575061090f8161090a611bcd565b611965565b5b61094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613224565b60405180910390fd5b6109598383611bd5565b505050565b60085481565b61096c611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661098a61132f565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906132e4565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b610a0e610a08611bcd565b82611c8e565b610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490613384565b60405180910390fd5b610a58838383611d6c565b505050565b610a65611bcd565b73ffffffffffffffffffffffffffffffffffffffff16610a8361132f565b73ffffffffffffffffffffffffffffffffffffffff1614610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad0906132e4565b60405180910390fd5b6000479050610ae661132f565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064602c84610b0e91906135dc565b610b1891906135ab565b9081150290604051600060405180830381858888f19350505050158015610b43573d6000803e3d6000fd5b5073b1c895be0a639c6af6802b3f6fc85a0d774973f273ffffffffffffffffffffffffffffffffffffffff166108fc6064602c84610b8191906135dc565b610b8b91906135ab565b9081150290604051600060405180830381858888f19350505050158015610bb6573d6000803e3d6000fd5b5073cef16ef1ca3d6dda38a642db5e115d68fafee0b273ffffffffffffffffffffffffffffffffffffffff166108fc6064600184610bf491906135dc565b610bfe91906135ab565b9081150290604051600060405180830381858888f19350505050158015610c29573d6000803e3d6000fd5b50735776ad2207fe2f920edac4ec723ee90c0f9e03ea73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610c6791906135dc565b610c7191906135ab565b9081150290604051600060405180830381858888f19350505050158015610c9c573d6000803e3d6000fd5b5073c22ca93835152cc5e5019f59a5a43addf491be9d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610cda91906135dc565b610ce491906135ab565b9081150290604051600060405180830381858888f19350505050158015610d0f573d6000803e3d6000fd5b5073ec1a69ac84669527cdd3df796ab31d6ff5b4174d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610d4d91906135dc565b610d5791906135ab565b9081150290604051600060405180830381858888f19350505050158015610d82573d6000803e3d6000fd5b5073162df70199ccb37719b081b4bcc77802ded1b5e873ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610dc091906135dc565b610dca91906135ab565b9081150290604051600060405180830381858888f19350505050158015610df5573d6000803e3d6000fd5b5073cf16afc07951ea661e71a57cff6348d0d747fa2a73ffffffffffffffffffffffffffffffffffffffff166108fc6064600284610e3391906135dc565b610e3d91906135ab565b9081150290604051600060405180830381858888f19350505050158015610e68573d6000803e3d6000fd5b5073d4da5b793140b205a75609e564f590f05580921d73ffffffffffffffffffffffffffffffffffffffff166108fc6064600184610ea691906135dc565b610eb091906135ab565b9081150290604051600060405180830381858888f19350505050158015610edb573d6000803e3d6000fd5b5050565b610efa83838360405180602001604052806000815250611614565b505050565b600c5481565b600b5481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613264565b60405180910390fd5b80915050919050565b600a8054610fca90613720565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff690613720565b80156110435780601f1061101857610100808354040283529160200191611043565b820191906000526020600020905b81548152906001019060200180831161102657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613244565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110b611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661112961132f565b73ffffffffffffffffffffffffffffffffffffffff161461117f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611176906132e4565b60405180910390fd5b6111896000611fc8565b565b611193611bcd565b73ffffffffffffffffffffffffffffffffffffffff166111b161132f565b73ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe906132e4565b60405180910390fd5b6007548151111561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124490613304565b60405180910390fd5b612710815160085461125f9190613555565b11156112a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611297906133e4565b60405180910390fd5b60005b81518110156112fc576112e98282815181106112c2576112c161388a565b5b60200260200101518260016008546112da9190613555565b6112e49190613555565b61208c565b80806112f490613783565b9150506112a3565b508051600860008282546113109190613555565b9250508190555080516007546113269190613636565b60078190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461136790613720565b80601f016020809104026020016040519081016040528092919081815260200182805461139390613720565b80156113e05780601f106113b5576101008083540402835291602001916113e0565b820191906000526020600020905b8154815290600101906020018083116113c357829003601f168201915b5050505050905090565b600960009054906101000a900460ff1681565b611405611bcd565b73ffffffffffffffffffffffffffffffffffffffff1661142361132f565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611470906132e4565b60405180910390fd5b80600a908051906020019061148f9291906126d1565b5050565b61149b611bcd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906131c4565b60405180910390fd5b8060066000611516611bcd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115c3611bcd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116089190613107565b60405180910390a35050565b61162561161f611bcd565b83611c8e565b611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90613384565b60405180910390fd5b611670848484846120aa565b50505050565b606061168182611b61565b6116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613344565b60405180910390fd5b60006116ca612106565b905060008151116116ea5760405180602001604052806000815250611715565b806116f484612198565b60405160200161170592919061307c565b6040516020818303038152906040525b915050919050565b60011515600960009054906101000a900460ff16151514611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613404565b60405180910390fd5b600081116117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad906133a4565b60405180910390fd5b600b548111156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613424565b60405180910390fd5b600c54816118083361104b565b6118129190613555565b1115611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906133c4565b60405180910390fd5b6007546127106118639190613636565b816008546118719190613555565b11156118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990613284565b60405180910390fd5b8066b1a2bc2ec500006118c591906135dc565b341015611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613204565b60405180910390fd5b60005b8181101561194857611935338260016008546119269190613555565b6119309190613555565b61208c565b808061194090613783565b91505061190a565b50806008600082825461195b9190613555565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a01611bcd565b73ffffffffffffffffffffffffffffffffffffffff16611a1f61132f565b73ffffffffffffffffffffffffffffffffffffffff1614611a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6c906132e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613164565b60405180910390fd5b611aee81611fc8565b50565b60075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c4883610f0b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c9982611b61565b611cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccf906131e4565b60405180910390fd5b6000611ce383610f0b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d5257508373ffffffffffffffffffffffffffffffffffffffff16611d3a846107c1565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d635750611d628185611965565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8c82610f0b565b73ffffffffffffffffffffffffffffffffffffffff1614611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd990613324565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e49906131a4565b60405180910390fd5b611e5d8383836122f9565b611e68600082611bd5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb89190613636565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0f9190613555565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120a68282604051806020016040528060008152506122fe565b5050565b6120b5848484611d6c565b6120c184848484612359565b612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790613144565b60405180910390fd5b50505050565b6060600a805461211590613720565b80601f016020809104026020016040519081016040528092919081815260200182805461214190613720565b801561218e5780601f106121635761010080835404028352916020019161218e565b820191906000526020600020905b81548152906001019060200180831161217157829003601f168201915b5050505050905090565b606060008214156121e0576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122f4565b600082905060005b600082146122125780806121fb90613783565b915050600a8261220b91906135ab565b91506121e8565b60008167ffffffffffffffff81111561222e5761222d6138b9565b5b6040519080825280601f01601f1916602001820160405280156122605781602001600182028036833780820191505090505b5090505b600085146122ed576001826122799190613636565b9150600a8561228891906137cc565b60306122949190613555565b60f81b8183815181106122aa576122a961388a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122e691906135ab565b9450612264565b8093505050505b919050565b505050565b61230883836124f0565b6123156000848484612359565b612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b90613144565b60405180910390fd5b505050565b600061237a8473ffffffffffffffffffffffffffffffffffffffff166126be565b156124e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123a3611bcd565b8786866040518563ffffffff1660e01b81526004016123c594939291906130bb565b602060405180830381600087803b1580156123df57600080fd5b505af192505050801561241057506040513d601f19601f8201168201806040525081019061240d9190612bc1565b60015b612493573d8060008114612440576040519150601f19603f3d011682016040523d82523d6000602084013e612445565b606091505b5060008151141561248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248290613144565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124e8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612557906132a4565b60405180910390fd5b61256981611b61565b156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090613184565b60405180910390fd5b6125b5600083836122f9565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126059190613555565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546126dd90613720565b90600052602060002090601f0160209004810192826126ff5760008555612746565b82601f1061271857805160ff1916838001178555612746565b82800160010185558215612746579182015b8281111561274557825182559160200191906001019061272a565b5b5090506127539190612757565b5090565b5b80821115612770576000816000905550600101612758565b5090565b600061278761278284613484565b61345f565b905080838252602082019050828560208602820111156127aa576127a96138ed565b5b60005b858110156127da57816127c08882612868565b8452602084019350602083019250506001810190506127ad565b5050509392505050565b60006127f76127f2846134b0565b61345f565b905082815260208101848484011115612813576128126138f2565b5b61281e8482856136de565b509392505050565b6000612839612834846134e1565b61345f565b905082815260208101848484011115612855576128546138f2565b5b6128608482856136de565b509392505050565b60008135905061287781613eb2565b92915050565b600082601f830112612892576128916138e8565b5b81356128a2848260208601612774565b91505092915050565b6000813590506128ba81613ec9565b92915050565b6000813590506128cf81613ee0565b92915050565b6000815190506128e481613ee0565b92915050565b600082601f8301126128ff576128fe6138e8565b5b813561290f8482602086016127e4565b91505092915050565b600082601f83011261292d5761292c6138e8565b5b813561293d848260208601612826565b91505092915050565b60008135905061295581613ef7565b92915050565b600060208284031215612971576129706138fc565b5b600061297f84828501612868565b91505092915050565b6000806040838503121561299f5761299e6138fc565b5b60006129ad85828601612868565b92505060206129be85828601612868565b9150509250929050565b6000806000606084860312156129e1576129e06138fc565b5b60006129ef86828701612868565b9350506020612a0086828701612868565b9250506040612a1186828701612946565b9150509250925092565b60008060008060808587031215612a3557612a346138fc565b5b6000612a4387828801612868565b9450506020612a5487828801612868565b9350506040612a6587828801612946565b925050606085013567ffffffffffffffff811115612a8657612a856138f7565b5b612a92878288016128ea565b91505092959194509250565b60008060408385031215612ab557612ab46138fc565b5b6000612ac385828601612868565b9250506020612ad4858286016128ab565b9150509250929050565b60008060408385031215612af557612af46138fc565b5b6000612b0385828601612868565b9250506020612b1485828601612946565b9150509250929050565b600060208284031215612b3457612b336138fc565b5b600082013567ffffffffffffffff811115612b5257612b516138f7565b5b612b5e8482850161287d565b91505092915050565b600060208284031215612b7d57612b7c6138fc565b5b6000612b8b848285016128ab565b91505092915050565b600060208284031215612baa57612ba96138fc565b5b6000612bb8848285016128c0565b91505092915050565b600060208284031215612bd757612bd66138fc565b5b6000612be5848285016128d5565b91505092915050565b600060208284031215612c0457612c036138fc565b5b600082013567ffffffffffffffff811115612c2257612c216138f7565b5b612c2e84828501612918565b91505092915050565b600060208284031215612c4d57612c4c6138fc565b5b6000612c5b84828501612946565b91505092915050565b612c6d8161366a565b82525050565b612c7c8161367c565b82525050565b6000612c8d82613512565b612c978185613528565b9350612ca78185602086016136ed565b612cb081613901565b840191505092915050565b6000612cc68261351d565b612cd08185613539565b9350612ce08185602086016136ed565b612ce981613901565b840191505092915050565b6000612cff8261351d565b612d09818561354a565b9350612d198185602086016136ed565b80840191505092915050565b6000612d32603283613539565b9150612d3d82613912565b604082019050919050565b6000612d55602683613539565b9150612d6082613961565b604082019050919050565b6000612d78601c83613539565b9150612d83826139b0565b602082019050919050565b6000612d9b602483613539565b9150612da6826139d9565b604082019050919050565b6000612dbe601983613539565b9150612dc982613a28565b602082019050919050565b6000612de1602c83613539565b9150612dec82613a51565b604082019050919050565b6000612e04601683613539565b9150612e0f82613aa0565b602082019050919050565b6000612e27603883613539565b9150612e3282613ac9565b604082019050919050565b6000612e4a602a83613539565b9150612e5582613b18565b604082019050919050565b6000612e6d602983613539565b9150612e7882613b67565b604082019050919050565b6000612e90601683613539565b9150612e9b82613bb6565b602082019050919050565b6000612eb3602083613539565b9150612ebe82613bdf565b602082019050919050565b6000612ed6602c83613539565b9150612ee182613c08565b604082019050919050565b6000612ef9602083613539565b9150612f0482613c57565b602082019050919050565b6000612f1c601f83613539565b9150612f2782613c80565b602082019050919050565b6000612f3f602983613539565b9150612f4a82613ca9565b604082019050919050565b6000612f62602f83613539565b9150612f6d82613cf8565b604082019050919050565b6000612f85602183613539565b9150612f9082613d47565b604082019050919050565b6000612fa8603183613539565b9150612fb382613d96565b604082019050919050565b6000612fcb601783613539565b9150612fd682613de5565b602082019050919050565b6000612fee601b83613539565b9150612ff982613e0e565b602082019050919050565b6000613011601683613539565b915061301c82613e37565b602082019050919050565b6000613034600f83613539565b915061303f82613e60565b602082019050919050565b6000613057601583613539565b915061306282613e89565b602082019050919050565b613076816136d4565b82525050565b60006130888285612cf4565b91506130948284612cf4565b91508190509392505050565b60006020820190506130b56000830184612c64565b92915050565b60006080820190506130d06000830187612c64565b6130dd6020830186612c64565b6130ea604083018561306d565b81810360608301526130fc8184612c82565b905095945050505050565b600060208201905061311c6000830184612c73565b92915050565b6000602082019050818103600083015261313c8184612cbb565b905092915050565b6000602082019050818103600083015261315d81612d25565b9050919050565b6000602082019050818103600083015261317d81612d48565b9050919050565b6000602082019050818103600083015261319d81612d6b565b9050919050565b600060208201905081810360008301526131bd81612d8e565b9050919050565b600060208201905081810360008301526131dd81612db1565b9050919050565b600060208201905081810360008301526131fd81612dd4565b9050919050565b6000602082019050818103600083015261321d81612df7565b9050919050565b6000602082019050818103600083015261323d81612e1a565b9050919050565b6000602082019050818103600083015261325d81612e3d565b9050919050565b6000602082019050818103600083015261327d81612e60565b9050919050565b6000602082019050818103600083015261329d81612e83565b9050919050565b600060208201905081810360008301526132bd81612ea6565b9050919050565b600060208201905081810360008301526132dd81612ec9565b9050919050565b600060208201905081810360008301526132fd81612eec565b9050919050565b6000602082019050818103600083015261331d81612f0f565b9050919050565b6000602082019050818103600083015261333d81612f32565b9050919050565b6000602082019050818103600083015261335d81612f55565b9050919050565b6000602082019050818103600083015261337d81612f78565b9050919050565b6000602082019050818103600083015261339d81612f9b565b9050919050565b600060208201905081810360008301526133bd81612fbe565b9050919050565b600060208201905081810360008301526133dd81612fe1565b9050919050565b600060208201905081810360008301526133fd81613004565b9050919050565b6000602082019050818103600083015261341d81613027565b9050919050565b6000602082019050818103600083015261343d8161304a565b9050919050565b6000602082019050613459600083018461306d565b92915050565b600061346961347a565b90506134758282613752565b919050565b6000604051905090565b600067ffffffffffffffff82111561349f5761349e6138b9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134cb576134ca6138b9565b5b6134d482613901565b9050602081019050919050565b600067ffffffffffffffff8211156134fc576134fb6138b9565b5b61350582613901565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613560826136d4565b915061356b836136d4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135a05761359f6137fd565b5b828201905092915050565b60006135b6826136d4565b91506135c1836136d4565b9250826135d1576135d061382c565b5b828204905092915050565b60006135e7826136d4565b91506135f2836136d4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362b5761362a6137fd565b5b828202905092915050565b6000613641826136d4565b915061364c836136d4565b92508282101561365f5761365e6137fd565b5b828203905092915050565b6000613675826136b4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561370b5780820151818401526020810190506136f0565b8381111561371a576000848401525b50505050565b6000600282049050600182168061373857607f821691505b6020821081141561374c5761374b61385b565b5b50919050565b61375b82613901565b810181811067ffffffffffffffff8211171561377a576137796138b9565b5b80604052505050565b600061378e826136d4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137c1576137c06137fd565b5b600182019050919050565b60006137d7826136d4565b91506137e2836136d4565b9250826137f2576137f161382c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f7420656e6f75676820726573657276656420746f6b656e73206c65667400600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f3520746f6b656e73207065722077616c6c657420616c6c6f7765640000000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20350000000000000000000000600082015250565b613ebb8161366a565b8114613ec657600080fd5b50565b613ed28161367c565b8114613edd57600080fd5b50565b613ee981613688565b8114613ef457600080fd5b50565b613f00816136d4565b8114613f0b57600080fd5b5056fea2646970667358221220dc0db8996d19305e0d57ea78e7301a810eb48c1dd4f8b493487196f36852da0764736f6c63430008070033

Deployed Bytecode Sourcemap

35165:2925:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23011:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23956:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25515:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25038:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35332:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36844:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26405:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37073:1014;;;;;;;;;;;;;:::i;:::-;;26815:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35511:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35449:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23650:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35415:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23380:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14858:94;;;;;;;;;;;;;:::i;:::-;;36286:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14207:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24125:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35368:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36742:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25808:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27071:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24300:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35631:647;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26174:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15107:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35299:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23011:305;23113:4;23165:25;23150:40;;;:11;:40;;;;:105;;;;23222:33;23207:48;;;:11;:48;;;;23150:105;:158;;;;23272:36;23296:11;23272:23;:36::i;:::-;23150:158;23130:178;;23011:305;;;:::o;23956:100::-;24010:13;24043:5;24036:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23956:100;:::o;25515:221::-;25591:7;25619:16;25627:7;25619;:16::i;:::-;25611:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25704:15;:24;25720:7;25704:24;;;;;;;;;;;;;;;;;;;;;25697:31;;25515:221;;;:::o;25038:411::-;25119:13;25135:23;25150:7;25135:14;:23::i;:::-;25119:39;;25183:5;25177:11;;:2;:11;;;;25169:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25277:5;25261:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25286:37;25303:5;25310:12;:10;:12::i;:::-;25286:16;:37::i;:::-;25261:62;25239:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:21;25429:2;25433:7;25420:8;:21::i;:::-;25108:341;25038:411;;:::o;35332:27::-;;;;:::o;36844:101::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36933:4:::1;36912:18;;:25;;;;;;;;;;;;;;;;;;36844:101:::0;:::o;26405:339::-;26600:41;26619:12;:10;:12::i;:::-;26633:7;26600:18;:41::i;:::-;26592:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26708:28;26718:4;26724:2;26728:7;26708:9;:28::i;:::-;26405:339;;;:::o;37073:1014::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37124:13:::1;37140:21;37124:37;;37180:7;:5;:7::i;:::-;37172:25;;:46;37214:3;37209:2;37198:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;37172:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37251:42;37243:60;;:81;37320:3;37315:2;37304:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;37243:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37351:42;37343:60;;:80;37419:3;37415:1;37404:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37343:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37461:42;37453:60;;:80;37529:3;37525:1;37514:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37453:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37567:42;37559:60;;:80;37635:3;37631:1;37620:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37559:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37671:42;37663:60;;:80;37739:3;37735:1;37724:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37663:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37779:42;37771:60;;:80;37847:3;37843:1;37832:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37771:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37882:42;37874:60;;:80;37950:3;37946:1;37935:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37874:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37989:42;37981:60;;:80;38057:3;38053:1;38042:8;:12;;;;:::i;:::-;:18;;;;:::i;:::-;37981:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37112:975;37073:1014::o:0;26815:185::-;26953:39;26970:4;26976:2;26980:7;26953:39;;;;;;;;;;;;:16;:39::i;:::-;26815:185;;;:::o;35511:28::-;;;;:::o;35449:33::-;;;;:::o;23650:239::-;23722:7;23742:13;23758:7;:16;23766:7;23758:16;;;;;;;;;;;;;;;;;;;;;23742:32;;23810:1;23793:19;;:5;:19;;;;23785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23876:5;23869:12;;;23650:239;;;:::o;35415:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23380:208::-;23452:7;23497:1;23480:19;;:5;:19;;;;23472:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23564:9;:16;23574:5;23564:16;;;;;;;;;;;;;;;;23557:23;;23380:208;;;:::o;14858:94::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14923:21:::1;14941:1;14923:9;:21::i;:::-;14858:94::o:0;36286:438::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36386:8:::1;;36367;:15;:27;;36359:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35287:5;36463:8;:15;36449:11;;:29;;;;:::i;:::-;:42;;36441:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36533:6;36529:98;36549:8;:15;36545:1;:19;36529:98;;;36584:43;36594:8;36603:1;36594:11;;;;;;;;:::i;:::-;;;;;;;;36625:1;36621;36607:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36584:9;:43::i;:::-;36566:3;;;;;:::i;:::-;;;;36529:98;;;;36653:8;:15;36638:11;;:30;;;;;;;:::i;:::-;;;;;;;;36701:8;:15;36690:8;;:26;;;;:::i;:::-;36679:8;:37;;;;36286:438:::0;:::o;14207:87::-;14253:7;14280:6;;;;;;;;;;;14273:13;;14207:87;:::o;24125:104::-;24181:13;24214:7;24207:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24125:104;:::o;35368:38::-;;;;;;;;;;;;;:::o;36742:92::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36822:4:::1;36812:7;:14;;;;;;;;;;;;:::i;:::-;;36742:92:::0;:::o;25808:295::-;25923:12;:10;:12::i;:::-;25911:24;;:8;:24;;;;25903:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26023:8;25978:18;:32;25997:12;:10;:12::i;:::-;25978:32;;;;;;;;;;;;;;;:42;26011:8;25978:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26076:8;26047:48;;26062:12;:10;:12::i;:::-;26047:48;;;26086:8;26047:48;;;;;;:::i;:::-;;;;;;;;25808:295;;:::o;27071:328::-;27246:41;27265:12;:10;:12::i;:::-;27279:7;27246:18;:41::i;:::-;27238:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27352:39;27366:4;27372:2;27376:7;27385:5;27352:13;:39::i;:::-;27071:328;;;;:::o;24300:334::-;24373:13;24407:16;24415:7;24407;:16::i;:::-;24399:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24488:21;24512:10;:8;:10::i;:::-;24488:34;;24564:1;24546:7;24540:21;:25;:86;;;;;;;;;;;;;;;;;24592:7;24601:18;:7;:16;:18::i;:::-;24575:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24540:86;24533:93;;;24300:334;;;:::o;35631:647::-;35711:4;35689:26;;:18;;;;;;;;;;;:26;;;35681:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35763:1;35754:6;:10;35746:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35821:17;;35811:6;:27;;35803:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35917:12;;35908:6;35884:21;35894:10;35884:9;:21::i;:::-;:30;;;;:::i;:::-;:45;;35876:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36016:8;;35287:5;36004:20;;;;:::i;:::-;35994:6;35980:11;;:20;;;;:::i;:::-;:44;;35972:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36096:6;35244:10;36083:19;;;;:::i;:::-;36070:9;:32;;36062:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36154:6;36150:88;36170:6;36166:1;:10;36150:88;;;36196:42;36206:10;36236:1;36232;36218:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36196:9;:42::i;:::-;36178:3;;;;;:::i;:::-;;;;36150:88;;;;36264:6;36249:11;;:21;;;;;;;:::i;:::-;;;;;;;;35631:647;:::o;26174:164::-;26271:4;26295:18;:25;26314:5;26295:25;;;;;;;;;;;;;;;:35;26321:8;26295:35;;;;;;;;;;;;;;;;;;;;;;;;;26288:42;;26174:164;;;;:::o;15107:192::-;14438:12;:10;:12::i;:::-;14427:23;;:7;:5;:7::i;:::-;:23;;;14419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15216:1:::1;15196:22;;:8;:22;;;;15188:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15272:19;15282:8;15272:9;:19::i;:::-;15107:192:::0;:::o;35299:26::-;;;;:::o;16212:157::-;16297:4;16336:25;16321:40;;;:11;:40;;;;16314:47;;16212:157;;;:::o;28909:127::-;28974:4;29026:1;28998:30;;:7;:16;29006:7;28998:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28991:37;;28909:127;;;:::o;1347:98::-;1400:7;1427:10;1420:17;;1347:98;:::o;32891:174::-;32993:2;32966:15;:24;32982:7;32966:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33049:7;33045:2;33011:46;;33020:23;33035:7;33020:14;:23::i;:::-;33011:46;;;;;;;;;;;;32891:174;;:::o;29203:348::-;29296:4;29321:16;29329:7;29321;:16::i;:::-;29313:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29397:13;29413:23;29428:7;29413:14;:23::i;:::-;29397:39;;29466:5;29455:16;;:7;:16;;;:51;;;;29499:7;29475:31;;:20;29487:7;29475:11;:20::i;:::-;:31;;;29455:51;:87;;;;29510:32;29527:5;29534:7;29510:16;:32::i;:::-;29455:87;29447:96;;;29203:348;;;;:::o;32195:578::-;32354:4;32327:31;;:23;32342:7;32327:14;:23::i;:::-;:31;;;32319:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32437:1;32423:16;;:2;:16;;;;32415:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32493:39;32514:4;32520:2;32524:7;32493:20;:39::i;:::-;32597:29;32614:1;32618:7;32597:8;:29::i;:::-;32658:1;32639:9;:15;32649:4;32639:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32687:1;32670:9;:13;32680:2;32670:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32718:2;32699:7;:16;32707:7;32699:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32757:7;32753:2;32738:27;;32747:4;32738:27;;;;;;;;;;;;32195:578;;;:::o;15307:173::-;15363:16;15382:6;;;;;;;;;;;15363:25;;15408:8;15399:6;;:17;;;;;;;;;;;;;;;;;;15463:8;15432:40;;15453:8;15432:40;;;;;;;;;;;;15352:128;15307:173;:::o;29893:110::-;29969:26;29979:2;29983:7;29969:26;;;;;;;;;;;;:9;:26::i;:::-;29893:110;;:::o;28281:315::-;28438:28;28448:4;28454:2;28458:7;28438:9;:28::i;:::-;28485:48;28508:4;28514:2;28518:7;28527:5;28485:22;:48::i;:::-;28477:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28281:315;;;;:::o;36957:108::-;37017:13;37050:7;37043:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36957:108;:::o;1812:723::-;1868:13;2098:1;2089:5;:10;2085:53;;;2116:10;;;;;;;;;;;;;;;;;;;;;2085:53;2148:12;2163:5;2148:20;;2179:14;2204:78;2219:1;2211:4;:9;2204:78;;2237:8;;;;;:::i;:::-;;;;2268:2;2260:10;;;;;:::i;:::-;;;2204:78;;;2292:19;2324:6;2314:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:39;;2342:154;2358:1;2349:5;:10;2342:154;;2386:1;2376:11;;;;;:::i;:::-;;;2453:2;2445:5;:10;;;;:::i;:::-;2432:2;:24;;;;:::i;:::-;2419:39;;2402:6;2409;2402:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2482:2;2473:11;;;;;:::i;:::-;;;2342:154;;;2520:6;2506:21;;;;;1812:723;;;;:::o;35001:126::-;;;;:::o;30230:321::-;30360:18;30366:2;30370:7;30360:5;:18::i;:::-;30411:54;30442:1;30446:2;30450:7;30459:5;30411:22;:54::i;:::-;30389:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30230:321;;;:::o;33630:799::-;33785:4;33806:15;:2;:13;;;:15::i;:::-;33802:620;;;33858:2;33842:36;;;33879:12;:10;:12::i;:::-;33893:4;33899:7;33908:5;33842:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33838:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34101:1;34084:6;:13;:18;34080:272;;;34127:60;;;;;;;;;;:::i;:::-;;;;;;;;34080:272;34302:6;34296:13;34287:6;34283:2;34279:15;34272:38;33838:529;33975:41;;;33965:51;;;:6;:51;;;;33958:58;;;;;33802:620;34406:4;34399:11;;33630:799;;;;;;;:::o;30887:382::-;30981:1;30967:16;;:2;:16;;;;30959:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31040:16;31048:7;31040;:16::i;:::-;31039:17;31031:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31102:45;31131:1;31135:2;31139:7;31102:20;:45::i;:::-;31177:1;31160:9;:13;31170:2;31160:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31208:2;31189:7;:16;31197:7;31189:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31253:7;31249:2;31228:33;;31245:1;31228:33;;;;;;;;;;;;30887:382;;:::o;4277:387::-;4337:4;4545:12;4612:7;4600:20;4592:28;;4655:1;4648:4;:8;4641:15;;;4277:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10528:366::-;10670:3;10691:67;10755:2;10750:3;10691:67;:::i;:::-;10684:74;;10767:93;10856:3;10767:93;:::i;:::-;10885:2;10880:3;10876:12;10869:19;;10528:366;;;:::o;10900:::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:::-;11414:3;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11511:93;11600:3;11511:93;:::i;:::-;11629:2;11624:3;11620:12;11613:19;;11272:366;;;:::o;11644:::-;11786:3;11807:67;11871:2;11866:3;11807:67;:::i;:::-;11800:74;;11883:93;11972:3;11883:93;:::i;:::-;12001:2;11996:3;11992:12;11985:19;;11644:366;;;:::o;12016:::-;12158:3;12179:67;12243:2;12238:3;12179:67;:::i;:::-;12172:74;;12255:93;12344:3;12255:93;:::i;:::-;12373:2;12368:3;12364:12;12357:19;;12016:366;;;:::o;12388:::-;12530:3;12551:67;12615:2;12610:3;12551:67;:::i;:::-;12544:74;;12627:93;12716:3;12627:93;:::i;:::-;12745:2;12740:3;12736:12;12729:19;;12388:366;;;:::o;12760:::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:::-;13274:3;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13371:93;13460:3;13371:93;:::i;:::-;13489:2;13484:3;13480:12;13473:19;;13132:366;;;:::o;13504:::-;13646:3;13667:67;13731:2;13726:3;13667:67;:::i;:::-;13660:74;;13743:93;13832:3;13743:93;:::i;:::-;13861:2;13856:3;13852:12;13845:19;;13504:366;;;:::o;13876:::-;14018:3;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14115:93;14204:3;14115:93;:::i;:::-;14233:2;14228:3;14224:12;14217:19;;13876:366;;;:::o;14248:::-;14390:3;14411:67;14475:2;14470:3;14411:67;:::i;:::-;14404:74;;14487:93;14576:3;14487:93;:::i;:::-;14605:2;14600:3;14596:12;14589:19;;14248:366;;;:::o;14620:::-;14762:3;14783:67;14847:2;14842:3;14783:67;:::i;:::-;14776:74;;14859:93;14948:3;14859:93;:::i;:::-;14977:2;14972:3;14968:12;14961:19;;14620:366;;;:::o;14992:::-;15134:3;15155:67;15219:2;15214:3;15155:67;:::i;:::-;15148:74;;15231:93;15320:3;15231:93;:::i;:::-;15349:2;15344:3;15340:12;15333:19;;14992:366;;;:::o;15364:::-;15506:3;15527:67;15591:2;15586:3;15527:67;:::i;:::-;15520:74;;15603:93;15692:3;15603:93;:::i;:::-;15721:2;15716:3;15712:12;15705:19;;15364:366;;;:::o;15736:::-;15878:3;15899:67;15963:2;15958:3;15899:67;:::i;:::-;15892:74;;15975:93;16064:3;15975:93;:::i;:::-;16093:2;16088:3;16084:12;16077:19;;15736:366;;;:::o;16108:::-;16250:3;16271:67;16335:2;16330:3;16271:67;:::i;:::-;16264:74;;16347:93;16436:3;16347:93;:::i;:::-;16465:2;16460:3;16456:12;16449:19;;16108:366;;;:::o;16480:::-;16622:3;16643:67;16707:2;16702:3;16643:67;:::i;:::-;16636:74;;16719:93;16808:3;16719:93;:::i;:::-;16837:2;16832:3;16828:12;16821:19;;16480:366;;;:::o;16852:::-;16994:3;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17091:93;17180:3;17091:93;:::i;:::-;17209:2;17204:3;17200:12;17193:19;;16852:366;;;:::o;17224:::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17224:366;;;:::o;17596:::-;17738:3;17759:67;17823:2;17818:3;17759:67;:::i;:::-;17752:74;;17835:93;17924:3;17835:93;:::i;:::-;17953:2;17948:3;17944:12;17937:19;;17596:366;;;:::o;17968:::-;18110:3;18131:67;18195:2;18190:3;18131:67;:::i;:::-;18124:74;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;17968:366;;;:::o;18340:::-;18482:3;18503:67;18567:2;18562:3;18503:67;:::i;:::-;18496:74;;18579:93;18668:3;18579:93;:::i;:::-;18697:2;18692:3;18688:12;18681:19;;18340:366;;;:::o;18712:::-;18854:3;18875:67;18939:2;18934:3;18875:67;:::i;:::-;18868:74;;18951:93;19040:3;18951:93;:::i;:::-;19069:2;19064:3;19060:12;19053:19;;18712:366;;;:::o;19084:::-;19226:3;19247:67;19311:2;19306:3;19247:67;:::i;:::-;19240:74;;19323:93;19412:3;19323:93;:::i;:::-;19441:2;19436:3;19432:12;19425:19;;19084:366;;;:::o;19456:118::-;19543:24;19561:5;19543:24;:::i;:::-;19538:3;19531:37;19456:118;;:::o;19580:435::-;19760:3;19782:95;19873:3;19864:6;19782:95;:::i;:::-;19775:102;;19894:95;19985:3;19976:6;19894:95;:::i;:::-;19887:102;;20006:3;19999:10;;19580:435;;;;;:::o;20021:222::-;20114:4;20152:2;20141:9;20137:18;20129:26;;20165:71;20233:1;20222:9;20218:17;20209:6;20165:71;:::i;:::-;20021:222;;;;:::o;20249:640::-;20444:4;20482:3;20471:9;20467:19;20459:27;;20496:71;20564:1;20553:9;20549:17;20540:6;20496:71;:::i;:::-;20577:72;20645:2;20634:9;20630:18;20621:6;20577:72;:::i;:::-;20659;20727:2;20716:9;20712:18;20703:6;20659:72;:::i;:::-;20778:9;20772:4;20768:20;20763:2;20752:9;20748:18;20741:48;20806:76;20877:4;20868:6;20806:76;:::i;:::-;20798:84;;20249:640;;;;;;;:::o;20895:210::-;20982:4;21020:2;21009:9;21005:18;20997:26;;21033:65;21095:1;21084:9;21080:17;21071:6;21033:65;:::i;:::-;20895:210;;;;:::o;21111:313::-;21224:4;21262:2;21251:9;21247:18;21239:26;;21311:9;21305:4;21301:20;21297:1;21286:9;21282:17;21275:47;21339:78;21412:4;21403:6;21339:78;:::i;:::-;21331:86;;21111:313;;;;:::o;21430:419::-;21596:4;21634:2;21623:9;21619:18;21611:26;;21683:9;21677:4;21673:20;21669:1;21658:9;21654:17;21647:47;21711:131;21837:4;21711:131;:::i;:::-;21703:139;;21430:419;;;:::o;21855:::-;22021:4;22059:2;22048:9;22044:18;22036:26;;22108:9;22102:4;22098:20;22094:1;22083:9;22079:17;22072:47;22136:131;22262:4;22136:131;:::i;:::-;22128:139;;21855:419;;;:::o;22280:::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22533:9;22527:4;22523:20;22519:1;22508:9;22504:17;22497:47;22561:131;22687:4;22561:131;:::i;:::-;22553:139;;22280:419;;;:::o;22705:::-;22871:4;22909:2;22898:9;22894:18;22886:26;;22958:9;22952:4;22948:20;22944:1;22933:9;22929:17;22922:47;22986:131;23112:4;22986:131;:::i;:::-;22978:139;;22705:419;;;:::o;23130:::-;23296:4;23334:2;23323:9;23319:18;23311:26;;23383:9;23377:4;23373:20;23369:1;23358:9;23354:17;23347:47;23411:131;23537:4;23411:131;:::i;:::-;23403:139;;23130:419;;;:::o;23555:::-;23721:4;23759:2;23748:9;23744:18;23736:26;;23808:9;23802:4;23798:20;23794:1;23783:9;23779:17;23772:47;23836:131;23962:4;23836:131;:::i;:::-;23828:139;;23555:419;;;:::o;23980:::-;24146:4;24184:2;24173:9;24169:18;24161:26;;24233:9;24227:4;24223:20;24219:1;24208:9;24204:17;24197:47;24261:131;24387:4;24261:131;:::i;:::-;24253:139;;23980:419;;;:::o;24405:::-;24571:4;24609:2;24598:9;24594:18;24586:26;;24658:9;24652:4;24648:20;24644:1;24633:9;24629:17;24622:47;24686:131;24812:4;24686:131;:::i;:::-;24678:139;;24405:419;;;:::o;24830:::-;24996:4;25034:2;25023:9;25019:18;25011:26;;25083:9;25077:4;25073:20;25069:1;25058:9;25054:17;25047:47;25111:131;25237:4;25111:131;:::i;:::-;25103:139;;24830:419;;;:::o;25255:::-;25421:4;25459:2;25448:9;25444:18;25436:26;;25508:9;25502:4;25498:20;25494:1;25483:9;25479:17;25472:47;25536:131;25662:4;25536:131;:::i;:::-;25528:139;;25255:419;;;:::o;25680:::-;25846:4;25884:2;25873:9;25869:18;25861:26;;25933:9;25927:4;25923:20;25919:1;25908:9;25904:17;25897:47;25961:131;26087:4;25961:131;:::i;:::-;25953:139;;25680:419;;;:::o;26105:::-;26271:4;26309:2;26298:9;26294:18;26286:26;;26358:9;26352:4;26348:20;26344:1;26333:9;26329:17;26322:47;26386:131;26512:4;26386:131;:::i;:::-;26378:139;;26105:419;;;:::o;26530:::-;26696:4;26734:2;26723:9;26719:18;26711:26;;26783:9;26777:4;26773:20;26769:1;26758:9;26754:17;26747:47;26811:131;26937:4;26811:131;:::i;:::-;26803:139;;26530:419;;;:::o;26955:::-;27121:4;27159:2;27148:9;27144:18;27136:26;;27208:9;27202:4;27198:20;27194:1;27183:9;27179:17;27172:47;27236:131;27362:4;27236:131;:::i;:::-;27228:139;;26955:419;;;:::o;27380:::-;27546:4;27584:2;27573:9;27569:18;27561:26;;27633:9;27627:4;27623:20;27619:1;27608:9;27604:17;27597:47;27661:131;27787:4;27661:131;:::i;:::-;27653:139;;27380:419;;;:::o;27805:::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:::-;28396:4;28434:2;28423:9;28419:18;28411:26;;28483:9;28477:4;28473:20;28469:1;28458:9;28454:17;28447:47;28511:131;28637:4;28511:131;:::i;:::-;28503:139;;28230:419;;;:::o;28655:::-;28821:4;28859:2;28848:9;28844:18;28836:26;;28908:9;28902:4;28898:20;28894:1;28883:9;28879:17;28872:47;28936:131;29062:4;28936:131;:::i;:::-;28928:139;;28655:419;;;:::o;29080:::-;29246:4;29284:2;29273:9;29269:18;29261:26;;29333:9;29327:4;29323:20;29319:1;29308:9;29304:17;29297:47;29361:131;29487:4;29361:131;:::i;:::-;29353:139;;29080:419;;;:::o;29505:::-;29671:4;29709:2;29698:9;29694:18;29686:26;;29758:9;29752:4;29748:20;29744:1;29733:9;29729:17;29722:47;29786:131;29912:4;29786:131;:::i;:::-;29778:139;;29505:419;;;:::o;29930:::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:::-;30521:4;30559:2;30548:9;30544:18;30536:26;;30608:9;30602:4;30598:20;30594:1;30583:9;30579:17;30572:47;30636:131;30762:4;30636:131;:::i;:::-;30628:139;;30355:419;;;:::o;30780:::-;30946:4;30984:2;30973:9;30969:18;30961:26;;31033:9;31027:4;31023:20;31019:1;31008:9;31004:17;30997:47;31061:131;31187:4;31061:131;:::i;:::-;31053:139;;30780:419;;;:::o;31205:::-;31371:4;31409:2;31398:9;31394:18;31386:26;;31458:9;31452:4;31448:20;31444:1;31433:9;31429:17;31422:47;31486:131;31612:4;31486:131;:::i;:::-;31478:139;;31205:419;;;:::o;31630:222::-;31723:4;31761:2;31750:9;31746:18;31738:26;;31774:71;31842:1;31831:9;31827:17;31818:6;31774:71;:::i;:::-;31630:222;;;;:::o;31858:129::-;31892:6;31919:20;;:::i;:::-;31909:30;;31948:33;31976:4;31968:6;31948:33;:::i;:::-;31858:129;;;:::o;31993:75::-;32026:6;32059:2;32053:9;32043:19;;31993:75;:::o;32074:311::-;32151:4;32241:18;32233:6;32230:30;32227:56;;;32263:18;;:::i;:::-;32227:56;32313:4;32305:6;32301:17;32293:25;;32373:4;32367;32363:15;32355:23;;32074:311;;;:::o;32391:307::-;32452:4;32542:18;32534:6;32531:30;32528:56;;;32564:18;;:::i;:::-;32528:56;32602:29;32624:6;32602:29;:::i;:::-;32594:37;;32686:4;32680;32676:15;32668:23;;32391:307;;;:::o;32704:308::-;32766:4;32856:18;32848:6;32845:30;32842:56;;;32878:18;;:::i;:::-;32842:56;32916:29;32938:6;32916:29;:::i;:::-;32908:37;;33000:4;32994;32990:15;32982:23;;32704:308;;;:::o;33018:98::-;33069:6;33103:5;33097:12;33087:22;;33018:98;;;:::o;33122:99::-;33174:6;33208:5;33202:12;33192:22;;33122:99;;;:::o;33227:168::-;33310:11;33344:6;33339:3;33332:19;33384:4;33379:3;33375:14;33360:29;;33227:168;;;;:::o;33401:169::-;33485:11;33519:6;33514:3;33507:19;33559:4;33554:3;33550:14;33535:29;;33401:169;;;;:::o;33576:148::-;33678:11;33715:3;33700:18;;33576:148;;;;:::o;33730:305::-;33770:3;33789:20;33807:1;33789:20;:::i;:::-;33784:25;;33823:20;33841:1;33823:20;:::i;:::-;33818:25;;33977:1;33909:66;33905:74;33902:1;33899:81;33896:107;;;33983:18;;:::i;:::-;33896:107;34027:1;34024;34020:9;34013:16;;33730:305;;;;:::o;34041:185::-;34081:1;34098:20;34116:1;34098:20;:::i;:::-;34093:25;;34132:20;34150:1;34132:20;:::i;:::-;34127:25;;34171:1;34161:35;;34176:18;;:::i;:::-;34161:35;34218:1;34215;34211:9;34206:14;;34041:185;;;;:::o;34232:348::-;34272:7;34295:20;34313:1;34295:20;:::i;:::-;34290:25;;34329:20;34347:1;34329:20;:::i;:::-;34324:25;;34517:1;34449:66;34445:74;34442:1;34439:81;34434:1;34427:9;34420:17;34416:105;34413:131;;;34524:18;;:::i;:::-;34413:131;34572:1;34569;34565:9;34554:20;;34232:348;;;;:::o;34586:191::-;34626:4;34646:20;34664:1;34646:20;:::i;:::-;34641:25;;34680:20;34698:1;34680:20;:::i;:::-;34675:25;;34719:1;34716;34713:8;34710:34;;;34724:18;;:::i;:::-;34710:34;34769:1;34766;34762:9;34754:17;;34586:191;;;;:::o;34783:96::-;34820:7;34849:24;34867:5;34849:24;:::i;:::-;34838:35;;34783:96;;;:::o;34885:90::-;34919:7;34962:5;34955:13;34948:21;34937:32;;34885:90;;;:::o;34981:149::-;35017:7;35057:66;35050:5;35046:78;35035:89;;34981:149;;;:::o;35136:126::-;35173:7;35213:42;35206:5;35202:54;35191:65;;35136:126;;;:::o;35268:77::-;35305:7;35334:5;35323:16;;35268:77;;;:::o;35351:154::-;35435:6;35430:3;35425;35412:30;35497:1;35488:6;35483:3;35479:16;35472:27;35351:154;;;:::o;35511:307::-;35579:1;35589:113;35603:6;35600:1;35597:13;35589:113;;;35688:1;35683:3;35679:11;35673:18;35669:1;35664:3;35660:11;35653:39;35625:2;35622:1;35618:10;35613:15;;35589:113;;;35720:6;35717:1;35714:13;35711:101;;;35800:1;35791:6;35786:3;35782:16;35775:27;35711:101;35560:258;35511:307;;;:::o;35824:320::-;35868:6;35905:1;35899:4;35895:12;35885:22;;35952:1;35946:4;35942:12;35973:18;35963:81;;36029:4;36021:6;36017:17;36007:27;;35963:81;36091:2;36083:6;36080:14;36060:18;36057:38;36054:84;;;36110:18;;:::i;:::-;36054:84;35875:269;35824:320;;;:::o;36150:281::-;36233:27;36255:4;36233:27;:::i;:::-;36225:6;36221:40;36363:6;36351:10;36348:22;36327:18;36315:10;36312:34;36309:62;36306:88;;;36374:18;;:::i;:::-;36306:88;36414:10;36410:2;36403:22;36193:238;36150:281;;:::o;36437:233::-;36476:3;36499:24;36517:5;36499:24;:::i;:::-;36490:33;;36545:66;36538:5;36535:77;36532:103;;;36615:18;;:::i;:::-;36532:103;36662:1;36655:5;36651:13;36644:20;;36437:233;;;:::o;36676:176::-;36708:1;36725:20;36743:1;36725:20;:::i;:::-;36720:25;;36759:20;36777:1;36759:20;:::i;:::-;36754:25;;36798:1;36788:35;;36803:18;;:::i;:::-;36788:35;36844:1;36841;36837:9;36832:14;;36676:176;;;;:::o;36858:180::-;36906:77;36903:1;36896:88;37003:4;37000:1;36993:15;37027:4;37024:1;37017:15;37044:180;37092:77;37089:1;37082:88;37189:4;37186:1;37179:15;37213:4;37210:1;37203:15;37230:180;37278:77;37275:1;37268:88;37375:4;37372:1;37365:15;37399:4;37396:1;37389:15;37416:180;37464:77;37461:1;37454:88;37561:4;37558:1;37551:15;37585:4;37582:1;37575:15;37602:180;37650:77;37647:1;37640:88;37747:4;37744:1;37737:15;37771:4;37768:1;37761:15;37788:117;37897:1;37894;37887:12;37911:117;38020:1;38017;38010:12;38034:117;38143:1;38140;38133:12;38157:117;38266:1;38263;38256:12;38280:117;38389:1;38386;38379:12;38403:102;38444:6;38495:2;38491:7;38486:2;38479:5;38475:14;38471:28;38461:38;;38403:102;;;:::o;38511:237::-;38651:34;38647:1;38639:6;38635:14;38628:58;38720:20;38715:2;38707:6;38703:15;38696:45;38511:237;:::o;38754:225::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:8;38958:2;38950:6;38946:15;38939:33;38754:225;:::o;38985:178::-;39125:30;39121:1;39113:6;39109:14;39102:54;38985:178;:::o;39169:223::-;39309:34;39305:1;39297:6;39293:14;39286:58;39378:6;39373:2;39365:6;39361:15;39354:31;39169:223;:::o;39398:175::-;39538:27;39534:1;39526:6;39522:14;39515:51;39398:175;:::o;39579:231::-;39719:34;39715:1;39707:6;39703:14;39696:58;39788:14;39783:2;39775:6;39771:15;39764:39;39579:231;:::o;39816:172::-;39956:24;39952:1;39944:6;39940:14;39933:48;39816:172;:::o;39994:243::-;40134:34;40130:1;40122:6;40118:14;40111:58;40203:26;40198:2;40190:6;40186:15;40179:51;39994:243;:::o;40243:229::-;40383:34;40379:1;40371:6;40367:14;40360:58;40452:12;40447:2;40439:6;40435:15;40428:37;40243:229;:::o;40478:228::-;40618:34;40614:1;40606:6;40602:14;40595:58;40687:11;40682:2;40674:6;40670:15;40663:36;40478:228;:::o;40712:172::-;40852:24;40848:1;40840:6;40836:14;40829:48;40712:172;:::o;40890:182::-;41030:34;41026:1;41018:6;41014:14;41007:58;40890:182;:::o;41078:231::-;41218:34;41214:1;41206:6;41202:14;41195:58;41287:14;41282:2;41274:6;41270:15;41263:39;41078:231;:::o;41315:182::-;41455:34;41451:1;41443:6;41439:14;41432:58;41315:182;:::o;41503:181::-;41643:33;41639:1;41631:6;41627:14;41620:57;41503:181;:::o;41690:228::-;41830:34;41826:1;41818:6;41814:14;41807:58;41899:11;41894:2;41886:6;41882:15;41875:36;41690:228;:::o;41924:234::-;42064:34;42060:1;42052:6;42048:14;42041:58;42133:17;42128:2;42120:6;42116:15;42109:42;41924:234;:::o;42164:220::-;42304:34;42300:1;42292:6;42288:14;42281:58;42373:3;42368:2;42360:6;42356:15;42349:28;42164:220;:::o;42390:236::-;42530:34;42526:1;42518:6;42514:14;42507:58;42599:19;42594:2;42586:6;42582:15;42575:44;42390:236;:::o;42632:173::-;42772:25;42768:1;42760:6;42756:14;42749:49;42632:173;:::o;42811:177::-;42951:29;42947:1;42939:6;42935:14;42928:53;42811:177;:::o;42994:172::-;43134:24;43130:1;43122:6;43118:14;43111:48;42994:172;:::o;43172:165::-;43312:17;43308:1;43300:6;43296:14;43289:41;43172:165;:::o;43343:171::-;43483:23;43479:1;43471:6;43467:14;43460:47;43343:171;:::o;43520:122::-;43593:24;43611:5;43593:24;:::i;:::-;43586:5;43583:35;43573:63;;43632:1;43629;43622:12;43573:63;43520:122;:::o;43648:116::-;43718:21;43733:5;43718:21;:::i;:::-;43711:5;43708:32;43698:60;;43754:1;43751;43744:12;43698:60;43648:116;:::o;43770:120::-;43842:23;43859:5;43842:23;:::i;:::-;43835:5;43832:34;43822:62;;43880:1;43877;43870:12;43822:62;43770:120;:::o;43896:122::-;43969:24;43987:5;43969:24;:::i;:::-;43962:5;43959:35;43949:63;;44008:1;44005;43998:12;43949:63;43896:122;:::o

Swarm Source

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