ETH Price: $3,092.32 (+1.27%)
Gas: 3 Gwei

Token

The Squirrels Flow (TSF)
 

Overview

Max Total Supply

97 TSF

Holders

73

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x14e6b828adb52153e5bf7c740a1a7312ef4b8711
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:
TheSquirrelsFlow

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

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

        uint256 size;
        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);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: TheSquirrelsFlow.sol



pragma solidity ^0.8.0;




contract TheSquirrelsFlow is ERC1155, Ownable, Pausable {
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "The Squirrels Flow";
    symbol = "TSF";
  }

  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function airdrop(address[] memory _recipients, uint id, uint amount) external onlyOwner {
    for (uint256 i = 0; i < _recipients.length; i++) {
      _mint(_recipients[i], id, amount, "");
    }
  }

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
    _burnBatch(msg.sender, _ids, _amounts);
  }

  function pause() public onlyOwner {
    _pause();
  }

  function unpause() public onlyOwner {
    _unpause();
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

  function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
    internal
    whenNotPaused
    override
  {
    super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200011160201b60201c565b5062000054620000486200012d60201b60201c565b6200013560201b60201c565b6000600360146101000a81548160ff0219169083151502179055506040518060400160405280601281526020017f54686520537175697272656c7320466c6f77000000000000000000000000000081525060049080519060200190620000bc929190620001fb565b506040518060400160405280600381526020017f5453460000000000000000000000000000000000000000000000000000000000815250600590805190602001906200010a929190620001fb565b5062000310565b806002908051906020019062000129929190620001fb565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020990620002ab565b90600052602060002090601f0160209004810192826200022d576000855562000279565b82601f106200024857805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002785782518255916020019190600101906200025b565b5b5090506200028891906200028c565b5090565b5b80821115620002a75760008160009055506001016200028d565b5090565b60006002820490506001821680620002c457607f821691505b60208210811415620002db57620002da620002e1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61420780620003206000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80638456cb59116100c3578063b390c0ab1161007c578063b390c0ab1461034f578063c87b56dd1461036b578063d81d0a151461039b578063e985e9c5146103b7578063f242432a146103e7578063f2fde38b146104035761014c565b80638456cb59146102b5578063862440e2146102bf5780638da5cb5b146102db57806395d89b41146102f9578063a22cb46514610317578063a496dedf146103335761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780633f4ba83a146102375780634e1273f4146102415780635c975abb14610271578063715018a61461028f57806383ca4b6f146102995761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf578063156e29f6146101ff575b600080fd5b61016b60048036038101906101669190612d92565b61041f565b60405161017891906137b1565b60405180910390f35b61019b60048036038101906101969190612f84565b6104e8565b6040516101a89190613554565b60405180910390f35b6101b96105ca565b6040516101c6919061356f565b60405180910390f35b6101e960048036038101906101e49190612fde565b610658565b6040516101f6919061356f565b60405180910390f35b61021960048036038101906102149190612dd2565b6106fd565b005b61023560048036038101906102309190612b61565b610799565b005b61023f61083a565b005b61025b60048036038101906102569190612e25565b6108c0565b60405161026891906134fb565b60405180910390f35b6102796109d9565b6040516102869190613554565b60405180910390f35b6102976109f0565b005b6102b360048036038101906102ae9190612f0c565b610a78565b005b6102bd610a87565b005b6102d960048036038101906102d4919061300b565b610b0d565b005b6102e3610bed565b6040516102f0919061341e565b60405180910390f35b610301610c17565b60405161030e919061356f565b60405180910390f35b610331600480360381019061032c9190612d52565b610ca5565b005b61034d60048036038101906103489190612e9d565b610cbb565b005b61036960048036038101906103649190613067565b610d91565b005b61038560048036038101906103809190612fde565b610da0565b604051610392919061356f565b60405180910390f35b6103b560048036038101906103b09190612cc7565b610e40565b005b6103d160048036038101906103cc9190612b21565b610edc565b6040516103de9190613554565b60405180910390f35b61040160048036038101906103fc9190612c30565b610f70565b005b61041d60048036038101906104189190612af4565b611011565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610487906135f1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105b357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105c357506105c282611109565b5b9050919050565b600480546105d790613a51565b80601f016020809104026020016040519081016040528092919081815260200182805461060390613a51565b80156106505780601f1061062557610100808354040283529160200191610650565b820191906000526020600020905b81548152906001019060200180831161063357829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461067890613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490613a51565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b50505050509050919050565b610705611173565b73ffffffffffffffffffffffffffffffffffffffff16610723610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077090613711565b60405180910390fd5b6107948383836040518060200160405280600081525061117b565b505050565b6107a1611173565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107e757506107e6856107e1611173565b610edc565b5b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d906136b1565b60405180910390fd5b6108338585858585611311565b5050505050565b610842611173565b73ffffffffffffffffffffffffffffffffffffffff16610860610bed565b73ffffffffffffffffffffffffffffffffffffffff16146108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90613711565b60405180910390fd5b6108be611625565b565b60608151835114610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613751565b60405180910390fd5b6000835167ffffffffffffffff81111561092357610922613b8a565b5b6040519080825280602002602001820160405280156109515781602001602082028036833780820191505090505b50905060005b84518110156109ce5761099e85828151811061097657610975613b5b565b5b602002602001015185838151811061099157610990613b5b565b5b602002602001015161041f565b8282815181106109b1576109b0613b5b565b5b602002602001018181525050806109c790613ab4565b9050610957565b508091505092915050565b6000600360149054906101000a900460ff16905090565b6109f8611173565b73ffffffffffffffffffffffffffffffffffffffff16610a16610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613711565b60405180910390fd5b610a7660006116c7565b565b610a8333838361178d565b5050565b610a8f611173565b73ffffffffffffffffffffffffffffffffffffffff16610aad610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613711565b60405180910390fd5b610b0b611a3e565b565b610b15611173565b73ffffffffffffffffffffffffffffffffffffffff16610b33610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613711565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610bb09291906127cc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610be1919061356f565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610c2490613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5090613a51565b8015610c9d5780601f10610c7257610100808354040283529160200191610c9d565b820191906000526020600020905b815481529060010190602001808311610c8057829003601f168201915b505050505081565b610cb7610cb0611173565b8383611ae1565b5050565b610cc3611173565b73ffffffffffffffffffffffffffffffffffffffff16610ce1610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613711565b60405180910390fd5b60005b8351811015610d8b57610d78848281518110610d5957610d58613b5b565b5b602002602001015184846040518060200160405280600081525061117b565b8080610d8390613ab4565b915050610d3a565b50505050565b610d9c338383611c4e565b5050565b60066020528060005260406000206000915090508054610dbf90613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb90613a51565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b610e48611173565b73ffffffffffffffffffffffffffffffffffffffff16610e66610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613711565b60405180910390fd5b610ed783838360405180602001604052806000815250611e6b565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f78611173565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610fbe5750610fbd85610fb8611173565b610edc565b5b610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613651565b60405180910390fd5b61100a8585858585612089565b5050505050565b611019611173565b73ffffffffffffffffffffffffffffffffffffffff16611037610bed565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613711565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613611565b60405180910390fd5b611106816116c7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613791565b60405180910390fd5b60006111f5611173565b9050611216816000876112078861230b565b6112108861230b565b87612385565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112759190613945565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516112f39291906137cc565b60405180910390a461130a816000878787876123e3565b5050505050565b8151835114611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613691565b60405180910390fd5b60006113cf611173565b90506113df818787878787612385565b60005b8451811015611590576000858281518110611400576113ff613b5b565b5b60200260200101519050600085838151811061141f5761141e613b5b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906136f1565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115759190613945565b925050819055505050508061158990613ab4565b90506113e2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161160792919061351d565b60405180910390a461161d8187878787876125ca565b505050505050565b61162d6109d9565b61166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906135d1565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116b0611173565b6040516116bd919061341e565b60405180910390a1565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f4906136d1565b60405180910390fd5b8051825114611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890613771565b60405180910390fd5b600061184b611173565b905061186b81856000868660405180602001604052806000815250612385565b60005b83518110156119b857600084828151811061188c5761188b613b5b565b5b6020026020010151905060008483815181106118ab576118aa613b5b565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613631565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806119b090613ab4565b91505061186e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a3092919061351d565b60405180910390a450505050565b611a466109d9565b15611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613671565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611aca611173565b604051611ad7919061341e565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790613731565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c419190613554565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906136d1565b60405180910390fd5b6000611cc8611173565b9050611cf881856000611cda8761230b565b611ce38761230b565b60405180602001604052806000815250612385565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613631565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e5c9291906137cc565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613791565b60405180910390fd5b8151835114611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613771565b60405180910390fd5b6000611f29611173565b9050611f3a81600087878787612385565b60005b8451811015611ff357838181518110611f5957611f58613b5b565b5b6020026020010151600080878481518110611f7757611f76613b5b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd99190613945565b925050819055508080611feb90613ab4565b915050611f3d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161206b92919061351d565b60405180910390a4612082816000878787876125ca565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613691565b60405180910390fd5b6000612103611173565b90506121238187876121148861230b565b61211d8861230b565b87612385565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906136f1565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461226f9190613945565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122ec9291906137cc565b60405180910390a46123028288888888886123e3565b50505050505050565b60606000600167ffffffffffffffff81111561232a57612329613b8a565b5b6040519080825280602002602001820160405280156123585781602001602082028036833780820191505090505b50905082816000815181106123705761236f613b5b565b5b60200260200101818152505080915050919050565b61238d6109d9565b156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490613671565b60405180910390fd5b6123db8686868686866127b1565b505050505050565b6124028473ffffffffffffffffffffffffffffffffffffffff166127b9565b156125c2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016124489594939291906134a1565b602060405180830381600087803b15801561246257600080fd5b505af192505050801561249357506040513d601f19601f820116820180604052508101906124909190612fb1565b60015b6125395761249f613bb9565b806308c379a014156124fc57506124b46140df565b806124bf57506124fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3919061356f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090613591565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b7906135b1565b60405180910390fd5b505b505050505050565b6125e98473ffffffffffffffffffffffffffffffffffffffff166127b9565b156127a9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161262f959493929190613439565b602060405180830381600087803b15801561264957600080fd5b505af192505050801561267a57506040513d601f19601f820116820180604052508101906126779190612fb1565b60015b61272057612686613bb9565b806308c379a014156126e3575061269b6140df565b806126a657506126e5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da919061356f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790613591565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e906135b1565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b8280546127d890613a51565b90600052602060002090601f0160209004810192826127fa5760008555612841565b82601f1061281357805160ff1916838001178555612841565b82800160010185558215612841579182015b82811115612840578251825591602001919060010190612825565b5b50905061284e9190612852565b5090565b5b8082111561286b576000816000905550600101612853565b5090565b600061288261287d8461381a565b6137f5565b905080838252602082019050828560208602820111156128a5576128a4613be0565b5b60005b858110156128d557816128bb88826129d3565b8452602084019350602083019250506001810190506128a8565b5050509392505050565b60006128f26128ed84613846565b6137f5565b9050808382526020820190508285602086028201111561291557612914613be0565b5b60005b85811015612945578161292b8882612adf565b845260208401935060208301925050600181019050612918565b5050509392505050565b600061296261295d84613872565b6137f5565b90508281526020810184848401111561297e5761297d613be5565b5b612989848285613a0f565b509392505050565b60006129a461299f846138a3565b6137f5565b9050828152602081018484840111156129c0576129bf613be5565b5b6129cb848285613a0f565b509392505050565b6000813590506129e281614175565b92915050565b600082601f8301126129fd576129fc613bdb565b5b8135612a0d84826020860161286f565b91505092915050565b600082601f830112612a2b57612a2a613bdb565b5b8135612a3b8482602086016128df565b91505092915050565b600081359050612a538161418c565b92915050565b600081359050612a68816141a3565b92915050565b600081519050612a7d816141a3565b92915050565b600082601f830112612a9857612a97613bdb565b5b8135612aa884826020860161294f565b91505092915050565b600082601f830112612ac657612ac5613bdb565b5b8135612ad6848260208601612991565b91505092915050565b600081359050612aee816141ba565b92915050565b600060208284031215612b0a57612b09613bef565b5b6000612b18848285016129d3565b91505092915050565b60008060408385031215612b3857612b37613bef565b5b6000612b46858286016129d3565b9250506020612b57858286016129d3565b9150509250929050565b600080600080600060a08688031215612b7d57612b7c613bef565b5b6000612b8b888289016129d3565b9550506020612b9c888289016129d3565b945050604086013567ffffffffffffffff811115612bbd57612bbc613bea565b5b612bc988828901612a16565b935050606086013567ffffffffffffffff811115612bea57612be9613bea565b5b612bf688828901612a16565b925050608086013567ffffffffffffffff811115612c1757612c16613bea565b5b612c2388828901612a83565b9150509295509295909350565b600080600080600060a08688031215612c4c57612c4b613bef565b5b6000612c5a888289016129d3565b9550506020612c6b888289016129d3565b9450506040612c7c88828901612adf565b9350506060612c8d88828901612adf565b925050608086013567ffffffffffffffff811115612cae57612cad613bea565b5b612cba88828901612a83565b9150509295509295909350565b600080600060608486031215612ce057612cdf613bef565b5b6000612cee868287016129d3565b935050602084013567ffffffffffffffff811115612d0f57612d0e613bea565b5b612d1b86828701612a16565b925050604084013567ffffffffffffffff811115612d3c57612d3b613bea565b5b612d4886828701612a16565b9150509250925092565b60008060408385031215612d6957612d68613bef565b5b6000612d77858286016129d3565b9250506020612d8885828601612a44565b9150509250929050565b60008060408385031215612da957612da8613bef565b5b6000612db7858286016129d3565b9250506020612dc885828601612adf565b9150509250929050565b600080600060608486031215612deb57612dea613bef565b5b6000612df9868287016129d3565b9350506020612e0a86828701612adf565b9250506040612e1b86828701612adf565b9150509250925092565b60008060408385031215612e3c57612e3b613bef565b5b600083013567ffffffffffffffff811115612e5a57612e59613bea565b5b612e66858286016129e8565b925050602083013567ffffffffffffffff811115612e8757612e86613bea565b5b612e9385828601612a16565b9150509250929050565b600080600060608486031215612eb657612eb5613bef565b5b600084013567ffffffffffffffff811115612ed457612ed3613bea565b5b612ee0868287016129e8565b9350506020612ef186828701612adf565b9250506040612f0286828701612adf565b9150509250925092565b60008060408385031215612f2357612f22613bef565b5b600083013567ffffffffffffffff811115612f4157612f40613bea565b5b612f4d85828601612a16565b925050602083013567ffffffffffffffff811115612f6e57612f6d613bea565b5b612f7a85828601612a16565b9150509250929050565b600060208284031215612f9a57612f99613bef565b5b6000612fa884828501612a59565b91505092915050565b600060208284031215612fc757612fc6613bef565b5b6000612fd584828501612a6e565b91505092915050565b600060208284031215612ff457612ff3613bef565b5b600061300284828501612adf565b91505092915050565b6000806040838503121561302257613021613bef565b5b600061303085828601612adf565b925050602083013567ffffffffffffffff81111561305157613050613bea565b5b61305d85828601612ab1565b9150509250929050565b6000806040838503121561307e5761307d613bef565b5b600061308c85828601612adf565b925050602061309d85828601612adf565b9150509250929050565b60006130b38383613400565b60208301905092915050565b6130c88161399b565b82525050565b60006130d9826138e4565b6130e38185613912565b93506130ee836138d4565b8060005b8381101561311f57815161310688826130a7565b975061311183613905565b9250506001810190506130f2565b5085935050505092915050565b613135816139ad565b82525050565b6000613146826138ef565b6131508185613923565b9350613160818560208601613a1e565b61316981613bf4565b840191505092915050565b600061317f826138fa565b6131898185613934565b9350613199818560208601613a1e565b6131a281613bf4565b840191505092915050565b60006131ba603483613934565b91506131c582613c12565b604082019050919050565b60006131dd602883613934565b91506131e882613c61565b604082019050919050565b6000613200601483613934565b915061320b82613cb0565b602082019050919050565b6000613223602b83613934565b915061322e82613cd9565b604082019050919050565b6000613246602683613934565b915061325182613d28565b604082019050919050565b6000613269602483613934565b915061327482613d77565b604082019050919050565b600061328c602983613934565b915061329782613dc6565b604082019050919050565b60006132af601083613934565b91506132ba82613e15565b602082019050919050565b60006132d2602583613934565b91506132dd82613e3e565b604082019050919050565b60006132f5603283613934565b915061330082613e8d565b604082019050919050565b6000613318602383613934565b915061332382613edc565b604082019050919050565b600061333b602a83613934565b915061334682613f2b565b604082019050919050565b600061335e602083613934565b915061336982613f7a565b602082019050919050565b6000613381602983613934565b915061338c82613fa3565b604082019050919050565b60006133a4602983613934565b91506133af82613ff2565b604082019050919050565b60006133c7602883613934565b91506133d282614041565b604082019050919050565b60006133ea602183613934565b91506133f582614090565b604082019050919050565b61340981613a05565b82525050565b61341881613a05565b82525050565b600060208201905061343360008301846130bf565b92915050565b600060a08201905061344e60008301886130bf565b61345b60208301876130bf565b818103604083015261346d81866130ce565b9050818103606083015261348181856130ce565b90508181036080830152613495818461313b565b90509695505050505050565b600060a0820190506134b660008301886130bf565b6134c360208301876130bf565b6134d0604083018661340f565b6134dd606083018561340f565b81810360808301526134ef818461313b565b90509695505050505050565b6000602082019050818103600083015261351581846130ce565b905092915050565b6000604082019050818103600083015261353781856130ce565b9050818103602083015261354b81846130ce565b90509392505050565b6000602082019050613569600083018461312c565b92915050565b600060208201905081810360008301526135898184613174565b905092915050565b600060208201905081810360008301526135aa816131ad565b9050919050565b600060208201905081810360008301526135ca816131d0565b9050919050565b600060208201905081810360008301526135ea816131f3565b9050919050565b6000602082019050818103600083015261360a81613216565b9050919050565b6000602082019050818103600083015261362a81613239565b9050919050565b6000602082019050818103600083015261364a8161325c565b9050919050565b6000602082019050818103600083015261366a8161327f565b9050919050565b6000602082019050818103600083015261368a816132a2565b9050919050565b600060208201905081810360008301526136aa816132c5565b9050919050565b600060208201905081810360008301526136ca816132e8565b9050919050565b600060208201905081810360008301526136ea8161330b565b9050919050565b6000602082019050818103600083015261370a8161332e565b9050919050565b6000602082019050818103600083015261372a81613351565b9050919050565b6000602082019050818103600083015261374a81613374565b9050919050565b6000602082019050818103600083015261376a81613397565b9050919050565b6000602082019050818103600083015261378a816133ba565b9050919050565b600060208201905081810360008301526137aa816133dd565b9050919050565b60006020820190506137c6600083018461340f565b92915050565b60006040820190506137e1600083018561340f565b6137ee602083018461340f565b9392505050565b60006137ff613810565b905061380b8282613a83565b919050565b6000604051905090565b600067ffffffffffffffff82111561383557613834613b8a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561386157613860613b8a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561388d5761388c613b8a565b5b61389682613bf4565b9050602081019050919050565b600067ffffffffffffffff8211156138be576138bd613b8a565b5b6138c782613bf4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061395082613a05565b915061395b83613a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139905761398f613afd565b5b828201905092915050565b60006139a6826139e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a3c578082015181840152602081019050613a21565b83811115613a4b576000848401525b50505050565b60006002820490506001821680613a6957607f821691505b60208210811415613a7d57613a7c613b2c565b5b50919050565b613a8c82613bf4565b810181811067ffffffffffffffff82111715613aab57613aaa613b8a565b5b80604052505050565b6000613abf82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613afd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613bd85760046000803e613bd5600051613c05565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156140ef57614172565b6140f7613810565b60043d036004823e80513d602482011167ffffffffffffffff8211171561411f575050614172565b808201805167ffffffffffffffff81111561413d5750505050614172565b80602083010160043d03850181111561415a575050505050614172565b61416982602001850186613a83565b82955050505050505b90565b61417e8161399b565b811461418957600080fd5b50565b614195816139ad565b81146141a057600080fd5b50565b6141ac816139b9565b81146141b757600080fd5b50565b6141c381613a05565b81146141ce57600080fd5b5056fea2646970667358221220c579ca838d9334a2bd1da721c4b48472c31edb681a3cae9254e348507319d31b64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014c5760003560e01c80638456cb59116100c3578063b390c0ab1161007c578063b390c0ab1461034f578063c87b56dd1461036b578063d81d0a151461039b578063e985e9c5146103b7578063f242432a146103e7578063f2fde38b146104035761014c565b80638456cb59146102b5578063862440e2146102bf5780638da5cb5b146102db57806395d89b41146102f9578063a22cb46514610317578063a496dedf146103335761014c565b80632eb2c2d6116101155780632eb2c2d61461021b5780633f4ba83a146102375780634e1273f4146102415780635c975abb14610271578063715018a61461028f57806383ca4b6f146102995761014c565b8062fdd58e1461015157806301ffc9a71461018157806306fdde03146101b15780630e89341c146101cf578063156e29f6146101ff575b600080fd5b61016b60048036038101906101669190612d92565b61041f565b60405161017891906137b1565b60405180910390f35b61019b60048036038101906101969190612f84565b6104e8565b6040516101a89190613554565b60405180910390f35b6101b96105ca565b6040516101c6919061356f565b60405180910390f35b6101e960048036038101906101e49190612fde565b610658565b6040516101f6919061356f565b60405180910390f35b61021960048036038101906102149190612dd2565b6106fd565b005b61023560048036038101906102309190612b61565b610799565b005b61023f61083a565b005b61025b60048036038101906102569190612e25565b6108c0565b60405161026891906134fb565b60405180910390f35b6102796109d9565b6040516102869190613554565b60405180910390f35b6102976109f0565b005b6102b360048036038101906102ae9190612f0c565b610a78565b005b6102bd610a87565b005b6102d960048036038101906102d4919061300b565b610b0d565b005b6102e3610bed565b6040516102f0919061341e565b60405180910390f35b610301610c17565b60405161030e919061356f565b60405180910390f35b610331600480360381019061032c9190612d52565b610ca5565b005b61034d60048036038101906103489190612e9d565b610cbb565b005b61036960048036038101906103649190613067565b610d91565b005b61038560048036038101906103809190612fde565b610da0565b604051610392919061356f565b60405180910390f35b6103b560048036038101906103b09190612cc7565b610e40565b005b6103d160048036038101906103cc9190612b21565b610edc565b6040516103de9190613554565b60405180910390f35b61040160048036038101906103fc9190612c30565b610f70565b005b61041d60048036038101906104189190612af4565b611011565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610487906135f1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105b357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105c357506105c282611109565b5b9050919050565b600480546105d790613a51565b80601f016020809104026020016040519081016040528092919081815260200182805461060390613a51565b80156106505780601f1061062557610100808354040283529160200191610650565b820191906000526020600020905b81548152906001019060200180831161063357829003601f168201915b505050505081565b606060066000838152602001908152602001600020805461067890613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546106a490613a51565b80156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b50505050509050919050565b610705611173565b73ffffffffffffffffffffffffffffffffffffffff16610723610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610779576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077090613711565b60405180910390fd5b6107948383836040518060200160405280600081525061117b565b505050565b6107a1611173565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107e757506107e6856107e1611173565b610edc565b5b610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d906136b1565b60405180910390fd5b6108338585858585611311565b5050505050565b610842611173565b73ffffffffffffffffffffffffffffffffffffffff16610860610bed565b73ffffffffffffffffffffffffffffffffffffffff16146108b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ad90613711565b60405180910390fd5b6108be611625565b565b60608151835114610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613751565b60405180910390fd5b6000835167ffffffffffffffff81111561092357610922613b8a565b5b6040519080825280602002602001820160405280156109515781602001602082028036833780820191505090505b50905060005b84518110156109ce5761099e85828151811061097657610975613b5b565b5b602002602001015185838151811061099157610990613b5b565b5b602002602001015161041f565b8282815181106109b1576109b0613b5b565b5b602002602001018181525050806109c790613ab4565b9050610957565b508091505092915050565b6000600360149054906101000a900460ff16905090565b6109f8611173565b73ffffffffffffffffffffffffffffffffffffffff16610a16610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613711565b60405180910390fd5b610a7660006116c7565b565b610a8333838361178d565b5050565b610a8f611173565b73ffffffffffffffffffffffffffffffffffffffff16610aad610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613711565b60405180910390fd5b610b0b611a3e565b565b610b15611173565b73ffffffffffffffffffffffffffffffffffffffff16610b33610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613711565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610bb09291906127cc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610be1919061356f565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610c2490613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5090613a51565b8015610c9d5780601f10610c7257610100808354040283529160200191610c9d565b820191906000526020600020905b815481529060010190602001808311610c8057829003601f168201915b505050505081565b610cb7610cb0611173565b8383611ae1565b5050565b610cc3611173565b73ffffffffffffffffffffffffffffffffffffffff16610ce1610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613711565b60405180910390fd5b60005b8351811015610d8b57610d78848281518110610d5957610d58613b5b565b5b602002602001015184846040518060200160405280600081525061117b565b8080610d8390613ab4565b915050610d3a565b50505050565b610d9c338383611c4e565b5050565b60066020528060005260406000206000915090508054610dbf90613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb90613a51565b8015610e385780601f10610e0d57610100808354040283529160200191610e38565b820191906000526020600020905b815481529060010190602001808311610e1b57829003601f168201915b505050505081565b610e48611173565b73ffffffffffffffffffffffffffffffffffffffff16610e66610bed565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613711565b60405180910390fd5b610ed783838360405180602001604052806000815250611e6b565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f78611173565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610fbe5750610fbd85610fb8611173565b610edc565b5b610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613651565b60405180910390fd5b61100a8585858585612089565b5050505050565b611019611173565b73ffffffffffffffffffffffffffffffffffffffff16611037610bed565b73ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490613711565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613611565b60405180910390fd5b611106816116c7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613791565b60405180910390fd5b60006111f5611173565b9050611216816000876112078861230b565b6112108861230b565b87612385565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112759190613945565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516112f39291906137cc565b60405180910390a461130a816000878787876123e3565b5050505050565b8151835114611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90613771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613691565b60405180910390fd5b60006113cf611173565b90506113df818787878787612385565b60005b8451811015611590576000858281518110611400576113ff613b5b565b5b60200260200101519050600085838151811061141f5761141e613b5b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b7906136f1565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115759190613945565b925050819055505050508061158990613ab4565b90506113e2565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161160792919061351d565b60405180910390a461161d8187878787876125ca565b505050505050565b61162d6109d9565b61166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906135d1565b60405180910390fd5b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116b0611173565b6040516116bd919061341e565b60405180910390a1565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f4906136d1565b60405180910390fd5b8051825114611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890613771565b60405180910390fd5b600061184b611173565b905061186b81856000868660405180602001604052806000815250612385565b60005b83518110156119b857600084828151811061188c5761188b613b5b565b5b6020026020010151905060008483815181106118ab576118aa613b5b565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613631565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806119b090613ab4565b91505061186e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611a3092919061351d565b60405180910390a450505050565b611a466109d9565b15611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613671565b60405180910390fd5b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611aca611173565b604051611ad7919061341e565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4790613731565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c419190613554565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906136d1565b60405180910390fd5b6000611cc8611173565b9050611cf881856000611cda8761230b565b611ce38761230b565b60405180602001604052806000815250612385565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613631565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e5c9291906137cc565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed290613791565b60405180910390fd5b8151835114611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613771565b60405180910390fd5b6000611f29611173565b9050611f3a81600087878787612385565b60005b8451811015611ff357838181518110611f5957611f58613b5b565b5b6020026020010151600080878481518110611f7757611f76613b5b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd99190613945565b925050819055508080611feb90613ab4565b915050611f3d565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161206b92919061351d565b60405180910390a4612082816000878787876125ca565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090613691565b60405180910390fd5b6000612103611173565b90506121238187876121148861230b565b61211d8861230b565b87612385565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b1906136f1565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461226f9190613945565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122ec9291906137cc565b60405180910390a46123028288888888886123e3565b50505050505050565b60606000600167ffffffffffffffff81111561232a57612329613b8a565b5b6040519080825280602002602001820160405280156123585781602001602082028036833780820191505090505b50905082816000815181106123705761236f613b5b565b5b60200260200101818152505080915050919050565b61238d6109d9565b156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c490613671565b60405180910390fd5b6123db8686868686866127b1565b505050505050565b6124028473ffffffffffffffffffffffffffffffffffffffff166127b9565b156125c2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016124489594939291906134a1565b602060405180830381600087803b15801561246257600080fd5b505af192505050801561249357506040513d601f19601f820116820180604052508101906124909190612fb1565b60015b6125395761249f613bb9565b806308c379a014156124fc57506124b46140df565b806124bf57506124fe565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f3919061356f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090613591565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b7906135b1565b60405180910390fd5b505b505050505050565b6125e98473ffffffffffffffffffffffffffffffffffffffff166127b9565b156127a9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161262f959493929190613439565b602060405180830381600087803b15801561264957600080fd5b505af192505050801561267a57506040513d601f19601f820116820180604052508101906126779190612fb1565b60015b61272057612686613bb9565b806308c379a014156126e3575061269b6140df565b806126a657506126e5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da919061356f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271790613591565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e906135b1565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b8280546127d890613a51565b90600052602060002090601f0160209004810192826127fa5760008555612841565b82601f1061281357805160ff1916838001178555612841565b82800160010185558215612841579182015b82811115612840578251825591602001919060010190612825565b5b50905061284e9190612852565b5090565b5b8082111561286b576000816000905550600101612853565b5090565b600061288261287d8461381a565b6137f5565b905080838252602082019050828560208602820111156128a5576128a4613be0565b5b60005b858110156128d557816128bb88826129d3565b8452602084019350602083019250506001810190506128a8565b5050509392505050565b60006128f26128ed84613846565b6137f5565b9050808382526020820190508285602086028201111561291557612914613be0565b5b60005b85811015612945578161292b8882612adf565b845260208401935060208301925050600181019050612918565b5050509392505050565b600061296261295d84613872565b6137f5565b90508281526020810184848401111561297e5761297d613be5565b5b612989848285613a0f565b509392505050565b60006129a461299f846138a3565b6137f5565b9050828152602081018484840111156129c0576129bf613be5565b5b6129cb848285613a0f565b509392505050565b6000813590506129e281614175565b92915050565b600082601f8301126129fd576129fc613bdb565b5b8135612a0d84826020860161286f565b91505092915050565b600082601f830112612a2b57612a2a613bdb565b5b8135612a3b8482602086016128df565b91505092915050565b600081359050612a538161418c565b92915050565b600081359050612a68816141a3565b92915050565b600081519050612a7d816141a3565b92915050565b600082601f830112612a9857612a97613bdb565b5b8135612aa884826020860161294f565b91505092915050565b600082601f830112612ac657612ac5613bdb565b5b8135612ad6848260208601612991565b91505092915050565b600081359050612aee816141ba565b92915050565b600060208284031215612b0a57612b09613bef565b5b6000612b18848285016129d3565b91505092915050565b60008060408385031215612b3857612b37613bef565b5b6000612b46858286016129d3565b9250506020612b57858286016129d3565b9150509250929050565b600080600080600060a08688031215612b7d57612b7c613bef565b5b6000612b8b888289016129d3565b9550506020612b9c888289016129d3565b945050604086013567ffffffffffffffff811115612bbd57612bbc613bea565b5b612bc988828901612a16565b935050606086013567ffffffffffffffff811115612bea57612be9613bea565b5b612bf688828901612a16565b925050608086013567ffffffffffffffff811115612c1757612c16613bea565b5b612c2388828901612a83565b9150509295509295909350565b600080600080600060a08688031215612c4c57612c4b613bef565b5b6000612c5a888289016129d3565b9550506020612c6b888289016129d3565b9450506040612c7c88828901612adf565b9350506060612c8d88828901612adf565b925050608086013567ffffffffffffffff811115612cae57612cad613bea565b5b612cba88828901612a83565b9150509295509295909350565b600080600060608486031215612ce057612cdf613bef565b5b6000612cee868287016129d3565b935050602084013567ffffffffffffffff811115612d0f57612d0e613bea565b5b612d1b86828701612a16565b925050604084013567ffffffffffffffff811115612d3c57612d3b613bea565b5b612d4886828701612a16565b9150509250925092565b60008060408385031215612d6957612d68613bef565b5b6000612d77858286016129d3565b9250506020612d8885828601612a44565b9150509250929050565b60008060408385031215612da957612da8613bef565b5b6000612db7858286016129d3565b9250506020612dc885828601612adf565b9150509250929050565b600080600060608486031215612deb57612dea613bef565b5b6000612df9868287016129d3565b9350506020612e0a86828701612adf565b9250506040612e1b86828701612adf565b9150509250925092565b60008060408385031215612e3c57612e3b613bef565b5b600083013567ffffffffffffffff811115612e5a57612e59613bea565b5b612e66858286016129e8565b925050602083013567ffffffffffffffff811115612e8757612e86613bea565b5b612e9385828601612a16565b9150509250929050565b600080600060608486031215612eb657612eb5613bef565b5b600084013567ffffffffffffffff811115612ed457612ed3613bea565b5b612ee0868287016129e8565b9350506020612ef186828701612adf565b9250506040612f0286828701612adf565b9150509250925092565b60008060408385031215612f2357612f22613bef565b5b600083013567ffffffffffffffff811115612f4157612f40613bea565b5b612f4d85828601612a16565b925050602083013567ffffffffffffffff811115612f6e57612f6d613bea565b5b612f7a85828601612a16565b9150509250929050565b600060208284031215612f9a57612f99613bef565b5b6000612fa884828501612a59565b91505092915050565b600060208284031215612fc757612fc6613bef565b5b6000612fd584828501612a6e565b91505092915050565b600060208284031215612ff457612ff3613bef565b5b600061300284828501612adf565b91505092915050565b6000806040838503121561302257613021613bef565b5b600061303085828601612adf565b925050602083013567ffffffffffffffff81111561305157613050613bea565b5b61305d85828601612ab1565b9150509250929050565b6000806040838503121561307e5761307d613bef565b5b600061308c85828601612adf565b925050602061309d85828601612adf565b9150509250929050565b60006130b38383613400565b60208301905092915050565b6130c88161399b565b82525050565b60006130d9826138e4565b6130e38185613912565b93506130ee836138d4565b8060005b8381101561311f57815161310688826130a7565b975061311183613905565b9250506001810190506130f2565b5085935050505092915050565b613135816139ad565b82525050565b6000613146826138ef565b6131508185613923565b9350613160818560208601613a1e565b61316981613bf4565b840191505092915050565b600061317f826138fa565b6131898185613934565b9350613199818560208601613a1e565b6131a281613bf4565b840191505092915050565b60006131ba603483613934565b91506131c582613c12565b604082019050919050565b60006131dd602883613934565b91506131e882613c61565b604082019050919050565b6000613200601483613934565b915061320b82613cb0565b602082019050919050565b6000613223602b83613934565b915061322e82613cd9565b604082019050919050565b6000613246602683613934565b915061325182613d28565b604082019050919050565b6000613269602483613934565b915061327482613d77565b604082019050919050565b600061328c602983613934565b915061329782613dc6565b604082019050919050565b60006132af601083613934565b91506132ba82613e15565b602082019050919050565b60006132d2602583613934565b91506132dd82613e3e565b604082019050919050565b60006132f5603283613934565b915061330082613e8d565b604082019050919050565b6000613318602383613934565b915061332382613edc565b604082019050919050565b600061333b602a83613934565b915061334682613f2b565b604082019050919050565b600061335e602083613934565b915061336982613f7a565b602082019050919050565b6000613381602983613934565b915061338c82613fa3565b604082019050919050565b60006133a4602983613934565b91506133af82613ff2565b604082019050919050565b60006133c7602883613934565b91506133d282614041565b604082019050919050565b60006133ea602183613934565b91506133f582614090565b604082019050919050565b61340981613a05565b82525050565b61341881613a05565b82525050565b600060208201905061343360008301846130bf565b92915050565b600060a08201905061344e60008301886130bf565b61345b60208301876130bf565b818103604083015261346d81866130ce565b9050818103606083015261348181856130ce565b90508181036080830152613495818461313b565b90509695505050505050565b600060a0820190506134b660008301886130bf565b6134c360208301876130bf565b6134d0604083018661340f565b6134dd606083018561340f565b81810360808301526134ef818461313b565b90509695505050505050565b6000602082019050818103600083015261351581846130ce565b905092915050565b6000604082019050818103600083015261353781856130ce565b9050818103602083015261354b81846130ce565b90509392505050565b6000602082019050613569600083018461312c565b92915050565b600060208201905081810360008301526135898184613174565b905092915050565b600060208201905081810360008301526135aa816131ad565b9050919050565b600060208201905081810360008301526135ca816131d0565b9050919050565b600060208201905081810360008301526135ea816131f3565b9050919050565b6000602082019050818103600083015261360a81613216565b9050919050565b6000602082019050818103600083015261362a81613239565b9050919050565b6000602082019050818103600083015261364a8161325c565b9050919050565b6000602082019050818103600083015261366a8161327f565b9050919050565b6000602082019050818103600083015261368a816132a2565b9050919050565b600060208201905081810360008301526136aa816132c5565b9050919050565b600060208201905081810360008301526136ca816132e8565b9050919050565b600060208201905081810360008301526136ea8161330b565b9050919050565b6000602082019050818103600083015261370a8161332e565b9050919050565b6000602082019050818103600083015261372a81613351565b9050919050565b6000602082019050818103600083015261374a81613374565b9050919050565b6000602082019050818103600083015261376a81613397565b9050919050565b6000602082019050818103600083015261378a816133ba565b9050919050565b600060208201905081810360008301526137aa816133dd565b9050919050565b60006020820190506137c6600083018461340f565b92915050565b60006040820190506137e1600083018561340f565b6137ee602083018461340f565b9392505050565b60006137ff613810565b905061380b8282613a83565b919050565b6000604051905090565b600067ffffffffffffffff82111561383557613834613b8a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561386157613860613b8a565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561388d5761388c613b8a565b5b61389682613bf4565b9050602081019050919050565b600067ffffffffffffffff8211156138be576138bd613b8a565b5b6138c782613bf4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061395082613a05565b915061395b83613a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139905761398f613afd565b5b828201905092915050565b60006139a6826139e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a3c578082015181840152602081019050613a21565b83811115613a4b576000848401525b50505050565b60006002820490506001821680613a6957607f821691505b60208210811415613a7d57613a7c613b2c565b5b50919050565b613a8c82613bf4565b810181811067ffffffffffffffff82111715613aab57613aaa613b8a565b5b80604052505050565b6000613abf82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613afd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613bd85760046000803e613bd5600051613c05565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156140ef57614172565b6140f7613810565b60043d036004823e80513d602482011167ffffffffffffffff8211171561411f575050614172565b808201805167ffffffffffffffff81111561413d5750505050614172565b80602083010160043d03850181111561415a575050505050614172565b61416982602001850186613a83565b82955050505050505b90565b61417e8161399b565b811461418957600080fd5b50565b614195816139ad565b81146141a057600080fd5b50565b6141ac816139b9565b81146141b757600080fd5b50565b6141c381613a05565b81146141ce57600080fd5b5056fea2646970667358221220c579ca838d9334a2bd1da721c4b48472c31edb681a3cae9254e348507319d31b64736f6c63430008070033

Deployed Bytecode Sourcemap

38951:1587:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25378:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24401:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39012:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40158:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39201:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27317:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39963:59;;;:::i;:::-;;25775:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2060:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4959:103;;;:::i;:::-;;39773:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39902:55;;;:::i;:::-;;40028:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4308:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39035:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26372:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39467:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39676:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39062:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39318:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26599:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26839:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5217:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25378:231;25464:7;25511:1;25492:21;;:7;:21;;;;25484:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25579:9;:13;25589:2;25579:13;;;;;;;;;;;:22;25593:7;25579:22;;;;;;;;;;;;;;;;25572:29;;25378:231;;;;:::o;24401:310::-;24503:4;24555:26;24540:41;;;:11;:41;;;;:110;;;;24613:37;24598:52;;;:11;:52;;;;24540:110;:163;;;;24667:36;24691:11;24667:23;:36::i;:::-;24540:163;24520:183;;24401:310;;;:::o;39012:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40158:101::-;40211:13;40240:8;:13;40249:3;40240:13;;;;;;;;;;;40233:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40158:101;;;:::o;39201:111::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39278:28:::1;39284:3;39289;39294:7;39278:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;39201:111:::0;;;:::o;27317:442::-;27558:12;:10;:12::i;:::-;27550:20;;:4;:20;;;:60;;;;27574:36;27591:4;27597:12;:10;:12::i;:::-;27574:16;:36::i;:::-;27550:60;27528:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27699:52;27722:4;27728:2;27732:3;27737:7;27746:4;27699:22;:52::i;:::-;27317:442;;;;;:::o;39963:59::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40006:10:::1;:8;:10::i;:::-;39963:59::o:0;25775:524::-;25931:16;25992:3;:10;25973:8;:15;:29;25965:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26061:30;26108:8;:15;26094:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26061:63;;26142:9;26137:122;26161:8;:15;26157:1;:19;26137:122;;;26217:30;26227:8;26236:1;26227:11;;;;;;;;:::i;:::-;;;;;;;;26240:3;26244:1;26240:6;;;;;;;;:::i;:::-;;;;;;;;26217:9;:30::i;:::-;26198:13;26212:1;26198:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26178:3;;;;:::i;:::-;;;26137:122;;;;26278:13;26271:20;;;25775:524;;;;:::o;2060:86::-;2107:4;2131:7;;;;;;;;;;;2124:14;;2060:86;:::o;4959:103::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5024:30:::1;5051:1;5024:18;:30::i;:::-;4959:103::o:0;39773:123::-;39852:38;39863:10;39875:4;39881:8;39852:10;:38::i;:::-;39773:123;;:::o;39902:55::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39943:8:::1;:6;:8::i;:::-;39902:55::o:0;40028:124::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40116:4:::1;40100:8;:13;40109:3;40100:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;40142:3;40132:14;40136:4;40132:14;;;;;;:::i;:::-;;;;;;;;40028:124:::0;;:::o;4308:87::-;4354:7;4381:6;;;;;;;;;;;4374:13;;4308:87;:::o;39035:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26372:155::-;26467:52;26486:12;:10;:12::i;:::-;26500:8;26510;26467:18;:52::i;:::-;26372:155;;:::o;39467:203::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39567:9:::1;39562:103;39586:11;:18;39582:1;:22;39562:103;;;39620:37;39626:11;39638:1;39626:14;;;;;;;;:::i;:::-;;;;;;;;39642:2;39646:6;39620:37;;;;;;;;;;;::::0;:5:::1;:37::i;:::-;39606:3;;;;;:::i;:::-;;;;39562:103;;;;39467:203:::0;;;:::o;39676:91::-;39730:31;39736:10;39748:3;39753:7;39730:5;:31::i;:::-;39676:91;;:::o;39062:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39318:143::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39420:35:::1;39431:3;39436:4;39442:8;39420:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;39318:143:::0;;;:::o;26599:168::-;26698:4;26722:18;:27;26741:7;26722:27;;;;;;;;;;;;;;;:37;26750:8;26722:37;;;;;;;;;;;;;;;;;;;;;;;;;26715:44;;26599:168;;;;:::o;26839:401::-;27055:12;:10;:12::i;:::-;27047:20;;:4;:20;;;:60;;;;27071:36;27088:4;27094:12;:10;:12::i;:::-;27071:16;:36::i;:::-;27047:60;27025:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27187:45;27205:4;27211:2;27215;27219:6;27227:4;27187:17;:45::i;:::-;26839:401;;;;;:::o;5217:201::-;4539:12;:10;:12::i;:::-;4528:23;;:7;:5;:7::i;:::-;:23;;;4520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5326:1:::1;5306:22;;:8;:22;;;;5298:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5382:28;5401:8;5382:18;:28::i;:::-;5217:201:::0;:::o;15709:157::-;15794:4;15833:25;15818:40;;;:11;:40;;;;15811:47;;15709:157;;;:::o;714:98::-;767:7;794:10;787:17;;714:98;:::o;31793:569::-;31960:1;31946:16;;:2;:16;;;;31938:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32013:16;32032:12;:10;:12::i;:::-;32013:31;;32057:102;32078:8;32096:1;32100:2;32104:21;32122:2;32104:17;:21::i;:::-;32127:25;32145:6;32127:17;:25::i;:::-;32154:4;32057:20;:102::i;:::-;32193:6;32172:9;:13;32182:2;32172:13;;;;;;;;;;;:17;32186:2;32172:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32252:2;32215:52;;32248:1;32215:52;;32230:8;32215:52;;;32256:2;32260:6;32215:52;;;;;;;:::i;:::-;;;;;;;;32280:74;32311:8;32329:1;32333:2;32337;32341:6;32349:4;32280:30;:74::i;:::-;31927:435;31793:569;;;;:::o;29401:1074::-;29628:7;:14;29614:3;:10;:28;29606:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29720:1;29706:16;;:2;:16;;;;29698:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:16;29796:12;:10;:12::i;:::-;29777:31;;29821:60;29842:8;29852:4;29858:2;29862:3;29867:7;29876:4;29821:20;:60::i;:::-;29899:9;29894:421;29918:3;:10;29914:1;:14;29894:421;;;29950:10;29963:3;29967:1;29963:6;;;;;;;;:::i;:::-;;;;;;;;29950:19;;29984:14;30001:7;30009:1;30001:10;;;;;;;;:::i;:::-;;;;;;;;29984:27;;30028:19;30050:9;:13;30060:2;30050:13;;;;;;;;;;;:19;30064:4;30050:19;;;;;;;;;;;;;;;;30028:41;;30107:6;30092:11;:21;;30084:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30240:6;30226:11;:20;30204:9;:13;30214:2;30204:13;;;;;;;;;;;:19;30218:4;30204:19;;;;;;;;;;;;;;;:42;;;;30297:6;30276:9;:13;30286:2;30276:13;;;;;;;;;;;:17;30290:2;30276:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29935:380;;;29930:3;;;;:::i;:::-;;;29894:421;;;;30362:2;30332:47;;30356:4;30332:47;;30346:8;30332:47;;;30366:3;30371:7;30332:47;;;;;;;:::i;:::-;;;;;;;;30392:75;30428:8;30438:4;30444:2;30448:3;30453:7;30462:4;30392:35;:75::i;:::-;29595:880;29401:1074;;;;;:::o;3119:120::-;2663:8;:6;:8::i;:::-;2655:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;3188:5:::1;3178:7;;:15;;;;;;;;;;;;;;;;;;3209:22;3218:12;:10;:12::i;:::-;3209:22;;;;;;:::i;:::-;;;;;;;;3119:120::o:0;5578:191::-;5652:16;5671:6;;;;;;;;;;;5652:25;;5697:8;5688:6;;:17;;;;;;;;;;;;;;;;;;5752:8;5721:40;;5742:8;5721:40;;;;;;;;;;;;5641:128;5578:191;:::o;34554:891::-;34722:1;34706:18;;:4;:18;;;;34698:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34797:7;:14;34783:3;:10;:28;34775:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34869:16;34888:12;:10;:12::i;:::-;34869:31;;34913:66;34934:8;34944:4;34958:1;34962:3;34967:7;34913:66;;;;;;;;;;;;:20;:66::i;:::-;34997:9;34992:373;35016:3;:10;35012:1;:14;34992:373;;;35048:10;35061:3;35065:1;35061:6;;;;;;;;:::i;:::-;;;;;;;;35048:19;;35082:14;35099:7;35107:1;35099:10;;;;;;;;:::i;:::-;;;;;;;;35082:27;;35126:19;35148:9;:13;35158:2;35148:13;;;;;;;;;;;:19;35162:4;35148:19;;;;;;;;;;;;;;;;35126:41;;35205:6;35190:11;:21;;35182:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35332:6;35318:11;:20;35296:9;:13;35306:2;35296:13;;;;;;;;;;;:19;35310:4;35296:19;;;;;;;;;;;;;;;:42;;;;35033:332;;;35028:3;;;;;:::i;:::-;;;;34992:373;;;;35420:1;35382:55;;35406:4;35382:55;;35396:8;35382:55;;;35424:3;35429:7;35382:55;;;;;;;:::i;:::-;;;;;;;;34687:758;34554:891;;;:::o;2860:118::-;2386:8;:6;:8::i;:::-;2385:9;2377:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2930:4:::1;2920:7;;:14;;;;;;;;;;;;;;;;;;2950:20;2957:12;:10;:12::i;:::-;2950:20;;;;;;:::i;:::-;;;;;;;;2860:118::o:0;35587:331::-;35742:8;35733:17;;:5;:17;;;;35725:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35845:8;35807:18;:25;35826:5;35807:25;;;;;;;;;;;;;;;:35;35833:8;35807:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35891:8;35869:41;;35884:5;35869:41;;;35901:8;35869:41;;;;;;:::i;:::-;;;;;;;;35587:331;;;:::o;33703:648::-;33846:1;33830:18;;:4;:18;;;;33822:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33901:16;33920:12;:10;:12::i;:::-;33901:31;;33945:102;33966:8;33976:4;33990:1;33994:21;34012:2;33994:17;:21::i;:::-;34017:25;34035:6;34017:17;:25::i;:::-;33945:102;;;;;;;;;;;;:20;:102::i;:::-;34060:19;34082:9;:13;34092:2;34082:13;;;;;;;;;;;:19;34096:4;34082:19;;;;;;;;;;;;;;;;34060:41;;34135:6;34120:11;:21;;34112:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34254:6;34240:11;:20;34218:9;:13;34228:2;34218:13;;;;;;;;;;;:19;34232:4;34218:19;;;;;;;;;;;;;;;:42;;;;34328:1;34289:54;;34314:4;34289:54;;34304:8;34289:54;;;34332:2;34336:6;34289:54;;;;;;;:::i;:::-;;;;;;;;33811:540;;33703:648;;;:::o;32718:735::-;32910:1;32896:16;;:2;:16;;;;32888:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32983:7;:14;32969:3;:10;:28;32961:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33055:16;33074:12;:10;:12::i;:::-;33055:31;;33099:66;33120:8;33138:1;33142:2;33146:3;33151:7;33160:4;33099:20;:66::i;:::-;33183:9;33178:103;33202:3;:10;33198:1;:14;33178:103;;;33259:7;33267:1;33259:10;;;;;;;;:::i;:::-;;;;;;;;33234:9;:17;33244:3;33248:1;33244:6;;;;;;;;:::i;:::-;;;;;;;;33234:17;;;;;;;;;;;:21;33252:2;33234:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33214:3;;;;;:::i;:::-;;;;33178:103;;;;33334:2;33298:53;;33330:1;33298:53;;33312:8;33298:53;;;33338:3;33343:7;33298:53;;;;;;;:::i;:::-;;;;;;;;33364:81;33400:8;33418:1;33422:2;33426:3;33431:7;33440:4;33364:35;:81::i;:::-;32877:576;32718:735;;;;:::o;28223:820::-;28425:1;28411:16;;:2;:16;;;;28403:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28482:16;28501:12;:10;:12::i;:::-;28482:31;;28526:96;28547:8;28557:4;28563:2;28567:21;28585:2;28567:17;:21::i;:::-;28590:25;28608:6;28590:17;:25::i;:::-;28617:4;28526:20;:96::i;:::-;28635:19;28657:9;:13;28667:2;28657:13;;;;;;;;;;;:19;28671:4;28657:19;;;;;;;;;;;;;;;;28635:41;;28710:6;28695:11;:21;;28687:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28835:6;28821:11;:20;28799:9;:13;28809:2;28799:13;;;;;;;;;;;:19;28813:4;28799:19;;;;;;;;;;;;;;;:42;;;;28884:6;28863:9;:13;28873:2;28863:13;;;;;;;;;;;:17;28877:2;28863:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28939:2;28908:46;;28933:4;28908:46;;28923:8;28908:46;;;28943:2;28947:6;28908:46;;;;;;;:::i;:::-;;;;;;;;28967:68;28998:8;29008:4;29014:2;29018;29022:6;29030:4;28967:30;:68::i;:::-;28392:651;;28223:820;;;;;:::o;38676:198::-;38742:16;38771:22;38810:1;38796:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38771:41;;38834:7;38823:5;38829:1;38823:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38861:5;38854:12;;;38676:198;;;:::o;40265:270::-;2386:8;:6;:8::i;:::-;2385:9;2377:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;40463:66:::1;40490:8;40500:4;40506:2;40510:3;40515:7;40524:4;40463:26;:66::i;:::-;40265:270:::0;;;;;;:::o;37103:744::-;37318:15;:2;:13;;;:15::i;:::-;37314:526;;;37371:2;37354:38;;;37393:8;37403:4;37409:2;37413:6;37421:4;37354:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37350:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37702:6;37695:14;;;;;;;;;;;:::i;:::-;;;;;;;;37350:479;;;37751:62;;;;;;;;;;:::i;:::-;;;;;;;;37350:479;37488:43;;;37476:55;;;:8;:55;;;;37472:154;;37556:50;;;;;;;;;;:::i;:::-;;;;;;;;37472:154;37427:214;37314:526;37103:744;;;;;;:::o;37855:813::-;38095:15;:2;:13;;;:15::i;:::-;38091:570;;;38148:2;38131:43;;;38175:8;38185:4;38191:3;38196:7;38205:4;38131:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38127:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38523:6;38516:14;;;;;;;;;;;:::i;:::-;;;;;;;;38127:523;;;38572:62;;;;;;;;;;:::i;:::-;;;;;;;;38127:523;38304:48;;;38292:60;;;:8;:60;;;;38288:159;;38377:50;;;;;;;;;;:::i;:::-;;;;;;;;38288:159;38211:251;38091:570;37855:813;;;;;;:::o;36874:221::-;;;;;;;:::o;6596:387::-;6656:4;6864:12;6931:7;6919:20;6911:28;;6974:1;6967:4;:8;6960:15;;;6596:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:468::-;9088:6;9096;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9271:1;9296:53;9341:7;9332:6;9321:9;9317:22;9296:53;:::i;:::-;9286:63;;9242:117;9398:2;9424:50;9466:7;9457:6;9446:9;9442:22;9424:50;:::i;:::-;9414:60;;9369:115;9023:468;;;;;:::o;9497:474::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:53;9818:7;9809:6;9798:9;9794:22;9773:53;:::i;:::-;9763:63;;9719:117;9875:2;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9846:118;9497:474;;;;;:::o;9977:619::-;10054:6;10062;10070;10119:2;10107:9;10098:7;10094:23;10090:32;10087:119;;;10125:79;;:::i;:::-;10087:119;10245:1;10270:53;10315:7;10306:6;10295:9;10291:22;10270:53;:::i;:::-;10260:63;;10216:117;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;10500:2;10526:53;10571:7;10562:6;10551:9;10547:22;10526:53;:::i;:::-;10516:63;;10471:118;9977:619;;;;;:::o;10602:894::-;10720:6;10728;10777:2;10765:9;10756:7;10752:23;10748:32;10745:119;;;10783:79;;:::i;:::-;10745:119;10931:1;10920:9;10916:17;10903:31;10961:18;10953:6;10950:30;10947:117;;;10983:79;;:::i;:::-;10947:117;11088:78;11158:7;11149:6;11138:9;11134:22;11088:78;:::i;:::-;11078:88;;10874:302;11243:2;11232:9;11228:18;11215:32;11274:18;11266:6;11263:30;11260:117;;;11296:79;;:::i;:::-;11260:117;11401:78;11471:7;11462:6;11451:9;11447:22;11401:78;:::i;:::-;11391:88;;11186:303;10602:894;;;;;:::o;11502:829::-;11604:6;11612;11620;11669:2;11657:9;11648:7;11644:23;11640:32;11637:119;;;11675:79;;:::i;:::-;11637:119;11823:1;11812:9;11808:17;11795:31;11853:18;11845:6;11842:30;11839:117;;;11875:79;;:::i;:::-;11839:117;11980:78;12050:7;12041:6;12030:9;12026:22;11980:78;:::i;:::-;11970:88;;11766:302;12107:2;12133:53;12178:7;12169:6;12158:9;12154:22;12133:53;:::i;:::-;12123:63;;12078:118;12235:2;12261:53;12306:7;12297:6;12286:9;12282:22;12261:53;:::i;:::-;12251:63;;12206:118;11502:829;;;;;:::o;12337:894::-;12455:6;12463;12512:2;12500:9;12491:7;12487:23;12483:32;12480:119;;;12518:79;;:::i;:::-;12480:119;12666:1;12655:9;12651:17;12638:31;12696:18;12688:6;12685:30;12682:117;;;12718:79;;:::i;:::-;12682:117;12823:78;12893:7;12884:6;12873:9;12869:22;12823:78;:::i;:::-;12813:88;;12609:302;12978:2;12967:9;12963:18;12950:32;13009:18;13001:6;12998:30;12995:117;;;13031:79;;:::i;:::-;12995:117;13136:78;13206:7;13197:6;13186:9;13182:22;13136:78;:::i;:::-;13126:88;;12921:303;12337:894;;;;;:::o;13237:327::-;13295:6;13344:2;13332:9;13323:7;13319:23;13315:32;13312:119;;;13350:79;;:::i;:::-;13312:119;13470:1;13495:52;13539:7;13530:6;13519:9;13515:22;13495:52;:::i;:::-;13485:62;;13441:116;13237:327;;;;:::o;13570:349::-;13639:6;13688:2;13676:9;13667:7;13663:23;13659:32;13656:119;;;13694:79;;:::i;:::-;13656:119;13814:1;13839:63;13894:7;13885:6;13874:9;13870:22;13839:63;:::i;:::-;13829:73;;13785:127;13570:349;;;;:::o;13925:329::-;13984:6;14033:2;14021:9;14012:7;14008:23;14004:32;14001:119;;;14039:79;;:::i;:::-;14001:119;14159:1;14184:53;14229:7;14220:6;14209:9;14205:22;14184:53;:::i;:::-;14174:63;;14130:117;13925:329;;;;:::o;14260:654::-;14338:6;14346;14395:2;14383:9;14374:7;14370:23;14366:32;14363:119;;;14401:79;;:::i;:::-;14363:119;14521:1;14546:53;14591:7;14582:6;14571:9;14567:22;14546:53;:::i;:::-;14536:63;;14492:117;14676:2;14665:9;14661:18;14648:32;14707:18;14699:6;14696:30;14693:117;;;14729:79;;:::i;:::-;14693:117;14834:63;14889:7;14880:6;14869:9;14865:22;14834:63;:::i;:::-;14824:73;;14619:288;14260:654;;;;;:::o;14920:474::-;14988:6;14996;15045:2;15033:9;15024:7;15020:23;15016:32;15013:119;;;15051:79;;:::i;:::-;15013:119;15171:1;15196:53;15241:7;15232:6;15221:9;15217:22;15196:53;:::i;:::-;15186:63;;15142:117;15298:2;15324:53;15369:7;15360:6;15349:9;15345:22;15324:53;:::i;:::-;15314:63;;15269:118;14920:474;;;;;:::o;15400:179::-;15469:10;15490:46;15532:3;15524:6;15490:46;:::i;:::-;15568:4;15563:3;15559:14;15545:28;;15400:179;;;;:::o;15585:118::-;15672:24;15690:5;15672:24;:::i;:::-;15667:3;15660:37;15585:118;;:::o;15739:732::-;15858:3;15887:54;15935:5;15887:54;:::i;:::-;15957:86;16036:6;16031:3;15957:86;:::i;:::-;15950:93;;16067:56;16117:5;16067:56;:::i;:::-;16146:7;16177:1;16162:284;16187:6;16184:1;16181:13;16162:284;;;16263:6;16257:13;16290:63;16349:3;16334:13;16290:63;:::i;:::-;16283:70;;16376:60;16429:6;16376:60;:::i;:::-;16366:70;;16222:224;16209:1;16206;16202:9;16197:14;;16162:284;;;16166:14;16462:3;16455:10;;15863:608;;;15739:732;;;;:::o;16477:109::-;16558:21;16573:5;16558:21;:::i;:::-;16553:3;16546:34;16477:109;;:::o;16592:360::-;16678:3;16706:38;16738:5;16706:38;:::i;:::-;16760:70;16823:6;16818:3;16760:70;:::i;:::-;16753:77;;16839:52;16884:6;16879:3;16872:4;16865:5;16861:16;16839:52;:::i;:::-;16916:29;16938:6;16916:29;:::i;:::-;16911:3;16907:39;16900:46;;16682:270;16592:360;;;;:::o;16958:364::-;17046:3;17074:39;17107:5;17074:39;:::i;:::-;17129:71;17193:6;17188:3;17129:71;:::i;:::-;17122:78;;17209:52;17254:6;17249:3;17242:4;17235:5;17231:16;17209:52;:::i;:::-;17286:29;17308:6;17286:29;:::i;:::-;17281:3;17277:39;17270:46;;17050:272;16958:364;;;;:::o;17328:366::-;17470:3;17491:67;17555:2;17550:3;17491:67;:::i;:::-;17484:74;;17567:93;17656:3;17567:93;:::i;:::-;17685:2;17680:3;17676:12;17669:19;;17328:366;;;:::o;17700:::-;17842:3;17863:67;17927:2;17922:3;17863:67;:::i;:::-;17856:74;;17939:93;18028:3;17939:93;:::i;:::-;18057:2;18052:3;18048:12;18041:19;;17700:366;;;:::o;18072:::-;18214:3;18235:67;18299:2;18294:3;18235:67;:::i;:::-;18228:74;;18311:93;18400:3;18311:93;:::i;:::-;18429:2;18424:3;18420:12;18413:19;;18072:366;;;:::o;18444:::-;18586:3;18607:67;18671:2;18666:3;18607:67;:::i;:::-;18600:74;;18683:93;18772:3;18683:93;:::i;:::-;18801:2;18796:3;18792:12;18785:19;;18444:366;;;:::o;18816:::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:::-;19330:3;19351:67;19415:2;19410:3;19351:67;:::i;:::-;19344:74;;19427:93;19516:3;19427:93;:::i;:::-;19545:2;19540:3;19536:12;19529:19;;19188:366;;;:::o;19560:::-;19702:3;19723:67;19787:2;19782:3;19723:67;:::i;:::-;19716:74;;19799:93;19888:3;19799:93;:::i;:::-;19917:2;19912:3;19908:12;19901:19;;19560:366;;;:::o;19932:::-;20074:3;20095:67;20159:2;20154:3;20095:67;:::i;:::-;20088:74;;20171:93;20260:3;20171:93;:::i;:::-;20289:2;20284:3;20280:12;20273:19;;19932:366;;;:::o;20304:::-;20446:3;20467:67;20531:2;20526:3;20467:67;:::i;:::-;20460:74;;20543:93;20632:3;20543:93;:::i;:::-;20661:2;20656:3;20652:12;20645:19;;20304:366;;;:::o;20676:::-;20818:3;20839:67;20903:2;20898:3;20839:67;:::i;:::-;20832:74;;20915:93;21004:3;20915:93;:::i;:::-;21033:2;21028:3;21024:12;21017:19;;20676:366;;;:::o;21048:::-;21190:3;21211:67;21275:2;21270:3;21211:67;:::i;:::-;21204:74;;21287:93;21376:3;21287:93;:::i;:::-;21405:2;21400:3;21396:12;21389:19;;21048:366;;;:::o;21420:::-;21562:3;21583:67;21647:2;21642:3;21583:67;:::i;:::-;21576:74;;21659:93;21748:3;21659:93;:::i;:::-;21777:2;21772:3;21768:12;21761:19;;21420:366;;;:::o;21792:::-;21934:3;21955:67;22019:2;22014:3;21955:67;:::i;:::-;21948:74;;22031:93;22120:3;22031:93;:::i;:::-;22149:2;22144:3;22140:12;22133:19;;21792:366;;;:::o;22164:::-;22306:3;22327:67;22391:2;22386:3;22327:67;:::i;:::-;22320:74;;22403:93;22492:3;22403:93;:::i;:::-;22521:2;22516:3;22512:12;22505:19;;22164:366;;;:::o;22536:::-;22678:3;22699:67;22763:2;22758:3;22699:67;:::i;:::-;22692:74;;22775:93;22864:3;22775:93;:::i;:::-;22893:2;22888:3;22884:12;22877:19;;22536:366;;;:::o;22908:::-;23050:3;23071:67;23135:2;23130:3;23071:67;:::i;:::-;23064:74;;23147:93;23236:3;23147:93;:::i;:::-;23265:2;23260:3;23256:12;23249:19;;22908:366;;;:::o;23280:::-;23422:3;23443:67;23507:2;23502:3;23443:67;:::i;:::-;23436:74;;23519:93;23608:3;23519:93;:::i;:::-;23637:2;23632:3;23628:12;23621:19;;23280:366;;;:::o;23652:108::-;23729:24;23747:5;23729:24;:::i;:::-;23724:3;23717:37;23652:108;;:::o;23766:118::-;23853:24;23871:5;23853:24;:::i;:::-;23848:3;23841:37;23766:118;;:::o;23890:222::-;23983:4;24021:2;24010:9;24006:18;23998:26;;24034:71;24102:1;24091:9;24087:17;24078:6;24034:71;:::i;:::-;23890:222;;;;:::o;24118:1053::-;24441:4;24479:3;24468:9;24464:19;24456:27;;24493:71;24561:1;24550:9;24546:17;24537:6;24493:71;:::i;:::-;24574:72;24642:2;24631:9;24627:18;24618:6;24574:72;:::i;:::-;24693:9;24687:4;24683:20;24678:2;24667:9;24663:18;24656:48;24721:108;24824:4;24815:6;24721:108;:::i;:::-;24713:116;;24876:9;24870:4;24866:20;24861:2;24850:9;24846:18;24839:48;24904:108;25007:4;24998:6;24904:108;:::i;:::-;24896:116;;25060:9;25054:4;25050:20;25044:3;25033:9;25029:19;25022:49;25088:76;25159:4;25150:6;25088:76;:::i;:::-;25080:84;;24118:1053;;;;;;;;:::o;25177:751::-;25400:4;25438:3;25427:9;25423:19;25415:27;;25452:71;25520:1;25509:9;25505:17;25496:6;25452:71;:::i;:::-;25533:72;25601:2;25590:9;25586:18;25577:6;25533:72;:::i;:::-;25615;25683:2;25672:9;25668:18;25659:6;25615:72;:::i;:::-;25697;25765:2;25754:9;25750:18;25741:6;25697:72;:::i;:::-;25817:9;25811:4;25807:20;25801:3;25790:9;25786:19;25779:49;25845:76;25916:4;25907:6;25845:76;:::i;:::-;25837:84;;25177:751;;;;;;;;:::o;25934:373::-;26077:4;26115:2;26104:9;26100:18;26092:26;;26164:9;26158:4;26154:20;26150:1;26139:9;26135:17;26128:47;26192:108;26295:4;26286:6;26192:108;:::i;:::-;26184:116;;25934:373;;;;:::o;26313:634::-;26534:4;26572:2;26561:9;26557:18;26549:26;;26621:9;26615:4;26611:20;26607:1;26596:9;26592:17;26585:47;26649:108;26752:4;26743:6;26649:108;:::i;:::-;26641:116;;26804:9;26798:4;26794:20;26789:2;26778:9;26774:18;26767:48;26832:108;26935:4;26926:6;26832:108;:::i;:::-;26824:116;;26313:634;;;;;:::o;26953:210::-;27040:4;27078:2;27067:9;27063:18;27055:26;;27091:65;27153:1;27142:9;27138:17;27129:6;27091:65;:::i;:::-;26953:210;;;;:::o;27169:313::-;27282:4;27320:2;27309:9;27305:18;27297:26;;27369:9;27363:4;27359:20;27355:1;27344:9;27340:17;27333:47;27397:78;27470:4;27461:6;27397:78;:::i;:::-;27389:86;;27169:313;;;;:::o;27488:419::-;27654:4;27692:2;27681:9;27677:18;27669:26;;27741:9;27735:4;27731:20;27727:1;27716:9;27712:17;27705:47;27769:131;27895:4;27769:131;:::i;:::-;27761:139;;27488:419;;;:::o;27913:::-;28079:4;28117:2;28106:9;28102:18;28094:26;;28166:9;28160:4;28156:20;28152:1;28141:9;28137:17;28130:47;28194:131;28320:4;28194:131;:::i;:::-;28186:139;;27913:419;;;:::o;28338:::-;28504:4;28542:2;28531:9;28527:18;28519:26;;28591:9;28585:4;28581:20;28577:1;28566:9;28562:17;28555:47;28619:131;28745:4;28619:131;:::i;:::-;28611:139;;28338:419;;;:::o;28763:::-;28929:4;28967:2;28956:9;28952:18;28944:26;;29016:9;29010:4;29006:20;29002:1;28991:9;28987:17;28980:47;29044:131;29170:4;29044:131;:::i;:::-;29036:139;;28763:419;;;:::o;29188:::-;29354:4;29392:2;29381:9;29377:18;29369:26;;29441:9;29435:4;29431:20;29427:1;29416:9;29412:17;29405:47;29469:131;29595:4;29469:131;:::i;:::-;29461:139;;29188:419;;;:::o;29613:::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29866:9;29860:4;29856:20;29852:1;29841:9;29837:17;29830:47;29894:131;30020:4;29894:131;:::i;:::-;29886:139;;29613:419;;;:::o;30038:::-;30204:4;30242:2;30231:9;30227:18;30219:26;;30291:9;30285:4;30281:20;30277:1;30266:9;30262:17;30255:47;30319:131;30445:4;30319:131;:::i;:::-;30311:139;;30038:419;;;:::o;30463:::-;30629:4;30667:2;30656:9;30652:18;30644:26;;30716:9;30710:4;30706:20;30702:1;30691:9;30687:17;30680:47;30744:131;30870:4;30744:131;:::i;:::-;30736:139;;30463:419;;;:::o;30888:::-;31054:4;31092:2;31081:9;31077:18;31069:26;;31141:9;31135:4;31131:20;31127:1;31116:9;31112:17;31105:47;31169:131;31295:4;31169:131;:::i;:::-;31161:139;;30888:419;;;:::o;31313:::-;31479:4;31517:2;31506:9;31502:18;31494:26;;31566:9;31560:4;31556:20;31552:1;31541:9;31537:17;31530:47;31594:131;31720:4;31594:131;:::i;:::-;31586:139;;31313:419;;;:::o;31738:::-;31904:4;31942:2;31931:9;31927:18;31919:26;;31991:9;31985:4;31981:20;31977:1;31966:9;31962:17;31955:47;32019:131;32145:4;32019:131;:::i;:::-;32011:139;;31738:419;;;:::o;32163:::-;32329:4;32367:2;32356:9;32352:18;32344:26;;32416:9;32410:4;32406:20;32402:1;32391:9;32387:17;32380:47;32444:131;32570:4;32444:131;:::i;:::-;32436:139;;32163:419;;;:::o;32588:::-;32754:4;32792:2;32781:9;32777:18;32769:26;;32841:9;32835:4;32831:20;32827:1;32816:9;32812:17;32805:47;32869:131;32995:4;32869:131;:::i;:::-;32861:139;;32588:419;;;:::o;33013:::-;33179:4;33217:2;33206:9;33202:18;33194:26;;33266:9;33260:4;33256:20;33252:1;33241:9;33237:17;33230:47;33294:131;33420:4;33294:131;:::i;:::-;33286:139;;33013:419;;;:::o;33438:::-;33604:4;33642:2;33631:9;33627:18;33619:26;;33691:9;33685:4;33681:20;33677:1;33666:9;33662:17;33655:47;33719:131;33845:4;33719:131;:::i;:::-;33711:139;;33438:419;;;:::o;33863:::-;34029:4;34067:2;34056:9;34052:18;34044:26;;34116:9;34110:4;34106:20;34102:1;34091:9;34087:17;34080:47;34144:131;34270:4;34144:131;:::i;:::-;34136:139;;33863:419;;;:::o;34288:::-;34454:4;34492:2;34481:9;34477:18;34469:26;;34541:9;34535:4;34531:20;34527:1;34516:9;34512:17;34505:47;34569:131;34695:4;34569:131;:::i;:::-;34561:139;;34288:419;;;:::o;34713:222::-;34806:4;34844:2;34833:9;34829:18;34821:26;;34857:71;34925:1;34914:9;34910:17;34901:6;34857:71;:::i;:::-;34713:222;;;;:::o;34941:332::-;35062:4;35100:2;35089:9;35085:18;35077:26;;35113:71;35181:1;35170:9;35166:17;35157:6;35113:71;:::i;:::-;35194:72;35262:2;35251:9;35247:18;35238:6;35194:72;:::i;:::-;34941:332;;;;;:::o;35279:129::-;35313:6;35340:20;;:::i;:::-;35330:30;;35369:33;35397:4;35389:6;35369:33;:::i;:::-;35279:129;;;:::o;35414:75::-;35447:6;35480:2;35474:9;35464:19;;35414:75;:::o;35495:311::-;35572:4;35662:18;35654:6;35651:30;35648:56;;;35684:18;;:::i;:::-;35648:56;35734:4;35726:6;35722:17;35714:25;;35794:4;35788;35784:15;35776:23;;35495:311;;;:::o;35812:::-;35889:4;35979:18;35971:6;35968:30;35965:56;;;36001:18;;:::i;:::-;35965:56;36051:4;36043:6;36039:17;36031:25;;36111:4;36105;36101:15;36093:23;;35812:311;;;:::o;36129:307::-;36190:4;36280:18;36272:6;36269:30;36266:56;;;36302:18;;:::i;:::-;36266:56;36340:29;36362:6;36340:29;:::i;:::-;36332:37;;36424:4;36418;36414:15;36406:23;;36129:307;;;:::o;36442:308::-;36504:4;36594:18;36586:6;36583:30;36580:56;;;36616:18;;:::i;:::-;36580:56;36654:29;36676:6;36654:29;:::i;:::-;36646:37;;36738:4;36732;36728:15;36720:23;;36442:308;;;:::o;36756:132::-;36823:4;36846:3;36838:11;;36876:4;36871:3;36867:14;36859:22;;36756:132;;;:::o;36894:114::-;36961:6;36995:5;36989:12;36979:22;;36894:114;;;:::o;37014:98::-;37065:6;37099:5;37093:12;37083:22;;37014:98;;;:::o;37118:99::-;37170:6;37204:5;37198:12;37188:22;;37118:99;;;:::o;37223:113::-;37293:4;37325;37320:3;37316:14;37308:22;;37223:113;;;:::o;37342:184::-;37441:11;37475:6;37470:3;37463:19;37515:4;37510:3;37506:14;37491:29;;37342:184;;;;:::o;37532:168::-;37615:11;37649:6;37644:3;37637:19;37689:4;37684:3;37680:14;37665:29;;37532:168;;;;:::o;37706:169::-;37790:11;37824:6;37819:3;37812:19;37864:4;37859:3;37855:14;37840:29;;37706:169;;;;:::o;37881:305::-;37921:3;37940:20;37958:1;37940:20;:::i;:::-;37935:25;;37974:20;37992:1;37974:20;:::i;:::-;37969:25;;38128:1;38060:66;38056:74;38053:1;38050:81;38047:107;;;38134:18;;:::i;:::-;38047:107;38178:1;38175;38171:9;38164:16;;37881:305;;;;:::o;38192:96::-;38229:7;38258:24;38276:5;38258:24;:::i;:::-;38247:35;;38192:96;;;:::o;38294:90::-;38328:7;38371:5;38364:13;38357:21;38346:32;;38294:90;;;:::o;38390:149::-;38426:7;38466:66;38459:5;38455:78;38444:89;;38390:149;;;:::o;38545:126::-;38582:7;38622:42;38615:5;38611:54;38600:65;;38545:126;;;:::o;38677:77::-;38714:7;38743:5;38732:16;;38677:77;;;:::o;38760:154::-;38844:6;38839:3;38834;38821:30;38906:1;38897:6;38892:3;38888:16;38881:27;38760:154;;;:::o;38920:307::-;38988:1;38998:113;39012:6;39009:1;39006:13;38998:113;;;39097:1;39092:3;39088:11;39082:18;39078:1;39073:3;39069:11;39062:39;39034:2;39031:1;39027:10;39022:15;;38998:113;;;39129:6;39126:1;39123:13;39120:101;;;39209:1;39200:6;39195:3;39191:16;39184:27;39120:101;38969:258;38920:307;;;:::o;39233:320::-;39277:6;39314:1;39308:4;39304:12;39294:22;;39361:1;39355:4;39351:12;39382:18;39372:81;;39438:4;39430:6;39426:17;39416:27;;39372:81;39500:2;39492:6;39489:14;39469:18;39466:38;39463:84;;;39519:18;;:::i;:::-;39463:84;39284:269;39233:320;;;:::o;39559:281::-;39642:27;39664:4;39642:27;:::i;:::-;39634:6;39630:40;39772:6;39760:10;39757:22;39736:18;39724:10;39721:34;39718:62;39715:88;;;39783:18;;:::i;:::-;39715:88;39823:10;39819:2;39812:22;39602:238;39559:281;;:::o;39846:233::-;39885:3;39908:24;39926:5;39908:24;:::i;:::-;39899:33;;39954:66;39947:5;39944:77;39941:103;;;40024:18;;:::i;:::-;39941:103;40071:1;40064:5;40060:13;40053:20;;39846:233;;;:::o;40085:180::-;40133:77;40130:1;40123:88;40230:4;40227:1;40220:15;40254:4;40251:1;40244:15;40271:180;40319:77;40316:1;40309:88;40416:4;40413:1;40406:15;40440:4;40437:1;40430:15;40457:180;40505:77;40502:1;40495:88;40602:4;40599:1;40592:15;40626:4;40623:1;40616:15;40643:180;40691:77;40688:1;40681:88;40788:4;40785:1;40778:15;40812:4;40809:1;40802:15;40829:183;40864:3;40902:1;40884:16;40881:23;40878:128;;;40940:1;40937;40934;40919:23;40962:34;40993:1;40987:8;40962:34;:::i;:::-;40955:41;;40878:128;40829:183;:::o;41018:117::-;41127:1;41124;41117:12;41141:117;41250:1;41247;41240:12;41264:117;41373:1;41370;41363:12;41387:117;41496:1;41493;41486:12;41510:117;41619:1;41616;41609:12;41633:102;41674:6;41725:2;41721:7;41716:2;41709:5;41705:14;41701:28;41691:38;;41633:102;;;:::o;41741:106::-;41785:8;41834:5;41829:3;41825:15;41804:36;;41741:106;;;:::o;41853:239::-;41993:34;41989:1;41981:6;41977:14;41970:58;42062:22;42057:2;42049:6;42045:15;42038:47;41853:239;:::o;42098:227::-;42238:34;42234:1;42226:6;42222:14;42215:58;42307:10;42302:2;42294:6;42290:15;42283:35;42098:227;:::o;42331:170::-;42471:22;42467:1;42459:6;42455:14;42448:46;42331:170;:::o;42507:230::-;42647:34;42643:1;42635:6;42631:14;42624:58;42716:13;42711:2;42703:6;42699:15;42692:38;42507:230;:::o;42743:225::-;42883:34;42879:1;42871:6;42867:14;42860:58;42952:8;42947:2;42939:6;42935:15;42928:33;42743:225;:::o;42974:223::-;43114:34;43110:1;43102:6;43098:14;43091:58;43183:6;43178:2;43170:6;43166:15;43159:31;42974:223;:::o;43203:228::-;43343:34;43339:1;43331:6;43327:14;43320:58;43412:11;43407:2;43399:6;43395:15;43388:36;43203:228;:::o;43437:166::-;43577:18;43573:1;43565:6;43561:14;43554:42;43437:166;:::o;43609:224::-;43749:34;43745:1;43737:6;43733:14;43726:58;43818:7;43813:2;43805:6;43801:15;43794:32;43609:224;:::o;43839:237::-;43979:34;43975:1;43967:6;43963:14;43956:58;44048:20;44043:2;44035:6;44031:15;44024:45;43839:237;:::o;44082:222::-;44222:34;44218:1;44210:6;44206:14;44199:58;44291:5;44286:2;44278:6;44274:15;44267:30;44082:222;:::o;44310:229::-;44450:34;44446:1;44438:6;44434:14;44427:58;44519:12;44514:2;44506:6;44502:15;44495:37;44310:229;:::o;44545:182::-;44685:34;44681:1;44673:6;44669:14;44662:58;44545:182;:::o;44733:228::-;44873:34;44869:1;44861:6;44857:14;44850:58;44942:11;44937:2;44929:6;44925:15;44918:36;44733:228;:::o;44967:::-;45107:34;45103:1;45095:6;45091:14;45084:58;45176:11;45171:2;45163:6;45159:15;45152:36;44967:228;:::o;45201:227::-;45341:34;45337:1;45329:6;45325:14;45318:58;45410:10;45405:2;45397:6;45393:15;45386:35;45201:227;:::o;45434:220::-;45574:34;45570:1;45562:6;45558:14;45551:58;45643:3;45638:2;45630:6;45626:15;45619:28;45434:220;:::o;45660:711::-;45699:3;45737:4;45719:16;45716:26;45713:39;;;45745:5;;45713:39;45774:20;;:::i;:::-;45849:1;45831:16;45827:24;45824:1;45818:4;45803:49;45882:4;45876:11;45981:16;45974:4;45966:6;45962:17;45959:39;45926:18;45918:6;45915:30;45899:113;45896:146;;;46027:5;;;;45896:146;46073:6;46067:4;46063:17;46109:3;46103:10;46136:18;46128:6;46125:30;46122:43;;;46158:5;;;;;;46122:43;46206:6;46199:4;46194:3;46190:14;46186:27;46265:1;46247:16;46243:24;46237:4;46233:35;46228:3;46225:44;46222:57;;;46272:5;;;;;;;46222:57;46289;46337:6;46331:4;46327:17;46319:6;46315:30;46309:4;46289:57;:::i;:::-;46362:3;46355:10;;45703:668;;;;;45660:711;;:::o;46377:122::-;46450:24;46468:5;46450:24;:::i;:::-;46443:5;46440:35;46430:63;;46489:1;46486;46479:12;46430:63;46377:122;:::o;46505:116::-;46575:21;46590:5;46575:21;:::i;:::-;46568:5;46565:32;46555:60;;46611:1;46608;46601:12;46555:60;46505:116;:::o;46627:120::-;46699:23;46716:5;46699:23;:::i;:::-;46692:5;46689:34;46679:62;;46737:1;46734;46727:12;46679:62;46627:120;:::o;46753:122::-;46826:24;46844:5;46826:24;:::i;:::-;46819:5;46816:35;46806:63;;46865:1;46862;46855:12;46806:63;46753:122;:::o

Swarm Source

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