Token Assetha Ornaments

Overview ERC1155

Total Supply:
0 ASTORN

Holders:
779 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AssethaOrnaments

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-12
*/

// 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(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

interface IERC2981Royalties {
    function royaltyInfo(uint256 _tokenId, uint256 _value) external view returns (address _receiver, uint256 _royaltyAmount);
}

pragma solidity ^0.8.0;

contract AssethaOrnaments is ERC1155, Ownable, IERC2981Royalties {
    string public name;
    string public symbol;
    RoyaltyInfo private _royalties;
        struct RoyaltyInfo {
            address recipient;
            uint256 amount;
        }

    mapping(uint256 => string) public tokenURI;

    constructor() ERC1155("") {
        name = "Assetha Ornaments";
        symbol = "ASTORN";
        setRoyalties(0x12702040686F181E626b492C75DF42D912E5D681, 250);
    }

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

    function airdrop(address[] calldata _addresses, uint256 _id, uint256 _amount) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            _mint(_addresses[i], _id, _amount, "");
        }
    }

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

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

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

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC2981Royalties).interfaceId || super.supportsInterface(interfaceId);
    }

    function _setRoyalties(address recipient, uint256 value) internal {
        require(value <= 10000, "ERC2981Royalties: Too high");
        _royalties = RoyaltyInfo(recipient, uint256(value));
    }

    function royaltyInfo(uint256, uint256 value) external view override returns (address receiver, uint256 royaltyAmount) {
        RoyaltyInfo memory royalties = _royalties;
        receiver = royalties.recipient;
        royaltyAmount = (value * royalties.amount) / 10000;
    }

    function setRoyalties(address recipient, uint256 value) public onlyOwner() {
        _setRoyalties(recipient, value);
    }
}

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":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setRoyalties","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"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200011d60201b60201c565b5062000054620000486200013960201b60201c565b6200014160201b60201c565b6040518060400160405280601181526020017f41737365746861204f726e616d656e747300000000000000000000000000000081525060049080519060200190620000a1929190620003a3565b506040518060400160405280600681526020017f4153544f524e000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620003a3565b50620001177312702040686f181e626b492c75df42d912e5d68160fa6200020760201b60201c565b620005ac565b806002908051906020019062000135929190620003a3565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002176200013960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023d620002ac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d90620004b4565b60405180910390fd5b620002a88282620002d660201b60201c565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6127108111156200031e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003159062000526565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200182815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101559050505050565b828054620003b19062000577565b90600052602060002090601f016020900481019282620003d5576000855562000421565b82601f10620003f057805160ff191683800117855562000421565b8280016001018555821562000421579182015b828111156200042057825182559160200191906001019062000403565b5b50905062000430919062000434565b5090565b5b808211156200044f57600081600090555060010162000435565b5090565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200049c60208362000453565b9150620004a98262000464565b602082019050919050565b60006020820190508181036000830152620004cf816200048d565b9050919050565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b60006200050e601a8362000453565b91506200051b82620004d6565b602082019050919050565b600060208201905081810360008301526200054181620004ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059057607f821691505b602082108103620005a657620005a562000548565b5b50919050565b613ba080620005bc6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80638c7ea24b116100ad578063b390c0ab11610071578063b390c0ab1461032d578063c87b56dd14610349578063e985e9c514610379578063f242432a146103a9578063f2fde38b146103c55761012b565b80638c7ea24b1461029d5780638da5cb5b146102b957806395d89b41146102d7578063a22cb465146102f5578063a496dedf146103115761012b565b80632a55205a116100f45780632a55205a146101fa5780632eb2c2d61461022b5780634e1273f414610247578063715018a614610277578063862440e2146102815761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a600480360381019061014591906122f2565b6103e1565b6040516101579190612341565b60405180910390f35b61017a600480360381019061017591906123b4565b6104a9565b60405161018791906123fc565b60405180910390f35b610198610523565b6040516101a591906124b0565b60405180910390f35b6101c860048036038101906101c391906124d2565b6105b1565b6040516101d591906124b0565b60405180910390f35b6101f860048036038101906101f391906124ff565b610656565b005b610214600480360381019061020f9190612552565b6106f2565b6040516102229291906125a1565b60405180910390f35b610245600480360381019061024091906127c7565b610794565b005b610261600480360381019061025c9190612959565b610835565b60405161026e9190612a8f565b60405180910390f35b61027f61094e565b005b61029b60048036038101906102969190612b52565b6109d6565b005b6102b760048036038101906102b291906122f2565b610ab6565b005b6102c1610b40565b6040516102ce9190612bae565b60405180910390f35b6102df610b6a565b6040516102ec91906124b0565b60405180910390f35b61030f600480360381019061030a9190612bf5565b610bf8565b005b61032b60048036038101906103269190612c90565b610c0e565b005b61034760048036038101906103429190612552565b610cf4565b005b610363600480360381019061035e91906124d2565b610d03565b60405161037091906124b0565b60405180910390f35b610393600480360381019061038e9190612d04565b610da3565b6040516103a091906123fc565b60405180910390f35b6103c360048036038101906103be9190612d44565b610e37565b005b6103df60048036038101906103da9190612ddb565b610ed8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044890612e7a565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051c575061051b82610fcf565b5b9050919050565b6004805461053090612ec9565b80601f016020809104026020016040519081016040528092919081815260200182805461055c90612ec9565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081565b60606008600083815260200190815260200160002080546105d190612ec9565b80601f01602080910402602001604051908101604052809291908181526020018280546105fd90612ec9565b801561064a5780601f1061061f5761010080835404028352916020019161064a565b820191906000526020600020905b81548152906001019060200180831161062d57829003601f168201915b50505050509050919050565b61065e6110b1565b73ffffffffffffffffffffffffffffffffffffffff1661067c610b40565b73ffffffffffffffffffffffffffffffffffffffff16146106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c990612f46565b60405180910390fd5b6106ed838383604051806020016040528060008152506110b9565b505050565b600080600060066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050806000015192506127108160200151856107809190612f95565b61078a919061301e565b9150509250929050565b61079c6110b1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107e257506107e1856107dc6110b1565b610da3565b5b610821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610818906130c1565b60405180910390fd5b61082e858585858561124e565b5050505050565b6060815183511461087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087290613153565b60405180910390fd5b6000835167ffffffffffffffff811115610898576108976125cf565b5b6040519080825280602002602001820160405280156108c65781602001602082028036833780820191505090505b50905060005b8451811015610943576109138582815181106108eb576108ea613173565b5b602002602001015185838151811061090657610905613173565b5b60200260200101516103e1565b82828151811061092657610925613173565b5b6020026020010181815250508061093c906131a2565b90506108cc565b508091505092915050565b6109566110b1565b73ffffffffffffffffffffffffffffffffffffffff16610974610b40565b73ffffffffffffffffffffffffffffffffffffffff16146109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190612f46565b60405180910390fd5b6109d46000611561565b565b6109de6110b1565b73ffffffffffffffffffffffffffffffffffffffff166109fc610b40565b73ffffffffffffffffffffffffffffffffffffffff1614610a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4990612f46565b60405180910390fd5b80600860008481526020019081526020016000209080519060200190610a799291906121a7565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610aaa91906124b0565b60405180910390a25050565b610abe6110b1565b73ffffffffffffffffffffffffffffffffffffffff16610adc610b40565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990612f46565b60405180910390fd5b610b3c8282611627565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b7790612ec9565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba390612ec9565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b505050505081565b610c0a610c036110b1565b83836116f1565b5050565b610c166110b1565b73ffffffffffffffffffffffffffffffffffffffff16610c34610b40565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190612f46565b60405180910390fd5b60005b84849050811015610ced57610cda858583818110610cae57610cad613173565b5b9050602002016020810190610cc39190612ddb565b8484604051806020016040528060008152506110b9565b8080610ce5906131a2565b915050610c8d565b5050505050565b610cff33838361185d565b5050565b60086020528060005260406000206000915090508054610d2290612ec9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4e90612ec9565b8015610d9b5780601f10610d7057610100808354040283529160200191610d9b565b820191906000526020600020905b815481529060010190602001808311610d7e57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e3f6110b1565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e855750610e8485610e7f6110b1565b610da3565b5b610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb9061325c565b60405180910390fd5b610ed18585858585611a79565b5050505050565b610ee06110b1565b73ffffffffffffffffffffffffffffffffffffffff16610efe610b40565b73ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90612f46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba906132ee565b60405180910390fd5b610fcc81611561565b50565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061109a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110aa57506110a982611cfa565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90613380565b60405180910390fd5b60006111326110b1565b90506111538160008761114488611d64565b61114d88611d64565b87611dde565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111b291906133a0565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516112309291906133f6565b60405180910390a461124781600087878787611de6565b5050505050565b8151835114611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990613491565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613523565b60405180910390fd5b600061130b6110b1565b905061131b818787878787611dde565b60005b84518110156114cc57600085828151811061133c5761133b613173565b5b60200260200101519050600085838151811061135b5761135a613173565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906135b5565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b191906133a0565b92505081905550505050806114c5906131a2565b905061131e565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516115439291906135d5565b60405180910390a4611559818787878787611fbd565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61271081111561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613658565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff16815260200182815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101559050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906136ea565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161185091906123fc565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c39061377c565b60405180910390fd5b60006118d66110b1565b9050611906818560006118e887611d64565b6118f187611d64565b60405180602001604052806000815250611dde565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119949061380e565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611a6a9291906133f6565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90613523565b60405180910390fd5b6000611af26110b1565b9050611b12818787611b0388611d64565b611b0c88611d64565b87611dde565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba0906135b5565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c5e91906133a0565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611cdb9291906133f6565b60405180910390a4611cf1828888888888611de6565b50505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000600167ffffffffffffffff811115611d8357611d826125cf565b5b604051908082528060200260200182016040528015611db15781602001602082028036833780820191505090505b5090508281600081518110611dc957611dc8613173565b5b60200260200101818152505080915050919050565b505050505050565b611e058473ffffffffffffffffffffffffffffffffffffffff16612194565b15611fb5578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611e4b959493929190613883565b6020604051808303816000875af1925050508015611e8757506040513d601f19601f82011682018060405250810190611e8491906138f2565b60015b611f2c57611e9361392c565b806308c379a003611eef5750611ea761394e565b80611eb25750611ef1565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee691906124b0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2390613a50565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90613ae2565b60405180910390fd5b505b505050505050565b611fdc8473ffffffffffffffffffffffffffffffffffffffff16612194565b1561218c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612022959493929190613b02565b6020604051808303816000875af192505050801561205e57506040513d601f19601f8201168201806040525081019061205b91906138f2565b60015b6121035761206a61392c565b806308c379a0036120c6575061207e61394e565b8061208957506120c8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd91906124b0565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fa90613a50565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190613ae2565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546121b390612ec9565b90600052602060002090601f0160209004810192826121d5576000855561221c565b82601f106121ee57805160ff191683800117855561221c565b8280016001018555821561221c579182015b8281111561221b578251825591602001919060010190612200565b5b509050612229919061222d565b5090565b5b8082111561224657600081600090555060010161222e565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122898261225e565b9050919050565b6122998161227e565b81146122a457600080fd5b50565b6000813590506122b681612290565b92915050565b6000819050919050565b6122cf816122bc565b81146122da57600080fd5b50565b6000813590506122ec816122c6565b92915050565b6000806040838503121561230957612308612254565b5b6000612317858286016122a7565b9250506020612328858286016122dd565b9150509250929050565b61233b816122bc565b82525050565b60006020820190506123566000830184612332565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6123918161235c565b811461239c57600080fd5b50565b6000813590506123ae81612388565b92915050565b6000602082840312156123ca576123c9612254565b5b60006123d88482850161239f565b91505092915050565b60008115159050919050565b6123f6816123e1565b82525050565b600060208201905061241160008301846123ed565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612451578082015181840152602081019050612436565b83811115612460576000848401525b50505050565b6000601f19601f8301169050919050565b600061248282612417565b61248c8185612422565b935061249c818560208601612433565b6124a581612466565b840191505092915050565b600060208201905081810360008301526124ca8184612477565b905092915050565b6000602082840312156124e8576124e7612254565b5b60006124f6848285016122dd565b91505092915050565b60008060006060848603121561251857612517612254565b5b6000612526868287016122a7565b9350506020612537868287016122dd565b9250506040612548868287016122dd565b9150509250925092565b6000806040838503121561256957612568612254565b5b6000612577858286016122dd565b9250506020612588858286016122dd565b9150509250929050565b61259b8161227e565b82525050565b60006040820190506125b66000830185612592565b6125c36020830184612332565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61260782612466565b810181811067ffffffffffffffff82111715612626576126256125cf565b5b80604052505050565b600061263961224a565b905061264582826125fe565b919050565b600067ffffffffffffffff821115612665576126646125cf565b5b602082029050602081019050919050565b600080fd5b600061268e6126898461264a565b61262f565b905080838252602082019050602084028301858111156126b1576126b0612676565b5b835b818110156126da57806126c688826122dd565b8452602084019350506020810190506126b3565b5050509392505050565b600082601f8301126126f9576126f86125ca565b5b813561270984826020860161267b565b91505092915050565b600080fd5b600067ffffffffffffffff821115612732576127316125cf565b5b61273b82612466565b9050602081019050919050565b82818337600083830152505050565b600061276a61276584612717565b61262f565b90508281526020810184848401111561278657612785612712565b5b612791848285612748565b509392505050565b600082601f8301126127ae576127ad6125ca565b5b81356127be848260208601612757565b91505092915050565b600080600080600060a086880312156127e3576127e2612254565b5b60006127f1888289016122a7565b9550506020612802888289016122a7565b945050604086013567ffffffffffffffff81111561282357612822612259565b5b61282f888289016126e4565b935050606086013567ffffffffffffffff8111156128505761284f612259565b5b61285c888289016126e4565b925050608086013567ffffffffffffffff81111561287d5761287c612259565b5b61288988828901612799565b9150509295509295909350565b600067ffffffffffffffff8211156128b1576128b06125cf565b5b602082029050602081019050919050565b60006128d56128d084612896565b61262f565b905080838252602082019050602084028301858111156128f8576128f7612676565b5b835b81811015612921578061290d88826122a7565b8452602084019350506020810190506128fa565b5050509392505050565b600082601f8301126129405761293f6125ca565b5b81356129508482602086016128c2565b91505092915050565b600080604083850312156129705761296f612254565b5b600083013567ffffffffffffffff81111561298e5761298d612259565b5b61299a8582860161292b565b925050602083013567ffffffffffffffff8111156129bb576129ba612259565b5b6129c7858286016126e4565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612a06816122bc565b82525050565b6000612a1883836129fd565b60208301905092915050565b6000602082019050919050565b6000612a3c826129d1565b612a4681856129dc565b9350612a51836129ed565b8060005b83811015612a82578151612a698882612a0c565b9750612a7483612a24565b925050600181019050612a55565b5085935050505092915050565b60006020820190508181036000830152612aa98184612a31565b905092915050565b600067ffffffffffffffff821115612acc57612acb6125cf565b5b612ad582612466565b9050602081019050919050565b6000612af5612af084612ab1565b61262f565b905082815260208101848484011115612b1157612b10612712565b5b612b1c848285612748565b509392505050565b600082601f830112612b3957612b386125ca565b5b8135612b49848260208601612ae2565b91505092915050565b60008060408385031215612b6957612b68612254565b5b6000612b77858286016122dd565b925050602083013567ffffffffffffffff811115612b9857612b97612259565b5b612ba485828601612b24565b9150509250929050565b6000602082019050612bc36000830184612592565b92915050565b612bd2816123e1565b8114612bdd57600080fd5b50565b600081359050612bef81612bc9565b92915050565b60008060408385031215612c0c57612c0b612254565b5b6000612c1a858286016122a7565b9250506020612c2b85828601612be0565b9150509250929050565b600080fd5b60008083601f840112612c5057612c4f6125ca565b5b8235905067ffffffffffffffff811115612c6d57612c6c612c35565b5b602083019150836020820283011115612c8957612c88612676565b5b9250929050565b60008060008060608587031215612caa57612ca9612254565b5b600085013567ffffffffffffffff811115612cc857612cc7612259565b5b612cd487828801612c3a565b94509450506020612ce7878288016122dd565b9250506040612cf8878288016122dd565b91505092959194509250565b60008060408385031215612d1b57612d1a612254565b5b6000612d29858286016122a7565b9250506020612d3a858286016122a7565b9150509250929050565b600080600080600060a08688031215612d6057612d5f612254565b5b6000612d6e888289016122a7565b9550506020612d7f888289016122a7565b9450506040612d90888289016122dd565b9350506060612da1888289016122dd565b925050608086013567ffffffffffffffff811115612dc257612dc1612259565b5b612dce88828901612799565b9150509295509295909350565b600060208284031215612df157612df0612254565b5b6000612dff848285016122a7565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612e64602b83612422565b9150612e6f82612e08565b604082019050919050565b60006020820190508181036000830152612e9381612e57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ee157607f821691505b602082108103612ef457612ef3612e9a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f30602083612422565b9150612f3b82612efa565b602082019050919050565b60006020820190508181036000830152612f5f81612f23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa0826122bc565b9150612fab836122bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612fe457612fe3612f66565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613029826122bc565b9150613034836122bc565b92508261304457613043612fef565b5b828204905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006130ab603283612422565b91506130b68261304f565b604082019050919050565b600060208201905081810360008301526130da8161309e565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061313d602983612422565b9150613148826130e1565b604082019050919050565b6000602082019050818103600083015261316c81613130565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131ad826122bc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131df576131de612f66565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613246602983612422565b9150613251826131ea565b604082019050919050565b6000602082019050818103600083015261327581613239565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132d8602683612422565b91506132e38261327c565b604082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061336a602183612422565b91506133758261330e565b604082019050919050565b600060208201905081810360008301526133998161335d565b9050919050565b60006133ab826122bc565b91506133b6836122bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133eb576133ea612f66565b5b828201905092915050565b600060408201905061340b6000830185612332565b6134186020830184612332565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061347b602883612422565b91506134868261341f565b604082019050919050565b600060208201905081810360008301526134aa8161346e565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061350d602583612422565b9150613518826134b1565b604082019050919050565b6000602082019050818103600083015261353c81613500565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061359f602a83612422565b91506135aa82613543565b604082019050919050565b600060208201905081810360008301526135ce81613592565b9050919050565b600060408201905081810360008301526135ef8185612a31565b905081810360208301526136038184612a31565b90509392505050565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b6000613642601a83612422565b915061364d8261360c565b602082019050919050565b6000602082019050818103600083015261367181613635565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006136d4602983612422565b91506136df82613678565b604082019050919050565b60006020820190508181036000830152613703816136c7565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613766602383612422565b91506137718261370a565b604082019050919050565b6000602082019050818103600083015261379581613759565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006137f8602483612422565b91506138038261379c565b604082019050919050565b60006020820190508181036000830152613827816137eb565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006138558261382e565b61385f8185613839565b935061386f818560208601612433565b61387881612466565b840191505092915050565b600060a0820190506138986000830188612592565b6138a56020830187612592565b6138b26040830186612332565b6138bf6060830185612332565b81810360808301526138d1818461384a565b90509695505050505050565b6000815190506138ec81612388565b92915050565b60006020828403121561390857613907612254565b5b6000613916848285016138dd565b91505092915050565b60008160e01c9050919050565b600060033d111561394b5760046000803e61394860005161391f565b90505b90565b600060443d106139db5761396061224a565b60043d036004823e80513d602482011167ffffffffffffffff821117156139885750506139db565b808201805167ffffffffffffffff8111156139a657505050506139db565b80602083010160043d0385018111156139c35750505050506139db565b6139d2826020018501866125fe565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613a3a603483612422565b9150613a45826139de565b604082019050919050565b60006020820190508181036000830152613a6981613a2d565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613acc602883612422565b9150613ad782613a70565b604082019050919050565b60006020820190508181036000830152613afb81613abf565b9050919050565b600060a082019050613b176000830188612592565b613b246020830187612592565b8181036040830152613b368186612a31565b90508181036060830152613b4a8185612a31565b90508181036080830152613b5e818461384a565b9050969550505050505056fea264697066735822122065be80b9f6c0b33f84f305bc6039a91e5c41a502333f169bd74ca27b243928cc64736f6c634300080d0033

Deployed ByteCode Sourcemap

40943:2075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25916:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42179:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41015:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42061:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41438:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42602:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28061:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26400:561;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4947:103;;;:::i;:::-;;41916:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42890:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4296:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41040:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27034:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41569:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41805:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41208:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27293:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27583:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5205:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25916:318;26047:7;26113:1;26094:21;;:7;:21;;;26072:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;26204:9;:13;26214:2;26204:13;;;;;;;;;;;:22;26218:7;26204:22;;;;;;;;;;;;;;;;26197:29;;25916:318;;;;:::o;42179:207::-;42264:4;42303:35;42288:50;;;:11;:50;;;;:90;;;;42342:36;42366:11;42342:23;:36::i;:::-;42288:90;42281:97;;42179:207;;;:::o;41015:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42061:110::-;42117:13;42150:8;:13;42159:3;42150:13;;;;;;;;;;;42143:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42061:110;;;:::o;41438:123::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41525:28:::1;41531:3;41536;41541:7;41525:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;41438:123:::0;;;:::o;42602:280::-;42679:16;42697:21;42731:28;42762:10;42731:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42794:9;:19;;;42783:30;;42869:5;42849:9;:16;;;42841:5;:24;;;;:::i;:::-;42840:34;;;;:::i;:::-;42824:50;;42720:162;42602:280;;;;;:::o;28061:442::-;28302:12;:10;:12::i;:::-;28294:20;;:4;:20;;;:60;;;;28318:36;28335:4;28341:12;:10;:12::i;:::-;28318:16;:36::i;:::-;28294:60;28272:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28443:52;28466:4;28472:2;28476:3;28481:7;28490:4;28443:22;:52::i;:::-;28061:442;;;;;:::o;26400:561::-;26556:16;26631:3;:10;26612:8;:15;:29;26590:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;26723:30;26770:8;:15;26756:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26723:63;;26804:9;26799:122;26823:8;:15;26819:1;:19;26799:122;;;26879:30;26889:8;26898:1;26889:11;;;;;;;;:::i;:::-;;;;;;;;26902:3;26906:1;26902:6;;;;;;;;:::i;:::-;;;;;;;;26879:9;:30::i;:::-;26860:13;26874:1;26860:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;26840:3;;;;:::i;:::-;;;26799:122;;;;26940:13;26933:20;;;26400:561;;;;:::o;4947:103::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5012:30:::1;5039:1;5012:18;:30::i;:::-;4947:103::o:0;41916:137::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42011:4:::1;41995:8;:13;42004:3;41995:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;42041:3;42031:14;42035:4;42031:14;;;;;;:::i;:::-;;;;;;;;41916:137:::0;;:::o;42890:125::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42976:31:::1;42990:9;43001:5;42976:13;:31::i;:::-;42890:125:::0;;:::o;4296:87::-;4342:7;4369:6;;;;;;;;;;;4362:13;;4296:87;:::o;41040:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27034:187::-;27161:52;27180:12;:10;:12::i;:::-;27194:8;27204;27161:18;:52::i;:::-;27034:187;;:::o;41569:228::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41682:9:::1;41677:113;41701:10;;:17;;41697:1;:21;41677:113;;;41740:38;41746:10;;41757:1;41746:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41761:3;41766:7;41740:38;;;;;;;;;;;::::0;:5:::1;:38::i;:::-;41720:3;;;;;:::i;:::-;;;;41677:113;;;;41569:228:::0;;;;:::o;41805:103::-;41869:31;41875:10;41887:3;41892:7;41869:5;:31::i;:::-;41805:103;;:::o;41208:42::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27293:218::-;27437:4;27466:18;:27;27485:7;27466:27;;;;;;;;;;;;;;;:37;27494:8;27466:37;;;;;;;;;;;;;;;;;;;;;;;;;27459:44;;27293:218;;;;:::o;27583:401::-;27799:12;:10;:12::i;:::-;27791:20;;:4;:20;;;:60;;;;27815:36;27832:4;27838:12;:10;:12::i;:::-;27815:16;:36::i;:::-;27791:60;27769:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;27931:45;27949:4;27955:2;27959;27963:6;27971:4;27931:17;:45::i;:::-;27583:401;;;;;:::o;5205:238::-;4527:12;:10;:12::i;:::-;4516:23;;:7;:5;:7::i;:::-;:23;;;4508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5328:1:::1;5308:22;;:8;:22;;::::0;5286:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5407:28;5426:8;5407:18;:28::i;:::-;5205:238:::0;:::o;24889:360::-;25036:4;25093:26;25078:41;;;:11;:41;;;;:110;;;;25151:37;25136:52;;;:11;:52;;;;25078:110;:163;;;;25205:36;25229:11;25205:23;:36::i;:::-;25078:163;25058:183;;24889:360;;;:::o;3003:98::-;3056:7;3083:10;3076:17;;3003:98;:::o;32838:747::-;33005:1;32991:16;;:2;:16;;;32983:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33058:16;33077:12;:10;:12::i;:::-;33058:31;;33102:191;33137:8;33168:1;33185:2;33202:21;33220:2;33202:17;:21::i;:::-;33238:25;33256:6;33238:17;:25::i;:::-;33278:4;33102:20;:191::i;:::-;33327:6;33306:9;:13;33316:2;33306:13;;;;;;;;;;;:17;33320:2;33306:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33386:2;33349:52;;33382:1;33349:52;;33364:8;33349:52;;;33390:2;33394:6;33349:52;;;;;;;:::i;:::-;;;;;;;;33414:163;33459:8;33490:1;33507:2;33524;33541:6;33562:4;33414:30;:163::i;:::-;32972:613;32838:747;;;;:::o;30271:1249::-;30512:7;:14;30498:3;:10;:28;30476:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;30627:1;30613:16;;:2;:16;;;30605:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30684:16;30703:12;:10;:12::i;:::-;30684:31;;30728:60;30749:8;30759:4;30765:2;30769:3;30774:7;30783:4;30728:20;:60::i;:::-;30806:9;30801:470;30825:3;:10;30821:1;:14;30801:470;;;30857:10;30870:3;30874:1;30870:6;;;;;;;;:::i;:::-;;;;;;;;30857:19;;30891:14;30908:7;30916:1;30908:10;;;;;;;;:::i;:::-;;;;;;;;30891:27;;30935:19;30957:9;:13;30967:2;30957:13;;;;;;;;;;;:19;30971:4;30957:19;;;;;;;;;;;;;;;;30935:41;;31032:6;31017:11;:21;;30991:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;31196:6;31182:11;:20;31160:9;:13;31170:2;31160:13;;;;;;;;;;;:19;31174:4;31160:19;;;;;;;;;;;;;;;:42;;;;31253:6;31232:9;:13;31242:2;31232:13;;;;;;;;;;;:17;31246:2;31232:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30842:429;;;30837:3;;;;:::i;:::-;;;30801:470;;;;31318:2;31288:47;;31312:4;31288:47;;31302:8;31288:47;;;31322:3;31327:7;31288:47;;;;;;;:::i;:::-;;;;;;;;31348:164;31398:8;31421:4;31440:2;31457:3;31475:7;31497:4;31348:35;:164::i;:::-;30465:1055;30271:1249;;;;;:::o;5603:191::-;5677:16;5696:6;;;;;;;;;;;5677:25;;5722:8;5713:6;;:17;;;;;;;;;;;;;;;;;;5777:8;5746:40;;5767:8;5746:40;;;;;;;;;;;;5666:128;5603:191;:::o;42394:200::-;42488:5;42479;:14;;42471:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42548:38;;;;;;;;42560:9;42548:38;;;;;;42579:5;42548:38;;;42535:10;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42394:200;;:::o;37111:331::-;37266:8;37257:17;;:5;:17;;;37249:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37369:8;37331:18;:25;37350:5;37331:25;;;;;;;;;;;;;;;:35;37357:8;37331:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37415:8;37393:41;;37408:5;37393:41;;;37425:8;37393:41;;;;;;:::i;:::-;;;;;;;;37111:331;;;:::o;35052:737::-;35195:1;35179:18;;:4;:18;;;35171:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35250:16;35269:12;:10;:12::i;:::-;35250:31;;35294:191;35329:8;35352:4;35379:1;35396:21;35414:2;35396:17;:21::i;:::-;35432:25;35450:6;35432:17;:25::i;:::-;35294:191;;;;;;;;;;;;:20;:191::i;:::-;35498:19;35520:9;:13;35530:2;35520:13;;;;;;;;;;;:19;35534:4;35520:19;;;;;;;;;;;;;;;;35498:41;;35573:6;35558:11;:21;;35550:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:6;35678:11;:20;35656:9;:13;35666:2;35656:13;;;;;;;;;;;:19;35670:4;35656:19;;;;;;;;;;;;;;;:42;;;;35766:1;35727:54;;35752:4;35727:54;;35742:8;35727:54;;;35770:2;35774:6;35727:54;;;;;;;:::i;:::-;;;;;;;;35160:629;;35052:737;;;:::o;28967:946::-;29169:1;29155:16;;:2;:16;;;29147:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29226:16;29245:12;:10;:12::i;:::-;29226:31;;29270:185;29305:8;29328:4;29347:2;29364:21;29382:2;29364:17;:21::i;:::-;29400:25;29418:6;29400:17;:25::i;:::-;29440:4;29270:20;:185::i;:::-;29468:19;29490:9;:13;29500:2;29490:13;;;;;;;;;;;:19;29504:4;29490:19;;;;;;;;;;;;;;;;29468:41;;29557:6;29542:11;:21;;29520:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;29705:6;29691:11;:20;29669:9;:13;29679:2;29669:13;;;;;;;;;;;:19;29683:4;29669:19;;;;;;;;;;;;;;;:42;;;;29754:6;29733:9;:13;29743:2;29733:13;;;;;;;;;;;:17;29747:2;29733:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29809:2;29778:46;;29803:4;29778:46;;29793:8;29778:46;;;29813:2;29817:6;29778:46;;;;;;;:::i;:::-;;;;;;;;29837:68;29868:8;29878:4;29884:2;29888;29892:6;29900:4;29837:30;:68::i;:::-;29136:777;;28967:946;;;;;:::o;16157:207::-;16287:4;16331:25;16316:40;;;:11;:40;;;;16309:47;;16157:207;;;:::o;40516:230::-;40609:16;40643:22;40682:1;40668:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40643:41;;40706:7;40695:5;40701:1;40695:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40733:5;40726:12;;;40516:230;;;:::o;38398:221::-;;;;;;;:::o;38627:898::-;38842:15;:2;:13;;;:15::i;:::-;38838:680;;;38912:2;38895:38;;;38956:8;38987:4;39014:2;39039:6;39068:4;38895:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38874:633;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39380:6;39373:14;;;;;;;;;;;:::i;:::-;;;;;;;;38874:633;;;39429:62;;;;;;;;;;:::i;:::-;;;;;;;;38874:633;39166:43;;;39154:55;;;:8;:55;;;;39150:154;;39234:50;;;;;;;;;;:::i;:::-;;;;;;;;39150:154;39105:214;38838:680;38627:898;;;;;;:::o;39533:975::-;39773:15;:2;:13;;;:15::i;:::-;39769:732;;;39843:2;39826:43;;;39892:8;39923:4;39950:3;39976:7;40006:4;39826:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39805:685;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40363:6;40356:14;;;;;;;;;;;:::i;:::-;;;;;;;;39805:685;;;40412:62;;;;;;;;;;:::i;:::-;;;;;;;;39805:685;40126:48;;;40114:60;;;:8;:60;;;;40088:199;;40217:50;;;;;;;;;;:::i;:::-;;;;;;;;40088:199;40043:259;39769:732;39533:975;;;;;;:::o;6616:387::-;6676:4;6884:12;6951:7;6939:20;6931:28;;6994:1;6987:4;:8;6980:15;;;6616:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:474::-;5631:6;5639;5688:2;5676:9;5667:7;5663:23;5659:32;5656:119;;;5694:79;;:::i;:::-;5656:119;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;5563:474;;;;;:::o;6043:118::-;6130:24;6148:5;6130:24;:::i;:::-;6125:3;6118:37;6043:118;;:::o;6167:332::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6420:72;6488:2;6477:9;6473:18;6464:6;6420:72;:::i;:::-;6167:332;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:180;6676:77;6673:1;6666:88;6773:4;6770:1;6763:15;6797:4;6794:1;6787:15;6814:281;6897:27;6919:4;6897:27;:::i;:::-;6889:6;6885:40;7027:6;7015:10;7012:22;6991:18;6979:10;6976:34;6973:62;6970:88;;;7038:18;;:::i;:::-;6970:88;7078:10;7074:2;7067:22;6857:238;6814:281;;:::o;7101:129::-;7135:6;7162:20;;:::i;:::-;7152:30;;7191:33;7219:4;7211:6;7191:33;:::i;:::-;7101:129;;;:::o;7236:311::-;7313:4;7403:18;7395:6;7392:30;7389:56;;;7425:18;;:::i;:::-;7389:56;7475:4;7467:6;7463:17;7455:25;;7535:4;7529;7525:15;7517:23;;7236:311;;;:::o;7553:117::-;7662:1;7659;7652:12;7693:710;7789:5;7814:81;7830:64;7887:6;7830:64;:::i;:::-;7814:81;:::i;:::-;7805:90;;7915:5;7944:6;7937:5;7930:21;7978:4;7971:5;7967:16;7960:23;;8031:4;8023:6;8019:17;8011:6;8007:30;8060:3;8052:6;8049:15;8046:122;;;8079:79;;:::i;:::-;8046:122;8194:6;8177:220;8211:6;8206:3;8203:15;8177:220;;;8286:3;8315:37;8348:3;8336:10;8315:37;:::i;:::-;8310:3;8303:50;8382:4;8377:3;8373:14;8366:21;;8253:144;8237:4;8232:3;8228:14;8221:21;;8177:220;;;8181:21;7795:608;;7693:710;;;;;:::o;8426:370::-;8497:5;8546:3;8539:4;8531:6;8527:17;8523:27;8513:122;;8554:79;;:::i;:::-;8513:122;8671:6;8658:20;8696:94;8786:3;8778:6;8771:4;8763:6;8759:17;8696:94;:::i;:::-;8687:103;;8503:293;8426:370;;;;:::o;8802:117::-;8911:1;8908;8901:12;8925:307;8986:4;9076:18;9068:6;9065:30;9062:56;;;9098:18;;:::i;:::-;9062:56;9136:29;9158:6;9136:29;:::i;:::-;9128:37;;9220:4;9214;9210:15;9202:23;;8925:307;;;:::o;9238:154::-;9322:6;9317:3;9312;9299:30;9384:1;9375:6;9370:3;9366:16;9359:27;9238:154;;;:::o;9398:410::-;9475:5;9500:65;9516:48;9557:6;9516:48;:::i;:::-;9500:65;:::i;:::-;9491:74;;9588:6;9581:5;9574:21;9626:4;9619:5;9615:16;9664:3;9655:6;9650:3;9646:16;9643:25;9640:112;;;9671:79;;:::i;:::-;9640:112;9761:41;9795:6;9790:3;9785;9761:41;:::i;:::-;9481:327;9398:410;;;;;:::o;9827:338::-;9882:5;9931:3;9924:4;9916:6;9912:17;9908:27;9898:122;;9939:79;;:::i;:::-;9898:122;10056:6;10043:20;10081:78;10155:3;10147:6;10140:4;10132:6;10128:17;10081:78;:::i;:::-;10072:87;;9888:277;9827:338;;;;:::o;10171:1509::-;10325:6;10333;10341;10349;10357;10406:3;10394:9;10385:7;10381:23;10377:33;10374:120;;;10413:79;;:::i;:::-;10374:120;10533:1;10558:53;10603:7;10594:6;10583:9;10579:22;10558:53;:::i;:::-;10548:63;;10504:117;10660:2;10686:53;10731:7;10722:6;10711:9;10707:22;10686:53;:::i;:::-;10676:63;;10631:118;10816:2;10805:9;10801:18;10788:32;10847:18;10839:6;10836:30;10833:117;;;10869:79;;:::i;:::-;10833:117;10974:78;11044:7;11035:6;11024:9;11020:22;10974:78;:::i;:::-;10964:88;;10759:303;11129:2;11118:9;11114:18;11101:32;11160:18;11152:6;11149:30;11146:117;;;11182:79;;:::i;:::-;11146:117;11287:78;11357:7;11348:6;11337:9;11333:22;11287:78;:::i;:::-;11277:88;;11072:303;11442:3;11431:9;11427:19;11414:33;11474:18;11466:6;11463:30;11460:117;;;11496:79;;:::i;:::-;11460:117;11601:62;11655:7;11646:6;11635:9;11631:22;11601:62;:::i;:::-;11591:72;;11385:288;10171:1509;;;;;;;;:::o;11686:311::-;11763:4;11853:18;11845:6;11842:30;11839:56;;;11875:18;;:::i;:::-;11839:56;11925:4;11917:6;11913:17;11905:25;;11985:4;11979;11975:15;11967:23;;11686:311;;;:::o;12020:710::-;12116:5;12141:81;12157:64;12214:6;12157:64;:::i;:::-;12141:81;:::i;:::-;12132:90;;12242:5;12271:6;12264:5;12257:21;12305:4;12298:5;12294:16;12287:23;;12358:4;12350:6;12346:17;12338:6;12334:30;12387:3;12379:6;12376:15;12373:122;;;12406:79;;:::i;:::-;12373:122;12521:6;12504:220;12538:6;12533:3;12530:15;12504:220;;;12613:3;12642:37;12675:3;12663:10;12642:37;:::i;:::-;12637:3;12630:50;12709:4;12704:3;12700:14;12693:21;;12580:144;12564:4;12559:3;12555:14;12548:21;;12504:220;;;12508:21;12122:608;;12020:710;;;;;:::o;12753:370::-;12824:5;12873:3;12866:4;12858:6;12854:17;12850:27;12840:122;;12881:79;;:::i;:::-;12840:122;12998:6;12985:20;13023:94;13113:3;13105:6;13098:4;13090:6;13086:17;13023:94;:::i;:::-;13014:103;;12830:293;12753:370;;;;:::o;13129:894::-;13247:6;13255;13304:2;13292:9;13283:7;13279:23;13275:32;13272:119;;;13310:79;;:::i;:::-;13272:119;13458:1;13447:9;13443:17;13430:31;13488:18;13480:6;13477:30;13474:117;;;13510:79;;:::i;:::-;13474:117;13615:78;13685:7;13676:6;13665:9;13661:22;13615:78;:::i;:::-;13605:88;;13401:302;13770:2;13759:9;13755:18;13742:32;13801:18;13793:6;13790:30;13787:117;;;13823:79;;:::i;:::-;13787:117;13928:78;13998:7;13989:6;13978:9;13974:22;13928:78;:::i;:::-;13918:88;;13713:303;13129:894;;;;;:::o;14029:114::-;14096:6;14130:5;14124:12;14114:22;;14029:114;;;:::o;14149:184::-;14248:11;14282:6;14277:3;14270:19;14322:4;14317:3;14313:14;14298:29;;14149:184;;;;:::o;14339:132::-;14406:4;14429:3;14421:11;;14459:4;14454:3;14450:14;14442:22;;14339:132;;;:::o;14477:108::-;14554:24;14572:5;14554:24;:::i;:::-;14549:3;14542:37;14477:108;;:::o;14591:179::-;14660:10;14681:46;14723:3;14715:6;14681:46;:::i;:::-;14759:4;14754:3;14750:14;14736:28;;14591:179;;;;:::o;14776:113::-;14846:4;14878;14873:3;14869:14;14861:22;;14776:113;;;:::o;14925:732::-;15044:3;15073:54;15121:5;15073:54;:::i;:::-;15143:86;15222:6;15217:3;15143:86;:::i;:::-;15136:93;;15253:56;15303:5;15253:56;:::i;:::-;15332:7;15363:1;15348:284;15373:6;15370:1;15367:13;15348:284;;;15449:6;15443:13;15476:63;15535:3;15520:13;15476:63;:::i;:::-;15469:70;;15562:60;15615:6;15562:60;:::i;:::-;15552:70;;15408:224;15395:1;15392;15388:9;15383:14;;15348:284;;;15352:14;15648:3;15641:10;;15049:608;;;14925:732;;;;:::o;15663:373::-;15806:4;15844:2;15833:9;15829:18;15821:26;;15893:9;15887:4;15883:20;15879:1;15868:9;15864:17;15857:47;15921:108;16024:4;16015:6;15921:108;:::i;:::-;15913:116;;15663:373;;;;:::o;16042:308::-;16104:4;16194:18;16186:6;16183:30;16180:56;;;16216:18;;:::i;:::-;16180:56;16254:29;16276:6;16254:29;:::i;:::-;16246:37;;16338:4;16332;16328:15;16320:23;;16042:308;;;:::o;16356:412::-;16434:5;16459:66;16475:49;16517:6;16475:49;:::i;:::-;16459:66;:::i;:::-;16450:75;;16548:6;16541:5;16534:21;16586:4;16579:5;16575:16;16624:3;16615:6;16610:3;16606:16;16603:25;16600:112;;;16631:79;;:::i;:::-;16600:112;16721:41;16755:6;16750:3;16745;16721:41;:::i;:::-;16440:328;16356:412;;;;;:::o;16788:340::-;16844:5;16893:3;16886:4;16878:6;16874:17;16870:27;16860:122;;16901:79;;:::i;:::-;16860:122;17018:6;17005:20;17043:79;17118:3;17110:6;17103:4;17095:6;17091:17;17043:79;:::i;:::-;17034:88;;16850:278;16788:340;;;;:::o;17134:654::-;17212:6;17220;17269:2;17257:9;17248:7;17244:23;17240:32;17237:119;;;17275:79;;:::i;:::-;17237:119;17395:1;17420:53;17465:7;17456:6;17445:9;17441:22;17420:53;:::i;:::-;17410:63;;17366:117;17550:2;17539:9;17535:18;17522:32;17581:18;17573:6;17570:30;17567:117;;;17603:79;;:::i;:::-;17567:117;17708:63;17763:7;17754:6;17743:9;17739:22;17708:63;:::i;:::-;17698:73;;17493:288;17134:654;;;;;:::o;17794:222::-;17887:4;17925:2;17914:9;17910:18;17902:26;;17938:71;18006:1;17995:9;17991:17;17982:6;17938:71;:::i;:::-;17794:222;;;;:::o;18022:116::-;18092:21;18107:5;18092:21;:::i;:::-;18085:5;18082:32;18072:60;;18128:1;18125;18118:12;18072:60;18022:116;:::o;18144:133::-;18187:5;18225:6;18212:20;18203:29;;18241:30;18265:5;18241:30;:::i;:::-;18144:133;;;;:::o;18283:468::-;18348:6;18356;18405:2;18393:9;18384:7;18380:23;18376:32;18373:119;;;18411:79;;:::i;:::-;18373:119;18531:1;18556:53;18601:7;18592:6;18581:9;18577:22;18556:53;:::i;:::-;18546:63;;18502:117;18658:2;18684:50;18726:7;18717:6;18706:9;18702:22;18684:50;:::i;:::-;18674:60;;18629:115;18283:468;;;;;:::o;18757:117::-;18866:1;18863;18856:12;18897:568;18970:8;18980:6;19030:3;19023:4;19015:6;19011:17;19007:27;18997:122;;19038:79;;:::i;:::-;18997:122;19151:6;19138:20;19128:30;;19181:18;19173:6;19170:30;19167:117;;;19203:79;;:::i;:::-;19167:117;19317:4;19309:6;19305:17;19293:29;;19371:3;19363:4;19355:6;19351:17;19341:8;19337:32;19334:41;19331:128;;;19378:79;;:::i;:::-;19331:128;18897:568;;;;;:::o;19471:849::-;19575:6;19583;19591;19599;19648:2;19636:9;19627:7;19623:23;19619:32;19616:119;;;19654:79;;:::i;:::-;19616:119;19802:1;19791:9;19787:17;19774:31;19832:18;19824:6;19821:30;19818:117;;;19854:79;;:::i;:::-;19818:117;19967:80;20039:7;20030:6;20019:9;20015:22;19967:80;:::i;:::-;19949:98;;;;19745:312;20096:2;20122:53;20167:7;20158:6;20147:9;20143:22;20122:53;:::i;:::-;20112:63;;20067:118;20224:2;20250:53;20295:7;20286:6;20275:9;20271:22;20250:53;:::i;:::-;20240:63;;20195:118;19471:849;;;;;;;:::o;20326:474::-;20394:6;20402;20451:2;20439:9;20430:7;20426:23;20422:32;20419:119;;;20457:79;;:::i;:::-;20419:119;20577:1;20602:53;20647:7;20638:6;20627:9;20623:22;20602:53;:::i;:::-;20592:63;;20548:117;20704:2;20730:53;20775:7;20766:6;20755:9;20751:22;20730:53;:::i;:::-;20720:63;;20675:118;20326:474;;;;;:::o;20806:1089::-;20910:6;20918;20926;20934;20942;20991:3;20979:9;20970:7;20966:23;20962:33;20959:120;;;20998:79;;:::i;:::-;20959:120;21118:1;21143:53;21188:7;21179:6;21168:9;21164:22;21143:53;:::i;:::-;21133:63;;21089:117;21245:2;21271:53;21316:7;21307:6;21296:9;21292:22;21271:53;:::i;:::-;21261:63;;21216:118;21373:2;21399:53;21444:7;21435:6;21424:9;21420:22;21399:53;:::i;:::-;21389:63;;21344:118;21501:2;21527:53;21572:7;21563:6;21552:9;21548:22;21527:53;:::i;:::-;21517:63;;21472:118;21657:3;21646:9;21642:19;21629:33;21689:18;21681:6;21678:30;21675:117;;;21711:79;;:::i;:::-;21675:117;21816:62;21870:7;21861:6;21850:9;21846:22;21816:62;:::i;:::-;21806:72;;21600:288;20806:1089;;;;;;;;:::o;21901:329::-;21960:6;22009:2;21997:9;21988:7;21984:23;21980:32;21977:119;;;22015:79;;:::i;:::-;21977:119;22135:1;22160:53;22205:7;22196:6;22185:9;22181:22;22160:53;:::i;:::-;22150:63;;22106:117;21901:329;;;;:::o;22236:230::-;22376:34;22372:1;22364:6;22360:14;22353:58;22445:13;22440:2;22432:6;22428:15;22421:38;22236:230;:::o;22472:366::-;22614:3;22635:67;22699:2;22694:3;22635:67;:::i;:::-;22628:74;;22711:93;22800:3;22711:93;:::i;:::-;22829:2;22824:3;22820:12;22813:19;;22472:366;;;:::o;22844:419::-;23010:4;23048:2;23037:9;23033:18;23025:26;;23097:9;23091:4;23087:20;23083:1;23072:9;23068:17;23061:47;23125:131;23251:4;23125:131;:::i;:::-;23117:139;;22844:419;;;:::o;23269:180::-;23317:77;23314:1;23307:88;23414:4;23411:1;23404:15;23438:4;23435:1;23428:15;23455:320;23499:6;23536:1;23530:4;23526:12;23516:22;;23583:1;23577:4;23573:12;23604:18;23594:81;;23660:4;23652:6;23648:17;23638:27;;23594:81;23722:2;23714:6;23711:14;23691:18;23688:38;23685:84;;23741:18;;:::i;:::-;23685:84;23506:269;23455:320;;;:::o;23781:182::-;23921:34;23917:1;23909:6;23905:14;23898:58;23781:182;:::o;23969:366::-;24111:3;24132:67;24196:2;24191:3;24132:67;:::i;:::-;24125:74;;24208:93;24297:3;24208:93;:::i;:::-;24326:2;24321:3;24317:12;24310:19;;23969:366;;;:::o;24341:419::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:180::-;24814:77;24811:1;24804:88;24911:4;24908:1;24901:15;24935:4;24932:1;24925:15;24952:348;24992:7;25015:20;25033:1;25015:20;:::i;:::-;25010:25;;25049:20;25067:1;25049:20;:::i;:::-;25044:25;;25237:1;25169:66;25165:74;25162:1;25159:81;25154:1;25147:9;25140:17;25136:105;25133:131;;;25244:18;;:::i;:::-;25133:131;25292:1;25289;25285:9;25274:20;;24952:348;;;;:::o;25306:180::-;25354:77;25351:1;25344:88;25451:4;25448:1;25441:15;25475:4;25472:1;25465:15;25492:185;25532:1;25549:20;25567:1;25549:20;:::i;:::-;25544:25;;25583:20;25601:1;25583:20;:::i;:::-;25578:25;;25622:1;25612:35;;25627:18;;:::i;:::-;25612:35;25669:1;25666;25662:9;25657:14;;25492:185;;;;:::o;25683:237::-;25823:34;25819:1;25811:6;25807:14;25800:58;25892:20;25887:2;25879:6;25875:15;25868:45;25683:237;:::o;25926:366::-;26068:3;26089:67;26153:2;26148:3;26089:67;:::i;:::-;26082:74;;26165:93;26254:3;26165:93;:::i;:::-;26283:2;26278:3;26274:12;26267:19;;25926:366;;;:::o;26298:419::-;26464:4;26502:2;26491:9;26487:18;26479:26;;26551:9;26545:4;26541:20;26537:1;26526:9;26522:17;26515:47;26579:131;26705:4;26579:131;:::i;:::-;26571:139;;26298:419;;;:::o;26723:228::-;26863:34;26859:1;26851:6;26847:14;26840:58;26932:11;26927:2;26919:6;26915:15;26908:36;26723:228;:::o;26957:366::-;27099:3;27120:67;27184:2;27179:3;27120:67;:::i;:::-;27113:74;;27196:93;27285:3;27196:93;:::i;:::-;27314:2;27309:3;27305:12;27298:19;;26957:366;;;:::o;27329:419::-;27495:4;27533:2;27522:9;27518:18;27510:26;;27582:9;27576:4;27572:20;27568:1;27557:9;27553:17;27546:47;27610:131;27736:4;27610:131;:::i;:::-;27602:139;;27329:419;;;:::o;27754:180::-;27802:77;27799:1;27792:88;27899:4;27896:1;27889:15;27923:4;27920:1;27913:15;27940:233;27979:3;28002:24;28020:5;28002:24;:::i;:::-;27993:33;;28048:66;28041:5;28038:77;28035:103;;28118:18;;:::i;:::-;28035:103;28165:1;28158:5;28154:13;28147:20;;27940:233;;;:::o;28179:228::-;28319:34;28315:1;28307:6;28303:14;28296:58;28388:11;28383:2;28375:6;28371:15;28364:36;28179:228;:::o;28413:366::-;28555:3;28576:67;28640:2;28635:3;28576:67;:::i;:::-;28569:74;;28652:93;28741:3;28652:93;:::i;:::-;28770:2;28765:3;28761:12;28754:19;;28413:366;;;:::o;28785:419::-;28951:4;28989:2;28978:9;28974:18;28966:26;;29038:9;29032:4;29028:20;29024:1;29013:9;29009:17;29002:47;29066:131;29192:4;29066:131;:::i;:::-;29058:139;;28785:419;;;:::o;29210:225::-;29350:34;29346:1;29338:6;29334:14;29327:58;29419:8;29414:2;29406:6;29402:15;29395:33;29210:225;:::o;29441:366::-;29583:3;29604:67;29668:2;29663:3;29604:67;:::i;:::-;29597:74;;29680:93;29769:3;29680:93;:::i;:::-;29798:2;29793:3;29789:12;29782:19;;29441:366;;;:::o;29813:419::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:220::-;30378:34;30374:1;30366:6;30362:14;30355:58;30447:3;30442:2;30434:6;30430:15;30423:28;30238:220;:::o;30464:366::-;30606:3;30627:67;30691:2;30686:3;30627:67;:::i;:::-;30620:74;;30703:93;30792:3;30703:93;:::i;:::-;30821:2;30816:3;30812:12;30805:19;;30464:366;;;:::o;30836:419::-;31002:4;31040:2;31029:9;31025:18;31017:26;;31089:9;31083:4;31079:20;31075:1;31064:9;31060:17;31053:47;31117:131;31243:4;31117:131;:::i;:::-;31109:139;;30836:419;;;:::o;31261:305::-;31301:3;31320:20;31338:1;31320:20;:::i;:::-;31315:25;;31354:20;31372:1;31354:20;:::i;:::-;31349:25;;31508:1;31440:66;31436:74;31433:1;31430:81;31427:107;;;31514:18;;:::i;:::-;31427:107;31558:1;31555;31551:9;31544:16;;31261:305;;;;:::o;31572:332::-;31693:4;31731:2;31720:9;31716:18;31708:26;;31744:71;31812:1;31801:9;31797:17;31788:6;31744:71;:::i;:::-;31825:72;31893:2;31882:9;31878:18;31869:6;31825:72;:::i;:::-;31572:332;;;;;:::o;31910:227::-;32050:34;32046:1;32038:6;32034:14;32027:58;32119:10;32114:2;32106:6;32102:15;32095:35;31910:227;:::o;32143:366::-;32285:3;32306:67;32370:2;32365:3;32306:67;:::i;:::-;32299:74;;32382:93;32471:3;32382:93;:::i;:::-;32500:2;32495:3;32491:12;32484:19;;32143:366;;;:::o;32515:419::-;32681:4;32719:2;32708:9;32704:18;32696:26;;32768:9;32762:4;32758:20;32754:1;32743:9;32739:17;32732:47;32796:131;32922:4;32796:131;:::i;:::-;32788:139;;32515:419;;;:::o;32940:224::-;33080:34;33076:1;33068:6;33064:14;33057:58;33149:7;33144:2;33136:6;33132:15;33125:32;32940:224;:::o;33170:366::-;33312:3;33333:67;33397:2;33392:3;33333:67;:::i;:::-;33326:74;;33409:93;33498:3;33409:93;:::i;:::-;33527:2;33522:3;33518:12;33511:19;;33170:366;;;:::o;33542:419::-;33708:4;33746:2;33735:9;33731:18;33723:26;;33795:9;33789:4;33785:20;33781:1;33770:9;33766:17;33759:47;33823:131;33949:4;33823:131;:::i;:::-;33815:139;;33542:419;;;:::o;33967:229::-;34107:34;34103:1;34095:6;34091:14;34084:58;34176:12;34171:2;34163:6;34159:15;34152:37;33967:229;:::o;34202:366::-;34344:3;34365:67;34429:2;34424:3;34365:67;:::i;:::-;34358:74;;34441:93;34530:3;34441:93;:::i;:::-;34559:2;34554:3;34550:12;34543:19;;34202:366;;;:::o;34574:419::-;34740:4;34778:2;34767:9;34763:18;34755:26;;34827:9;34821:4;34817:20;34813:1;34802:9;34798:17;34791:47;34855:131;34981:4;34855:131;:::i;:::-;34847:139;;34574:419;;;:::o;34999:634::-;35220:4;35258:2;35247:9;35243:18;35235:26;;35307:9;35301:4;35297:20;35293:1;35282:9;35278:17;35271:47;35335:108;35438:4;35429:6;35335:108;:::i;:::-;35327:116;;35490:9;35484:4;35480:20;35475:2;35464:9;35460:18;35453:48;35518:108;35621:4;35612:6;35518:108;:::i;:::-;35510:116;;34999:634;;;;;:::o;35639:176::-;35779:28;35775:1;35767:6;35763:14;35756:52;35639:176;:::o;35821:366::-;35963:3;35984:67;36048:2;36043:3;35984:67;:::i;:::-;35977:74;;36060:93;36149:3;36060:93;:::i;:::-;36178:2;36173:3;36169:12;36162:19;;35821:366;;;:::o;36193:419::-;36359:4;36397:2;36386:9;36382:18;36374:26;;36446:9;36440:4;36436:20;36432:1;36421:9;36417:17;36410:47;36474:131;36600:4;36474:131;:::i;:::-;36466:139;;36193:419;;;:::o;36618:228::-;36758:34;36754:1;36746:6;36742:14;36735:58;36827:11;36822:2;36814:6;36810:15;36803:36;36618:228;:::o;36852:366::-;36994:3;37015:67;37079:2;37074:3;37015:67;:::i;:::-;37008:74;;37091:93;37180:3;37091:93;:::i;:::-;37209:2;37204:3;37200:12;37193:19;;36852:366;;;:::o;37224:419::-;37390:4;37428:2;37417:9;37413:18;37405:26;;37477:9;37471:4;37467:20;37463:1;37452:9;37448:17;37441:47;37505:131;37631:4;37505:131;:::i;:::-;37497:139;;37224:419;;;:::o;37649:222::-;37789:34;37785:1;37777:6;37773:14;37766:58;37858:5;37853:2;37845:6;37841:15;37834:30;37649:222;:::o;37877:366::-;38019:3;38040:67;38104:2;38099:3;38040:67;:::i;:::-;38033:74;;38116:93;38205:3;38116:93;:::i;:::-;38234:2;38229:3;38225:12;38218:19;;37877:366;;;:::o;38249:419::-;38415:4;38453:2;38442:9;38438:18;38430:26;;38502:9;38496:4;38492:20;38488:1;38477:9;38473:17;38466:47;38530:131;38656:4;38530:131;:::i;:::-;38522:139;;38249:419;;;:::o;38674:223::-;38814:34;38810:1;38802:6;38798:14;38791:58;38883:6;38878:2;38870:6;38866:15;38859:31;38674:223;:::o;38903:366::-;39045:3;39066:67;39130:2;39125:3;39066:67;:::i;:::-;39059:74;;39142:93;39231:3;39142:93;:::i;:::-;39260:2;39255:3;39251:12;39244:19;;38903:366;;;:::o;39275:419::-;39441:4;39479:2;39468:9;39464:18;39456:26;;39528:9;39522:4;39518:20;39514:1;39503:9;39499:17;39492:47;39556:131;39682:4;39556:131;:::i;:::-;39548:139;;39275:419;;;:::o;39700:98::-;39751:6;39785:5;39779:12;39769:22;;39700:98;;;:::o;39804:168::-;39887:11;39921:6;39916:3;39909:19;39961:4;39956:3;39952:14;39937:29;;39804:168;;;;:::o;39978:360::-;40064:3;40092:38;40124:5;40092:38;:::i;:::-;40146:70;40209:6;40204:3;40146:70;:::i;:::-;40139:77;;40225:52;40270:6;40265:3;40258:4;40251:5;40247:16;40225:52;:::i;:::-;40302:29;40324:6;40302:29;:::i;:::-;40297:3;40293:39;40286:46;;40068:270;39978:360;;;;:::o;40344:751::-;40567:4;40605:3;40594:9;40590:19;40582:27;;40619:71;40687:1;40676:9;40672:17;40663:6;40619:71;:::i;:::-;40700:72;40768:2;40757:9;40753:18;40744:6;40700:72;:::i;:::-;40782;40850:2;40839:9;40835:18;40826:6;40782:72;:::i;:::-;40864;40932:2;40921:9;40917:18;40908:6;40864:72;:::i;:::-;40984:9;40978:4;40974:20;40968:3;40957:9;40953:19;40946:49;41012:76;41083:4;41074:6;41012:76;:::i;:::-;41004:84;;40344:751;;;;;;;;:::o;41101:141::-;41157:5;41188:6;41182:13;41173:22;;41204:32;41230:5;41204:32;:::i;:::-;41101:141;;;;:::o;41248:349::-;41317:6;41366:2;41354:9;41345:7;41341:23;41337:32;41334:119;;;41372:79;;:::i;:::-;41334:119;41492:1;41517:63;41572:7;41563:6;41552:9;41548:22;41517:63;:::i;:::-;41507:73;;41463:127;41248:349;;;;:::o;41603:106::-;41647:8;41696:5;41691:3;41687:15;41666:36;;41603:106;;;:::o;41715:183::-;41750:3;41788:1;41770:16;41767:23;41764:128;;;41826:1;41823;41820;41805:23;41848:34;41879:1;41873:8;41848:34;:::i;:::-;41841:41;;41764:128;41715:183;:::o;41904:711::-;41943:3;41981:4;41963:16;41960:26;41989:5;41957:39;42018:20;;:::i;:::-;42093:1;42075:16;42071:24;42068:1;42062:4;42047:49;42126:4;42120:11;42225:16;42218:4;42210:6;42206:17;42203:39;42170:18;42162:6;42159:30;42143:113;42140:146;;;42271:5;;;;42140:146;42317:6;42311:4;42307:17;42353:3;42347:10;42380:18;42372:6;42369:30;42366:43;;;42402:5;;;;;;42366:43;42450:6;42443:4;42438:3;42434:14;42430:27;42509:1;42491:16;42487:24;42481:4;42477:35;42472:3;42469:44;42466:57;;;42516:5;;;;;;;42466:57;42533;42581:6;42575:4;42571:17;42563:6;42559:30;42553:4;42533:57;:::i;:::-;42606:3;42599:10;;41947:668;;;;;41904:711;;:::o;42621:239::-;42761:34;42757:1;42749:6;42745:14;42738:58;42830:22;42825:2;42817:6;42813:15;42806:47;42621:239;:::o;42866:366::-;43008:3;43029:67;43093:2;43088:3;43029:67;:::i;:::-;43022:74;;43105:93;43194:3;43105:93;:::i;:::-;43223:2;43218:3;43214:12;43207:19;;42866:366;;;:::o;43238:419::-;43404:4;43442:2;43431:9;43427:18;43419:26;;43491:9;43485:4;43481:20;43477:1;43466:9;43462:17;43455:47;43519:131;43645:4;43519:131;:::i;:::-;43511:139;;43238:419;;;:::o;43663:227::-;43803:34;43799:1;43791:6;43787:14;43780:58;43872:10;43867:2;43859:6;43855:15;43848:35;43663:227;:::o;43896:366::-;44038:3;44059:67;44123:2;44118:3;44059:67;:::i;:::-;44052:74;;44135:93;44224:3;44135:93;:::i;:::-;44253:2;44248:3;44244:12;44237:19;;43896:366;;;:::o;44268:419::-;44434:4;44472:2;44461:9;44457:18;44449:26;;44521:9;44515:4;44511:20;44507:1;44496:9;44492:17;44485:47;44549:131;44675:4;44549:131;:::i;:::-;44541:139;;44268:419;;;:::o;44693:1053::-;45016:4;45054:3;45043:9;45039:19;45031:27;;45068:71;45136:1;45125:9;45121:17;45112:6;45068:71;:::i;:::-;45149:72;45217:2;45206:9;45202:18;45193:6;45149:72;:::i;:::-;45268:9;45262:4;45258:20;45253:2;45242:9;45238:18;45231:48;45296:108;45399:4;45390:6;45296:108;:::i;:::-;45288:116;;45451:9;45445:4;45441:20;45436:2;45425:9;45421:18;45414:48;45479:108;45582:4;45573:6;45479:108;:::i;:::-;45471:116;;45635:9;45629:4;45625:20;45619:3;45608:9;45604:19;45597:49;45663:76;45734:4;45725:6;45663:76;:::i;:::-;45655:84;;44693:1053;;;;;;;;:::o

Swarm Source

ipfs://65be80b9f6c0b33f84f305bc6039a91e5c41a502333f169bd74ca27b243928cc
Loading