ETH Price: $3,595.43 (-2.68%)

Token

ERC-20: Street Ape Society (SAS)
 

Overview

Max Total Supply

2,270 SAS

Holders

1,001

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
cruzin.eth
Balance
1 SAS
0xf637d3eb55ad7f859543d1b5bd4bbcf93b6fa5a5
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:
StreetApeSociety

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-02-11
*/

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

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

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

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

/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + totalReleased();
        uint256 payment = _pendingPayment(account, totalReceived, released(account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] += payment;
        _totalReleased += payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

pragma solidity >=0.4.22 <0.9.0;

contract StreetApeSociety is Ownable, ERC721, PaymentSplitter {
    using Strings for uint256;

    bool public active;
    uint256 public constant MAXQTY = 8888;
    uint256 public constant FREE = 500;
    uint256 public constant RESERVE = 25;
    uint256 public FEE = 0.05 ether;
    uint256 public LIMIT = 20;

    string public baseURI;
    uint256 public totalSupply;

    mapping(address => uint256) public mintMap;
    mapping(address => bool) public free;

    constructor(
        string memory tokenBaseURI,
        address[] memory payees,
        uint256[] memory shares
    ) ERC721("Street Ape Society", "SAS") PaymentSplitter(payees, shares)  {
        baseURI = tokenBaseURI;
    }

    function changeActive() external onlyOwner {
        active = !active;
    }

    function mint(uint256 mintQty) external payable {
        require(active, "INACTIVE");
        if (totalSupply < FREE + RESERVE) {
            require(mintQty == 1, "JUST ONE");
            require(msg.value == 0, "FREE");
            require(!free[msg.sender], "PAY");
            free[msg.sender] = true;
        } else {
            require(totalSupply + mintQty <= MAXQTY, "TOO MUCH");
            require(mintMap[msg.sender] + mintQty <= LIMIT, "YOU ARE DONE");
            require(msg.value >= FEE * mintQty, "NOT ENOUGH");
            mintMap[msg.sender] += mintQty;
        }

        for (uint256 i = 0; i < mintQty; i++) {
            _mint(msg.sender, totalSupply + i);
        }

        totalSupply += mintQty;
    }

    function reserve() external onlyOwner {
        for (uint256 i = 0; i < RESERVE; ++i) {
            _mint(msg.sender, totalSupply + i);
        }

        totalSupply += RESERVE;
    }

    function setBaseURI(string calldata URI) public onlyOwner {
        baseURI = URI;
    }

    function _baseURI() internal view override(ERC721) returns (string memory) {
        return baseURI;
    }

    function tokenURI(uint256 _tokenId) public view virtual override(ERC721) returns (string memory) {
        require(_exists(_tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : "";
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenBaseURI","type":"string"},{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXQTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"free","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintQty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintMap","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":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405266b1a2bc2ec50000600d556014600e553480156200002157600080fd5b50604051620052a0380380620052a08339818101604052810190620000479190620007e9565b81816040518060400160405280601281526020017f5374726565742041706520536f636965747900000000000000000000000000008152506040518060400160405280600381526020017f5341530000000000000000000000000000000000000000000000000000000000815250620000d5620000c96200022b60201b60201c565b6200023360201b60201c565b8160019080519060200190620000ed92919062000531565b5080600290805190602001906200010692919062000531565b505050805182511462000150576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014790620009d6565b60405180910390fd5b600082511162000197576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018e9062000a1a565b60405180910390fd5b60005b82518110156200020657620001f0838281518110620001be57620001bd62000d15565b5b6020026020010151838381518110620001dc57620001db62000d15565b5b6020026020010151620002f760201b60201c565b8080620001fd9062000c69565b9150506200019a565b50505082600f90805190602001906200022192919062000531565b5050505062000f10565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200036a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036190620009b4565b60405180910390fd5b60008111620003b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a79062000a3c565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541462000435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042c90620009f8565b60405180910390fd5b600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600754620004ec919062000b2c565b6007819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac82826040516200052592919062000987565b60405180910390a15050565b8280546200053f9062000bfd565b90600052602060002090601f016020900481019282620005635760008555620005af565b82601f106200057e57805160ff1916838001178555620005af565b82800160010185558215620005af579182015b82811115620005ae57825182559160200191906001019062000591565b5b509050620005be9190620005c2565b5090565b5b80821115620005dd576000816000905550600101620005c3565b5090565b6000620005f8620005f28462000a87565b62000a5e565b905080838252602082019050828560208602820111156200061e576200061d62000d78565b5b60005b8581101562000652578162000637888262000722565b84526020840193506020830192505060018101905062000621565b5050509392505050565b6000620006736200066d8462000ab6565b62000a5e565b9050808382526020820190508285602086028201111562000699576200069862000d78565b5b60005b85811015620006cd5781620006b28882620007d2565b8452602084019350602083019250506001810190506200069c565b5050509392505050565b6000620006ee620006e88462000ae5565b62000a5e565b9050828152602081018484840111156200070d576200070c62000d7d565b5b6200071a84828562000bc7565b509392505050565b600081519050620007338162000edc565b92915050565b600082601f83011262000751576200075062000d73565b5b815162000763848260208601620005e1565b91505092915050565b600082601f83011262000784576200078362000d73565b5b8151620007968482602086016200065c565b91505092915050565b600082601f830112620007b757620007b662000d73565b5b8151620007c9848260208601620006d7565b91505092915050565b600081519050620007e38162000ef6565b92915050565b60008060006060848603121562000805576200080462000d87565b5b600084015167ffffffffffffffff81111562000826576200082562000d82565b5b62000834868287016200079f565b935050602084015167ffffffffffffffff81111562000858576200085762000d82565b5b620008668682870162000739565b925050604084015167ffffffffffffffff8111156200088a576200088962000d82565b5b62000898868287016200076c565b9150509250925092565b620008ad8162000b89565b82525050565b6000620008c2602c8362000b1b565b9150620008cf8262000d9d565b604082019050919050565b6000620008e960328362000b1b565b9150620008f68262000dec565b604082019050919050565b600062000910602b8362000b1b565b91506200091d8262000e3b565b604082019050919050565b600062000937601a8362000b1b565b9150620009448262000e8a565b602082019050919050565b60006200095e601d8362000b1b565b91506200096b8262000eb3565b602082019050919050565b620009818162000bbd565b82525050565b60006040820190506200099e6000830185620008a2565b620009ad602083018462000976565b9392505050565b60006020820190508181036000830152620009cf81620008b3565b9050919050565b60006020820190508181036000830152620009f181620008da565b9050919050565b6000602082019050818103600083015262000a138162000901565b9050919050565b6000602082019050818103600083015262000a358162000928565b9050919050565b6000602082019050818103600083015262000a57816200094f565b9050919050565b600062000a6a62000a7d565b905062000a78828262000c33565b919050565b6000604051905090565b600067ffffffffffffffff82111562000aa55762000aa462000d44565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000ad45762000ad362000d44565b5b602082029050602081019050919050565b600067ffffffffffffffff82111562000b035762000b0262000d44565b5b62000b0e8262000d8c565b9050602081019050919050565b600082825260208201905092915050565b600062000b398262000bbd565b915062000b468362000bbd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b7e5762000b7d62000cb7565b5b828201905092915050565b600062000b968262000b9d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000be757808201518184015260208101905062000bca565b8381111562000bf7576000848401525b50505050565b6000600282049050600182168062000c1657607f821691505b6020821081141562000c2d5762000c2c62000ce6565b5b50919050565b62000c3e8262000d8c565b810181811067ffffffffffffffff8211171562000c605762000c5f62000d44565b5b80604052505050565b600062000c768262000bbd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000cac5762000cab62000cb7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b62000ee78162000b89565b811462000ef357600080fd5b50565b62000f018162000bbd565b811462000f0d57600080fd5b50565b6143808062000f206000396000f3fe6080604052600436106102135760003560e01c80638da5cb5b11610118578063b88d4fde116100a0578063cd3293de1161006f578063cd3293de146107f1578063ce7c2ac214610808578063e33b7de314610845578063e985e9c514610870578063f2fde38b146108ad5761025a565b8063b88d4fde14610723578063c57981b51461074c578063c87b56dd14610777578063c9b5bb17146107b45761025a565b8063a0712d68116100e7578063a0712d6814610671578063a22cb4651461068d578063a87228cc146106b6578063af8214ef146106e1578063b4ac0dfc1461070c5761025a565b80638da5cb5b146105b357806395d89b41146105de5780639852595c146106095780639d2cc436146106465761025a565b806342842e0e1161019b5780636352211e1161016a5780636352211e146104ba5780636c0360eb146104f757806370a0823114610522578063715018a61461055f5780638b83209b146105765761025a565b806342842e0e14610400578063479981571461042957806355f804b31461045457806360d3721f1461047d5761025a565b8063095ea7b3116101e2578063095ea7b31461032f57806318160ddd14610358578063191655871461038357806323b872dd146103ac5780633a98ef39146103d55761025a565b806301ffc9a71461025f57806302fb0c5e1461029c57806306fdde03146102c7578063081812fc146102f25761025a565b3661025a577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706102416108d6565b3460405161025092919061338f565b60405180910390a1005b600080fd5b34801561026b57600080fd5b5061028660048036038101906102819190612d11565b6108de565b60405161029391906133b8565b60405180910390f35b3480156102a857600080fd5b506102b16109c0565b6040516102be91906133b8565b60405180910390f35b3480156102d357600080fd5b506102dc6109d3565b6040516102e991906133d3565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612db8565b610a65565b60405161032691906132ff565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190612cd1565b610aea565b005b34801561036457600080fd5b5061036d610c02565b60405161037a9190613755565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612b4e565b610c08565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612bbb565b610db3565b005b3480156103e157600080fd5b506103ea610e13565b6040516103f79190613755565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190612bbb565b610e1d565b005b34801561043557600080fd5b5061043e610e3d565b60405161044b9190613755565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612d6b565b610e43565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612b21565b610ed5565b6040516104b19190613755565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190612db8565b610eed565b6040516104ee91906132ff565b60405180910390f35b34801561050357600080fd5b5061050c610f9f565b60405161051991906133d3565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190612b21565b61102d565b6040516105569190613755565b60405180910390f35b34801561056b57600080fd5b506105746110e5565b005b34801561058257600080fd5b5061059d60048036038101906105989190612db8565b61116d565b6040516105aa91906132ff565b60405180910390f35b3480156105bf57600080fd5b506105c86111b5565b6040516105d591906132ff565b60405180910390f35b3480156105ea57600080fd5b506105f36111de565b60405161060091906133d3565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190612b21565b611270565b60405161063d9190613755565b60405180910390f35b34801561065257600080fd5b5061065b6112b9565b6040516106689190613755565b60405180910390f35b61068b60048036038101906106869190612db8565b6112be565b005b34801561069957600080fd5b506106b460048036038101906106af9190612c91565b61166f565b005b3480156106c257600080fd5b506106cb6117f0565b6040516106d89190613755565b60405180910390f35b3480156106ed57600080fd5b506106f66117f6565b6040516107039190613755565b60405180910390f35b34801561071857600080fd5b506107216117fc565b005b34801561072f57600080fd5b5061074a60048036038101906107459190612c0e565b6118a4565b005b34801561075857600080fd5b50610761611906565b60405161076e9190613755565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190612db8565b61190c565b6040516107ab91906133d3565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190612b21565b6119b3565b6040516107e891906133b8565b60405180910390f35b3480156107fd57600080fd5b506108066119d3565b005b34801561081457600080fd5b5061082f600480360381019061082a9190612b21565b611aa0565b60405161083c9190613755565b60405180910390f35b34801561085157600080fd5b5061085a611ae9565b6040516108679190613755565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190612b7b565b611af3565b6040516108a491906133b8565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190612b21565b611b87565b005b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b957506109b882611c7f565b5b9050919050565b600c60009054906101000a900460ff1681565b6060600180546109e290613a27565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a27565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b6000610a7082611ce9565b610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613655565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af582610eed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d906136f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b856108d6565b73ffffffffffffffffffffffffffffffffffffffff161480610bb45750610bb381610bae6108d6565b611af3565b5b610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906135b5565b60405180910390fd5b610bfd8383611d55565b505050565b60105481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613495565b60405180910390fd5b6000610c94611ae9565b47610c9f9190613814565b90506000610cb68383610cb186611270565b611e0e565b90506000811415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390613575565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d4b9190613814565b925050819055508060086000828254610d649190613814565b92505081905550610d758382611e7c565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051610da692919061331a565b60405180910390a1505050565b610dc4610dbe6108d6565b82611f70565b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90613715565b60405180910390fd5b610e0e83838361204e565b505050565b6000600754905090565b610e38838383604051806020016040528060008152506118a4565b505050565b6101f481565b610e4b6108d6565b73ffffffffffffffffffffffffffffffffffffffff16610e696111b5565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690613675565b60405180910390fd5b8181600f9190610ed092919061293a565b505050565b60116020528060005260406000206000915090505481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906135f5565b60405180910390fd5b80915050919050565b600f8054610fac90613a27565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613a27565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906135d5565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ed6108d6565b73ffffffffffffffffffffffffffffffffffffffff1661110b6111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613675565b60405180910390fd5b61116b60006122aa565b565b6000600b828154811061118357611182613b91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111ed90613a27565b80601f016020809104026020016040519081016040528092919081815260200182805461121990613a27565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601981565b600c60009054906101000a900460ff1661130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906133f5565b60405180910390fd5b60196101f461131c9190613814565b60105410156114955760018114611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613735565b60405180910390fd5b600034146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906134f5565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613635565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161d565b6122b8816010546114a69190613814565b11156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906136b5565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115359190613814565b1115611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156d90613595565b60405180910390fd5b80600d54611584919061389b565b3410156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906136d5565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116159190613814565b925050819055505b60005b818110156116525761163f338260105461163a9190613814565b61236e565b808061164a90613a8a565b915050611620565b5080601060008282546116659190613814565b9250508190555050565b6116776108d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906134d5565b60405180910390fd5b80600660006116f26108d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661179f6108d6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117e491906133b8565b60405180910390a35050565b6122b881565b600e5481565b6118046108d6565b73ffffffffffffffffffffffffffffffffffffffff166118226111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613675565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6118b56118af6108d6565b83611f70565b6118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613715565b60405180910390fd5b6119008484848461253c565b50505050565b600d5481565b606061191782611ce9565b611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613415565b60405180910390fd5b6000611960612598565b9050600081511161198057604051806020016040528060008152506119ab565b8061198a8461262a565b60405160200161199b9291906132bb565b6040516020818303038152906040525b915050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b6119db6108d6565b73ffffffffffffffffffffffffffffffffffffffff166119f96111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613675565b60405180910390fd5b60005b6019811015611a8357611a723382601054611a6d9190613814565b61236e565b80611a7c90613a8a565b9050611a52565b50601960106000828254611a979190613814565b92505081905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b8f6108d6565b73ffffffffffffffffffffffffffffffffffffffff16611bad6111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613455565b60405180910390fd5b611c7c816122aa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dc883610eed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485611e5f919061389b565b611e69919061386a565b611e7391906138f5565b90509392505050565b80471015611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613535565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ee5906132ea565b60006040518083038185875af1925050503d8060008114611f22576040519150601f19603f3d011682016040523d82523d6000602084013e611f27565b606091505b5050905080611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613515565b60405180910390fd5b505050565b6000611f7b82611ce9565b611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613555565b60405180910390fd5b6000611fc583610eed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203457508373ffffffffffffffffffffffffffffffffffffffff1661201c84610a65565b73ffffffffffffffffffffffffffffffffffffffff16145b8061204557506120448185611af3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661206e82610eed565b73ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613695565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b906134b5565b60405180910390fd5b61213f83838361278b565b61214a600082611d55565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a91906138f5565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f19190613814565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d590613615565b60405180910390fd5b6123e781611ce9565b15612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e90613475565b60405180910390fd5b6124336000838361278b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124839190613814565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61254784848461204e565b61255384848484612790565b612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990613435565b60405180910390fd5b50505050565b6060600f80546125a790613a27565b80601f01602080910402602001604051908101604052809291908181526020018280546125d390613a27565b80156126205780601f106125f557610100808354040283529160200191612620565b820191906000526020600020905b81548152906001019060200180831161260357829003601f168201915b5050505050905090565b60606000821415612672576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612786565b600082905060005b600082146126a457808061268d90613a8a565b915050600a8261269d919061386a565b915061267a565b60008167ffffffffffffffff8111156126c0576126bf613bc0565b5b6040519080825280601f01601f1916602001820160405280156126f25781602001600182028036833780820191505090505b5090505b6000851461277f5760018261270b91906138f5565b9150600a8561271a9190613ad3565b60306127269190613814565b60f81b81838151811061273c5761273b613b91565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612778919061386a565b94506126f6565b8093505050505b919050565b505050565b60006127b18473ffffffffffffffffffffffffffffffffffffffff16612927565b1561291a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127da6108d6565b8786866040518563ffffffff1660e01b81526004016127fc9493929190613343565b602060405180830381600087803b15801561281657600080fd5b505af192505050801561284757506040513d601f19601f820116820180604052508101906128449190612d3e565b60015b6128ca573d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b506000815114156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990613435565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291f565b600190505b949350505050565b600080823b905060008111915050919050565b82805461294690613a27565b90600052602060002090601f01602090048101928261296857600085556129af565b82601f1061298157803560ff19168380011785556129af565b828001600101855582156129af579182015b828111156129ae578235825591602001919060010190612993565b5b5090506129bc91906129c0565b5090565b5b808211156129d95760008160009055506001016129c1565b5090565b60006129f06129eb84613795565b613770565b905082815260208101848484011115612a0c57612a0b613bfe565b5b612a178482856139e5565b509392505050565b600081359050612a2e816142d7565b92915050565b600081359050612a43816142ee565b92915050565b600081359050612a5881614305565b92915050565b600081359050612a6d8161431c565b92915050565b600081519050612a828161431c565b92915050565b600082601f830112612a9d57612a9c613bf4565b5b8135612aad8482602086016129dd565b91505092915050565b60008083601f840112612acc57612acb613bf4565b5b8235905067ffffffffffffffff811115612ae957612ae8613bef565b5b602083019150836001820283011115612b0557612b04613bf9565b5b9250929050565b600081359050612b1b81614333565b92915050565b600060208284031215612b3757612b36613c08565b5b6000612b4584828501612a1f565b91505092915050565b600060208284031215612b6457612b63613c08565b5b6000612b7284828501612a34565b91505092915050565b60008060408385031215612b9257612b91613c08565b5b6000612ba085828601612a1f565b9250506020612bb185828601612a1f565b9150509250929050565b600080600060608486031215612bd457612bd3613c08565b5b6000612be286828701612a1f565b9350506020612bf386828701612a1f565b9250506040612c0486828701612b0c565b9150509250925092565b60008060008060808587031215612c2857612c27613c08565b5b6000612c3687828801612a1f565b9450506020612c4787828801612a1f565b9350506040612c5887828801612b0c565b925050606085013567ffffffffffffffff811115612c7957612c78613c03565b5b612c8587828801612a88565b91505092959194509250565b60008060408385031215612ca857612ca7613c08565b5b6000612cb685828601612a1f565b9250506020612cc785828601612a49565b9150509250929050565b60008060408385031215612ce857612ce7613c08565b5b6000612cf685828601612a1f565b9250506020612d0785828601612b0c565b9150509250929050565b600060208284031215612d2757612d26613c08565b5b6000612d3584828501612a5e565b91505092915050565b600060208284031215612d5457612d53613c08565b5b6000612d6284828501612a73565b91505092915050565b60008060208385031215612d8257612d81613c08565b5b600083013567ffffffffffffffff811115612da057612d9f613c03565b5b612dac85828601612ab6565b92509250509250929050565b600060208284031215612dce57612dcd613c08565b5b6000612ddc84828501612b0c565b91505092915050565b612dee816139af565b82525050565b612dfd81613929565b82525050565b612e0c8161394d565b82525050565b6000612e1d826137c6565b612e2781856137dc565b9350612e378185602086016139f4565b612e4081613c0d565b840191505092915050565b6000612e56826137d1565b612e6081856137f8565b9350612e708185602086016139f4565b612e7981613c0d565b840191505092915050565b6000612e8f826137d1565b612e998185613809565b9350612ea98185602086016139f4565b80840191505092915050565b6000612ec26008836137f8565b9150612ecd82613c1e565b602082019050919050565b6000612ee56021836137f8565b9150612ef082613c47565b604082019050919050565b6000612f086032836137f8565b9150612f1382613c96565b604082019050919050565b6000612f2b6026836137f8565b9150612f3682613ce5565b604082019050919050565b6000612f4e601c836137f8565b9150612f5982613d34565b602082019050919050565b6000612f716026836137f8565b9150612f7c82613d5d565b604082019050919050565b6000612f946024836137f8565b9150612f9f82613dac565b604082019050919050565b6000612fb76019836137f8565b9150612fc282613dfb565b602082019050919050565b6000612fda6004836137f8565b9150612fe582613e24565b602082019050919050565b6000612ffd603a836137f8565b915061300882613e4d565b604082019050919050565b6000613020601d836137f8565b915061302b82613e9c565b602082019050919050565b6000613043602c836137f8565b915061304e82613ec5565b604082019050919050565b6000613066602b836137f8565b915061307182613f14565b604082019050919050565b6000613089600c836137f8565b915061309482613f63565b602082019050919050565b60006130ac6038836137f8565b91506130b782613f8c565b604082019050919050565b60006130cf602a836137f8565b91506130da82613fdb565b604082019050919050565b60006130f26029836137f8565b91506130fd8261402a565b604082019050919050565b60006131156020836137f8565b915061312082614079565b602082019050919050565b60006131386003836137f8565b9150613143826140a2565b602082019050919050565b600061315b602c836137f8565b9150613166826140cb565b604082019050919050565b600061317e600583613809565b91506131898261411a565b600582019050919050565b60006131a16020836137f8565b91506131ac82614143565b602082019050919050565b60006131c46029836137f8565b91506131cf8261416c565b604082019050919050565b60006131e76008836137f8565b91506131f2826141bb565b602082019050919050565b600061320a600a836137f8565b9150613215826141e4565b602082019050919050565b600061322d6021836137f8565b91506132388261420d565b604082019050919050565b60006132506000836137ed565b915061325b8261425c565b600082019050919050565b60006132736031836137f8565b915061327e8261425f565b604082019050919050565b60006132966008836137f8565b91506132a1826142ae565b602082019050919050565b6132b5816139a5565b82525050565b60006132c78285612e84565b91506132d38284612e84565b91506132de82613171565b91508190509392505050565b60006132f582613243565b9150819050919050565b60006020820190506133146000830184612df4565b92915050565b600060408201905061332f6000830185612de5565b61333c60208301846132ac565b9392505050565b60006080820190506133586000830187612df4565b6133656020830186612df4565b61337260408301856132ac565b81810360608301526133848184612e12565b905095945050505050565b60006040820190506133a46000830185612df4565b6133b160208301846132ac565b9392505050565b60006020820190506133cd6000830184612e03565b92915050565b600060208201905081810360008301526133ed8184612e4b565b905092915050565b6000602082019050818103600083015261340e81612eb5565b9050919050565b6000602082019050818103600083015261342e81612ed8565b9050919050565b6000602082019050818103600083015261344e81612efb565b9050919050565b6000602082019050818103600083015261346e81612f1e565b9050919050565b6000602082019050818103600083015261348e81612f41565b9050919050565b600060208201905081810360008301526134ae81612f64565b9050919050565b600060208201905081810360008301526134ce81612f87565b9050919050565b600060208201905081810360008301526134ee81612faa565b9050919050565b6000602082019050818103600083015261350e81612fcd565b9050919050565b6000602082019050818103600083015261352e81612ff0565b9050919050565b6000602082019050818103600083015261354e81613013565b9050919050565b6000602082019050818103600083015261356e81613036565b9050919050565b6000602082019050818103600083015261358e81613059565b9050919050565b600060208201905081810360008301526135ae8161307c565b9050919050565b600060208201905081810360008301526135ce8161309f565b9050919050565b600060208201905081810360008301526135ee816130c2565b9050919050565b6000602082019050818103600083015261360e816130e5565b9050919050565b6000602082019050818103600083015261362e81613108565b9050919050565b6000602082019050818103600083015261364e8161312b565b9050919050565b6000602082019050818103600083015261366e8161314e565b9050919050565b6000602082019050818103600083015261368e81613194565b9050919050565b600060208201905081810360008301526136ae816131b7565b9050919050565b600060208201905081810360008301526136ce816131da565b9050919050565b600060208201905081810360008301526136ee816131fd565b9050919050565b6000602082019050818103600083015261370e81613220565b9050919050565b6000602082019050818103600083015261372e81613266565b9050919050565b6000602082019050818103600083015261374e81613289565b9050919050565b600060208201905061376a60008301846132ac565b92915050565b600061377a61378b565b90506137868282613a59565b919050565b6000604051905090565b600067ffffffffffffffff8211156137b0576137af613bc0565b5b6137b982613c0d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061381f826139a5565b915061382a836139a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385f5761385e613b04565b5b828201905092915050565b6000613875826139a5565b9150613880836139a5565b9250826138905761388f613b33565b5b828204905092915050565b60006138a6826139a5565b91506138b1836139a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ea576138e9613b04565b5b828202905092915050565b6000613900826139a5565b915061390b836139a5565b92508282101561391e5761391d613b04565b5b828203905092915050565b600061393482613985565b9050919050565b600061394682613985565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139ba826139c1565b9050919050565b60006139cc826139d3565b9050919050565b60006139de82613985565b9050919050565b82818337600083830152505050565b60005b83811015613a125780820151818401526020810190506139f7565b83811115613a21576000848401525b50505050565b60006002820490506001821680613a3f57607f821691505b60208210811415613a5357613a52613b62565b5b50919050565b613a6282613c0d565b810181811067ffffffffffffffff82111715613a8157613a80613bc0565b5b80604052505050565b6000613a95826139a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac857613ac7613b04565b5b600182019050919050565b6000613ade826139a5565b9150613ae9836139a5565b925082613af957613af8613b33565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f494e414354495645000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4652454500000000000000000000000000000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b7f594f552041524520444f4e450000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5041590000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f544f4f204d554348000000000000000000000000000000000000000000000000600082015250565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4a555354204f4e45000000000000000000000000000000000000000000000000600082015250565b6142e081613929565b81146142eb57600080fd5b50565b6142f78161393b565b811461430257600080fd5b50565b61430e8161394d565b811461431957600080fd5b50565b61432581613959565b811461433057600080fd5b50565b61433c816139a5565b811461434757600080fd5b5056fea26469706673582212206fc99416e8ea4d00627fc504ca115aae8f73156c8841b2a3a22a1a262b5c906664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7374726565742d6170652d736f63696574792f6d657461646174612f00000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a377f8ac970410fc3a74f528ee1bd21b7be85bf300000000000000000000000018475c0c381524b148bfdfc16aa005e71411976d000000000000000000000000aea5f9416741f249a10560655d6ff13584dece0b000000000000000000000000f74344e4c2dfdc9ab5ddf6e95379c7119e2bbc5600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000055

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638da5cb5b11610118578063b88d4fde116100a0578063cd3293de1161006f578063cd3293de146107f1578063ce7c2ac214610808578063e33b7de314610845578063e985e9c514610870578063f2fde38b146108ad5761025a565b8063b88d4fde14610723578063c57981b51461074c578063c87b56dd14610777578063c9b5bb17146107b45761025a565b8063a0712d68116100e7578063a0712d6814610671578063a22cb4651461068d578063a87228cc146106b6578063af8214ef146106e1578063b4ac0dfc1461070c5761025a565b80638da5cb5b146105b357806395d89b41146105de5780639852595c146106095780639d2cc436146106465761025a565b806342842e0e1161019b5780636352211e1161016a5780636352211e146104ba5780636c0360eb146104f757806370a0823114610522578063715018a61461055f5780638b83209b146105765761025a565b806342842e0e14610400578063479981571461042957806355f804b31461045457806360d3721f1461047d5761025a565b8063095ea7b3116101e2578063095ea7b31461032f57806318160ddd14610358578063191655871461038357806323b872dd146103ac5780633a98ef39146103d55761025a565b806301ffc9a71461025f57806302fb0c5e1461029c57806306fdde03146102c7578063081812fc146102f25761025a565b3661025a577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706102416108d6565b3460405161025092919061338f565b60405180910390a1005b600080fd5b34801561026b57600080fd5b5061028660048036038101906102819190612d11565b6108de565b60405161029391906133b8565b60405180910390f35b3480156102a857600080fd5b506102b16109c0565b6040516102be91906133b8565b60405180910390f35b3480156102d357600080fd5b506102dc6109d3565b6040516102e991906133d3565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612db8565b610a65565b60405161032691906132ff565b60405180910390f35b34801561033b57600080fd5b5061035660048036038101906103519190612cd1565b610aea565b005b34801561036457600080fd5b5061036d610c02565b60405161037a9190613755565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190612b4e565b610c08565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612bbb565b610db3565b005b3480156103e157600080fd5b506103ea610e13565b6040516103f79190613755565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190612bbb565b610e1d565b005b34801561043557600080fd5b5061043e610e3d565b60405161044b9190613755565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612d6b565b610e43565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612b21565b610ed5565b6040516104b19190613755565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190612db8565b610eed565b6040516104ee91906132ff565b60405180910390f35b34801561050357600080fd5b5061050c610f9f565b60405161051991906133d3565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190612b21565b61102d565b6040516105569190613755565b60405180910390f35b34801561056b57600080fd5b506105746110e5565b005b34801561058257600080fd5b5061059d60048036038101906105989190612db8565b61116d565b6040516105aa91906132ff565b60405180910390f35b3480156105bf57600080fd5b506105c86111b5565b6040516105d591906132ff565b60405180910390f35b3480156105ea57600080fd5b506105f36111de565b60405161060091906133d3565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190612b21565b611270565b60405161063d9190613755565b60405180910390f35b34801561065257600080fd5b5061065b6112b9565b6040516106689190613755565b60405180910390f35b61068b60048036038101906106869190612db8565b6112be565b005b34801561069957600080fd5b506106b460048036038101906106af9190612c91565b61166f565b005b3480156106c257600080fd5b506106cb6117f0565b6040516106d89190613755565b60405180910390f35b3480156106ed57600080fd5b506106f66117f6565b6040516107039190613755565b60405180910390f35b34801561071857600080fd5b506107216117fc565b005b34801561072f57600080fd5b5061074a60048036038101906107459190612c0e565b6118a4565b005b34801561075857600080fd5b50610761611906565b60405161076e9190613755565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190612db8565b61190c565b6040516107ab91906133d3565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190612b21565b6119b3565b6040516107e891906133b8565b60405180910390f35b3480156107fd57600080fd5b506108066119d3565b005b34801561081457600080fd5b5061082f600480360381019061082a9190612b21565b611aa0565b60405161083c9190613755565b60405180910390f35b34801561085157600080fd5b5061085a611ae9565b6040516108679190613755565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190612b7b565b611af3565b6040516108a491906133b8565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190612b21565b611b87565b005b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109b957506109b882611c7f565b5b9050919050565b600c60009054906101000a900460ff1681565b6060600180546109e290613a27565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a27565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b6000610a7082611ce9565b610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613655565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af582610eed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d906136f5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b856108d6565b73ffffffffffffffffffffffffffffffffffffffff161480610bb45750610bb381610bae6108d6565b611af3565b5b610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906135b5565b60405180910390fd5b610bfd8383611d55565b505050565b60105481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613495565b60405180910390fd5b6000610c94611ae9565b47610c9f9190613814565b90506000610cb68383610cb186611270565b611e0e565b90506000811415610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390613575565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d4b9190613814565b925050819055508060086000828254610d649190613814565b92505081905550610d758382611e7c565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051610da692919061331a565b60405180910390a1505050565b610dc4610dbe6108d6565b82611f70565b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90613715565b60405180910390fd5b610e0e83838361204e565b505050565b6000600754905090565b610e38838383604051806020016040528060008152506118a4565b505050565b6101f481565b610e4b6108d6565b73ffffffffffffffffffffffffffffffffffffffff16610e696111b5565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690613675565b60405180910390fd5b8181600f9190610ed092919061293a565b505050565b60116020528060005260406000206000915090505481565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d906135f5565b60405180910390fd5b80915050919050565b600f8054610fac90613a27565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd890613a27565b80156110255780601f10610ffa57610100808354040283529160200191611025565b820191906000526020600020905b81548152906001019060200180831161100857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906135d5565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ed6108d6565b73ffffffffffffffffffffffffffffffffffffffff1661110b6111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613675565b60405180910390fd5b61116b60006122aa565b565b6000600b828154811061118357611182613b91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546111ed90613a27565b80601f016020809104026020016040519081016040528092919081815260200182805461121990613a27565b80156112665780601f1061123b57610100808354040283529160200191611266565b820191906000526020600020905b81548152906001019060200180831161124957829003601f168201915b5050505050905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601981565b600c60009054906101000a900460ff1661130d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611304906133f5565b60405180910390fd5b60196101f461131c9190613814565b60105410156114955760018114611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613735565b60405180910390fd5b600034146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906134f5565b60405180910390fd5b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90613635565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061161d565b6122b8816010546114a69190613814565b11156114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de906136b5565b60405180910390fd5b600e5481601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115359190613814565b1115611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156d90613595565b60405180910390fd5b80600d54611584919061389b565b3410156115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd906136d5565b60405180910390fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116159190613814565b925050819055505b60005b818110156116525761163f338260105461163a9190613814565b61236e565b808061164a90613a8a565b915050611620565b5080601060008282546116659190613814565b9250508190555050565b6116776108d6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc906134d5565b60405180910390fd5b80600660006116f26108d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661179f6108d6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117e491906133b8565b60405180910390a35050565b6122b881565b600e5481565b6118046108d6565b73ffffffffffffffffffffffffffffffffffffffff166118226111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90613675565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6118b56118af6108d6565b83611f70565b6118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613715565b60405180910390fd5b6119008484848461253c565b50505050565b600d5481565b606061191782611ce9565b611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613415565b60405180910390fd5b6000611960612598565b9050600081511161198057604051806020016040528060008152506119ab565b8061198a8461262a565b60405160200161199b9291906132bb565b6040516020818303038152906040525b915050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b6119db6108d6565b73ffffffffffffffffffffffffffffffffffffffff166119f96111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613675565b60405180910390fd5b60005b6019811015611a8357611a723382601054611a6d9190613814565b61236e565b80611a7c90613a8a565b9050611a52565b50601960106000828254611a979190613814565b92505081905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600854905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b8f6108d6565b73ffffffffffffffffffffffffffffffffffffffff16611bad6111b5565b73ffffffffffffffffffffffffffffffffffffffff1614611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a90613455565b60405180910390fd5b611c7c816122aa565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dc883610eed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600754600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485611e5f919061389b565b611e69919061386a565b611e7391906138f5565b90509392505050565b80471015611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690613535565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ee5906132ea565b60006040518083038185875af1925050503d8060008114611f22576040519150601f19603f3d011682016040523d82523d6000602084013e611f27565b606091505b5050905080611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290613515565b60405180910390fd5b505050565b6000611f7b82611ce9565b611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613555565b60405180910390fd5b6000611fc583610eed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203457508373ffffffffffffffffffffffffffffffffffffffff1661201c84610a65565b73ffffffffffffffffffffffffffffffffffffffff16145b8061204557506120448185611af3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661206e82610eed565b73ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90613695565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b906134b5565b60405180910390fd5b61213f83838361278b565b61214a600082611d55565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461219a91906138f5565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121f19190613814565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d590613615565b60405180910390fd5b6123e781611ce9565b15612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e90613475565b60405180910390fd5b6124336000838361278b565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124839190613814565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b61254784848461204e565b61255384848484612790565b612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990613435565b60405180910390fd5b50505050565b6060600f80546125a790613a27565b80601f01602080910402602001604051908101604052809291908181526020018280546125d390613a27565b80156126205780601f106125f557610100808354040283529160200191612620565b820191906000526020600020905b81548152906001019060200180831161260357829003601f168201915b5050505050905090565b60606000821415612672576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612786565b600082905060005b600082146126a457808061268d90613a8a565b915050600a8261269d919061386a565b915061267a565b60008167ffffffffffffffff8111156126c0576126bf613bc0565b5b6040519080825280601f01601f1916602001820160405280156126f25781602001600182028036833780820191505090505b5090505b6000851461277f5760018261270b91906138f5565b9150600a8561271a9190613ad3565b60306127269190613814565b60f81b81838151811061273c5761273b613b91565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612778919061386a565b94506126f6565b8093505050505b919050565b505050565b60006127b18473ffffffffffffffffffffffffffffffffffffffff16612927565b1561291a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127da6108d6565b8786866040518563ffffffff1660e01b81526004016127fc9493929190613343565b602060405180830381600087803b15801561281657600080fd5b505af192505050801561284757506040513d601f19601f820116820180604052508101906128449190612d3e565b60015b6128ca573d8060008114612877576040519150601f19603f3d011682016040523d82523d6000602084013e61287c565b606091505b506000815114156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990613435565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061291f565b600190505b949350505050565b600080823b905060008111915050919050565b82805461294690613a27565b90600052602060002090601f01602090048101928261296857600085556129af565b82601f1061298157803560ff19168380011785556129af565b828001600101855582156129af579182015b828111156129ae578235825591602001919060010190612993565b5b5090506129bc91906129c0565b5090565b5b808211156129d95760008160009055506001016129c1565b5090565b60006129f06129eb84613795565b613770565b905082815260208101848484011115612a0c57612a0b613bfe565b5b612a178482856139e5565b509392505050565b600081359050612a2e816142d7565b92915050565b600081359050612a43816142ee565b92915050565b600081359050612a5881614305565b92915050565b600081359050612a6d8161431c565b92915050565b600081519050612a828161431c565b92915050565b600082601f830112612a9d57612a9c613bf4565b5b8135612aad8482602086016129dd565b91505092915050565b60008083601f840112612acc57612acb613bf4565b5b8235905067ffffffffffffffff811115612ae957612ae8613bef565b5b602083019150836001820283011115612b0557612b04613bf9565b5b9250929050565b600081359050612b1b81614333565b92915050565b600060208284031215612b3757612b36613c08565b5b6000612b4584828501612a1f565b91505092915050565b600060208284031215612b6457612b63613c08565b5b6000612b7284828501612a34565b91505092915050565b60008060408385031215612b9257612b91613c08565b5b6000612ba085828601612a1f565b9250506020612bb185828601612a1f565b9150509250929050565b600080600060608486031215612bd457612bd3613c08565b5b6000612be286828701612a1f565b9350506020612bf386828701612a1f565b9250506040612c0486828701612b0c565b9150509250925092565b60008060008060808587031215612c2857612c27613c08565b5b6000612c3687828801612a1f565b9450506020612c4787828801612a1f565b9350506040612c5887828801612b0c565b925050606085013567ffffffffffffffff811115612c7957612c78613c03565b5b612c8587828801612a88565b91505092959194509250565b60008060408385031215612ca857612ca7613c08565b5b6000612cb685828601612a1f565b9250506020612cc785828601612a49565b9150509250929050565b60008060408385031215612ce857612ce7613c08565b5b6000612cf685828601612a1f565b9250506020612d0785828601612b0c565b9150509250929050565b600060208284031215612d2757612d26613c08565b5b6000612d3584828501612a5e565b91505092915050565b600060208284031215612d5457612d53613c08565b5b6000612d6284828501612a73565b91505092915050565b60008060208385031215612d8257612d81613c08565b5b600083013567ffffffffffffffff811115612da057612d9f613c03565b5b612dac85828601612ab6565b92509250509250929050565b600060208284031215612dce57612dcd613c08565b5b6000612ddc84828501612b0c565b91505092915050565b612dee816139af565b82525050565b612dfd81613929565b82525050565b612e0c8161394d565b82525050565b6000612e1d826137c6565b612e2781856137dc565b9350612e378185602086016139f4565b612e4081613c0d565b840191505092915050565b6000612e56826137d1565b612e6081856137f8565b9350612e708185602086016139f4565b612e7981613c0d565b840191505092915050565b6000612e8f826137d1565b612e998185613809565b9350612ea98185602086016139f4565b80840191505092915050565b6000612ec26008836137f8565b9150612ecd82613c1e565b602082019050919050565b6000612ee56021836137f8565b9150612ef082613c47565b604082019050919050565b6000612f086032836137f8565b9150612f1382613c96565b604082019050919050565b6000612f2b6026836137f8565b9150612f3682613ce5565b604082019050919050565b6000612f4e601c836137f8565b9150612f5982613d34565b602082019050919050565b6000612f716026836137f8565b9150612f7c82613d5d565b604082019050919050565b6000612f946024836137f8565b9150612f9f82613dac565b604082019050919050565b6000612fb76019836137f8565b9150612fc282613dfb565b602082019050919050565b6000612fda6004836137f8565b9150612fe582613e24565b602082019050919050565b6000612ffd603a836137f8565b915061300882613e4d565b604082019050919050565b6000613020601d836137f8565b915061302b82613e9c565b602082019050919050565b6000613043602c836137f8565b915061304e82613ec5565b604082019050919050565b6000613066602b836137f8565b915061307182613f14565b604082019050919050565b6000613089600c836137f8565b915061309482613f63565b602082019050919050565b60006130ac6038836137f8565b91506130b782613f8c565b604082019050919050565b60006130cf602a836137f8565b91506130da82613fdb565b604082019050919050565b60006130f26029836137f8565b91506130fd8261402a565b604082019050919050565b60006131156020836137f8565b915061312082614079565b602082019050919050565b60006131386003836137f8565b9150613143826140a2565b602082019050919050565b600061315b602c836137f8565b9150613166826140cb565b604082019050919050565b600061317e600583613809565b91506131898261411a565b600582019050919050565b60006131a16020836137f8565b91506131ac82614143565b602082019050919050565b60006131c46029836137f8565b91506131cf8261416c565b604082019050919050565b60006131e76008836137f8565b91506131f2826141bb565b602082019050919050565b600061320a600a836137f8565b9150613215826141e4565b602082019050919050565b600061322d6021836137f8565b91506132388261420d565b604082019050919050565b60006132506000836137ed565b915061325b8261425c565b600082019050919050565b60006132736031836137f8565b915061327e8261425f565b604082019050919050565b60006132966008836137f8565b91506132a1826142ae565b602082019050919050565b6132b5816139a5565b82525050565b60006132c78285612e84565b91506132d38284612e84565b91506132de82613171565b91508190509392505050565b60006132f582613243565b9150819050919050565b60006020820190506133146000830184612df4565b92915050565b600060408201905061332f6000830185612de5565b61333c60208301846132ac565b9392505050565b60006080820190506133586000830187612df4565b6133656020830186612df4565b61337260408301856132ac565b81810360608301526133848184612e12565b905095945050505050565b60006040820190506133a46000830185612df4565b6133b160208301846132ac565b9392505050565b60006020820190506133cd6000830184612e03565b92915050565b600060208201905081810360008301526133ed8184612e4b565b905092915050565b6000602082019050818103600083015261340e81612eb5565b9050919050565b6000602082019050818103600083015261342e81612ed8565b9050919050565b6000602082019050818103600083015261344e81612efb565b9050919050565b6000602082019050818103600083015261346e81612f1e565b9050919050565b6000602082019050818103600083015261348e81612f41565b9050919050565b600060208201905081810360008301526134ae81612f64565b9050919050565b600060208201905081810360008301526134ce81612f87565b9050919050565b600060208201905081810360008301526134ee81612faa565b9050919050565b6000602082019050818103600083015261350e81612fcd565b9050919050565b6000602082019050818103600083015261352e81612ff0565b9050919050565b6000602082019050818103600083015261354e81613013565b9050919050565b6000602082019050818103600083015261356e81613036565b9050919050565b6000602082019050818103600083015261358e81613059565b9050919050565b600060208201905081810360008301526135ae8161307c565b9050919050565b600060208201905081810360008301526135ce8161309f565b9050919050565b600060208201905081810360008301526135ee816130c2565b9050919050565b6000602082019050818103600083015261360e816130e5565b9050919050565b6000602082019050818103600083015261362e81613108565b9050919050565b6000602082019050818103600083015261364e8161312b565b9050919050565b6000602082019050818103600083015261366e8161314e565b9050919050565b6000602082019050818103600083015261368e81613194565b9050919050565b600060208201905081810360008301526136ae816131b7565b9050919050565b600060208201905081810360008301526136ce816131da565b9050919050565b600060208201905081810360008301526136ee816131fd565b9050919050565b6000602082019050818103600083015261370e81613220565b9050919050565b6000602082019050818103600083015261372e81613266565b9050919050565b6000602082019050818103600083015261374e81613289565b9050919050565b600060208201905061376a60008301846132ac565b92915050565b600061377a61378b565b90506137868282613a59565b919050565b6000604051905090565b600067ffffffffffffffff8211156137b0576137af613bc0565b5b6137b982613c0d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061381f826139a5565b915061382a836139a5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385f5761385e613b04565b5b828201905092915050565b6000613875826139a5565b9150613880836139a5565b9250826138905761388f613b33565b5b828204905092915050565b60006138a6826139a5565b91506138b1836139a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ea576138e9613b04565b5b828202905092915050565b6000613900826139a5565b915061390b836139a5565b92508282101561391e5761391d613b04565b5b828203905092915050565b600061393482613985565b9050919050565b600061394682613985565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006139ba826139c1565b9050919050565b60006139cc826139d3565b9050919050565b60006139de82613985565b9050919050565b82818337600083830152505050565b60005b83811015613a125780820151818401526020810190506139f7565b83811115613a21576000848401525b50505050565b60006002820490506001821680613a3f57607f821691505b60208210811415613a5357613a52613b62565b5b50919050565b613a6282613c0d565b810181811067ffffffffffffffff82111715613a8157613a80613bc0565b5b80604052505050565b6000613a95826139a5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ac857613ac7613b04565b5b600182019050919050565b6000613ade826139a5565b9150613ae9836139a5565b925082613af957613af8613b33565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f494e414354495645000000000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4652454500000000000000000000000000000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b7f594f552041524520444f4e450000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f5041590000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f544f4f204d554348000000000000000000000000000000000000000000000000600082015250565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4a555354204f4e45000000000000000000000000000000000000000000000000600082015250565b6142e081613929565b81146142eb57600080fd5b50565b6142f78161393b565b811461430257600080fd5b50565b61430e8161394d565b811461431957600080fd5b50565b61432581613959565b811461433057600080fd5b50565b61433c816139a5565b811461434757600080fd5b5056fea26469706673582212206fc99416e8ea4d00627fc504ca115aae8f73156c8841b2a3a22a1a262b5c906664736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7374726565742d6170652d736f63696574792f6d657461646174612f00000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000a377f8ac970410fc3a74f528ee1bd21b7be85bf300000000000000000000000018475c0c381524b148bfdfc16aa005e71411976d000000000000000000000000aea5f9416741f249a10560655d6ff13584dece0b000000000000000000000000f74344e4c2dfdc9ab5ddf6e95379c7119e2bbc5600000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000055

-----Decoded View---------------
Arg [0] : tokenBaseURI (string): https://storage.googleapis.com/street-ape-society/metadata/
Arg [1] : payees (address[]): 0xA377F8aC970410FC3A74F528EE1Bd21b7bE85bf3,0x18475c0C381524B148Bfdfc16aa005E71411976D,0xAea5F9416741F249a10560655d6ff13584DECe0B,0xf74344E4C2Dfdc9aB5DDF6E95379c7119e2bBc56
Arg [2] : shares (uint256[]): 4,4,7,85

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003b
Arg [4] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f73
Arg [5] : 74726565742d6170652d736f63696574792f6d657461646174612f0000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 000000000000000000000000a377f8ac970410fc3a74f528ee1bd21b7be85bf3
Arg [8] : 00000000000000000000000018475c0c381524b148bfdfc16aa005e71411976d
Arg [9] : 000000000000000000000000aea5f9416741f249a10560655d6ff13584dece0b
Arg [10] : 000000000000000000000000f74344e4c2dfdc9ab5ddf6e95379c7119e2bbc56
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000055


Deployed Bytecode Sourcemap

41756:2343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38850:40;38866:12;:10;:12::i;:::-;38880:9;38850:40;;;;;;;:::i;:::-;;;;;;;;41756:2343;;;;;21638:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41859:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22571:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24130:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23653:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42112:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40056:566;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25020:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38981:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41928:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43523:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42147:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22265:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42084:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21995:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35337:94;;;;;;;;;;;;;:::i;:::-;;39756:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34686:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22740:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39556:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41969:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42569:748;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24423:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41884:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42050:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42483:78;;;;;;;;;;;;;:::i;:::-;;25686:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42012:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43737:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42196:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43325:190;;;;;;;;;;;;;:::i;:::-;;39352:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39166:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24789:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35586:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2183:98;2236:7;2263:10;2256:17;;2183:98;:::o;21638:293::-;21740:4;21788:25;21773:40;;;:11;:40;;;;:101;;;;21841:33;21826:48;;;:11;:48;;;;21773:101;:150;;;;21887:36;21911:11;21887:23;:36::i;:::-;21773:150;21757:166;;21638:293;;;:::o;41859:18::-;;;;;;;;;;;;;:::o;22571:100::-;22625:13;22658:5;22651:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22571:100;:::o;24130:221::-;24206:7;24234:16;24242:7;24234;:16::i;:::-;24226:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:15;:24;24335:7;24319:24;;;;;;;;;;;;;;;;;;;;;24312:31;;24130:221;;;:::o;23653:411::-;23734:13;23750:23;23765:7;23750:14;:23::i;:::-;23734:39;;23798:5;23792:11;;:2;:11;;;;23784:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23892:5;23876:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23901:37;23918:5;23925:12;:10;:12::i;:::-;23901:16;:37::i;:::-;23876:62;23854:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24035:21;24044:2;24048:7;24035:8;:21::i;:::-;23723:341;23653:411;;:::o;42112:26::-;;;;:::o;40056:566::-;40151:1;40132:7;:16;40140:7;40132:16;;;;;;;;;;;;;;;;:20;40124:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40208:21;40256:15;:13;:15::i;:::-;40232:21;:39;;;;:::i;:::-;40208:63;;40282:15;40300:58;40316:7;40325:13;40340:17;40349:7;40340:8;:17::i;:::-;40300:15;:58::i;:::-;40282:76;;40390:1;40379:7;:12;;40371:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:7;40452:9;:18;40462:7;40452:18;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;40510:7;40492:14;;:25;;;;;;;:::i;:::-;;;;;;;;40530:35;40548:7;40557;40530:17;:35::i;:::-;40581:33;40597:7;40606;40581:33;;;;;;;:::i;:::-;;;;;;;;40113:509;;40056:566;:::o;25020:339::-;25215:41;25234:12;:10;:12::i;:::-;25248:7;25215:18;:41::i;:::-;25207:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25323:28;25333:4;25339:2;25343:7;25323:9;:28::i;:::-;25020:339;;;:::o;38981:91::-;39025:7;39052:12;;39045:19;;38981:91;:::o;25430:185::-;25568:39;25585:4;25591:2;25595:7;25568:39;;;;;;;;;;;;:16;:39::i;:::-;25430:185;;;:::o;41928:34::-;41959:3;41928:34;:::o;43523:90::-;34917:12;:10;:12::i;:::-;34906:23;;:7;:5;:7::i;:::-;:23;;;34898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43602:3:::1;;43592:7;:13;;;;;;;:::i;:::-;;43523:90:::0;;:::o;42147:42::-;;;;;;;;;;;;;;;;;:::o;22265:239::-;22337:7;22357:13;22373:7;:16;22381:7;22373:16;;;;;;;;;;;;;;;;;;;;;22357:32;;22425:1;22408:19;;:5;:19;;;;22400:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22491:5;22484:12;;;22265:239;;;:::o;42084:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21995:208::-;22067:7;22112:1;22095:19;;:5;:19;;;;22087:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22179:9;:16;22189:5;22179:16;;;;;;;;;;;;;;;;22172:23;;21995:208;;;:::o;35337:94::-;34917:12;:10;:12::i;:::-;34906:23;;:7;:5;:7::i;:::-;:23;;;34898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35402:21:::1;35420:1;35402:9;:21::i;:::-;35337:94::o:0;39756:100::-;39807:7;39834;39842:5;39834:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39827:21;;39756:100;;;:::o;34686:87::-;34732:7;34759:6;;;;;;;;;;;34752:13;;34686:87;:::o;22740:104::-;22796:13;22829:7;22822:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22740:104;:::o;39556:109::-;39612:7;39639:9;:18;39649:7;39639:18;;;;;;;;;;;;;;;;39632:25;;39556:109;;;:::o;41969:36::-;42003:2;41969:36;:::o;42569:748::-;42636:6;;;;;;;;;;;42628:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;42003:2;41959:3;42684:14;;;;:::i;:::-;42670:11;;:28;42666:498;;;42734:1;42723:7;:12;42715:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;42784:1;42771:9;:14;42763:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;42818:4;:16;42823:10;42818:16;;;;;;;;;;;;;;;;;;;;;;;;;42817:17;42809:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;42876:4;42857;:16;42862:10;42857:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;42666:498;;;41917:4;42935:7;42921:11;;:21;;;;:::i;:::-;:31;;42913:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43021:5;;43010:7;42988;:19;42996:10;42988:19;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:38;;42980:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43085:7;43079:3;;:13;;;;:::i;:::-;43066:9;:26;;43058:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43145:7;43122;:19;43130:10;43122:19;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;42666:498;43181:9;43176:99;43200:7;43196:1;:11;43176:99;;;43229:34;43235:10;43261:1;43247:11;;:15;;;;:::i;:::-;43229:5;:34::i;:::-;43209:3;;;;;:::i;:::-;;;;43176:99;;;;43302:7;43287:11;;:22;;;;;;;:::i;:::-;;;;;;;;42569:748;:::o;24423:295::-;24538:12;:10;:12::i;:::-;24526:24;;:8;:24;;;;24518:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24638:8;24593:18;:32;24612:12;:10;:12::i;:::-;24593:32;;;;;;;;;;;;;;;:42;24626:8;24593:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24691:8;24662:48;;24677:12;:10;:12::i;:::-;24662:48;;;24701:8;24662:48;;;;;;:::i;:::-;;;;;;;;24423:295;;:::o;41884:37::-;41917:4;41884:37;:::o;42050:25::-;;;;:::o;42483:78::-;34917:12;:10;:12::i;:::-;34906:23;;:7;:5;:7::i;:::-;:23;;;34898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42547:6:::1;;;;;;;;;;;42546:7;42537:6;;:16;;;;;;;;;;;;;;;;;;42483:78::o:0;25686:328::-;25861:41;25880:12;:10;:12::i;:::-;25894:7;25861:18;:41::i;:::-;25853:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25967:39;25981:4;25987:2;25991:7;26000:5;25967:13;:39::i;:::-;25686:328;;;;:::o;42012:31::-;;;;:::o;43737:359::-;43819:13;43853:17;43861:8;43853:7;:17::i;:::-;43845:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43919:28;43950:10;:8;:10::i;:::-;43919:41;;44009:1;43984:14;43978:28;:32;:110;;;;;;;;;;;;;;;;;44037:14;44053:19;:8;:17;:19::i;:::-;44020:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43978:110;43971:117;;;43737:359;;;:::o;42196:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;43325:190::-;34917:12;:10;:12::i;:::-;34906:23;;:7;:5;:7::i;:::-;:23;;;34898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43379:9:::1;43374:99;42003:2;43394:1;:11;43374:99;;;43427:34;43433:10;43459:1;43445:11;;:15;;;;:::i;:::-;43427:5;:34::i;:::-;43407:3;;;;:::i;:::-;;;43374:99;;;;42003:2;43485:11;;:22;;;;;;;:::i;:::-;;;;;;;;43325:190::o:0;39352:105::-;39406:7;39433;:16;39441:7;39433:16;;;;;;;;;;;;;;;;39426:23;;39352:105;;;:::o;39166:95::-;39212:7;39239:14;;39232:21;;39166:95;:::o;24789:164::-;24886:4;24910:18;:25;24929:5;24910:25;;;;;;;;;;;;;;;:35;24936:8;24910:35;;;;;;;;;;;;;;;;;;;;;;;;;24903:42;;24789:164;;;;:::o;35586:192::-;34917:12;:10;:12::i;:::-;34906:23;;:7;:5;:7::i;:::-;:23;;;34898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35695:1:::1;35675:22;;:8;:22;;;;35667:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35751:19;35761:8;35751:9;:19::i;:::-;35586:192:::0;:::o;18208:157::-;18293:4;18332:25;18317:40;;;:11;:40;;;;18310:47;;18208:157;;;:::o;27524:127::-;27589:4;27641:1;27613:30;;:7;:16;27621:7;27613:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27606:37;;27524:127;;;:::o;31506:174::-;31608:2;31581:15;:24;31597:7;31581:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31664:7;31660:2;31626:46;;31635:23;31650:7;31635:14;:23::i;:::-;31626:46;;;;;;;;;;;;31506:174;;:::o;40800:248::-;40946:7;41025:15;41010:12;;40990:7;:16;40998:7;40990:16;;;;;;;;;;;;;;;;40974:13;:32;;;;:::i;:::-;40973:49;;;;:::i;:::-;:67;;;;:::i;:::-;40966:74;;40800:248;;;;;:::o;4427:317::-;4542:6;4517:21;:31;;4509:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4596:12;4614:9;:14;;4636:6;4614:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4595:52;;;4666:7;4658:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;4498:246;4427:317;;:::o;27818:348::-;27911:4;27936:16;27944:7;27936;:16::i;:::-;27928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28012:13;28028:23;28043:7;28028:14;:23::i;:::-;28012:39;;28081:5;28070:16;;:7;:16;;;:51;;;;28114:7;28090:31;;:20;28102:7;28090:11;:20::i;:::-;:31;;;28070:51;:87;;;;28125:32;28142:5;28149:7;28125:16;:32::i;:::-;28070:87;28062:96;;;27818:348;;;;:::o;30810:578::-;30969:4;30942:31;;:23;30957:7;30942:14;:23::i;:::-;:31;;;30934:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31052:1;31038:16;;:2;:16;;;;31030:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31108:39;31129:4;31135:2;31139:7;31108:20;:39::i;:::-;31212:29;31229:1;31233:7;31212:8;:29::i;:::-;31273:1;31254:9;:15;31264:4;31254:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31302:1;31285:9;:13;31295:2;31285:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31333:2;31314:7;:16;31322:7;31314:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31372:7;31368:2;31353:27;;31362:4;31353:27;;;;;;;;;;;;30810:578;;;:::o;35786:173::-;35842:16;35861:6;;;;;;;;;;;35842:25;;35887:8;35878:6;;:17;;;;;;;;;;;;;;;;;;35942:8;35911:40;;35932:8;35911:40;;;;;;;;;;;;35831:128;35786:173;:::o;29502:382::-;29596:1;29582:16;;:2;:16;;;;29574:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29655:16;29663:7;29655;:16::i;:::-;29654:17;29646:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29717:45;29746:1;29750:2;29754:7;29717:20;:45::i;:::-;29792:1;29775:9;:13;29785:2;29775:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29823:2;29804:7;:16;29812:7;29804:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29868:7;29864:2;29843:33;;29860:1;29843:33;;;;;;;;;;;;29502:382;;:::o;26896:315::-;27053:28;27063:4;27069:2;27073:7;27053:9;:28::i;:::-;27100:48;27123:4;27129:2;27133:7;27142:5;27100:22;:48::i;:::-;27092:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26896:315;;;;:::o;43621:108::-;43681:13;43714:7;43707:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:108;:::o;18625:723::-;18681:13;18911:1;18902:5;:10;18898:53;;;18929:10;;;;;;;;;;;;;;;;;;;;;18898:53;18961:12;18976:5;18961:20;;18992:14;19017:78;19032:1;19024:4;:9;19017:78;;19050:8;;;;;:::i;:::-;;;;19081:2;19073:10;;;;;:::i;:::-;;;19017:78;;;19105:19;19137:6;19127:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19105:39;;19155:154;19171:1;19162:5;:10;19155:154;;19199:1;19189:11;;;;;:::i;:::-;;;19266:2;19258:5;:10;;;;:::i;:::-;19245:2;:24;;;;:::i;:::-;19232:39;;19215:6;19222;19215:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;19295:2;19286:11;;;;;:::i;:::-;;;19155:154;;;19333:6;19319:21;;;;;18625:723;;;;:::o;33616:126::-;;;;:::o;32245:799::-;32400:4;32421:15;:2;:13;;;:15::i;:::-;32417:620;;;32473:2;32457:36;;;32494:12;:10;:12::i;:::-;32508:4;32514:7;32523:5;32457:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32453:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32716:1;32699:6;:13;:18;32695:272;;;32742:60;;;;;;;;;;:::i;:::-;;;;;;;;32695:272;32917:6;32911:13;32902:6;32898:2;32894:15;32887:38;32453:529;32590:41;;;32580:51;;;:6;:51;;;;32573:58;;;;;32417:620;33021:4;33014:11;;32245:799;;;;;;;:::o;3105:387::-;3165:4;3373:12;3440:7;3428:20;3420:28;;3483:1;3476:4;:8;3469:15;;;3105:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:155::-;622:5;660:6;647:20;638:29;;676:41;711:5;676:41;:::i;:::-;568:155;;;;:::o;729:133::-;772:5;810:6;797:20;788:29;;826:30;850:5;826:30;:::i;:::-;729:133;;;;:::o;868:137::-;913:5;951:6;938:20;929:29;;967:32;993:5;967:32;:::i;:::-;868:137;;;;:::o;1011:141::-;1067:5;1098:6;1092:13;1083:22;;1114:32;1140:5;1114:32;:::i;:::-;1011:141;;;;:::o;1171:338::-;1226:5;1275:3;1268:4;1260:6;1256:17;1252:27;1242:122;;1283:79;;:::i;:::-;1242:122;1400:6;1387:20;1425:78;1499:3;1491:6;1484:4;1476:6;1472:17;1425:78;:::i;:::-;1416:87;;1232:277;1171:338;;;;:::o;1529:553::-;1587:8;1597:6;1647:3;1640:4;1632:6;1628:17;1624:27;1614:122;;1655:79;;:::i;:::-;1614:122;1768:6;1755:20;1745:30;;1798:18;1790:6;1787:30;1784:117;;;1820:79;;:::i;:::-;1784:117;1934:4;1926:6;1922:17;1910:29;;1988:3;1980:4;1972:6;1968:17;1958:8;1954:32;1951:41;1948:128;;;1995:79;;:::i;:::-;1948:128;1529:553;;;;;:::o;2088:139::-;2134:5;2172:6;2159:20;2150:29;;2188:33;2215:5;2188:33;:::i;:::-;2088:139;;;;:::o;2233:329::-;2292:6;2341:2;2329:9;2320:7;2316:23;2312:32;2309:119;;;2347:79;;:::i;:::-;2309:119;2467:1;2492:53;2537:7;2528:6;2517:9;2513:22;2492:53;:::i;:::-;2482:63;;2438:117;2233:329;;;;:::o;2568:345::-;2635:6;2684:2;2672:9;2663:7;2659:23;2655:32;2652:119;;;2690:79;;:::i;:::-;2652:119;2810:1;2835:61;2888:7;2879:6;2868:9;2864:22;2835:61;:::i;:::-;2825:71;;2781:125;2568:345;;;;:::o;2919:474::-;2987:6;2995;3044:2;3032:9;3023:7;3019:23;3015:32;3012:119;;;3050:79;;:::i;:::-;3012:119;3170:1;3195:53;3240:7;3231:6;3220:9;3216:22;3195:53;:::i;:::-;3185:63;;3141:117;3297:2;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3268:118;2919:474;;;;;:::o;3399:619::-;3476:6;3484;3492;3541:2;3529:9;3520:7;3516:23;3512:32;3509:119;;;3547:79;;:::i;:::-;3509:119;3667:1;3692:53;3737:7;3728:6;3717:9;3713:22;3692:53;:::i;:::-;3682:63;;3638:117;3794:2;3820:53;3865:7;3856:6;3845:9;3841:22;3820:53;:::i;:::-;3810:63;;3765:118;3922:2;3948:53;3993:7;3984:6;3973:9;3969:22;3948:53;:::i;:::-;3938:63;;3893:118;3399:619;;;;;:::o;4024:943::-;4119:6;4127;4135;4143;4192:3;4180:9;4171:7;4167:23;4163:33;4160:120;;;4199:79;;:::i;:::-;4160:120;4319:1;4344:53;4389:7;4380:6;4369:9;4365:22;4344:53;:::i;:::-;4334:63;;4290:117;4446:2;4472:53;4517:7;4508:6;4497:9;4493:22;4472:53;:::i;:::-;4462:63;;4417:118;4574:2;4600:53;4645:7;4636:6;4625:9;4621:22;4600:53;:::i;:::-;4590:63;;4545:118;4730:2;4719:9;4715:18;4702:32;4761:18;4753:6;4750:30;4747:117;;;4783:79;;:::i;:::-;4747:117;4888:62;4942:7;4933:6;4922:9;4918:22;4888:62;:::i;:::-;4878:72;;4673:287;4024:943;;;;;;;:::o;4973:468::-;5038:6;5046;5095:2;5083:9;5074:7;5070:23;5066:32;5063:119;;;5101:79;;:::i;:::-;5063:119;5221:1;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5192:117;5348:2;5374:50;5416:7;5407:6;5396:9;5392:22;5374:50;:::i;:::-;5364:60;;5319:115;4973:468;;;;;:::o;5447:474::-;5515:6;5523;5572:2;5560:9;5551:7;5547:23;5543:32;5540:119;;;5578:79;;:::i;:::-;5540:119;5698:1;5723:53;5768:7;5759:6;5748:9;5744:22;5723:53;:::i;:::-;5713:63;;5669:117;5825:2;5851:53;5896:7;5887:6;5876:9;5872:22;5851:53;:::i;:::-;5841:63;;5796:118;5447:474;;;;;:::o;5927:327::-;5985:6;6034:2;6022:9;6013:7;6009:23;6005:32;6002:119;;;6040:79;;:::i;:::-;6002:119;6160:1;6185:52;6229:7;6220:6;6209:9;6205:22;6185:52;:::i;:::-;6175:62;;6131:116;5927:327;;;;:::o;6260:349::-;6329:6;6378:2;6366:9;6357:7;6353:23;6349:32;6346:119;;;6384:79;;:::i;:::-;6346:119;6504:1;6529:63;6584:7;6575:6;6564:9;6560:22;6529:63;:::i;:::-;6519:73;;6475:127;6260:349;;;;:::o;6615:529::-;6686:6;6694;6743:2;6731:9;6722:7;6718:23;6714:32;6711:119;;;6749:79;;:::i;:::-;6711:119;6897:1;6886:9;6882:17;6869:31;6927:18;6919:6;6916:30;6913:117;;;6949:79;;:::i;:::-;6913:117;7062:65;7119:7;7110:6;7099:9;7095:22;7062:65;:::i;:::-;7044:83;;;;6840:297;6615:529;;;;;:::o;7150:329::-;7209:6;7258:2;7246:9;7237:7;7233:23;7229:32;7226:119;;;7264:79;;:::i;:::-;7226:119;7384:1;7409:53;7454:7;7445:6;7434:9;7430:22;7409:53;:::i;:::-;7399:63;;7355:117;7150:329;;;;:::o;7485:147::-;7580:45;7619:5;7580:45;:::i;:::-;7575:3;7568:58;7485:147;;:::o;7638:118::-;7725:24;7743:5;7725:24;:::i;:::-;7720:3;7713:37;7638:118;;:::o;7762:109::-;7843:21;7858:5;7843:21;:::i;:::-;7838:3;7831:34;7762:109;;:::o;7877:360::-;7963:3;7991:38;8023:5;7991:38;:::i;:::-;8045:70;8108:6;8103:3;8045:70;:::i;:::-;8038:77;;8124:52;8169:6;8164:3;8157:4;8150:5;8146:16;8124:52;:::i;:::-;8201:29;8223:6;8201:29;:::i;:::-;8196:3;8192:39;8185:46;;7967:270;7877:360;;;;:::o;8243:364::-;8331:3;8359:39;8392:5;8359:39;:::i;:::-;8414:71;8478:6;8473:3;8414:71;:::i;:::-;8407:78;;8494:52;8539:6;8534:3;8527:4;8520:5;8516:16;8494:52;:::i;:::-;8571:29;8593:6;8571:29;:::i;:::-;8566:3;8562:39;8555:46;;8335:272;8243:364;;;;:::o;8613:377::-;8719:3;8747:39;8780:5;8747:39;:::i;:::-;8802:89;8884:6;8879:3;8802:89;:::i;:::-;8795:96;;8900:52;8945:6;8940:3;8933:4;8926:5;8922:16;8900:52;:::i;:::-;8977:6;8972:3;8968:16;8961:23;;8723:267;8613:377;;;;:::o;8996:365::-;9138:3;9159:66;9223:1;9218:3;9159:66;:::i;:::-;9152:73;;9234:93;9323:3;9234:93;:::i;:::-;9352:2;9347:3;9343:12;9336:19;;8996:365;;;:::o;9367:366::-;9509:3;9530:67;9594:2;9589:3;9530:67;:::i;:::-;9523:74;;9606:93;9695:3;9606:93;:::i;:::-;9724:2;9719:3;9715:12;9708:19;;9367:366;;;:::o;9739:::-;9881:3;9902:67;9966:2;9961:3;9902:67;:::i;:::-;9895:74;;9978:93;10067:3;9978:93;:::i;:::-;10096:2;10091:3;10087:12;10080:19;;9739:366;;;:::o;10111:::-;10253:3;10274:67;10338:2;10333:3;10274:67;:::i;:::-;10267:74;;10350:93;10439:3;10350:93;:::i;:::-;10468:2;10463:3;10459:12;10452:19;;10111:366;;;:::o;10483:::-;10625:3;10646:67;10710:2;10705:3;10646:67;:::i;:::-;10639:74;;10722:93;10811:3;10722:93;:::i;:::-;10840:2;10835:3;10831:12;10824:19;;10483:366;;;:::o;10855:::-;10997:3;11018:67;11082:2;11077:3;11018:67;:::i;:::-;11011:74;;11094:93;11183:3;11094:93;:::i;:::-;11212:2;11207:3;11203:12;11196:19;;10855:366;;;:::o;11227:::-;11369:3;11390:67;11454:2;11449:3;11390:67;:::i;:::-;11383:74;;11466:93;11555:3;11466:93;:::i;:::-;11584:2;11579:3;11575:12;11568:19;;11227:366;;;:::o;11599:::-;11741:3;11762:67;11826:2;11821:3;11762:67;:::i;:::-;11755:74;;11838:93;11927:3;11838:93;:::i;:::-;11956:2;11951:3;11947:12;11940:19;;11599:366;;;:::o;11971:365::-;12113:3;12134:66;12198:1;12193:3;12134:66;:::i;:::-;12127:73;;12209:93;12298:3;12209:93;:::i;:::-;12327:2;12322:3;12318:12;12311:19;;11971:365;;;:::o;12342:366::-;12484:3;12505:67;12569:2;12564:3;12505:67;:::i;:::-;12498:74;;12581:93;12670:3;12581:93;:::i;:::-;12699:2;12694:3;12690:12;12683:19;;12342:366;;;:::o;12714:::-;12856:3;12877:67;12941:2;12936:3;12877:67;:::i;:::-;12870:74;;12953:93;13042:3;12953:93;:::i;:::-;13071:2;13066:3;13062:12;13055:19;;12714:366;;;:::o;13086:::-;13228:3;13249:67;13313:2;13308:3;13249:67;:::i;:::-;13242:74;;13325:93;13414:3;13325:93;:::i;:::-;13443:2;13438:3;13434:12;13427:19;;13086:366;;;:::o;13458:::-;13600:3;13621:67;13685:2;13680:3;13621:67;:::i;:::-;13614:74;;13697:93;13786:3;13697:93;:::i;:::-;13815:2;13810:3;13806:12;13799:19;;13458:366;;;:::o;13830:::-;13972:3;13993:67;14057:2;14052:3;13993:67;:::i;:::-;13986:74;;14069:93;14158:3;14069:93;:::i;:::-;14187:2;14182:3;14178:12;14171:19;;13830:366;;;:::o;14202:::-;14344:3;14365:67;14429:2;14424:3;14365:67;:::i;:::-;14358:74;;14441:93;14530:3;14441:93;:::i;:::-;14559:2;14554:3;14550:12;14543:19;;14202:366;;;:::o;14574:::-;14716:3;14737:67;14801:2;14796:3;14737:67;:::i;:::-;14730:74;;14813:93;14902:3;14813:93;:::i;:::-;14931:2;14926:3;14922:12;14915:19;;14574:366;;;:::o;14946:::-;15088:3;15109:67;15173:2;15168:3;15109:67;:::i;:::-;15102:74;;15185:93;15274:3;15185:93;:::i;:::-;15303:2;15298:3;15294:12;15287:19;;14946:366;;;:::o;15318:::-;15460:3;15481:67;15545:2;15540:3;15481:67;:::i;:::-;15474:74;;15557:93;15646:3;15557:93;:::i;:::-;15675:2;15670:3;15666:12;15659:19;;15318:366;;;:::o;15690:365::-;15832:3;15853:66;15917:1;15912:3;15853:66;:::i;:::-;15846:73;;15928:93;16017:3;15928:93;:::i;:::-;16046:2;16041:3;16037:12;16030:19;;15690:365;;;:::o;16061:366::-;16203:3;16224:67;16288:2;16283:3;16224:67;:::i;:::-;16217:74;;16300:93;16389:3;16300:93;:::i;:::-;16418:2;16413:3;16409:12;16402:19;;16061:366;;;:::o;16433:400::-;16593:3;16614:84;16696:1;16691:3;16614:84;:::i;:::-;16607:91;;16707:93;16796:3;16707:93;:::i;:::-;16825:1;16820:3;16816:11;16809:18;;16433:400;;;:::o;16839:366::-;16981:3;17002:67;17066:2;17061:3;17002:67;:::i;:::-;16995:74;;17078:93;17167:3;17078:93;:::i;:::-;17196:2;17191:3;17187:12;17180:19;;16839:366;;;:::o;17211:::-;17353:3;17374:67;17438:2;17433:3;17374:67;:::i;:::-;17367:74;;17450:93;17539:3;17450:93;:::i;:::-;17568:2;17563:3;17559:12;17552:19;;17211:366;;;:::o;17583:365::-;17725:3;17746:66;17810:1;17805:3;17746:66;:::i;:::-;17739:73;;17821:93;17910:3;17821:93;:::i;:::-;17939:2;17934:3;17930:12;17923:19;;17583:365;;;:::o;17954:366::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;17954:366;;;:::o;18326:::-;18468:3;18489:67;18553:2;18548:3;18489:67;:::i;:::-;18482:74;;18565:93;18654:3;18565:93;:::i;:::-;18683:2;18678:3;18674:12;18667:19;;18326:366;;;:::o;18698:398::-;18857:3;18878:83;18959:1;18954:3;18878:83;:::i;:::-;18871:90;;18970:93;19059:3;18970:93;:::i;:::-;19088:1;19083:3;19079:11;19072:18;;18698:398;;;:::o;19102:366::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:365::-;19616:3;19637:66;19701:1;19696:3;19637:66;:::i;:::-;19630:73;;19712:93;19801:3;19712:93;:::i;:::-;19830:2;19825:3;19821:12;19814:19;;19474:365;;;:::o;19845:118::-;19932:24;19950:5;19932:24;:::i;:::-;19927:3;19920:37;19845:118;;:::o;19969:701::-;20250:3;20272:95;20363:3;20354:6;20272:95;:::i;:::-;20265:102;;20384:95;20475:3;20466:6;20384:95;:::i;:::-;20377:102;;20496:148;20640:3;20496:148;:::i;:::-;20489:155;;20661:3;20654:10;;19969:701;;;;;:::o;20676:379::-;20860:3;20882:147;21025:3;20882:147;:::i;:::-;20875:154;;21046:3;21039:10;;20676:379;;;:::o;21061:222::-;21154:4;21192:2;21181:9;21177:18;21169:26;;21205:71;21273:1;21262:9;21258:17;21249:6;21205:71;:::i;:::-;21061:222;;;;:::o;21289:348::-;21418:4;21456:2;21445:9;21441:18;21433:26;;21469:79;21545:1;21534:9;21530:17;21521:6;21469:79;:::i;:::-;21558:72;21626:2;21615:9;21611:18;21602:6;21558:72;:::i;:::-;21289:348;;;;;:::o;21643:640::-;21838:4;21876:3;21865:9;21861:19;21853:27;;21890:71;21958:1;21947:9;21943:17;21934:6;21890:71;:::i;:::-;21971:72;22039:2;22028:9;22024:18;22015:6;21971:72;:::i;:::-;22053;22121:2;22110:9;22106:18;22097:6;22053:72;:::i;:::-;22172:9;22166:4;22162:20;22157:2;22146:9;22142:18;22135:48;22200:76;22271:4;22262:6;22200:76;:::i;:::-;22192:84;;21643:640;;;;;;;:::o;22289:332::-;22410:4;22448:2;22437:9;22433:18;22425:26;;22461:71;22529:1;22518:9;22514:17;22505:6;22461:71;:::i;:::-;22542:72;22610:2;22599:9;22595:18;22586:6;22542:72;:::i;:::-;22289:332;;;;;:::o;22627:210::-;22714:4;22752:2;22741:9;22737:18;22729:26;;22765:65;22827:1;22816:9;22812:17;22803:6;22765:65;:::i;:::-;22627:210;;;;:::o;22843:313::-;22956:4;22994:2;22983:9;22979:18;22971:26;;23043:9;23037:4;23033:20;23029:1;23018:9;23014:17;23007:47;23071:78;23144:4;23135:6;23071:78;:::i;:::-;23063:86;;22843:313;;;;:::o;23162:419::-;23328:4;23366:2;23355:9;23351:18;23343:26;;23415:9;23409:4;23405:20;23401:1;23390:9;23386:17;23379:47;23443:131;23569:4;23443:131;:::i;:::-;23435:139;;23162:419;;;:::o;23587:::-;23753:4;23791:2;23780:9;23776:18;23768:26;;23840:9;23834:4;23830:20;23826:1;23815:9;23811:17;23804:47;23868:131;23994:4;23868:131;:::i;:::-;23860:139;;23587:419;;;:::o;24012:::-;24178:4;24216:2;24205:9;24201:18;24193:26;;24265:9;24259:4;24255:20;24251:1;24240:9;24236:17;24229:47;24293:131;24419:4;24293:131;:::i;:::-;24285:139;;24012:419;;;:::o;24437:::-;24603:4;24641:2;24630:9;24626:18;24618:26;;24690:9;24684:4;24680:20;24676:1;24665:9;24661:17;24654:47;24718:131;24844:4;24718:131;:::i;:::-;24710:139;;24437:419;;;:::o;24862:::-;25028:4;25066:2;25055:9;25051:18;25043:26;;25115:9;25109:4;25105:20;25101:1;25090:9;25086:17;25079:47;25143:131;25269:4;25143:131;:::i;:::-;25135:139;;24862:419;;;:::o;25287:::-;25453:4;25491:2;25480:9;25476:18;25468:26;;25540:9;25534:4;25530:20;25526:1;25515:9;25511:17;25504:47;25568:131;25694:4;25568:131;:::i;:::-;25560:139;;25287:419;;;:::o;25712:::-;25878:4;25916:2;25905:9;25901:18;25893:26;;25965:9;25959:4;25955:20;25951:1;25940:9;25936:17;25929:47;25993:131;26119:4;25993:131;:::i;:::-;25985:139;;25712:419;;;:::o;26137:::-;26303:4;26341:2;26330:9;26326:18;26318:26;;26390:9;26384:4;26380:20;26376:1;26365:9;26361:17;26354:47;26418:131;26544:4;26418:131;:::i;:::-;26410:139;;26137:419;;;:::o;26562:::-;26728:4;26766:2;26755:9;26751:18;26743:26;;26815:9;26809:4;26805:20;26801:1;26790:9;26786:17;26779:47;26843:131;26969:4;26843:131;:::i;:::-;26835:139;;26562:419;;;:::o;26987:::-;27153:4;27191:2;27180:9;27176:18;27168:26;;27240:9;27234:4;27230:20;27226:1;27215:9;27211:17;27204:47;27268:131;27394:4;27268:131;:::i;:::-;27260:139;;26987:419;;;:::o;27412:::-;27578:4;27616:2;27605:9;27601:18;27593:26;;27665:9;27659:4;27655:20;27651:1;27640:9;27636:17;27629:47;27693:131;27819:4;27693:131;:::i;:::-;27685:139;;27412:419;;;:::o;27837:::-;28003:4;28041:2;28030:9;28026:18;28018:26;;28090:9;28084:4;28080:20;28076:1;28065:9;28061:17;28054:47;28118:131;28244:4;28118:131;:::i;:::-;28110:139;;27837:419;;;:::o;28262:::-;28428:4;28466:2;28455:9;28451:18;28443:26;;28515:9;28509:4;28505:20;28501:1;28490:9;28486:17;28479:47;28543:131;28669:4;28543:131;:::i;:::-;28535:139;;28262:419;;;:::o;28687:::-;28853:4;28891:2;28880:9;28876:18;28868:26;;28940:9;28934:4;28930:20;28926:1;28915:9;28911:17;28904:47;28968:131;29094:4;28968:131;:::i;:::-;28960:139;;28687:419;;;:::o;29112:::-;29278:4;29316:2;29305:9;29301:18;29293:26;;29365:9;29359:4;29355:20;29351:1;29340:9;29336:17;29329:47;29393:131;29519:4;29393:131;:::i;:::-;29385:139;;29112:419;;;:::o;29537:::-;29703:4;29741:2;29730:9;29726:18;29718:26;;29790:9;29784:4;29780:20;29776:1;29765:9;29761:17;29754:47;29818:131;29944:4;29818:131;:::i;:::-;29810:139;;29537:419;;;:::o;29962:::-;30128:4;30166:2;30155:9;30151:18;30143:26;;30215:9;30209:4;30205:20;30201:1;30190:9;30186:17;30179:47;30243:131;30369:4;30243:131;:::i;:::-;30235:139;;29962:419;;;:::o;30387:::-;30553:4;30591:2;30580:9;30576:18;30568:26;;30640:9;30634:4;30630:20;30626:1;30615:9;30611:17;30604:47;30668:131;30794:4;30668:131;:::i;:::-;30660:139;;30387:419;;;:::o;30812:::-;30978:4;31016:2;31005:9;31001:18;30993:26;;31065:9;31059:4;31055:20;31051:1;31040:9;31036:17;31029:47;31093:131;31219:4;31093:131;:::i;:::-;31085:139;;30812:419;;;:::o;31237:::-;31403:4;31441:2;31430:9;31426:18;31418:26;;31490:9;31484:4;31480:20;31476:1;31465:9;31461:17;31454:47;31518:131;31644:4;31518:131;:::i;:::-;31510:139;;31237:419;;;:::o;31662:::-;31828:4;31866:2;31855:9;31851:18;31843:26;;31915:9;31909:4;31905:20;31901:1;31890:9;31886:17;31879:47;31943:131;32069:4;31943:131;:::i;:::-;31935:139;;31662:419;;;:::o;32087:::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32340:9;32334:4;32330:20;32326:1;32315:9;32311:17;32304:47;32368:131;32494:4;32368:131;:::i;:::-;32360:139;;32087:419;;;:::o;32512:::-;32678:4;32716:2;32705:9;32701:18;32693:26;;32765:9;32759:4;32755:20;32751:1;32740:9;32736:17;32729:47;32793:131;32919:4;32793:131;:::i;:::-;32785:139;;32512:419;;;:::o;32937:::-;33103:4;33141:2;33130:9;33126:18;33118:26;;33190:9;33184:4;33180:20;33176:1;33165:9;33161:17;33154:47;33218:131;33344:4;33218:131;:::i;:::-;33210:139;;32937:419;;;:::o;33362:::-;33528:4;33566:2;33555:9;33551:18;33543:26;;33615:9;33609:4;33605:20;33601:1;33590:9;33586:17;33579:47;33643:131;33769:4;33643:131;:::i;:::-;33635:139;;33362:419;;;:::o;33787:::-;33953:4;33991:2;33980:9;33976:18;33968:26;;34040:9;34034:4;34030:20;34026:1;34015:9;34011:17;34004:47;34068:131;34194:4;34068:131;:::i;:::-;34060:139;;33787:419;;;:::o;34212:::-;34378:4;34416:2;34405:9;34401:18;34393:26;;34465:9;34459:4;34455:20;34451:1;34440:9;34436:17;34429:47;34493:131;34619:4;34493:131;:::i;:::-;34485:139;;34212:419;;;:::o;34637:222::-;34730:4;34768:2;34757:9;34753:18;34745:26;;34781:71;34849:1;34838:9;34834:17;34825:6;34781:71;:::i;:::-;34637:222;;;;:::o;34865:129::-;34899:6;34926:20;;:::i;:::-;34916:30;;34955:33;34983:4;34975:6;34955:33;:::i;:::-;34865:129;;;:::o;35000:75::-;35033:6;35066:2;35060:9;35050:19;;35000:75;:::o;35081:307::-;35142:4;35232:18;35224:6;35221:30;35218:56;;;35254:18;;:::i;:::-;35218:56;35292:29;35314:6;35292:29;:::i;:::-;35284:37;;35376:4;35370;35366:15;35358:23;;35081:307;;;:::o;35394:98::-;35445:6;35479:5;35473:12;35463:22;;35394:98;;;:::o;35498:99::-;35550:6;35584:5;35578:12;35568:22;;35498:99;;;:::o;35603:168::-;35686:11;35720:6;35715:3;35708:19;35760:4;35755:3;35751:14;35736:29;;35603:168;;;;:::o;35777:147::-;35878:11;35915:3;35900:18;;35777:147;;;;:::o;35930:169::-;36014:11;36048:6;36043:3;36036:19;36088:4;36083:3;36079:14;36064:29;;35930:169;;;;:::o;36105:148::-;36207:11;36244:3;36229:18;;36105:148;;;;:::o;36259:305::-;36299:3;36318:20;36336:1;36318:20;:::i;:::-;36313:25;;36352:20;36370:1;36352:20;:::i;:::-;36347:25;;36506:1;36438:66;36434:74;36431:1;36428:81;36425:107;;;36512:18;;:::i;:::-;36425:107;36556:1;36553;36549:9;36542:16;;36259:305;;;;:::o;36570:185::-;36610:1;36627:20;36645:1;36627:20;:::i;:::-;36622:25;;36661:20;36679:1;36661:20;:::i;:::-;36656:25;;36700:1;36690:35;;36705:18;;:::i;:::-;36690:35;36747:1;36744;36740:9;36735:14;;36570:185;;;;:::o;36761:348::-;36801:7;36824:20;36842:1;36824:20;:::i;:::-;36819:25;;36858:20;36876:1;36858:20;:::i;:::-;36853:25;;37046:1;36978:66;36974:74;36971:1;36968:81;36963:1;36956:9;36949:17;36945:105;36942:131;;;37053:18;;:::i;:::-;36942:131;37101:1;37098;37094:9;37083:20;;36761:348;;;;:::o;37115:191::-;37155:4;37175:20;37193:1;37175:20;:::i;:::-;37170:25;;37209:20;37227:1;37209:20;:::i;:::-;37204:25;;37248:1;37245;37242:8;37239:34;;;37253:18;;:::i;:::-;37239:34;37298:1;37295;37291:9;37283:17;;37115:191;;;;:::o;37312:96::-;37349:7;37378:24;37396:5;37378:24;:::i;:::-;37367:35;;37312:96;;;:::o;37414:104::-;37459:7;37488:24;37506:5;37488:24;:::i;:::-;37477:35;;37414:104;;;:::o;37524:90::-;37558:7;37601:5;37594:13;37587:21;37576:32;;37524:90;;;:::o;37620:149::-;37656:7;37696:66;37689:5;37685:78;37674:89;;37620:149;;;:::o;37775:126::-;37812:7;37852:42;37845:5;37841:54;37830:65;;37775:126;;;:::o;37907:77::-;37944:7;37973:5;37962:16;;37907:77;;;:::o;37990:134::-;38048:9;38081:37;38112:5;38081:37;:::i;:::-;38068:50;;37990:134;;;:::o;38130:126::-;38180:9;38213:37;38244:5;38213:37;:::i;:::-;38200:50;;38130:126;;;:::o;38262:113::-;38312:9;38345:24;38363:5;38345:24;:::i;:::-;38332:37;;38262:113;;;:::o;38381:154::-;38465:6;38460:3;38455;38442:30;38527:1;38518:6;38513:3;38509:16;38502:27;38381:154;;;:::o;38541:307::-;38609:1;38619:113;38633:6;38630:1;38627:13;38619:113;;;38718:1;38713:3;38709:11;38703:18;38699:1;38694:3;38690:11;38683:39;38655:2;38652:1;38648:10;38643:15;;38619:113;;;38750:6;38747:1;38744:13;38741:101;;;38830:1;38821:6;38816:3;38812:16;38805:27;38741:101;38590:258;38541:307;;;:::o;38854:320::-;38898:6;38935:1;38929:4;38925:12;38915:22;;38982:1;38976:4;38972:12;39003:18;38993:81;;39059:4;39051:6;39047:17;39037:27;;38993:81;39121:2;39113:6;39110:14;39090:18;39087:38;39084:84;;;39140:18;;:::i;:::-;39084:84;38905:269;38854:320;;;:::o;39180:281::-;39263:27;39285:4;39263:27;:::i;:::-;39255:6;39251:40;39393:6;39381:10;39378:22;39357:18;39345:10;39342:34;39339:62;39336:88;;;39404:18;;:::i;:::-;39336:88;39444:10;39440:2;39433:22;39223:238;39180:281;;:::o;39467:233::-;39506:3;39529:24;39547:5;39529:24;:::i;:::-;39520:33;;39575:66;39568:5;39565:77;39562:103;;;39645:18;;:::i;:::-;39562:103;39692:1;39685:5;39681:13;39674:20;;39467:233;;;:::o;39706:176::-;39738:1;39755:20;39773:1;39755:20;:::i;:::-;39750:25;;39789:20;39807:1;39789:20;:::i;:::-;39784:25;;39828:1;39818:35;;39833:18;;:::i;:::-;39818:35;39874:1;39871;39867:9;39862:14;;39706:176;;;;:::o;39888:180::-;39936:77;39933:1;39926:88;40033:4;40030:1;40023:15;40057:4;40054:1;40047:15;40074:180;40122:77;40119:1;40112:88;40219:4;40216:1;40209:15;40243:4;40240:1;40233:15;40260:180;40308:77;40305:1;40298:88;40405:4;40402:1;40395:15;40429:4;40426:1;40419:15;40446:180;40494:77;40491:1;40484:88;40591:4;40588:1;40581:15;40615:4;40612:1;40605:15;40632:180;40680:77;40677:1;40670:88;40777:4;40774:1;40767:15;40801:4;40798:1;40791:15;40818:117;40927:1;40924;40917:12;40941:117;41050:1;41047;41040:12;41064:117;41173:1;41170;41163:12;41187:117;41296:1;41293;41286:12;41310:117;41419:1;41416;41409:12;41433:117;41542:1;41539;41532:12;41556:102;41597:6;41648:2;41644:7;41639:2;41632:5;41628:14;41624:28;41614:38;;41556:102;;;:::o;41664:158::-;41804:10;41800:1;41792:6;41788:14;41781:34;41664:158;:::o;41828:220::-;41968:34;41964:1;41956:6;41952:14;41945:58;42037:3;42032:2;42024:6;42020:15;42013:28;41828:220;:::o;42054:237::-;42194:34;42190:1;42182:6;42178:14;42171:58;42263:20;42258:2;42250:6;42246:15;42239:45;42054:237;:::o;42297:225::-;42437:34;42433:1;42425:6;42421:14;42414:58;42506:8;42501:2;42493:6;42489:15;42482:33;42297:225;:::o;42528:178::-;42668:30;42664:1;42656:6;42652:14;42645:54;42528:178;:::o;42712:225::-;42852:34;42848:1;42840:6;42836:14;42829:58;42921:8;42916:2;42908:6;42904:15;42897:33;42712:225;:::o;42943:223::-;43083:34;43079:1;43071:6;43067:14;43060:58;43152:6;43147:2;43139:6;43135:15;43128:31;42943:223;:::o;43172:175::-;43312:27;43308:1;43300:6;43296:14;43289:51;43172:175;:::o;43353:154::-;43493:6;43489:1;43481:6;43477:14;43470:30;43353:154;:::o;43513:245::-;43653:34;43649:1;43641:6;43637:14;43630:58;43722:28;43717:2;43709:6;43705:15;43698:53;43513:245;:::o;43764:179::-;43904:31;43900:1;43892:6;43888:14;43881:55;43764:179;:::o;43949:231::-;44089:34;44085:1;44077:6;44073:14;44066:58;44158:14;44153:2;44145:6;44141:15;44134:39;43949:231;:::o;44186:230::-;44326:34;44322:1;44314:6;44310:14;44303:58;44395:13;44390:2;44382:6;44378:15;44371:38;44186:230;:::o;44422:162::-;44562:14;44558:1;44550:6;44546:14;44539:38;44422:162;:::o;44590:243::-;44730:34;44726:1;44718:6;44714:14;44707:58;44799:26;44794:2;44786:6;44782:15;44775:51;44590:243;:::o;44839:229::-;44979:34;44975:1;44967:6;44963:14;44956:58;45048:12;45043:2;45035:6;45031:15;45024:37;44839:229;:::o;45074:228::-;45214:34;45210:1;45202:6;45198:14;45191:58;45283:11;45278:2;45270:6;45266:15;45259:36;45074:228;:::o;45308:182::-;45448:34;45444:1;45436:6;45432:14;45425:58;45308:182;:::o;45496:153::-;45636:5;45632:1;45624:6;45620:14;45613:29;45496:153;:::o;45655:231::-;45795:34;45791:1;45783:6;45779:14;45772:58;45864:14;45859:2;45851:6;45847:15;45840:39;45655:231;:::o;45892:155::-;46032:7;46028:1;46020:6;46016:14;46009:31;45892:155;:::o;46053:182::-;46193:34;46189:1;46181:6;46177:14;46170:58;46053:182;:::o;46241:228::-;46381:34;46377:1;46369:6;46365:14;46358:58;46450:11;46445:2;46437:6;46433:15;46426:36;46241:228;:::o;46475:158::-;46615:10;46611:1;46603:6;46599:14;46592:34;46475:158;:::o;46639:160::-;46779:12;46775:1;46767:6;46763:14;46756:36;46639:160;:::o;46805:220::-;46945:34;46941:1;46933:6;46929:14;46922:58;47014:3;47009:2;47001:6;46997:15;46990:28;46805:220;:::o;47031:114::-;;:::o;47151:236::-;47291:34;47287:1;47279:6;47275:14;47268:58;47360:19;47355:2;47347:6;47343:15;47336:44;47151:236;:::o;47393:158::-;47533:10;47529:1;47521:6;47517:14;47510:34;47393:158;:::o;47557:122::-;47630:24;47648:5;47630:24;:::i;:::-;47623:5;47620:35;47610:63;;47669:1;47666;47659:12;47610:63;47557:122;:::o;47685:138::-;47766:32;47792:5;47766:32;:::i;:::-;47759:5;47756:43;47746:71;;47813:1;47810;47803:12;47746:71;47685:138;:::o;47829:116::-;47899:21;47914:5;47899:21;:::i;:::-;47892:5;47889:32;47879:60;;47935:1;47932;47925:12;47879:60;47829:116;:::o;47951:120::-;48023:23;48040:5;48023:23;:::i;:::-;48016:5;48013:34;48003:62;;48061:1;48058;48051:12;48003:62;47951:120;:::o;48077:122::-;48150:24;48168:5;48150:24;:::i;:::-;48143:5;48140:35;48130:63;;48189:1;48186;48179:12;48130:63;48077:122;:::o

Swarm Source

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