ETH Price: $2,421.74 (+3.17%)

Token

Long Lost Streetwear (LLSW)
 

Overview

Max Total Supply

57 LLSW

Holders

54

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
theryanfactor.eth
0xCBB42BF72159F25a2e816214977DC842B12bdB63
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:
LongLostStreetwear

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-03-25
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.0;

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



pragma solidity ^0.8.0;

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

        uint256 size;
        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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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.
        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. 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/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(!locked, "Cannot transfer - currently locked");
        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(!locked, "Cannot transfer - currently locked");
        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].
     */

    bool public locked = false;

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

pragma solidity ^0.8.0;

contract LongLostStreetwear is ERC1155, Ownable {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "Long Lost Streetwear";
    symbol = "LLSW";
  }

  function mintTo(address[] memory _to, uint _id, uint _amount) external onlyOwner {
    for (uint256 i = 0; i < _to.length; i++) {
        _mint(_to[i], _id, _amount, "");
    }
  }

  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 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 burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  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 setLocked(bool _locked) external onlyOwner {
        locked = _locked;
    }

    function lockCheck() public view returns (bool) {
        return locked;
    }

}

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":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"},{"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":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","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":[],"name":"lockCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","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":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","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":"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":"bool","name":"_locked","type":"bool"}],"name":"setLocked","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":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526000600360006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051806020016040528060008152506200004e816200010360201b60201c565b506200006f620000636200011860201b60201c565b6200012060201b60201c565b6040518060400160405280601481526020017f4c6f6e67204c6f7374205374726565747765617200000000000000000000000081525060049081620000b5919062000460565b506040518060400160405280600481526020017f4c4c53570000000000000000000000000000000000000000000000000000000081525060059081620000fc919062000460565b5062000547565b806002908162000114919062000460565b5050565b600033905090565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026857607f821691505b6020821081036200027e576200027d62000220565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002a9565b620002f48683620002a9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003416200033b62000335846200030c565b62000316565b6200030c565b9050919050565b6000819050919050565b6200035d8362000320565b620003756200036c8262000348565b848454620002b6565b825550505050565b600090565b6200038c6200037d565b6200039981848462000352565b505050565b5b81811015620003c157620003b560008262000382565b6001810190506200039f565b5050565b601f8211156200041057620003da8162000284565b620003e58462000299565b81016020851015620003f5578190505b6200040d620004048562000299565b8301826200039e565b50505b505050565b600082821c905092915050565b6000620004356000198460080262000415565b1980831691505092915050565b600062000450838362000422565b9150826002028217905092915050565b6200046b82620001e6565b67ffffffffffffffff811115620004875762000486620001f1565b5b6200049382546200024f565b620004a0828285620003c5565b600060209050601f831160018114620004d85760008415620004c3578287015190505b620004cf858262000442565b8655506200053f565b601f198416620004e88662000284565b60005b828110156200051257848901518255600182019150602085019450602081019050620004eb565b868310156200053257848901516200052e601f89168262000422565b8355505b6001600288020188555050505b505050505050565b6143d680620005576000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c806383ca4b6f116100c3578063c87b56dd1161007c578063c87b56dd1461039a578063cf309012146103ca578063d81d0a15146103e8578063e985e9c514610404578063f242432a14610434578063f2fde38b1461045057610157565b806383ca4b6f146102ee578063862440e21461030a5780638da5cb5b1461032657806395d89b4114610344578063a22cb46514610362578063b390c0ab1461037e57610157565b80632bee43cf116101155780632bee43cf146102425780632eb2c2d61461025e5780634e1273f41461027a578063510f4104146102aa578063715018a6146102c657806380ce3a52146102d057610157565b8062fdd58e1461015c57806301ffc9a71461018c57806306fdde03146101bc5780630e89341c146101da578063156e29f61461020a578063211e28b614610226575b600080fd5b610176600480360381019061017191906127d7565b61046c565b6040516101839190612826565b60405180910390f35b6101a660048036038101906101a19190612899565b610534565b6040516101b391906128e1565b60405180910390f35b6101c4610616565b6040516101d1919061298c565b60405180910390f35b6101f460048036038101906101ef91906129ae565b6106a4565b604051610201919061298c565b60405180910390f35b610224600480360381019061021f91906129db565b610749565b005b610240600480360381019061023b9190612a5a565b6107e5565b005b61025c60048036038101906102579190612bcf565b61087e565b005b61027860048036038101906102739190612db6565b610954565b005b610294600480360381019061028f9190612e85565b610a45565b6040516102a19190612fbb565b60405180910390f35b6102c460048036038101906102bf9190612fdd565b610b5e565b005b6102ce610c07565b005b6102d8610c8f565b6040516102e591906128e1565b60405180910390f35b610308600480360381019061030391906130c8565b610ca6565b005b610324600480360381019061031f91906131e1565b610cb5565b005b61032e610d8e565b60405161033b919061324c565b60405180910390f35b61034c610db8565b604051610359919061298c565b60405180910390f35b61037c60048036038101906103779190613267565b610e46565b005b610398600480360381019061039391906132a7565b610e5c565b005b6103b460048036038101906103af91906129ae565b610e6b565b6040516103c1919061298c565b60405180910390f35b6103d2610f0b565b6040516103df91906128e1565b60405180910390f35b61040260048036038101906103fd91906132e7565b610f1e565b005b61041e60048036038101906104199190613372565b610fba565b60405161042b91906128e1565b60405180910390f35b61044e600480360381019061044991906133b2565b61104e565b005b61046a60048036038101906104659190613449565b61113f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d3906134e8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ff57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060f575061060e82611236565b5b9050919050565b6004805461062390613537565b80601f016020809104026020016040519081016040528092919081815260200182805461064f90613537565b801561069c5780601f106106715761010080835404028352916020019161069c565b820191906000526020600020905b81548152906001019060200180831161067f57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106c490613537565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090613537565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b50505050509050919050565b6107516112a0565b73ffffffffffffffffffffffffffffffffffffffff1661076f610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc906135b4565b60405180910390fd5b6107e0838383604051806020016040528060008152506112a8565b505050565b6107ed6112a0565b73ffffffffffffffffffffffffffffffffffffffff1661080b610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610858906135b4565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6108866112a0565b73ffffffffffffffffffffffffffffffffffffffff166108a4610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f1906135b4565b60405180910390fd5b60005b835181101561094e5761093b84828151811061091c5761091b6135d4565b5b60200260200101518484604051806020016040528060008152506112a8565b808061094690613632565b9150506108fd565b50505050565b600360009054906101000a900460ff16156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906136ec565b60405180910390fd5b6109ac6112a0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109f257506109f1856109ec6112a0565b610fba565b5b610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061377e565b60405180910390fd5b610a3e858585858561143d565b5050505050565b60608151835114610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8290613810565b60405180910390fd5b6000835167ffffffffffffffff811115610aa857610aa7612a8c565b5b604051908082528060200260200182016040528015610ad65781602001602082028036833780820191505090505b50905060005b8451811015610b5357610b23858281518110610afb57610afa6135d4565b5b6020026020010151858381518110610b1657610b156135d4565b5b602002602001015161046c565b828281518110610b3657610b356135d4565b5b60200260200101818152505080610b4c90613632565b9050610adc565b508091505092915050565b610b666112a0565b73ffffffffffffffffffffffffffffffffffffffff16610b84610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd1906135b4565b60405180910390fd5b610be5858585611750565b610c0085838360405180602001604052806000815250611a00565b5050505050565b610c0f6112a0565b73ffffffffffffffffffffffffffffffffffffffff16610c2d610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906135b4565b60405180910390fd5b610c8d6000611c1d565b565b6000600360009054906101000a900460ff16905090565b610cb1338383611750565b5050565b610cbd6112a0565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135b4565b60405180910390fd5b80600660008481526020019081526020016000209081610d5191906139dc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610d82919061298c565b60405180910390a25050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610dc590613537565b80601f0160208091040260200160405190810160405280929190818152602001828054610df190613537565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505081565b610e58610e516112a0565b8383611ce3565b5050565b610e67338383611e4f565b5050565b60066020528060005260406000206000915090508054610e8a90613537565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690613537565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b505050505081565b600360009054906101000a900460ff1681565b610f266112a0565b73ffffffffffffffffffffffffffffffffffffffff16610f44610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906135b4565b60405180910390fd5b610fb583838360405180602001604052806000815250611a00565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600360009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906136ec565b60405180910390fd5b6110a66112a0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110ec57506110eb856110e66112a0565b610fba565b5b61112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290613b20565b60405180910390fd5b611138858585858561206b565b5050505050565b6111476112a0565b73ffffffffffffffffffffffffffffffffffffffff16611165610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906135b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613bb2565b60405180910390fd5b61123381611c1d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613c44565b60405180910390fd5b60006113216112a0565b905061134281600087611333886122ec565b61133c886122ec565b87612366565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a19190613c64565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161141f929190613c98565b60405180910390a46114368160008787878761236e565b5050505050565b8151835114611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613dc5565b60405180910390fd5b60006114fa6112a0565b905061150a818787878787612366565b60005b84518110156116bb57600085828151811061152b5761152a6135d4565b5b60200260200101519050600085838151811061154a576115496135d4565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290613e57565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a09190613c64565b92505081905550505050806116b490613632565b905061150d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611732929190613e77565b60405180910390a4611748818787878787612545565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690613f20565b60405180910390fd5b8051825114611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90613d33565b60405180910390fd5b600061180d6112a0565b905061182d81856000868660405180602001604052806000815250612366565b60005b835181101561197a57600084828151811061184e5761184d6135d4565b5b60200260200101519050600084838151811061186d5761186c6135d4565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613fb2565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061197290613632565b915050611830565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119f2929190613e77565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c44565b60405180910390fd5b8151835114611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90613d33565b60405180910390fd5b6000611abd6112a0565b9050611ace81600087878787612366565b60005b8451811015611b8757838181518110611aed57611aec6135d4565b5b6020026020010151600080878481518110611b0b57611b0a6135d4565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b6d9190613c64565b925050819055508080611b7f90613632565b915050611ad1565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bff929190613e77565b60405180910390a4611c1681600087878787612545565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614044565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e4291906128e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613f20565b60405180910390fd5b6000611ec86112a0565b9050611ef881856000611eda876122ec565b611ee3876122ec565b60405180602001604052806000815250612366565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690613fb2565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161205c929190613c98565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190613dc5565b60405180910390fd5b60006120e46112a0565b90506121048187876120f5886122ec565b6120fe886122ec565b87612366565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613e57565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122509190613c64565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122cd929190613c98565b60405180910390a46122e382888888888861236e565b50505050505050565b60606000600167ffffffffffffffff81111561230b5761230a612a8c565b5b6040519080825280602002602001820160405280156123395781602001602082028036833780820191505090505b5090508281600081518110612351576123506135d4565b5b60200260200101818152505080915050919050565b505050505050565b61238d8473ffffffffffffffffffffffffffffffffffffffff1661271c565b1561253d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d39594939291906140b9565b6020604051808303816000875af192505050801561240f57506040513d601f19601f8201168201806040525081019061240c9190614128565b60015b6124b45761241b614162565b806308c379a003612477575061242f614184565b8061243a5750612479565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e919061298c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614286565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614318565b60405180910390fd5b505b505050505050565b6125648473ffffffffffffffffffffffffffffffffffffffff1661271c565b15612714578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125aa959493929190614338565b6020604051808303816000875af19250505080156125e657506040513d601f19601f820116820180604052508101906125e39190614128565b60015b61268b576125f2614162565b806308c379a00361264e5750612606614184565b806126115750612650565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645919061298c565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614286565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614318565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061276e82612743565b9050919050565b61277e81612763565b811461278957600080fd5b50565b60008135905061279b81612775565b92915050565b6000819050919050565b6127b4816127a1565b81146127bf57600080fd5b50565b6000813590506127d1816127ab565b92915050565b600080604083850312156127ee576127ed612739565b5b60006127fc8582860161278c565b925050602061280d858286016127c2565b9150509250929050565b612820816127a1565b82525050565b600060208201905061283b6000830184612817565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61287681612841565b811461288157600080fd5b50565b6000813590506128938161286d565b92915050565b6000602082840312156128af576128ae612739565b5b60006128bd84828501612884565b91505092915050565b60008115159050919050565b6128db816128c6565b82525050565b60006020820190506128f660008301846128d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561293657808201518184015260208101905061291b565b60008484015250505050565b6000601f19601f8301169050919050565b600061295e826128fc565b6129688185612907565b9350612978818560208601612918565b61298181612942565b840191505092915050565b600060208201905081810360008301526129a68184612953565b905092915050565b6000602082840312156129c4576129c3612739565b5b60006129d2848285016127c2565b91505092915050565b6000806000606084860312156129f4576129f3612739565b5b6000612a028682870161278c565b9350506020612a13868287016127c2565b9250506040612a24868287016127c2565b9150509250925092565b612a37816128c6565b8114612a4257600080fd5b50565b600081359050612a5481612a2e565b92915050565b600060208284031215612a7057612a6f612739565b5b6000612a7e84828501612a45565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ac482612942565b810181811067ffffffffffffffff82111715612ae357612ae2612a8c565b5b80604052505050565b6000612af661272f565b9050612b028282612abb565b919050565b600067ffffffffffffffff821115612b2257612b21612a8c565b5b602082029050602081019050919050565b600080fd5b6000612b4b612b4684612b07565b612aec565b90508083825260208201905060208402830185811115612b6e57612b6d612b33565b5b835b81811015612b975780612b83888261278c565b845260208401935050602081019050612b70565b5050509392505050565b600082601f830112612bb657612bb5612a87565b5b8135612bc6848260208601612b38565b91505092915050565b600080600060608486031215612be857612be7612739565b5b600084013567ffffffffffffffff811115612c0657612c0561273e565b5b612c1286828701612ba1565b9350506020612c23868287016127c2565b9250506040612c34868287016127c2565b9150509250925092565b600067ffffffffffffffff821115612c5957612c58612a8c565b5b602082029050602081019050919050565b6000612c7d612c7884612c3e565b612aec565b90508083825260208201905060208402830185811115612ca057612c9f612b33565b5b835b81811015612cc95780612cb588826127c2565b845260208401935050602081019050612ca2565b5050509392505050565b600082601f830112612ce857612ce7612a87565b5b8135612cf8848260208601612c6a565b91505092915050565b600080fd5b600067ffffffffffffffff821115612d2157612d20612a8c565b5b612d2a82612942565b9050602081019050919050565b82818337600083830152505050565b6000612d59612d5484612d06565b612aec565b905082815260208101848484011115612d7557612d74612d01565b5b612d80848285612d37565b509392505050565b600082601f830112612d9d57612d9c612a87565b5b8135612dad848260208601612d46565b91505092915050565b600080600080600060a08688031215612dd257612dd1612739565b5b6000612de08882890161278c565b9550506020612df18882890161278c565b945050604086013567ffffffffffffffff811115612e1257612e1161273e565b5b612e1e88828901612cd3565b935050606086013567ffffffffffffffff811115612e3f57612e3e61273e565b5b612e4b88828901612cd3565b925050608086013567ffffffffffffffff811115612e6c57612e6b61273e565b5b612e7888828901612d88565b9150509295509295909350565b60008060408385031215612e9c57612e9b612739565b5b600083013567ffffffffffffffff811115612eba57612eb961273e565b5b612ec685828601612ba1565b925050602083013567ffffffffffffffff811115612ee757612ee661273e565b5b612ef385828601612cd3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f32816127a1565b82525050565b6000612f448383612f29565b60208301905092915050565b6000602082019050919050565b6000612f6882612efd565b612f728185612f08565b9350612f7d83612f19565b8060005b83811015612fae578151612f958882612f38565b9750612fa083612f50565b925050600181019050612f81565b5085935050505092915050565b60006020820190508181036000830152612fd58184612f5d565b905092915050565b600080600080600060a08688031215612ff957612ff8612739565b5b60006130078882890161278c565b955050602086013567ffffffffffffffff8111156130285761302761273e565b5b61303488828901612cd3565b945050604086013567ffffffffffffffff8111156130555761305461273e565b5b61306188828901612cd3565b935050606086013567ffffffffffffffff8111156130825761308161273e565b5b61308e88828901612cd3565b925050608086013567ffffffffffffffff8111156130af576130ae61273e565b5b6130bb88828901612cd3565b9150509295509295909350565b600080604083850312156130df576130de612739565b5b600083013567ffffffffffffffff8111156130fd576130fc61273e565b5b61310985828601612cd3565b925050602083013567ffffffffffffffff81111561312a5761312961273e565b5b61313685828601612cd3565b9150509250929050565b600067ffffffffffffffff82111561315b5761315a612a8c565b5b61316482612942565b9050602081019050919050565b600061318461317f84613140565b612aec565b9050828152602081018484840111156131a05761319f612d01565b5b6131ab848285612d37565b509392505050565b600082601f8301126131c8576131c7612a87565b5b81356131d8848260208601613171565b91505092915050565b600080604083850312156131f8576131f7612739565b5b6000613206858286016127c2565b925050602083013567ffffffffffffffff8111156132275761322661273e565b5b613233858286016131b3565b9150509250929050565b61324681612763565b82525050565b6000602082019050613261600083018461323d565b92915050565b6000806040838503121561327e5761327d612739565b5b600061328c8582860161278c565b925050602061329d85828601612a45565b9150509250929050565b600080604083850312156132be576132bd612739565b5b60006132cc858286016127c2565b92505060206132dd858286016127c2565b9150509250929050565b600080600060608486031215613300576132ff612739565b5b600061330e8682870161278c565b935050602084013567ffffffffffffffff81111561332f5761332e61273e565b5b61333b86828701612cd3565b925050604084013567ffffffffffffffff81111561335c5761335b61273e565b5b61336886828701612cd3565b9150509250925092565b6000806040838503121561338957613388612739565b5b60006133978582860161278c565b92505060206133a88582860161278c565b9150509250929050565b600080600080600060a086880312156133ce576133cd612739565b5b60006133dc8882890161278c565b95505060206133ed8882890161278c565b94505060406133fe888289016127c2565b935050606061340f888289016127c2565b925050608086013567ffffffffffffffff8111156134305761342f61273e565b5b61343c88828901612d88565b9150509295509295909350565b60006020828403121561345f5761345e612739565b5b600061346d8482850161278c565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006134d2602b83612907565b91506134dd82613476565b604082019050919050565b60006020820190508181036000830152613501816134c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061354f57607f821691505b60208210810361356257613561613508565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061359e602083612907565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061363d826127a1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361366f5761366e613603565b5b600182019050919050565b7f43616e6e6f74207472616e73666572202d2063757272656e746c79206c6f636b60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d6602283612907565b91506136e18261367a565b604082019050919050565b60006020820190508181036000830152613705816136c9565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613768603283612907565b91506137738261370c565b604082019050919050565b600060208201905081810360008301526137978161375b565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006137fa602983612907565b91506138058261379e565b604082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613855565b61389c8683613855565b95508019841693508086168417925050509392505050565b6000819050919050565b60006138d96138d46138cf846127a1565b6138b4565b6127a1565b9050919050565b6000819050919050565b6138f3836138be565b6139076138ff826138e0565b848454613862565b825550505050565b600090565b61391c61390f565b6139278184846138ea565b505050565b5b8181101561394b57613940600082613914565b60018101905061392d565b5050565b601f8211156139905761396181613830565b61396a84613845565b81016020851015613979578190505b61398d61398585613845565b83018261392c565b50505b505050565b600082821c905092915050565b60006139b360001984600802613995565b1980831691505092915050565b60006139cc83836139a2565b9150826002028217905092915050565b6139e5826128fc565b67ffffffffffffffff8111156139fe576139fd612a8c565b5b613a088254613537565b613a1382828561394f565b600060209050601f831160018114613a465760008415613a34578287015190505b613a3e85826139c0565b865550613aa6565b601f198416613a5486613830565b60005b82811015613a7c57848901518255600182019150602085019450602081019050613a57565b86831015613a995784890151613a95601f8916826139a2565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613b0a602983612907565b9150613b1582613aae565b604082019050919050565b60006020820190508181036000830152613b3981613afd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9c602683612907565b9150613ba782613b40565b604082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c2e602183612907565b9150613c3982613bd2565b604082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b6000613c6f826127a1565b9150613c7a836127a1565b9250828201905080821115613c9257613c91613603565b5b92915050565b6000604082019050613cad6000830185612817565b613cba6020830184612817565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613d1d602883612907565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602583612907565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613e41602a83612907565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b60006040820190508181036000830152613e918185612f5d565b90508181036020830152613ea58184612f5d565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a602383612907565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602483612907565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061402e602983612907565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061408b82614064565b614095818561406f565b93506140a5818560208601612918565b6140ae81612942565b840191505092915050565b600060a0820190506140ce600083018861323d565b6140db602083018761323d565b6140e86040830186612817565b6140f56060830185612817565b81810360808301526141078184614080565b90509695505050505050565b6000815190506141228161286d565b92915050565b60006020828403121561413e5761413d612739565b5b600061414c84828501614113565b91505092915050565b60008160e01c9050919050565b600060033d11156141815760046000803e61417e600051614155565b90505b90565b600060443d106142115761419661272f565b60043d036004823e80513d602482011167ffffffffffffffff821117156141be575050614211565b808201805167ffffffffffffffff8111156141dc5750505050614211565b80602083010160043d0385018111156141f9575050505050614211565b61420882602001850186612abb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614270603483612907565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614302602883612907565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b600060a08201905061434d600083018861323d565b61435a602083018761323d565b818103604083015261436c8186612f5d565b905081810360608301526143808185612f5d565b905081810360808301526143948184614080565b9050969550505050505056fea2646970667358221220bf8d7d730aded835c27bb16e47ba23ce1faa9747218152e1e4b3536c3d2bb61864736f6c63430008130033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101575760003560e01c806383ca4b6f116100c3578063c87b56dd1161007c578063c87b56dd1461039a578063cf309012146103ca578063d81d0a15146103e8578063e985e9c514610404578063f242432a14610434578063f2fde38b1461045057610157565b806383ca4b6f146102ee578063862440e21461030a5780638da5cb5b1461032657806395d89b4114610344578063a22cb46514610362578063b390c0ab1461037e57610157565b80632bee43cf116101155780632bee43cf146102425780632eb2c2d61461025e5780634e1273f41461027a578063510f4104146102aa578063715018a6146102c657806380ce3a52146102d057610157565b8062fdd58e1461015c57806301ffc9a71461018c57806306fdde03146101bc5780630e89341c146101da578063156e29f61461020a578063211e28b614610226575b600080fd5b610176600480360381019061017191906127d7565b61046c565b6040516101839190612826565b60405180910390f35b6101a660048036038101906101a19190612899565b610534565b6040516101b391906128e1565b60405180910390f35b6101c4610616565b6040516101d1919061298c565b60405180910390f35b6101f460048036038101906101ef91906129ae565b6106a4565b604051610201919061298c565b60405180910390f35b610224600480360381019061021f91906129db565b610749565b005b610240600480360381019061023b9190612a5a565b6107e5565b005b61025c60048036038101906102579190612bcf565b61087e565b005b61027860048036038101906102739190612db6565b610954565b005b610294600480360381019061028f9190612e85565b610a45565b6040516102a19190612fbb565b60405180910390f35b6102c460048036038101906102bf9190612fdd565b610b5e565b005b6102ce610c07565b005b6102d8610c8f565b6040516102e591906128e1565b60405180910390f35b610308600480360381019061030391906130c8565b610ca6565b005b610324600480360381019061031f91906131e1565b610cb5565b005b61032e610d8e565b60405161033b919061324c565b60405180910390f35b61034c610db8565b604051610359919061298c565b60405180910390f35b61037c60048036038101906103779190613267565b610e46565b005b610398600480360381019061039391906132a7565b610e5c565b005b6103b460048036038101906103af91906129ae565b610e6b565b6040516103c1919061298c565b60405180910390f35b6103d2610f0b565b6040516103df91906128e1565b60405180910390f35b61040260048036038101906103fd91906132e7565b610f1e565b005b61041e60048036038101906104199190613372565b610fba565b60405161042b91906128e1565b60405180910390f35b61044e600480360381019061044991906133b2565b61104e565b005b61046a60048036038101906104659190613449565b61113f565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d3906134e8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ff57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060f575061060e82611236565b5b9050919050565b6004805461062390613537565b80601f016020809104026020016040519081016040528092919081815260200182805461064f90613537565b801561069c5780601f106106715761010080835404028352916020019161069c565b820191906000526020600020905b81548152906001019060200180831161067f57829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106c490613537565b80601f01602080910402602001604051908101604052809291908181526020018280546106f090613537565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b50505050509050919050565b6107516112a0565b73ffffffffffffffffffffffffffffffffffffffff1661076f610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146107c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bc906135b4565b60405180910390fd5b6107e0838383604051806020016040528060008152506112a8565b505050565b6107ed6112a0565b73ffffffffffffffffffffffffffffffffffffffff1661080b610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610858906135b4565b60405180910390fd5b80600360006101000a81548160ff02191690831515021790555050565b6108866112a0565b73ffffffffffffffffffffffffffffffffffffffff166108a4610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f1906135b4565b60405180910390fd5b60005b835181101561094e5761093b84828151811061091c5761091b6135d4565b5b60200260200101518484604051806020016040528060008152506112a8565b808061094690613632565b9150506108fd565b50505050565b600360009054906101000a900460ff16156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b906136ec565b60405180910390fd5b6109ac6112a0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109f257506109f1856109ec6112a0565b610fba565b5b610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061377e565b60405180910390fd5b610a3e858585858561143d565b5050505050565b60608151835114610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8290613810565b60405180910390fd5b6000835167ffffffffffffffff811115610aa857610aa7612a8c565b5b604051908082528060200260200182016040528015610ad65781602001602082028036833780820191505090505b50905060005b8451811015610b5357610b23858281518110610afb57610afa6135d4565b5b6020026020010151858381518110610b1657610b156135d4565b5b602002602001015161046c565b828281518110610b3657610b356135d4565b5b60200260200101818152505080610b4c90613632565b9050610adc565b508091505092915050565b610b666112a0565b73ffffffffffffffffffffffffffffffffffffffff16610b84610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd1906135b4565b60405180910390fd5b610be5858585611750565b610c0085838360405180602001604052806000815250611a00565b5050505050565b610c0f6112a0565b73ffffffffffffffffffffffffffffffffffffffff16610c2d610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906135b4565b60405180910390fd5b610c8d6000611c1d565b565b6000600360009054906101000a900460ff16905090565b610cb1338383611750565b5050565b610cbd6112a0565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d28906135b4565b60405180910390fd5b80600660008481526020019081526020016000209081610d5191906139dc565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610d82919061298c565b60405180910390a25050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610dc590613537565b80601f0160208091040260200160405190810160405280929190818152602001828054610df190613537565b8015610e3e5780601f10610e1357610100808354040283529160200191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2157829003601f168201915b505050505081565b610e58610e516112a0565b8383611ce3565b5050565b610e67338383611e4f565b5050565b60066020528060005260406000206000915090508054610e8a90613537565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690613537565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b505050505081565b600360009054906101000a900460ff1681565b610f266112a0565b73ffffffffffffffffffffffffffffffffffffffff16610f44610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f91906135b4565b60405180910390fd5b610fb583838360405180602001604052806000815250611a00565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600360009054906101000a900460ff161561109e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611095906136ec565b60405180910390fd5b6110a66112a0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110ec57506110eb856110e66112a0565b610fba565b5b61112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290613b20565b60405180910390fd5b611138858585858561206b565b5050505050565b6111476112a0565b73ffffffffffffffffffffffffffffffffffffffff16611165610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b2906135b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190613bb2565b60405180910390fd5b61123381611c1d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613c44565b60405180910390fd5b60006113216112a0565b905061134281600087611333886122ec565b61133c886122ec565b87612366565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a19190613c64565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161141f929190613c98565b60405180910390a46114368160008787878761236e565b5050505050565b8151835114611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613d33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790613dc5565b60405180910390fd5b60006114fa6112a0565b905061150a818787878787612366565b60005b84518110156116bb57600085828151811061152b5761152a6135d4565b5b60200260200101519050600085838151811061154a576115496135d4565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290613e57565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a09190613c64565b92505081905550505050806116b490613632565b905061150d565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611732929190613e77565b60405180910390a4611748818787878787612545565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690613f20565b60405180910390fd5b8051825114611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa90613d33565b60405180910390fd5b600061180d6112a0565b905061182d81856000868660405180602001604052806000815250612366565b60005b835181101561197a57600084828151811061184e5761184d6135d4565b5b60200260200101519050600084838151811061186d5761186c6135d4565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590613fb2565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061197290613632565b915050611830565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516119f2929190613e77565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c44565b60405180910390fd5b8151835114611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90613d33565b60405180910390fd5b6000611abd6112a0565b9050611ace81600087878787612366565b60005b8451811015611b8757838181518110611aed57611aec6135d4565b5b6020026020010151600080878481518110611b0b57611b0a6135d4565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b6d9190613c64565b925050819055508080611b7f90613632565b915050611ad1565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611bff929190613e77565b60405180910390a4611c1681600087878787612545565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614044565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e4291906128e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590613f20565b60405180910390fd5b6000611ec86112a0565b9050611ef881856000611eda876122ec565b611ee3876122ec565b60405180602001604052806000815250612366565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690613fb2565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161205c929190613c98565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190613dc5565b60405180910390fd5b60006120e46112a0565b90506121048187876120f5886122ec565b6120fe886122ec565b87612366565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219290613e57565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122509190613c64565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122cd929190613c98565b60405180910390a46122e382888888888861236e565b50505050505050565b60606000600167ffffffffffffffff81111561230b5761230a612a8c565b5b6040519080825280602002602001820160405280156123395781602001602082028036833780820191505090505b5090508281600081518110612351576123506135d4565b5b60200260200101818152505080915050919050565b505050505050565b61238d8473ffffffffffffffffffffffffffffffffffffffff1661271c565b1561253d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123d39594939291906140b9565b6020604051808303816000875af192505050801561240f57506040513d601f19601f8201168201806040525081019061240c9190614128565b60015b6124b45761241b614162565b806308c379a003612477575061242f614184565b8061243a5750612479565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e919061298c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614286565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461253b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253290614318565b60405180910390fd5b505b505050505050565b6125648473ffffffffffffffffffffffffffffffffffffffff1661271c565b15612714578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016125aa959493929190614338565b6020604051808303816000875af19250505080156125e657506040513d601f19601f820116820180604052508101906125e39190614128565b60015b61268b576125f2614162565b806308c379a00361264e5750612606614184565b806126115750612650565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612645919061298c565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614286565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270990614318565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061276e82612743565b9050919050565b61277e81612763565b811461278957600080fd5b50565b60008135905061279b81612775565b92915050565b6000819050919050565b6127b4816127a1565b81146127bf57600080fd5b50565b6000813590506127d1816127ab565b92915050565b600080604083850312156127ee576127ed612739565b5b60006127fc8582860161278c565b925050602061280d858286016127c2565b9150509250929050565b612820816127a1565b82525050565b600060208201905061283b6000830184612817565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61287681612841565b811461288157600080fd5b50565b6000813590506128938161286d565b92915050565b6000602082840312156128af576128ae612739565b5b60006128bd84828501612884565b91505092915050565b60008115159050919050565b6128db816128c6565b82525050565b60006020820190506128f660008301846128d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561293657808201518184015260208101905061291b565b60008484015250505050565b6000601f19601f8301169050919050565b600061295e826128fc565b6129688185612907565b9350612978818560208601612918565b61298181612942565b840191505092915050565b600060208201905081810360008301526129a68184612953565b905092915050565b6000602082840312156129c4576129c3612739565b5b60006129d2848285016127c2565b91505092915050565b6000806000606084860312156129f4576129f3612739565b5b6000612a028682870161278c565b9350506020612a13868287016127c2565b9250506040612a24868287016127c2565b9150509250925092565b612a37816128c6565b8114612a4257600080fd5b50565b600081359050612a5481612a2e565b92915050565b600060208284031215612a7057612a6f612739565b5b6000612a7e84828501612a45565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ac482612942565b810181811067ffffffffffffffff82111715612ae357612ae2612a8c565b5b80604052505050565b6000612af661272f565b9050612b028282612abb565b919050565b600067ffffffffffffffff821115612b2257612b21612a8c565b5b602082029050602081019050919050565b600080fd5b6000612b4b612b4684612b07565b612aec565b90508083825260208201905060208402830185811115612b6e57612b6d612b33565b5b835b81811015612b975780612b83888261278c565b845260208401935050602081019050612b70565b5050509392505050565b600082601f830112612bb657612bb5612a87565b5b8135612bc6848260208601612b38565b91505092915050565b600080600060608486031215612be857612be7612739565b5b600084013567ffffffffffffffff811115612c0657612c0561273e565b5b612c1286828701612ba1565b9350506020612c23868287016127c2565b9250506040612c34868287016127c2565b9150509250925092565b600067ffffffffffffffff821115612c5957612c58612a8c565b5b602082029050602081019050919050565b6000612c7d612c7884612c3e565b612aec565b90508083825260208201905060208402830185811115612ca057612c9f612b33565b5b835b81811015612cc95780612cb588826127c2565b845260208401935050602081019050612ca2565b5050509392505050565b600082601f830112612ce857612ce7612a87565b5b8135612cf8848260208601612c6a565b91505092915050565b600080fd5b600067ffffffffffffffff821115612d2157612d20612a8c565b5b612d2a82612942565b9050602081019050919050565b82818337600083830152505050565b6000612d59612d5484612d06565b612aec565b905082815260208101848484011115612d7557612d74612d01565b5b612d80848285612d37565b509392505050565b600082601f830112612d9d57612d9c612a87565b5b8135612dad848260208601612d46565b91505092915050565b600080600080600060a08688031215612dd257612dd1612739565b5b6000612de08882890161278c565b9550506020612df18882890161278c565b945050604086013567ffffffffffffffff811115612e1257612e1161273e565b5b612e1e88828901612cd3565b935050606086013567ffffffffffffffff811115612e3f57612e3e61273e565b5b612e4b88828901612cd3565b925050608086013567ffffffffffffffff811115612e6c57612e6b61273e565b5b612e7888828901612d88565b9150509295509295909350565b60008060408385031215612e9c57612e9b612739565b5b600083013567ffffffffffffffff811115612eba57612eb961273e565b5b612ec685828601612ba1565b925050602083013567ffffffffffffffff811115612ee757612ee661273e565b5b612ef385828601612cd3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f32816127a1565b82525050565b6000612f448383612f29565b60208301905092915050565b6000602082019050919050565b6000612f6882612efd565b612f728185612f08565b9350612f7d83612f19565b8060005b83811015612fae578151612f958882612f38565b9750612fa083612f50565b925050600181019050612f81565b5085935050505092915050565b60006020820190508181036000830152612fd58184612f5d565b905092915050565b600080600080600060a08688031215612ff957612ff8612739565b5b60006130078882890161278c565b955050602086013567ffffffffffffffff8111156130285761302761273e565b5b61303488828901612cd3565b945050604086013567ffffffffffffffff8111156130555761305461273e565b5b61306188828901612cd3565b935050606086013567ffffffffffffffff8111156130825761308161273e565b5b61308e88828901612cd3565b925050608086013567ffffffffffffffff8111156130af576130ae61273e565b5b6130bb88828901612cd3565b9150509295509295909350565b600080604083850312156130df576130de612739565b5b600083013567ffffffffffffffff8111156130fd576130fc61273e565b5b61310985828601612cd3565b925050602083013567ffffffffffffffff81111561312a5761312961273e565b5b61313685828601612cd3565b9150509250929050565b600067ffffffffffffffff82111561315b5761315a612a8c565b5b61316482612942565b9050602081019050919050565b600061318461317f84613140565b612aec565b9050828152602081018484840111156131a05761319f612d01565b5b6131ab848285612d37565b509392505050565b600082601f8301126131c8576131c7612a87565b5b81356131d8848260208601613171565b91505092915050565b600080604083850312156131f8576131f7612739565b5b6000613206858286016127c2565b925050602083013567ffffffffffffffff8111156132275761322661273e565b5b613233858286016131b3565b9150509250929050565b61324681612763565b82525050565b6000602082019050613261600083018461323d565b92915050565b6000806040838503121561327e5761327d612739565b5b600061328c8582860161278c565b925050602061329d85828601612a45565b9150509250929050565b600080604083850312156132be576132bd612739565b5b60006132cc858286016127c2565b92505060206132dd858286016127c2565b9150509250929050565b600080600060608486031215613300576132ff612739565b5b600061330e8682870161278c565b935050602084013567ffffffffffffffff81111561332f5761332e61273e565b5b61333b86828701612cd3565b925050604084013567ffffffffffffffff81111561335c5761335b61273e565b5b61336886828701612cd3565b9150509250925092565b6000806040838503121561338957613388612739565b5b60006133978582860161278c565b92505060206133a88582860161278c565b9150509250929050565b600080600080600060a086880312156133ce576133cd612739565b5b60006133dc8882890161278c565b95505060206133ed8882890161278c565b94505060406133fe888289016127c2565b935050606061340f888289016127c2565b925050608086013567ffffffffffffffff8111156134305761342f61273e565b5b61343c88828901612d88565b9150509295509295909350565b60006020828403121561345f5761345e612739565b5b600061346d8482850161278c565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006134d2602b83612907565b91506134dd82613476565b604082019050919050565b60006020820190508181036000830152613501816134c5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061354f57607f821691505b60208210810361356257613561613508565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061359e602083612907565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061363d826127a1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361366f5761366e613603565b5b600182019050919050565b7f43616e6e6f74207472616e73666572202d2063757272656e746c79206c6f636b60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d6602283612907565b91506136e18261367a565b604082019050919050565b60006020820190508181036000830152613705816136c9565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613768603283612907565b91506137738261370c565b604082019050919050565b600060208201905081810360008301526137978161375b565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006137fa602983612907565b91506138058261379e565b604082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613855565b61389c8683613855565b95508019841693508086168417925050509392505050565b6000819050919050565b60006138d96138d46138cf846127a1565b6138b4565b6127a1565b9050919050565b6000819050919050565b6138f3836138be565b6139076138ff826138e0565b848454613862565b825550505050565b600090565b61391c61390f565b6139278184846138ea565b505050565b5b8181101561394b57613940600082613914565b60018101905061392d565b5050565b601f8211156139905761396181613830565b61396a84613845565b81016020851015613979578190505b61398d61398585613845565b83018261392c565b50505b505050565b600082821c905092915050565b60006139b360001984600802613995565b1980831691505092915050565b60006139cc83836139a2565b9150826002028217905092915050565b6139e5826128fc565b67ffffffffffffffff8111156139fe576139fd612a8c565b5b613a088254613537565b613a1382828561394f565b600060209050601f831160018114613a465760008415613a34578287015190505b613a3e85826139c0565b865550613aa6565b601f198416613a5486613830565b60005b82811015613a7c57848901518255600182019150602085019450602081019050613a57565b86831015613a995784890151613a95601f8916826139a2565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613b0a602983612907565b9150613b1582613aae565b604082019050919050565b60006020820190508181036000830152613b3981613afd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9c602683612907565b9150613ba782613b40565b604082019050919050565b60006020820190508181036000830152613bcb81613b8f565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c2e602183612907565b9150613c3982613bd2565b604082019050919050565b60006020820190508181036000830152613c5d81613c21565b9050919050565b6000613c6f826127a1565b9150613c7a836127a1565b9250828201905080821115613c9257613c91613603565b5b92915050565b6000604082019050613cad6000830185612817565b613cba6020830184612817565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613d1d602883612907565b9150613d2882613cc1565b604082019050919050565b60006020820190508181036000830152613d4c81613d10565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602583612907565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613e41602a83612907565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b60006040820190508181036000830152613e918185612f5d565b90508181036020830152613ea58184612f5d565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0a602383612907565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613f9c602483612907565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061402e602983612907565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061408b82614064565b614095818561406f565b93506140a5818560208601612918565b6140ae81612942565b840191505092915050565b600060a0820190506140ce600083018861323d565b6140db602083018761323d565b6140e86040830186612817565b6140f56060830185612817565b81810360808301526141078184614080565b90509695505050505050565b6000815190506141228161286d565b92915050565b60006020828403121561413e5761413d612739565b5b600061414c84828501614113565b91505092915050565b60008160e01c9050919050565b600060033d11156141815760046000803e61417e600051614155565b90505b90565b600060443d106142115761419661272f565b60043d036004823e80513d602482011167ffffffffffffffff821117156141be575050614211565b808201805167ffffffffffffffff8111156141dc5750505050614211565b80602083010160043d0385018111156141f9575050505050614211565b61420882602001850186612abb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614270603483612907565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614302602883612907565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b600060a08201905061434d600083018861323d565b61435a602083018761323d565b818103604083015261436c8186612f5d565b905081810360608301526143808185612f5d565b905081810360808301526143948184614080565b9050969550505050505056fea2646970667358221220bf8d7d730aded835c27bb16e47ba23ce1faa9747218152e1e4b3536c3d2bb61864736f6c63430008130033

Deployed Bytecode Sourcemap

36595:1625:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22873:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21896:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36654:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37933:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37036:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38040:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36846:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24877:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23270:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37528:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2600:103;;;:::i;:::-;;38135:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37399:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37799:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1949:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36677:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23867:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37302:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36704:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34501:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37153:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24094:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24334:466;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2858:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22873:231;22959:7;23006:1;22987:21;;:7;:21;;;22979:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23074:9;:13;23084:2;23074:13;;;;;;;;;;;:22;23088:7;23074:22;;;;;;;;;;;;;;;;23067:29;;22873:231;;;;:::o;21896:310::-;21998:4;22050:26;22035:41;;;:11;:41;;;;:110;;;;22108:37;22093:52;;;:11;:52;;;;22035:110;:163;;;;22162:36;22186:11;22162:23;:36::i;:::-;22035:163;22015:183;;21896:310;;;:::o;36654:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37933:101::-;37986:13;38015:8;:13;38024:3;38015:13;;;;;;;;;;;38008:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37933:101;;;:::o;37036:111::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37113:28:::1;37119:3;37124;37129:7;37113:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;37036:111:::0;;;:::o;38040:87::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38112:7:::1;38103:6;;:16;;;;;;;;;;;;;;;;;;38040:87:::0;:::o;36846:184::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36939:9:::1;36934:91;36958:3;:10;36954:1;:14;36934:91;;;36986:31;36992:3;36996:1;36992:6;;;;;;;;:::i;:::-;;;;;;;;37000:3;37005:7;36986:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;36970:3;;;;;:::i;:::-;;;;36934:91;;;;36846:184:::0;;;:::o;24877:507::-;25097:6;;;;;;;;;;;25096:7;25088:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25183:12;:10;:12::i;:::-;25175:20;;:4;:20;;;:60;;;;25199:36;25216:4;25222:12;:10;:12::i;:::-;25199:16;:36::i;:::-;25175:60;25153:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25324:52;25347:4;25353:2;25357:3;25362:7;25371:4;25324:22;:52::i;:::-;24877:507;;;;;:::o;23270:524::-;23426:16;23487:3;:10;23468:8;:15;:29;23460:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23556:30;23603:8;:15;23589:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23556:63;;23637:9;23632:122;23656:8;:15;23652:1;:19;23632:122;;;23712:30;23722:8;23731:1;23722:11;;;;;;;;:::i;:::-;;;;;;;;23735:3;23739:1;23735:6;;;;;;;;:::i;:::-;;;;;;;;23712:9;:30::i;:::-;23693:13;23707:1;23693:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23673:3;;;;:::i;:::-;;;23632:122;;;;23773:13;23766:20;;;23270:524;;;;:::o;37528:265::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37694:41:::1;37705:5;37712:8;37722:12;37694:10;:41::i;:::-;37742:45;37753:5;37760:8;37770:12;37742:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;37528:265:::0;;;;;:::o;2600:103::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2665:30:::1;2692:1;2665:18;:30::i;:::-;2600:103::o:0;38135:80::-;38177:4;38201:6;;;;;;;;;;;38194:13;;38135:80;:::o;37399:123::-;37478:38;37489:10;37501:4;37507:8;37478:10;:38::i;:::-;37399:123;;:::o;37799:124::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:4:::1;37871:8;:13;37880:3;37871:13;;;;;;;;;;;:20;;;;;;:::i;:::-;;37913:3;37903:14;37907:4;37903:14;;;;;;:::i;:::-;;;;;;;;37799:124:::0;;:::o;1949:87::-;1995:7;2022:6;;;;;;;;;;;2015:13;;1949:87;:::o;36677:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23867:155::-;23962:52;23981:12;:10;:12::i;:::-;23995:8;24005;23962:18;:52::i;:::-;23867:155;;:::o;37302:91::-;37356:31;37362:10;37374:3;37379:7;37356:5;:31::i;:::-;37302:91;;:::o;36704:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34501:26::-;;;;;;;;;;;;;:::o;37153:143::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37255:35:::1;37266:3;37271:4;37277:8;37255:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;37153:143:::0;;;:::o;24094:168::-;24193:4;24217:18;:27;24236:7;24217:27;;;;;;;;;;;;;;;:37;24245:8;24217:37;;;;;;;;;;;;;;;;;;;;;;;;;24210:44;;24094:168;;;;:::o;24334:466::-;24529:6;;;;;;;;;;;24528:7;24520:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24615:12;:10;:12::i;:::-;24607:20;;:4;:20;;;:60;;;;24631:36;24648:4;24654:12;:10;:12::i;:::-;24631:16;:36::i;:::-;24607:60;24585:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24747:45;24765:4;24771:2;24775;24779:6;24787:4;24747:17;:45::i;:::-;24334:466;;;;;:::o;2858:201::-;2180:12;:10;:12::i;:::-;2169:23;;:7;:5;:7::i;:::-;:23;;;2161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2967:1:::1;2947:22;;:8;:22;;::::0;2939:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3023:28;3042:8;3023:18;:28::i;:::-;2858:201:::0;:::o;13320:157::-;13405:4;13444:25;13429:40;;;:11;:40;;;;13422:47;;13320:157;;;:::o;675:98::-;728:7;755:10;748:17;;675:98;:::o;29418:569::-;29585:1;29571:16;;:2;:16;;;29563:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29638:16;29657:12;:10;:12::i;:::-;29638:31;;29682:102;29703:8;29721:1;29725:2;29729:21;29747:2;29729:17;:21::i;:::-;29752:25;29770:6;29752:17;:25::i;:::-;29779:4;29682:20;:102::i;:::-;29818:6;29797:9;:13;29807:2;29797:13;;;;;;;;;;;:17;29811:2;29797:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29877:2;29840:52;;29873:1;29840:52;;29855:8;29840:52;;;29881:2;29885:6;29840:52;;;;;;;:::i;:::-;;;;;;;;29905:74;29936:8;29954:1;29958:2;29962;29966:6;29974:4;29905:30;:74::i;:::-;29552:435;29418:569;;;;:::o;27026:1074::-;27253:7;:14;27239:3;:10;:28;27231:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27345:1;27331:16;;:2;:16;;;27323:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27402:16;27421:12;:10;:12::i;:::-;27402:31;;27446:60;27467:8;27477:4;27483:2;27487:3;27492:7;27501:4;27446:20;:60::i;:::-;27524:9;27519:421;27543:3;:10;27539:1;:14;27519:421;;;27575:10;27588:3;27592:1;27588:6;;;;;;;;:::i;:::-;;;;;;;;27575:19;;27609:14;27626:7;27634:1;27626:10;;;;;;;;:::i;:::-;;;;;;;;27609:27;;27653:19;27675:9;:13;27685:2;27675:13;;;;;;;;;;;:19;27689:4;27675:19;;;;;;;;;;;;;;;;27653:41;;27732:6;27717:11;:21;;27709:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27865:6;27851:11;:20;27829:9;:13;27839:2;27829:13;;;;;;;;;;;:19;27843:4;27829:19;;;;;;;;;;;;;;;:42;;;;27922:6;27901:9;:13;27911:2;27901:13;;;;;;;;;;;:17;27915:2;27901:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27560:380;;;27555:3;;;;:::i;:::-;;;27519:421;;;;27987:2;27957:47;;27981:4;27957:47;;27971:8;27957:47;;;27991:3;27996:7;27957:47;;;;;;;:::i;:::-;;;;;;;;28017:75;28053:8;28063:4;28069:2;28073:3;28078:7;28087:4;28017:35;:75::i;:::-;27220:880;27026:1074;;;;;:::o;32179:891::-;32347:1;32331:18;;:4;:18;;;32323:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32422:7;:14;32408:3;:10;:28;32400:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32494:16;32513:12;:10;:12::i;:::-;32494:31;;32538:66;32559:8;32569:4;32583:1;32587:3;32592:7;32538:66;;;;;;;;;;;;:20;:66::i;:::-;32622:9;32617:373;32641:3;:10;32637:1;:14;32617:373;;;32673:10;32686:3;32690:1;32686:6;;;;;;;;:::i;:::-;;;;;;;;32673:19;;32707:14;32724:7;32732:1;32724:10;;;;;;;;:::i;:::-;;;;;;;;32707:27;;32751:19;32773:9;:13;32783:2;32773:13;;;;;;;;;;;:19;32787:4;32773:19;;;;;;;;;;;;;;;;32751:41;;32830:6;32815:11;:21;;32807:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32957:6;32943:11;:20;32921:9;:13;32931:2;32921:13;;;;;;;;;;;:19;32935:4;32921:19;;;;;;;;;;;;;;;:42;;;;32658:332;;;32653:3;;;;;:::i;:::-;;;;32617:373;;;;33045:1;33007:55;;33031:4;33007:55;;33021:8;33007:55;;;33049:3;33054:7;33007:55;;;;;;;:::i;:::-;;;;;;;;32312:758;32179:891;;;:::o;30343:735::-;30535:1;30521:16;;:2;:16;;;30513:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30608:7;:14;30594:3;:10;:28;30586:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30680:16;30699:12;:10;:12::i;:::-;30680:31;;30724:66;30745:8;30763:1;30767:2;30771:3;30776:7;30785:4;30724:20;:66::i;:::-;30808:9;30803:103;30827:3;:10;30823:1;:14;30803:103;;;30884:7;30892:1;30884:10;;;;;;;;:::i;:::-;;;;;;;;30859:9;:17;30869:3;30873:1;30869:6;;;;;;;;:::i;:::-;;;;;;;;30859:17;;;;;;;;;;;:21;30877:2;30859:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30839:3;;;;;:::i;:::-;;;;30803:103;;;;30959:2;30923:53;;30955:1;30923:53;;30937:8;30923:53;;;30963:3;30968:7;30923:53;;;;;;;:::i;:::-;;;;;;;;30989:81;31025:8;31043:1;31047:2;31051:3;31056:7;31065:4;30989:35;:81::i;:::-;30502:576;30343:735;;;;:::o;3219:191::-;3293:16;3312:6;;;;;;;;;;;3293:25;;3338:8;3329:6;;:17;;;;;;;;;;;;;;;;;;3393:8;3362:40;;3383:8;3362:40;;;;;;;;;;;;3282:128;3219:191;:::o;33212:331::-;33367:8;33358:17;;:5;:17;;;33350:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33470:8;33432:18;:25;33451:5;33432:25;;;;;;;;;;;;;;;:35;33458:8;33432:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33516:8;33494:41;;33509:5;33494:41;;;33526:8;33494:41;;;;;;:::i;:::-;;;;;;;;33212:331;;;:::o;31328:648::-;31471:1;31455:18;;:4;:18;;;31447:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31526:16;31545:12;:10;:12::i;:::-;31526:31;;31570:102;31591:8;31601:4;31615:1;31619:21;31637:2;31619:17;:21::i;:::-;31642:25;31660:6;31642:17;:25::i;:::-;31570:102;;;;;;;;;;;;:20;:102::i;:::-;31685:19;31707:9;:13;31717:2;31707:13;;;;;;;;;;;:19;31721:4;31707:19;;;;;;;;;;;;;;;;31685:41;;31760:6;31745:11;:21;;31737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31879:6;31865:11;:20;31843:9;:13;31853:2;31843:13;;;;;;;;;;;:19;31857:4;31843:19;;;;;;;;;;;;;;;:42;;;;31953:1;31914:54;;31939:4;31914:54;;31929:8;31914:54;;;31957:2;31961:6;31914:54;;;;;;;:::i;:::-;;;;;;;;31436:540;;31328:648;;;:::o;25848:820::-;26050:1;26036:16;;:2;:16;;;26028:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26107:16;26126:12;:10;:12::i;:::-;26107:31;;26151:96;26172:8;26182:4;26188:2;26192:21;26210:2;26192:17;:21::i;:::-;26215:25;26233:6;26215:17;:25::i;:::-;26242:4;26151:20;:96::i;:::-;26260:19;26282:9;:13;26292:2;26282:13;;;;;;;;;;;:19;26296:4;26282:19;;;;;;;;;;;;;;;;26260:41;;26335:6;26320:11;:21;;26312:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26460:6;26446:11;:20;26424:9;:13;26434:2;26424:13;;;;;;;;;;;:19;26438:4;26424:19;;;;;;;;;;;;;;;:42;;;;26509:6;26488:9;:13;26498:2;26488:13;;;;;;;;;;;:17;26502:2;26488:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26564:2;26533:46;;26558:4;26533:46;;26548:8;26533:46;;;26568:2;26572:6;26533:46;;;;;;;:::i;:::-;;;;;;;;26592:68;26623:8;26633:4;26639:2;26643;26647:6;26655:4;26592:30;:68::i;:::-;26017:651;;25848:820;;;;;:::o;36363:198::-;36429:16;36458:22;36497:1;36483:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36458:41;;36521:7;36510:5;36516:1;36510:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36548:5;36541:12;;;36363:198;;;:::o;34542:238::-;;;;;;;:::o;34790:744::-;35005:15;:2;:13;;;:15::i;:::-;35001:526;;;35058:2;35041:38;;;35080:8;35090:4;35096:2;35100:6;35108:4;35041:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35037:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;35389:6;35382:14;;;;;;;;;;;:::i;:::-;;;;;;;;35037:479;;;35438:62;;;;;;;;;;:::i;:::-;;;;;;;;35037:479;35175:43;;;35163:55;;;:8;:55;;;;35159:154;;35243:50;;;;;;;;;;:::i;:::-;;;;;;;;35159:154;35114:214;35001:526;34790:744;;;;;;:::o;35542:813::-;35782:15;:2;:13;;;:15::i;:::-;35778:570;;;35835:2;35818:43;;;35862:8;35872:4;35878:3;35883:7;35892:4;35818:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35814:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36210:6;36203:14;;;;;;;;;;;:::i;:::-;;;;;;;;35814:523;;;36259:62;;;;;;;;;;:::i;:::-;;;;;;;;35814:523;35991:48;;;35979:60;;;:8;:60;;;;35975:159;;36064:50;;;;;;;;;;:::i;:::-;;;;;;;;35975:159;35898:251;35778:570;35542:813;;;;;;:::o;4236:387::-;4296:4;4504:12;4571:7;4559:20;4551:28;;4614:1;4607:4;:8;4600:15;;;4236:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:116::-;5585:21;5600:5;5585:21;:::i;:::-;5578:5;5575:32;5565:60;;5621:1;5618;5611:12;5565:60;5515:116;:::o;5637:133::-;5680:5;5718:6;5705:20;5696:29;;5734:30;5758:5;5734:30;:::i;:::-;5637:133;;;;:::o;5776:323::-;5832:6;5881:2;5869:9;5860:7;5856:23;5852:32;5849:119;;;5887:79;;:::i;:::-;5849:119;6007:1;6032:50;6074:7;6065:6;6054:9;6050:22;6032:50;:::i;:::-;6022:60;;5978:114;5776:323;;;;:::o;6105:117::-;6214:1;6211;6204:12;6228:180;6276:77;6273:1;6266:88;6373:4;6370:1;6363:15;6397:4;6394:1;6387:15;6414:281;6497:27;6519:4;6497:27;:::i;:::-;6489:6;6485:40;6627:6;6615:10;6612:22;6591:18;6579:10;6576:34;6573:62;6570:88;;;6638:18;;:::i;:::-;6570:88;6678:10;6674:2;6667:22;6457:238;6414:281;;:::o;6701:129::-;6735:6;6762:20;;:::i;:::-;6752:30;;6791:33;6819:4;6811:6;6791:33;:::i;:::-;6701:129;;;:::o;6836:311::-;6913:4;7003:18;6995:6;6992:30;6989:56;;;7025:18;;:::i;:::-;6989:56;7075:4;7067:6;7063:17;7055:25;;7135:4;7129;7125:15;7117:23;;6836:311;;;:::o;7153:117::-;7262:1;7259;7252:12;7293:710;7389:5;7414:81;7430:64;7487:6;7430:64;:::i;:::-;7414:81;:::i;:::-;7405:90;;7515:5;7544:6;7537:5;7530:21;7578:4;7571:5;7567:16;7560:23;;7631:4;7623:6;7619:17;7611:6;7607:30;7660:3;7652:6;7649:15;7646:122;;;7679:79;;:::i;:::-;7646:122;7794:6;7777:220;7811:6;7806:3;7803:15;7777:220;;;7886:3;7915:37;7948:3;7936:10;7915:37;:::i;:::-;7910:3;7903:50;7982:4;7977:3;7973:14;7966:21;;7853:144;7837:4;7832:3;7828:14;7821:21;;7777:220;;;7781:21;7395:608;;7293:710;;;;;:::o;8026:370::-;8097:5;8146:3;8139:4;8131:6;8127:17;8123:27;8113:122;;8154:79;;:::i;:::-;8113:122;8271:6;8258:20;8296:94;8386:3;8378:6;8371:4;8363:6;8359:17;8296:94;:::i;:::-;8287:103;;8103:293;8026:370;;;;:::o;8402:829::-;8504:6;8512;8520;8569:2;8557:9;8548:7;8544:23;8540:32;8537:119;;;8575:79;;:::i;:::-;8537:119;8723:1;8712:9;8708:17;8695:31;8753:18;8745:6;8742:30;8739:117;;;8775:79;;:::i;:::-;8739:117;8880:78;8950:7;8941:6;8930:9;8926:22;8880:78;:::i;:::-;8870:88;;8666:302;9007:2;9033:53;9078:7;9069:6;9058:9;9054:22;9033:53;:::i;:::-;9023:63;;8978:118;9135:2;9161:53;9206:7;9197:6;9186:9;9182:22;9161:53;:::i;:::-;9151:63;;9106:118;8402:829;;;;;:::o;9237:311::-;9314:4;9404:18;9396:6;9393:30;9390:56;;;9426:18;;:::i;:::-;9390:56;9476:4;9468:6;9464:17;9456:25;;9536:4;9530;9526:15;9518:23;;9237:311;;;:::o;9571:710::-;9667:5;9692:81;9708:64;9765:6;9708:64;:::i;:::-;9692:81;:::i;:::-;9683:90;;9793:5;9822:6;9815:5;9808:21;9856:4;9849:5;9845:16;9838:23;;9909:4;9901:6;9897:17;9889:6;9885:30;9938:3;9930:6;9927:15;9924:122;;;9957:79;;:::i;:::-;9924:122;10072:6;10055:220;10089:6;10084:3;10081:15;10055:220;;;10164:3;10193:37;10226:3;10214:10;10193:37;:::i;:::-;10188:3;10181:50;10260:4;10255:3;10251:14;10244:21;;10131:144;10115:4;10110:3;10106:14;10099:21;;10055:220;;;10059:21;9673:608;;9571:710;;;;;:::o;10304:370::-;10375:5;10424:3;10417:4;10409:6;10405:17;10401:27;10391:122;;10432:79;;:::i;:::-;10391:122;10549:6;10536:20;10574:94;10664:3;10656:6;10649:4;10641:6;10637:17;10574:94;:::i;:::-;10565:103;;10381:293;10304:370;;;;:::o;10680:117::-;10789:1;10786;10779:12;10803:307;10864:4;10954:18;10946:6;10943:30;10940:56;;;10976:18;;:::i;:::-;10940:56;11014:29;11036:6;11014:29;:::i;:::-;11006:37;;11098:4;11092;11088:15;11080:23;;10803:307;;;:::o;11116:146::-;11213:6;11208:3;11203;11190:30;11254:1;11245:6;11240:3;11236:16;11229:27;11116:146;;;:::o;11268:423::-;11345:5;11370:65;11386:48;11427:6;11386:48;:::i;:::-;11370:65;:::i;:::-;11361:74;;11458:6;11451:5;11444:21;11496:4;11489:5;11485:16;11534:3;11525:6;11520:3;11516:16;11513:25;11510:112;;;11541:79;;:::i;:::-;11510:112;11631:54;11678:6;11673:3;11668;11631:54;:::i;:::-;11351:340;11268:423;;;;;:::o;11710:338::-;11765:5;11814:3;11807:4;11799:6;11795:17;11791:27;11781:122;;11822:79;;:::i;:::-;11781:122;11939:6;11926:20;11964:78;12038:3;12030:6;12023:4;12015:6;12011:17;11964:78;:::i;:::-;11955:87;;11771:277;11710:338;;;;:::o;12054:1509::-;12208:6;12216;12224;12232;12240;12289:3;12277:9;12268:7;12264:23;12260:33;12257:120;;;12296:79;;:::i;:::-;12257:120;12416:1;12441:53;12486:7;12477:6;12466:9;12462:22;12441:53;:::i;:::-;12431:63;;12387:117;12543:2;12569:53;12614:7;12605:6;12594:9;12590:22;12569:53;:::i;:::-;12559:63;;12514:118;12699:2;12688:9;12684:18;12671:32;12730:18;12722:6;12719:30;12716:117;;;12752:79;;:::i;:::-;12716:117;12857:78;12927:7;12918:6;12907:9;12903:22;12857:78;:::i;:::-;12847:88;;12642:303;13012:2;13001:9;12997:18;12984:32;13043:18;13035:6;13032:30;13029:117;;;13065:79;;:::i;:::-;13029:117;13170:78;13240:7;13231:6;13220:9;13216:22;13170:78;:::i;:::-;13160:88;;12955:303;13325:3;13314:9;13310:19;13297:33;13357:18;13349:6;13346:30;13343:117;;;13379:79;;:::i;:::-;13343:117;13484:62;13538:7;13529:6;13518:9;13514:22;13484:62;:::i;:::-;13474:72;;13268:288;12054:1509;;;;;;;;:::o;13569:894::-;13687:6;13695;13744:2;13732:9;13723:7;13719:23;13715:32;13712:119;;;13750:79;;:::i;:::-;13712:119;13898:1;13887:9;13883:17;13870:31;13928:18;13920:6;13917:30;13914:117;;;13950:79;;:::i;:::-;13914:117;14055:78;14125:7;14116:6;14105:9;14101:22;14055:78;:::i;:::-;14045:88;;13841:302;14210:2;14199:9;14195:18;14182:32;14241:18;14233:6;14230:30;14227:117;;;14263:79;;:::i;:::-;14227:117;14368:78;14438:7;14429:6;14418:9;14414:22;14368:78;:::i;:::-;14358:88;;14153:303;13569:894;;;;;:::o;14469:114::-;14536:6;14570:5;14564:12;14554:22;;14469:114;;;:::o;14589:184::-;14688:11;14722:6;14717:3;14710:19;14762:4;14757:3;14753:14;14738:29;;14589:184;;;;:::o;14779:132::-;14846:4;14869:3;14861:11;;14899:4;14894:3;14890:14;14882:22;;14779:132;;;:::o;14917:108::-;14994:24;15012:5;14994:24;:::i;:::-;14989:3;14982:37;14917:108;;:::o;15031:179::-;15100:10;15121:46;15163:3;15155:6;15121:46;:::i;:::-;15199:4;15194:3;15190:14;15176:28;;15031:179;;;;:::o;15216:113::-;15286:4;15318;15313:3;15309:14;15301:22;;15216:113;;;:::o;15365:732::-;15484:3;15513:54;15561:5;15513:54;:::i;:::-;15583:86;15662:6;15657:3;15583:86;:::i;:::-;15576:93;;15693:56;15743:5;15693:56;:::i;:::-;15772:7;15803:1;15788:284;15813:6;15810:1;15807:13;15788:284;;;15889:6;15883:13;15916:63;15975:3;15960:13;15916:63;:::i;:::-;15909:70;;16002:60;16055:6;16002:60;:::i;:::-;15992:70;;15848:224;15835:1;15832;15828:9;15823:14;;15788:284;;;15792:14;16088:3;16081:10;;15489:608;;;15365:732;;;;:::o;16103:373::-;16246:4;16284:2;16273:9;16269:18;16261:26;;16333:9;16327:4;16323:20;16319:1;16308:9;16304:17;16297:47;16361:108;16464:4;16455:6;16361:108;:::i;:::-;16353:116;;16103:373;;;;:::o;16482:1751::-;16677:6;16685;16693;16701;16709;16758:3;16746:9;16737:7;16733:23;16729:33;16726:120;;;16765:79;;:::i;:::-;16726:120;16885:1;16910:53;16955:7;16946:6;16935:9;16931:22;16910:53;:::i;:::-;16900:63;;16856:117;17040:2;17029:9;17025:18;17012:32;17071:18;17063:6;17060:30;17057:117;;;17093:79;;:::i;:::-;17057:117;17198:78;17268:7;17259:6;17248:9;17244:22;17198:78;:::i;:::-;17188:88;;16983:303;17353:2;17342:9;17338:18;17325:32;17384:18;17376:6;17373:30;17370:117;;;17406:79;;:::i;:::-;17370:117;17511:78;17581:7;17572:6;17561:9;17557:22;17511:78;:::i;:::-;17501:88;;17296:303;17666:2;17655:9;17651:18;17638:32;17697:18;17689:6;17686:30;17683:117;;;17719:79;;:::i;:::-;17683:117;17824:78;17894:7;17885:6;17874:9;17870:22;17824:78;:::i;:::-;17814:88;;17609:303;17979:3;17968:9;17964:19;17951:33;18011:18;18003:6;18000:30;17997:117;;;18033:79;;:::i;:::-;17997:117;18138:78;18208:7;18199:6;18188:9;18184:22;18138:78;:::i;:::-;18128:88;;17922:304;16482:1751;;;;;;;;:::o;18239:894::-;18357:6;18365;18414:2;18402:9;18393:7;18389:23;18385:32;18382:119;;;18420:79;;:::i;:::-;18382:119;18568:1;18557:9;18553:17;18540:31;18598:18;18590:6;18587:30;18584:117;;;18620:79;;:::i;:::-;18584:117;18725:78;18795:7;18786:6;18775:9;18771:22;18725:78;:::i;:::-;18715:88;;18511:302;18880:2;18869:9;18865:18;18852:32;18911:18;18903:6;18900:30;18897:117;;;18933:79;;:::i;:::-;18897:117;19038:78;19108:7;19099:6;19088:9;19084:22;19038:78;:::i;:::-;19028:88;;18823:303;18239:894;;;;;:::o;19139:308::-;19201:4;19291:18;19283:6;19280:30;19277:56;;;19313:18;;:::i;:::-;19277:56;19351:29;19373:6;19351:29;:::i;:::-;19343:37;;19435:4;19429;19425:15;19417:23;;19139:308;;;:::o;19453:425::-;19531:5;19556:66;19572:49;19614:6;19572:49;:::i;:::-;19556:66;:::i;:::-;19547:75;;19645:6;19638:5;19631:21;19683:4;19676:5;19672:16;19721:3;19712:6;19707:3;19703:16;19700:25;19697:112;;;19728:79;;:::i;:::-;19697:112;19818:54;19865:6;19860:3;19855;19818:54;:::i;:::-;19537:341;19453:425;;;;;:::o;19898:340::-;19954:5;20003:3;19996:4;19988:6;19984:17;19980:27;19970:122;;20011:79;;:::i;:::-;19970:122;20128:6;20115:20;20153:79;20228:3;20220:6;20213:4;20205:6;20201:17;20153:79;:::i;:::-;20144:88;;19960:278;19898:340;;;;:::o;20244:654::-;20322:6;20330;20379:2;20367:9;20358:7;20354:23;20350:32;20347:119;;;20385:79;;:::i;:::-;20347:119;20505:1;20530:53;20575:7;20566:6;20555:9;20551:22;20530:53;:::i;:::-;20520:63;;20476:117;20660:2;20649:9;20645:18;20632:32;20691:18;20683:6;20680:30;20677:117;;;20713:79;;:::i;:::-;20677:117;20818:63;20873:7;20864:6;20853:9;20849:22;20818:63;:::i;:::-;20808:73;;20603:288;20244:654;;;;;:::o;20904:118::-;20991:24;21009:5;20991:24;:::i;:::-;20986:3;20979:37;20904:118;;:::o;21028:222::-;21121:4;21159:2;21148:9;21144:18;21136:26;;21172:71;21240:1;21229:9;21225:17;21216:6;21172:71;:::i;:::-;21028:222;;;;:::o;21256:468::-;21321:6;21329;21378:2;21366:9;21357:7;21353:23;21349:32;21346:119;;;21384:79;;:::i;:::-;21346:119;21504:1;21529:53;21574:7;21565:6;21554:9;21550:22;21529:53;:::i;:::-;21519:63;;21475:117;21631:2;21657:50;21699:7;21690:6;21679:9;21675:22;21657:50;:::i;:::-;21647:60;;21602:115;21256:468;;;;;:::o;21730:474::-;21798:6;21806;21855:2;21843:9;21834:7;21830:23;21826:32;21823:119;;;21861:79;;:::i;:::-;21823:119;21981:1;22006:53;22051:7;22042:6;22031:9;22027:22;22006:53;:::i;:::-;21996:63;;21952:117;22108:2;22134:53;22179:7;22170:6;22159:9;22155:22;22134:53;:::i;:::-;22124:63;;22079:118;21730:474;;;;;:::o;22210:1039::-;22337:6;22345;22353;22402:2;22390:9;22381:7;22377:23;22373:32;22370:119;;;22408:79;;:::i;:::-;22370:119;22528:1;22553:53;22598:7;22589:6;22578:9;22574:22;22553:53;:::i;:::-;22543:63;;22499:117;22683:2;22672:9;22668:18;22655:32;22714:18;22706:6;22703:30;22700:117;;;22736:79;;:::i;:::-;22700:117;22841:78;22911:7;22902:6;22891:9;22887:22;22841:78;:::i;:::-;22831:88;;22626:303;22996:2;22985:9;22981:18;22968:32;23027:18;23019:6;23016:30;23013:117;;;23049:79;;:::i;:::-;23013:117;23154:78;23224:7;23215:6;23204:9;23200:22;23154:78;:::i;:::-;23144:88;;22939:303;22210:1039;;;;;:::o;23255:474::-;23323:6;23331;23380:2;23368:9;23359:7;23355:23;23351:32;23348:119;;;23386:79;;:::i;:::-;23348:119;23506:1;23531:53;23576:7;23567:6;23556:9;23552:22;23531:53;:::i;:::-;23521:63;;23477:117;23633:2;23659:53;23704:7;23695:6;23684:9;23680:22;23659:53;:::i;:::-;23649:63;;23604:118;23255:474;;;;;:::o;23735:1089::-;23839:6;23847;23855;23863;23871;23920:3;23908:9;23899:7;23895:23;23891:33;23888:120;;;23927:79;;:::i;:::-;23888:120;24047:1;24072:53;24117:7;24108:6;24097:9;24093:22;24072:53;:::i;:::-;24062:63;;24018:117;24174:2;24200:53;24245:7;24236:6;24225:9;24221:22;24200:53;:::i;:::-;24190:63;;24145:118;24302:2;24328:53;24373:7;24364:6;24353:9;24349:22;24328:53;:::i;:::-;24318:63;;24273:118;24430:2;24456:53;24501:7;24492:6;24481:9;24477:22;24456:53;:::i;:::-;24446:63;;24401:118;24586:3;24575:9;24571:19;24558:33;24618:18;24610:6;24607:30;24604:117;;;24640:79;;:::i;:::-;24604:117;24745:62;24799:7;24790:6;24779:9;24775:22;24745:62;:::i;:::-;24735:72;;24529:288;23735:1089;;;;;;;;:::o;24830:329::-;24889:6;24938:2;24926:9;24917:7;24913:23;24909:32;24906:119;;;24944:79;;:::i;:::-;24906:119;25064:1;25089:53;25134:7;25125:6;25114:9;25110:22;25089:53;:::i;:::-;25079:63;;25035:117;24830:329;;;;:::o;25165:230::-;25305:34;25301:1;25293:6;25289:14;25282:58;25374:13;25369:2;25361:6;25357:15;25350:38;25165:230;:::o;25401:366::-;25543:3;25564:67;25628:2;25623:3;25564:67;:::i;:::-;25557:74;;25640:93;25729:3;25640:93;:::i;:::-;25758:2;25753:3;25749:12;25742:19;;25401:366;;;:::o;25773:419::-;25939:4;25977:2;25966:9;25962:18;25954:26;;26026:9;26020:4;26016:20;26012:1;26001:9;25997:17;25990:47;26054:131;26180:4;26054:131;:::i;:::-;26046:139;;25773:419;;;:::o;26198:180::-;26246:77;26243:1;26236:88;26343:4;26340:1;26333:15;26367:4;26364:1;26357:15;26384:320;26428:6;26465:1;26459:4;26455:12;26445:22;;26512:1;26506:4;26502:12;26533:18;26523:81;;26589:4;26581:6;26577:17;26567:27;;26523:81;26651:2;26643:6;26640:14;26620:18;26617:38;26614:84;;26670:18;;:::i;:::-;26614:84;26435:269;26384:320;;;:::o;26710:182::-;26850:34;26846:1;26838:6;26834:14;26827:58;26710:182;:::o;26898:366::-;27040:3;27061:67;27125:2;27120:3;27061:67;:::i;:::-;27054:74;;27137:93;27226:3;27137:93;:::i;:::-;27255:2;27250:3;27246:12;27239:19;;26898:366;;;:::o;27270:419::-;27436:4;27474:2;27463:9;27459:18;27451:26;;27523:9;27517:4;27513:20;27509:1;27498:9;27494:17;27487:47;27551:131;27677:4;27551:131;:::i;:::-;27543:139;;27270:419;;;:::o;27695:180::-;27743:77;27740:1;27733:88;27840:4;27837:1;27830:15;27864:4;27861:1;27854:15;27881:180;27929:77;27926:1;27919:88;28026:4;28023:1;28016:15;28050:4;28047:1;28040:15;28067:233;28106:3;28129:24;28147:5;28129:24;:::i;:::-;28120:33;;28175:66;28168:5;28165:77;28162:103;;28245:18;;:::i;:::-;28162:103;28292:1;28285:5;28281:13;28274:20;;28067:233;;;:::o;28306:221::-;28446:34;28442:1;28434:6;28430:14;28423:58;28515:4;28510:2;28502:6;28498:15;28491:29;28306:221;:::o;28533:366::-;28675:3;28696:67;28760:2;28755:3;28696:67;:::i;:::-;28689:74;;28772:93;28861:3;28772:93;:::i;:::-;28890:2;28885:3;28881:12;28874:19;;28533:366;;;:::o;28905:419::-;29071:4;29109:2;29098:9;29094:18;29086:26;;29158:9;29152:4;29148:20;29144:1;29133:9;29129:17;29122:47;29186:131;29312:4;29186:131;:::i;:::-;29178:139;;28905:419;;;:::o;29330:237::-;29470:34;29466:1;29458:6;29454:14;29447:58;29539:20;29534:2;29526:6;29522:15;29515:45;29330:237;:::o;29573:366::-;29715:3;29736:67;29800:2;29795:3;29736:67;:::i;:::-;29729:74;;29812:93;29901:3;29812:93;:::i;:::-;29930:2;29925:3;29921:12;29914:19;;29573:366;;;:::o;29945:419::-;30111:4;30149:2;30138:9;30134:18;30126:26;;30198:9;30192:4;30188:20;30184:1;30173:9;30169:17;30162:47;30226:131;30352:4;30226:131;:::i;:::-;30218:139;;29945:419;;;:::o;30370:228::-;30510:34;30506:1;30498:6;30494:14;30487:58;30579:11;30574:2;30566:6;30562:15;30555:36;30370:228;:::o;30604:366::-;30746:3;30767:67;30831:2;30826:3;30767:67;:::i;:::-;30760:74;;30843:93;30932:3;30843:93;:::i;:::-;30961:2;30956:3;30952:12;30945:19;;30604:366;;;:::o;30976:419::-;31142:4;31180:2;31169:9;31165:18;31157:26;;31229:9;31223:4;31219:20;31215:1;31204:9;31200:17;31193:47;31257:131;31383:4;31257:131;:::i;:::-;31249:139;;30976:419;;;:::o;31401:141::-;31450:4;31473:3;31465:11;;31496:3;31493:1;31486:14;31530:4;31527:1;31517:18;31509:26;;31401:141;;;:::o;31548:93::-;31585:6;31632:2;31627;31620:5;31616:14;31612:23;31602:33;;31548:93;;;:::o;31647:107::-;31691:8;31741:5;31735:4;31731:16;31710:37;;31647:107;;;;:::o;31760:393::-;31829:6;31879:1;31867:10;31863:18;31902:97;31932:66;31921:9;31902:97;:::i;:::-;32020:39;32050:8;32039:9;32020:39;:::i;:::-;32008:51;;32092:4;32088:9;32081:5;32077:21;32068:30;;32141:4;32131:8;32127:19;32120:5;32117:30;32107:40;;31836:317;;31760:393;;;;;:::o;32159:60::-;32187:3;32208:5;32201:12;;32159:60;;;:::o;32225:142::-;32275:9;32308:53;32326:34;32335:24;32353:5;32335:24;:::i;:::-;32326:34;:::i;:::-;32308:53;:::i;:::-;32295:66;;32225:142;;;:::o;32373:75::-;32416:3;32437:5;32430:12;;32373:75;;;:::o;32454:269::-;32564:39;32595:7;32564:39;:::i;:::-;32625:91;32674:41;32698:16;32674:41;:::i;:::-;32666:6;32659:4;32653:11;32625:91;:::i;:::-;32619:4;32612:105;32530:193;32454:269;;;:::o;32729:73::-;32774:3;32729:73;:::o;32808:189::-;32885:32;;:::i;:::-;32926:65;32984:6;32976;32970:4;32926:65;:::i;:::-;32861:136;32808:189;;:::o;33003:186::-;33063:120;33080:3;33073:5;33070:14;33063:120;;;33134:39;33171:1;33164:5;33134:39;:::i;:::-;33107:1;33100:5;33096:13;33087:22;;33063:120;;;33003:186;;:::o;33195:543::-;33296:2;33291:3;33288:11;33285:446;;;33330:38;33362:5;33330:38;:::i;:::-;33414:29;33432:10;33414:29;:::i;:::-;33404:8;33400:44;33597:2;33585:10;33582:18;33579:49;;;33618:8;33603:23;;33579:49;33641:80;33697:22;33715:3;33697:22;:::i;:::-;33687:8;33683:37;33670:11;33641:80;:::i;:::-;33300:431;;33285:446;33195:543;;;:::o;33744:117::-;33798:8;33848:5;33842:4;33838:16;33817:37;;33744:117;;;;:::o;33867:169::-;33911:6;33944:51;33992:1;33988:6;33980:5;33977:1;33973:13;33944:51;:::i;:::-;33940:56;34025:4;34019;34015:15;34005:25;;33918:118;33867:169;;;;:::o;34041:295::-;34117:4;34263:29;34288:3;34282:4;34263:29;:::i;:::-;34255:37;;34325:3;34322:1;34318:11;34312:4;34309:21;34301:29;;34041:295;;;;:::o;34341:1395::-;34458:37;34491:3;34458:37;:::i;:::-;34560:18;34552:6;34549:30;34546:56;;;34582:18;;:::i;:::-;34546:56;34626:38;34658:4;34652:11;34626:38;:::i;:::-;34711:67;34771:6;34763;34757:4;34711:67;:::i;:::-;34805:1;34829:4;34816:17;;34861:2;34853:6;34850:14;34878:1;34873:618;;;;35535:1;35552:6;35549:77;;;35601:9;35596:3;35592:19;35586:26;35577:35;;35549:77;35652:67;35712:6;35705:5;35652:67;:::i;:::-;35646:4;35639:81;35508:222;34843:887;;34873:618;34925:4;34921:9;34913:6;34909:22;34959:37;34991:4;34959:37;:::i;:::-;35018:1;35032:208;35046:7;35043:1;35040:14;35032:208;;;35125:9;35120:3;35116:19;35110:26;35102:6;35095:42;35176:1;35168:6;35164:14;35154:24;;35223:2;35212:9;35208:18;35195:31;;35069:4;35066:1;35062:12;35057:17;;35032:208;;;35268:6;35259:7;35256:19;35253:179;;;35326:9;35321:3;35317:19;35311:26;35369:48;35411:4;35403:6;35399:17;35388:9;35369:48;:::i;:::-;35361:6;35354:64;35276:156;35253:179;35478:1;35474;35466:6;35462:14;35458:22;35452:4;35445:36;34880:611;;;34843:887;;34433:1303;;;34341:1395;;:::o;35742:228::-;35882:34;35878:1;35870:6;35866:14;35859:58;35951:11;35946:2;35938:6;35934:15;35927:36;35742:228;:::o;35976:366::-;36118:3;36139:67;36203:2;36198:3;36139:67;:::i;:::-;36132:74;;36215:93;36304:3;36215:93;:::i;:::-;36333:2;36328:3;36324:12;36317:19;;35976:366;;;:::o;36348:419::-;36514:4;36552:2;36541:9;36537:18;36529:26;;36601:9;36595:4;36591:20;36587:1;36576:9;36572:17;36565:47;36629:131;36755:4;36629:131;:::i;:::-;36621:139;;36348:419;;;:::o;36773:225::-;36913:34;36909:1;36901:6;36897:14;36890:58;36982:8;36977:2;36969:6;36965:15;36958:33;36773:225;:::o;37004:366::-;37146:3;37167:67;37231:2;37226:3;37167:67;:::i;:::-;37160:74;;37243:93;37332:3;37243:93;:::i;:::-;37361:2;37356:3;37352:12;37345:19;;37004:366;;;:::o;37376:419::-;37542:4;37580:2;37569:9;37565:18;37557:26;;37629:9;37623:4;37619:20;37615:1;37604:9;37600:17;37593:47;37657:131;37783:4;37657:131;:::i;:::-;37649:139;;37376:419;;;:::o;37801:220::-;37941:34;37937:1;37929:6;37925:14;37918:58;38010:3;38005:2;37997:6;37993:15;37986:28;37801:220;:::o;38027:366::-;38169:3;38190:67;38254:2;38249:3;38190:67;:::i;:::-;38183:74;;38266:93;38355:3;38266:93;:::i;:::-;38384:2;38379:3;38375:12;38368:19;;38027:366;;;:::o;38399:419::-;38565:4;38603:2;38592:9;38588:18;38580:26;;38652:9;38646:4;38642:20;38638:1;38627:9;38623:17;38616:47;38680:131;38806:4;38680:131;:::i;:::-;38672:139;;38399:419;;;:::o;38824:191::-;38864:3;38883:20;38901:1;38883:20;:::i;:::-;38878:25;;38917:20;38935:1;38917:20;:::i;:::-;38912:25;;38960:1;38957;38953:9;38946:16;;38981:3;38978:1;38975:10;38972:36;;;38988:18;;:::i;:::-;38972:36;38824:191;;;;:::o;39021:332::-;39142:4;39180:2;39169:9;39165:18;39157:26;;39193:71;39261:1;39250:9;39246:17;39237:6;39193:71;:::i;:::-;39274:72;39342:2;39331:9;39327:18;39318:6;39274:72;:::i;:::-;39021:332;;;;;:::o;39359:227::-;39499:34;39495:1;39487:6;39483:14;39476:58;39568:10;39563:2;39555:6;39551:15;39544:35;39359:227;:::o;39592:366::-;39734:3;39755:67;39819:2;39814:3;39755:67;:::i;:::-;39748:74;;39831:93;39920:3;39831:93;:::i;:::-;39949:2;39944:3;39940:12;39933:19;;39592:366;;;:::o;39964:419::-;40130:4;40168:2;40157:9;40153:18;40145:26;;40217:9;40211:4;40207:20;40203:1;40192:9;40188:17;40181:47;40245:131;40371:4;40245:131;:::i;:::-;40237:139;;39964:419;;;:::o;40389:224::-;40529:34;40525:1;40517:6;40513:14;40506:58;40598:7;40593:2;40585:6;40581:15;40574:32;40389:224;:::o;40619:366::-;40761:3;40782:67;40846:2;40841:3;40782:67;:::i;:::-;40775:74;;40858:93;40947:3;40858:93;:::i;:::-;40976:2;40971:3;40967:12;40960:19;;40619:366;;;:::o;40991:419::-;41157:4;41195:2;41184:9;41180:18;41172:26;;41244:9;41238:4;41234:20;41230:1;41219:9;41215:17;41208:47;41272:131;41398:4;41272:131;:::i;:::-;41264:139;;40991:419;;;:::o;41416:229::-;41556:34;41552:1;41544:6;41540:14;41533:58;41625:12;41620:2;41612:6;41608:15;41601:37;41416:229;:::o;41651:366::-;41793:3;41814:67;41878:2;41873:3;41814:67;:::i;:::-;41807:74;;41890:93;41979:3;41890:93;:::i;:::-;42008:2;42003:3;41999:12;41992:19;;41651:366;;;:::o;42023:419::-;42189:4;42227:2;42216:9;42212:18;42204:26;;42276:9;42270:4;42266:20;42262:1;42251:9;42247:17;42240:47;42304:131;42430:4;42304:131;:::i;:::-;42296:139;;42023:419;;;:::o;42448:634::-;42669:4;42707:2;42696:9;42692:18;42684:26;;42756:9;42750:4;42746:20;42742:1;42731:9;42727:17;42720:47;42784:108;42887:4;42878:6;42784:108;:::i;:::-;42776:116;;42939:9;42933:4;42929:20;42924:2;42913:9;42909:18;42902:48;42967:108;43070:4;43061:6;42967:108;:::i;:::-;42959:116;;42448:634;;;;;:::o;43088:222::-;43228:34;43224:1;43216:6;43212:14;43205:58;43297:5;43292:2;43284:6;43280:15;43273:30;43088:222;:::o;43316:366::-;43458:3;43479:67;43543:2;43538:3;43479:67;:::i;:::-;43472:74;;43555:93;43644:3;43555:93;:::i;:::-;43673:2;43668:3;43664:12;43657:19;;43316:366;;;:::o;43688:419::-;43854:4;43892:2;43881:9;43877:18;43869:26;;43941:9;43935:4;43931:20;43927:1;43916:9;43912:17;43905:47;43969:131;44095:4;43969:131;:::i;:::-;43961:139;;43688:419;;;:::o;44113:223::-;44253:34;44249:1;44241:6;44237:14;44230:58;44322:6;44317:2;44309:6;44305:15;44298:31;44113:223;:::o;44342:366::-;44484:3;44505:67;44569:2;44564:3;44505:67;:::i;:::-;44498:74;;44581:93;44670:3;44581:93;:::i;:::-;44699:2;44694:3;44690:12;44683:19;;44342:366;;;:::o;44714:419::-;44880:4;44918:2;44907:9;44903:18;44895:26;;44967:9;44961:4;44957:20;44953:1;44942:9;44938:17;44931:47;44995:131;45121:4;44995:131;:::i;:::-;44987:139;;44714:419;;;:::o;45139:228::-;45279:34;45275:1;45267:6;45263:14;45256:58;45348:11;45343:2;45335:6;45331:15;45324:36;45139:228;:::o;45373:366::-;45515:3;45536:67;45600:2;45595:3;45536:67;:::i;:::-;45529:74;;45612:93;45701:3;45612:93;:::i;:::-;45730:2;45725:3;45721:12;45714:19;;45373:366;;;:::o;45745:419::-;45911:4;45949:2;45938:9;45934:18;45926:26;;45998:9;45992:4;45988:20;45984:1;45973:9;45969:17;45962:47;46026:131;46152:4;46026:131;:::i;:::-;46018:139;;45745:419;;;:::o;46170:98::-;46221:6;46255:5;46249:12;46239:22;;46170:98;;;:::o;46274:168::-;46357:11;46391:6;46386:3;46379:19;46431:4;46426:3;46422:14;46407:29;;46274:168;;;;:::o;46448:373::-;46534:3;46562:38;46594:5;46562:38;:::i;:::-;46616:70;46679:6;46674:3;46616:70;:::i;:::-;46609:77;;46695:65;46753:6;46748:3;46741:4;46734:5;46730:16;46695:65;:::i;:::-;46785:29;46807:6;46785:29;:::i;:::-;46780:3;46776:39;46769:46;;46538:283;46448:373;;;;:::o;46827:751::-;47050:4;47088:3;47077:9;47073:19;47065:27;;47102:71;47170:1;47159:9;47155:17;47146:6;47102:71;:::i;:::-;47183:72;47251:2;47240:9;47236:18;47227:6;47183:72;:::i;:::-;47265;47333:2;47322:9;47318:18;47309:6;47265:72;:::i;:::-;47347;47415:2;47404:9;47400:18;47391:6;47347:72;:::i;:::-;47467:9;47461:4;47457:20;47451:3;47440:9;47436:19;47429:49;47495:76;47566:4;47557:6;47495:76;:::i;:::-;47487:84;;46827:751;;;;;;;;:::o;47584:141::-;47640:5;47671:6;47665:13;47656:22;;47687:32;47713:5;47687:32;:::i;:::-;47584:141;;;;:::o;47731:349::-;47800:6;47849:2;47837:9;47828:7;47824:23;47820:32;47817:119;;;47855:79;;:::i;:::-;47817:119;47975:1;48000:63;48055:7;48046:6;48035:9;48031:22;48000:63;:::i;:::-;47990:73;;47946:127;47731:349;;;;:::o;48086:106::-;48130:8;48179:5;48174:3;48170:15;48149:36;;48086:106;;;:::o;48198:183::-;48233:3;48271:1;48253:16;48250:23;48247:128;;;48309:1;48306;48303;48288:23;48331:34;48362:1;48356:8;48331:34;:::i;:::-;48324:41;;48247:128;48198:183;:::o;48387:711::-;48426:3;48464:4;48446:16;48443:26;48472:5;48440:39;48501:20;;:::i;:::-;48576:1;48558:16;48554:24;48551:1;48545:4;48530:49;48609:4;48603:11;48708:16;48701:4;48693:6;48689:17;48686:39;48653:18;48645:6;48642:30;48626:113;48623:146;;;48754:5;;;;48623:146;48800:6;48794:4;48790:17;48836:3;48830:10;48863:18;48855:6;48852:30;48849:43;;;48885:5;;;;;;48849:43;48933:6;48926:4;48921:3;48917:14;48913:27;48992:1;48974:16;48970:24;48964:4;48960:35;48955:3;48952:44;48949:57;;;48999:5;;;;;;;48949:57;49016;49064:6;49058:4;49054:17;49046:6;49042:30;49036:4;49016:57;:::i;:::-;49089:3;49082:10;;48430:668;;;;;48387:711;;:::o;49104:239::-;49244:34;49240:1;49232:6;49228:14;49221:58;49313:22;49308:2;49300:6;49296:15;49289:47;49104:239;:::o;49349:366::-;49491:3;49512:67;49576:2;49571:3;49512:67;:::i;:::-;49505:74;;49588:93;49677:3;49588:93;:::i;:::-;49706:2;49701:3;49697:12;49690:19;;49349:366;;;:::o;49721:419::-;49887:4;49925:2;49914:9;49910:18;49902:26;;49974:9;49968:4;49964:20;49960:1;49949:9;49945:17;49938:47;50002:131;50128:4;50002:131;:::i;:::-;49994:139;;49721:419;;;:::o;50146:227::-;50286:34;50282:1;50274:6;50270:14;50263:58;50355:10;50350:2;50342:6;50338:15;50331:35;50146:227;:::o;50379:366::-;50521:3;50542:67;50606:2;50601:3;50542:67;:::i;:::-;50535:74;;50618:93;50707:3;50618:93;:::i;:::-;50736:2;50731:3;50727:12;50720:19;;50379:366;;;:::o;50751:419::-;50917:4;50955:2;50944:9;50940:18;50932:26;;51004:9;50998:4;50994:20;50990:1;50979:9;50975:17;50968:47;51032:131;51158:4;51032:131;:::i;:::-;51024:139;;50751:419;;;:::o;51176:1053::-;51499:4;51537:3;51526:9;51522:19;51514:27;;51551:71;51619:1;51608:9;51604:17;51595:6;51551:71;:::i;:::-;51632:72;51700:2;51689:9;51685:18;51676:6;51632:72;:::i;:::-;51751:9;51745:4;51741:20;51736:2;51725:9;51721:18;51714:48;51779:108;51882:4;51873:6;51779:108;:::i;:::-;51771:116;;51934:9;51928:4;51924:20;51919:2;51908:9;51904:18;51897:48;51962:108;52065:4;52056:6;51962:108;:::i;:::-;51954:116;;52118:9;52112:4;52108:20;52102:3;52091:9;52087:19;52080:49;52146:76;52217:4;52208:6;52146:76;:::i;:::-;52138:84;;51176:1053;;;;;;;;:::o

Swarm Source

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